DocVault
Overview
DocVault is an item expiry tracking system designed for the EDURE Flight Department. It monitors validity dates across all operational items — pilot licenses, medical certificates, aircraft certifications, and more — and sends automated email reports before deadlines are reached.
Real-Time Dashboard
Visual overview of all item statuses, organized by category with color-coded alerts.
Automated Reports
Scheduled and conditional email reports in English, organized by category, sent to your team.
Configurable Alerts
Set custom alert windows per item — get notified 30, 60, or 90 days before expiry.
Full Audit Log
Every change to an item is tracked — who changed what and when.
Logging In
Access DocVault at edure-docvault.up.railway.app from any browser. You will be presented with the sign-in screen.
- Enter your email address in the Email field.
- Enter your password. Use the eye icon to reveal the password while typing — it will auto-hide after 5 seconds of inactivity.
- Click Sign In.
User Roles
| Role | Permissions |
|---|---|
| Admin+ | Full access to all features including Activity Log Settings and exclusive admin+ features. Assigned only to designated accounts — not selectable via the UI. |
| Admin | Full access: create/edit/delete items, manage users, categories, holders, and report settings. |
| User | View dashboard, browse items, view report settings. Cannot manage system configuration. |
Dashboard
The Dashboard is your home screen. It gives you an at-a-glance summary of all item statuses across the department.
Summary Cards
At the top you will see four summary cards showing the total count of items in each status:
Click any card to filter the item list below to that status.
Category Tabs
Below the summary cards, tabs display each active category (e.g. Pilots, Aircraft, Medical). Click a tab to view only items belonging to that category. The All tab shows all items together.
Item Table
Each row in the table shows the item name, holder/responsible, expiry date, days remaining, and status badge. You can sort any column by clicking its header. Actions available per row:
| Action | Description |
|---|---|
| Edit | Open the item form to update any field. |
| Duplicate | Open the form pre-filled with this item's data to create a copy. Save is disabled until at least one field is changed. |
| History | View the full audit log of changes for this item. |
| Delete | Soft-delete the item (recoverable from Admin → Deleted Items). |
All Items
The All Items view shows the complete item list across all categories with advanced filtering options.
Filters
| Filter | Options |
|---|---|
| Category | Show only items belonging to a specific category. |
| Status | Expired / Expiring Soon / Valid / Pending Date. |
| Show Deleted | Admins only. Reveals soft-deleted items alongside active ones. |
Sorting
Click any column header to sort by that field. Click again to reverse the sort order.
My Items
The My Items view filters the item list to show items where the logged-in user is either the assigned Holder or the assigned Responsible. It provides the same columns and actions as All Items.
A Show filter lets you narrow the view to All, Holder only, or Responsible only.
If your user account is not linked to a holder/responsible, a message will indicate that no items are associated with your profile. Admins can link a user by matching the user's name to an entry in Admin → Holders / Responsible.
The + New Item button in this view opens the creation form pre-filled with the current user as responsible and the Tripulação category (if it exists).
Search
The Search page lets you find items by typing any term and pressing the Search button (or Enter). The search looks across item name, observations, category name, and holder name simultaneously.
Results are displayed in a table showing status, days remaining, holder, category, item name, and expiry date. Each row includes an Open button that takes you directly to All Items and highlights the matching row.
Click Clear to reset the search field and results.
Adding & Editing Items
To add a new item, click the + New Item button on the Dashboard or Items page. To edit an existing one, click the icon on any row. To duplicate an item, click the purple icon — the form opens pre-filled with all fields from the original. Save is disabled until at least one field is changed, ensuring the duplicate is meaningfully different. The duplication is recorded in the item's history log.
Item Form Fields
| Field | Required | Description |
|---|---|---|
| Category | Yes | The operational category this item belongs to (e.g. Pilots, Aircraft). Categories are managed in Admin. |
| Holder / Responsible | Yes | The person or entity responsible for this item. Managed in Admin → Holders. |
| Item Name | Yes | Descriptive name, e.g. ANAC Pilot Certificate. |
| Observations / Reference | No | Free text for notes, file numbers, or references (e.g. Ref. FX422312). |
| Issue Date | No | Date the item was issued. Combined with Validity Period to auto-calculate Expiry Date. |
| Validity Period | No | Select a preset period (e.g. 12 months). The expiry date is auto-calculated when both Issue Date and Validity Period are set. |
| Expiry Date | No | Can be set manually or auto-calculated. Leave blank for items with no set expiry (status will be Pending Date). |
| Alert Before Expiry | No | How many days before expiry the item enters Due Soon (yellow) status. Default is 60 days. |
| Critical Alert | No | How many days before expiry the item escalates to Critical — Expiring Soon (orange) status. Default is 10 days. Must be less than the Alert Before Expiry value. |
Status Reference
| Status | Color | Meaning |
|---|---|---|
| Expired | Red | The item's expiry date has passed. Immediate action required. |
| Critical — Expiring Soon | Orange | Within the Critical Alert window (default: 10 days). Urgent — renewal must begin immediately. |
| Due Soon | Yellow | Within the standard alert window (e.g. 60 days) but outside the critical window. Renewal should be planned. |
| Valid | Green | The item is valid and outside all alert windows. No action needed. |
| Pending Date | Gray | No expiry date has been set. The item is tracked but not monitored for expiry. |
Administration
The Admin section is visible to all users but editing actions are restricted to Admins only. It contains six tabs: Users, Categories, Holders/Responsible, Validity & Alerts, Deleted Items, and Items Audit.
Admin — Users
Manage all system users. Each user has an email address, name, role, and active status.
Creating a User
- Click + New User to expand the creation form.
- Enter Name, Email, Password, and Role (User or Admin).
- Optionally check Also add as Holder/Responsible to simultaneously create a matching holder entry.
- Optionally check Add as report recipient to add this user's email to the automated report mailing list.
- Click Create.
Editing a User
Click the edit icon on any user row. You can update Name, Email, and Role. The Report recipient checkbox reflects and controls whether this user receives automated reports:
- Check it → user is added to the report recipient list automatically on save.
- Uncheck it → a confirmation dialog will appear before removing the user from the report list.
User Actions
| Action | Description |
|---|---|
| Edit | Modify name, email, role, and recipient status. |
| Deactivate | Disables login without deleting the account. The user's items are preserved. |
| Delete | Permanently removes the user. You will be asked how to handle any linked items (keep as Unassigned or move to Deleted). If the user is a report recipient, you will also be asked whether to remove their email from the recipients list. |
| Reactivate | Re-enables a deactivated account. |
Password Management
Admins can reset another user's password using the Reset Password button on the user row. A temporary password will be generated and sent to the user's email address. Each user can also change their own password via My Account → Change Password.
Admin — Categories
Categories organize items into operational groups (e.g. Pilots, Aircraft, Medical). Every item must belong to exactly one category.
Managing Categories
| Action | Notes |
|---|---|
| Create | Enter a name and click Add. Category appears immediately in the item form and dashboard. |
| Edit | Click the pencil icon to rename inline. |
| Deactivate | Hides the category from new item creation. Existing items remain. |
| Delete | Shows a confirmation modal with two options: keep linked items (moved to Unassigned) or delete them along with the category. |
Admin — Holders / Responsible
Holders represent the people or entities responsible for items (e.g. individual pilots, the company, an aircraft). An item must be assigned to a holder.
Holders are global — they are not tied to a specific category. The same holder can appear in multiple categories.
Managing Holders
| Action | Notes |
|---|---|
| Create | Enter name and click Add. Holders can also be created automatically when creating a new user with the "Also add as Holder" option checked. |
| Edit | Rename inline. The new name propagates to all linked items. |
| Deactivate | Hides from new item creation. Existing items are not affected. |
| Delete | Choose to keep linked items (set to Unassigned) or delete them along with the holder. |
Admin — Validity & Alerts
This tab manages the preset options available in the item form dropdowns for Validity Period and Alert Before Expiry.
Validity Periods
Define standard periods used across your organization (e.g. 6 months — 183 days, 1 year — 365 days). When selected in the item form alongside an Issue Date, the expiry date is auto-calculated.
Alert Options (Due Soon)
Define how many days before expiry an item enters Due Soon (yellow) status. For example, 60 days means the item turns yellow 2 months before expiry.
Critical Alert Options
A separate pool of short-range values (default: 5, 7, 10, 14, 21 days) that controls when an item escalates from yellow to orange (Critical — Expiring Soon). These are managed independently from standard alert options.
Admin — Deleted Items
When an item is deleted from the Dashboard or Items view, it is soft-deleted — it is hidden from normal views but not permanently removed. Admins can review, restore, or permanently delete these records.
| Action | Description |
|---|---|
| Restore | Returns the item to active status. It reappears in the Dashboard and Items view. |
| Permanent Delete | Irreversibly removes the item and all its history from the database. |
Notifications Settings
DocVault sends automated email reports summarizing item status. The Notifications Settings page is organized into two tabs: Report Settings (visible to all admins) and Activity Log Settings (visible to admin+ only).
Report Settings Tab
The Report Settings tab contains four cards: Master Status, Scheduled Report, Conditional Report, and Recipients.
Master Status
The top card controls all email sending globally. When the master toggle is off, no emails are sent at all — neither Scheduled nor Conditional — regardless of individual card settings. The last sent timestamp is shown here.
Scheduled Report
Sends a full item status report on a fixed schedule to recipients who have the Scheduled flag enabled.
| Field | Options |
|---|---|
| Toggle | Pause or resume the Scheduled Report independently of the master switch |
| Frequency | Daily, Weekly, Biweekly, Monthly |
| Day | Day of week (Weekly/Biweekly) or day of month (Monthly) |
| Time | Hour:Minute in 30-minute intervals — displayed in UTC-3 (São Paulo, Brazil) |
Click Save Schedule to apply. The scheduler updates immediately. The Current Schedule display below the button shows the active configuration and its status (Active / Paused).
Click Send Now at the bottom of the card to dispatch the scheduled report immediately to all scheduled recipients.
Conditional Report
Sends a report only when items require attention (at least one Expired, Critical, or Due Soon), using the same schedule as the Scheduled Report but delivered to recipients with the Conditional flag enabled. The conditional behavior is always active — it cannot be disabled.
| Setting | Behavior |
|---|---|
| Toggle | Pause or resume the Conditional Report independently |
Click Send Now at the bottom of the card to trigger the conditional report immediately. If no items require attention, a notification confirms that no email was sent.
Recipients
Add email addresses to the recipient list. Type an address and click + Add. Each recipient row has two toggles — Scheduled and Conditional — controlling which report types they receive. Remove a recipient by clicking the icon.
Recipients can also be managed when creating or editing users in the Admin panel.
Email Format
Each report includes:
- Summary cards showing total expired, critical, and due-soon counts
- 🔴 Expired Items — organized by category, sorted most critical first
- 🟠 Critical — Expiring Soon — items within the critical threshold, by category
- 🟡 Due Soon — items within the alert window, by category
- ✅ Categories with no issues — listed at the bottom
- A link button to open DocVault directly
The subject line adapts automatically and identifies the report type:
Activity Log Settings Tab
Visible to admin+ only. Configures the daily Activity Log email — a summary of all system activity from the previous day (00:00–23:59 UTC-3), including logins, logouts, and all item actions.
| Field | Description |
|---|---|
| Toggle | Enable or disable the daily Activity Log email |
| Time | Hour and minute the email is sent daily (UTC-3, São Paulo) |
| Recipient Email | Single email address that receives the log |
| Send Now | Dispatch the Activity Log for the previous day immediately |
My Account
Each user can manage their own password and preferences from the My Account page, accessible from the left sidebar.
Changing Your Password
- Enter your Current Password.
- Enter your New Password (minimum 8 characters, including letters and numbers).
- Repeat the new password in Confirm New Password.
- Click Update Password.
All three password fields support the eye icon to reveal the value while typing. The password is automatically hidden again 5 seconds after the last keystroke.
Preferences
The Preferences card lets you choose the default page shown immediately after login:
| Option | Lands on |
|---|---|
| Dashboard | The main Dashboard with status summary and category tabs (default) |
| All Items | The full item list with category and status filters |
| My Items | Your personal item list filtered by your holder |
Click Save Preferences to apply. The change takes effect on the next login.
Version History
This manual is updated with each version that introduces user-facing changes. Refer to this section to understand what changed between releases.
- Unified login: DocVault now uses the central EDURE authentication (same account and password as the other apps), managed in EDURE Admin, with per-app access permission.
- Passkeys (Face ID / Touch ID): sign in without a password; your EDURE passkey works across all apps.
- New domain docvault.edure.app and refreshed EDURE branding (new icon and login/sidebar logo).
- Activity Log tab (admin+ only): new tab in Admin panel after Items Audit — shows all activity with date/time, action, item and user, most recent first; filterable by action, item and user
- Item history in quick-view: opening any item (desktop and mobile) now shows a History section with date, action and user — most recent first
- Mobile: Duplicate button added to the item quick-view alongside Close and Edit
- Fix (mobile): deleting an item in My Items now correctly refreshes the list
- Items Audit: page now loads sorted by Last Modified (most recent first)
- Items Audit — Version History: clicking an active item opens a Version History panel; each version shows its changes and has a Revert button to restore the document to that state
- New Item carry-over: from the second entry onwards, Category, Holder, Responsible, Alert Before Expiry and Critical Alert are pre-filled with the values used in the previous new item
- Fix: Crew Docs selector shows full names on desktop (abbreviated names kept on mobile)
- Crew Docs: crew member selector now visible on desktop — click the selector button next to New Item to switch between crew members
- Mobile — Edit Item modal: Archive and Delete buttons now available directly in the edit modal on mobile
- Fix (mobile): scrolling inside modals no longer leaks to the background page
- Fix: archived documents no longer appear in Dashboard or My Items
- Fix: confirm modal now closes automatically after confirming an action
- Fix: clicking outside an action modal now shakes it instead of closing — consistent across the app
- Private Documents: Archive tab — archive items from the actions column and restore them from Archived tab
- Private Documents: Deleted Items tab — soft delete moves items to trash; restore or permanently delete from there
- Private Documents: four-tab layout (My Items / Archived / Deleted Items / Notifications)
- Private Documents: modal revamped to match normal New Item — Issue Date, Validity Period with auto-calculate expiry, Storage Location, inline Alert and Critical Days dropdowns with + button to add custom values
- Fix: delete category and delete item now show the correct confirmation dialog
- Fix: Alert Before Expiry and Critical Alert dropdowns now populate correctly
- Versioning migrated to SemVer (MAJOR.MINOR.PATCH) starting from this release
- Private Documents: fully encrypted personal documents per user (Fernet), invisible to all other users including admin+
- Private Documents: personal categories, desktop table, mobile cards with sort/swipe/FAB
- Private Documents: two-tab layout (My Items / Notifications); draggable category modal; empty-state guard on New Item button
- Personal Notifications: per-user email alerts for expiring private docs with configurable schedule and Send Now
- Favicon: app icon now displayed in browser tab
- All Items (mobile): items now load sorted most-critical-first by default
- All Items (mobile): grouping by Responsible, Holder, or Category now renders correctly as collapsible accordion sections
- Dashboard: Expired items are now selected by default on first login; last selection is remembered during the session and resets to Expired on logout
- Dashboard: Selected summary card is now visually highlighted with a filled color background, making the active selection immediately obvious on web and mobile
- Email doc link: if DocVault is already open in a browser tab, clicking a document link in the email navigates that same tab instead of opening a new one
- Fix: clicking a highlighted document (arrived via email link) now opens its detail view in one click instead of two
- Fix: email document link now clears any previously active filters before opening All Items, ensuring the target document is always visible
- Email reports: document names are now clickable — tapping or clicking opens DocVault directly in All Items with that document highlighted (desktop) or its detail view open (mobile)
- Fix: when sorting by expiry date, PERMANENT items (no expiry) now always appear at the end of the list in all views, regardless of sort direction
- Fix: expiry dates were displaying one day earlier than the actual date for users in the UTC-3 time zone (São Paulo); the date shown in all views now matches the date entered and stored
- Dashboard (mobile): category names longer than 18 characters are abbreviated in the filter button label to prevent header distortion
- Dashboard (mobile): category filter now appears as a popout button in the toolbar — tap to select a category; label updates to show the active selection
- Dashboard (mobile): item cards redesigned to match Crew Docs style — document name, category, expiry date, status badge, and edit button; left colored strip indicates criticality; tap to open full detail view
- My Items & All Items (mobile): now display as compact cards identical to Crew Docs — name, observations, expiry date, status badge, and edit button; tap a card to open the full detail view; desktop table layout unchanged
- Fix: mobile sort icon was disappearing when active — inline style was setting the icon color to the same dark blue as the background, making it invisible; active state now shows a subtle white background highlight instead
- Mobile toolbar: sort icon repositioned to the far right in all views (My Items, All Items, Crew Docs) to match the Dashboard layout
- Mobile toolbar icons (Sort, Filters, Crew selector) now display in white to match the page title color across all views
- Crew Docs (mobile): crew member selector moved to toolbar as a popout button — tap the name to switch between crew members; subtitle updates to show selected crew name
- Mobile sort: sort icon in toolbar (Dashboard, My Items, All Items, Crew Docs) — toggle between most critical first and least critical first
- My Account: all users can now edit their own profile (name, email, Crew Member status) — changes are logged in the activity log
- Fix: mobile-only elements (Filters button, crew selector) were always hidden due to a CSS rule ordering bug — the desktop default was declared after the mobile media query, overriding it on all screen sizes
- Filters (mobile): completely redesigned as a centered modal window — Filters button now opens a proper popup that works reliably on iOS; New Item button removed from mobile toolbar (use the + FAB instead)
- Crew Docs (mobile): added crew member selector — tap a name to switch between crew members; names shown as Kirk L., Andre D., Lucas J.
- Users: added Crew Member flag to user management — admins can now mark users as crew members
- Filters (mobile): redesigned as a bottom sheet — tapping Filters on My Items or All Items now slides up a panel from the bottom of the screen, completely outside any sticky/overflow stacking context; backdrop tap closes it
- Filters (mobile): fixed root cause of filter panel not appearing on iPhone — panel moved outside the sticky toolbar so iOS Safari's sticky/overflow clipping no longer applies; filters now expand freely on tap
- Filters (mobile): filter panel now expands correctly on iPhone for My Items and All Items — fixed iOS Safari clipping by adding
overflow: visiblewhen the panel is open, and separated the CSS class changes withrequestAnimationFrameso the transition fires reliably
- My Items / All Items (mobile): header height corrected to 48px, matching Dashboard and Crew Docs; removed stray bottom margin that was inflating the bar height
- Swipe navigation (mobile): fixed header bar displacement on adjacent page — sticky headers inside the fixed overlay are temporarily set to relative positioning during the animation, preventing iOS Safari's sticky/fixed conflict
- Swipe navigation (mobile): adjacent page now renders at the correct size during animation — padding copied from the main content container so content matches its normal layout
- Filters (mobile): filter panel now opens correctly on iPhone — expansion uses a CSS class instead of JS measurement, ensuring the toolbar height animates reliably
- Swipe navigation (mobile): next/previous page now slides in alongside the current page during drag — both pages move together, edge-to-edge, like native iOS
- Filters (mobile): filter panel now expands correctly on iPhone for My Items and All Items; scroll-hide is suppressed while filters are open
- Swipe navigation (mobile): complete rewrite — page now sticks to finger during swipe, commits with inertia on fast flick, snaps back if cancelled; correct sequence: Dashboard → Crew Docs → My Items → All Items
- All Items (mobile): header width fixed — now consistent with all other views
- Crew Docs: header now shows abbreviated username (e.g. "Crew Docs — Kirk L.")
- Swipe navigation (mobile): swipe left/right to move between Dashboard, Crew Docs, My Items, and All Items
- Dashboard: items sorted correctly when pressing a summary card — most expired at top, furthest from expiry at the bottom
- My Items / All Items (mobile): header measurements now match Crew Docs exactly
- Dashboard: "Pending Date" card removed — 6 cards remain (Expired, Critical, Due Soon, Valid, Permanent, Items)
- Dashboard: "Items" card is now clickable — shows all documents sorted by criticality
- App always opens on Dashboard after login
- Bottom nav (mobile): "All Items" replaces "Search"; Search moved to the More sheet
- All Items (mobile): dark navy header matching Crew Docs and My Items
- My Items (mobile): fixed header positioning bug
- Crew Docs (web): sortable table with same columns and row colors as My Items; card view stays on mobile
- Dashboard mobile: iPhone-style document list with colored status strip, category info, and edit button per card
- Summary cards: fixed layout — 3-column grid contained within viewport (was overflowing)
- Quick View: added Edit button to open item directly for editing
- My Items: fixed white bar when header hides on scroll
- Added Crew Docs view (mobile and web) showing the user's Tripulação documents sorted by urgency
- Redesigned mobile bottom nav: Dashboard, Crew Docs, My Items, Search, More
- All Items moved to More sheet; label renamed from "Items" to "All Items"
- Standardized sticky headers on Dashboard, Crew Docs, and My Items with hide-on-scroll behavior
- Compact summary cards on mobile Dashboard with horizontal scroll row
- Help view now renders inline inside the app frame with bottom nav visible
- Fixed All Items button in More sheet
- Help overlay now stops above the bottom nav — nav remains visible and tappable
- Help renders in mobile mode (viewport meta injected into srcdoc)
- All view headers standardized to exact 44px height matching My Items
- Headers standardized across all views: Dashboard and Search now use same structure as All Items / My Items
- Dashboard mobile header gains Search shortcut button
- Search mobile header gains +New Item button
- Help/Manual rebuilt: uses fetch + srcdoc (bypasses service worker and iOS iframe bugs)
- Help back button returns to the previous view
- Search: no auto-focus on mobile (keyboard no longer pops up automatically)
- Help iframe fixed for iOS Safari: switched from flexbox to absolute positioning inside fixed overlay
- Page header height reduced to match +New Item button height (44px)
- Sticky page header fixed: overflow-x changed to clip so position:sticky works correctly
- Page header more compact on mobile
- Help view opens as full-screen in-app overlay with back button and iframe
- Bottom nav Dashboard label: guaranteed minimum padding to avoid iPhone corner clipping
- Bottom nav horizontal safe area fixed — "Dashboard" label no longer clipped by iPhone rounded corners
- Page header restored and made sticky — view title and action button always visible while scrolling
- Help opens in Safari browser while keeping the app running in the background
- Service worker updated to network-first strategy — app always loads latest version automatically
- CSS and JS served with version query string for browser cache busting
- Version bump rules updated to include sw.js cache name
- Sticky mobile page header with view title and action button
- Dashboard summary cards simplified on mobile — status and count only
- Filters panel collapsible on mobile for Items and My Items
- Pre-fill new item modal from active filters
- Search view layout fixed on mobile
- Help opens in-app maintaining bottom navigation
- Removed duplicate My Items from More sheet
- Notifications Settings layout fixed for mobile
- Web sidebar: My Documents and All Documents renamed to My Items and All Items
- Modal titles corrected: New Item, Edit Item, Item History
- Terminology rename: "Document" has been renamed to "Item" throughout the entire interface, automated emails, and this manual.
- Bottom navigation redesign: the bottom nav now shows five direct destinations — Dashboard, Items, My Items, Search, and More. Admin has been moved from the nav bar into the More bottom sheet.
- FAB new item button: a floating action button appears on Dashboard, Items, and My Items views on mobile, providing quick access to add a new item.
- Compact dashboard on mobile: the dashboard now shows a flat list of compact item cards on mobile instead of grouped tables — no holder grouping, just name, status badge, and days remaining, tappable to open the item details.
- PWA icon on iPhone: added the 180×180 icon entry to manifest.json and the
sizes="180x180"attribute to the apple-touch-icon link, ensuring the correct high-resolution icon appears when adding DocVault to the iPhone home screen. - Mobile layout overflow: applied strict box-sizing and max-width constraints inside the 480px breakpoint so no element can exceed the screen width on iPhone.
- Removed stale "Switch to Web View" button: the floating view-mode toggle button introduced in v1.71 has been removed from the HTML, CSS, and JavaScript. The
force-desktopclass is still respected by the card-expand logic.
- PWA support: DocVault can now be installed on iPhone home screen via Safari "Add to Home Screen"; includes manifest.json, service worker with cache-first strategy for offline app shell, and apple-touch-icon.
- Mobile bottom tab bar: replaces the sidebar on screens up to 480px wide with a five-item bottom navigation bar (Dashboard, Search, Documents, Admin, More).
- Bottom sheet More menu: the More tab opens a slide-up sheet with My Documents, Notifications, My Account, Help, About, the logged-in username, and Sign Out.
- Expandable document cards on mobile: each document row is now a tappable card; collapsed state shows the document name, status badge, category, responsible, and expiry date; tapping expands the card to reveal all remaining fields and action buttons.
- Mobile layout overflow fix: applied overflow-x hidden and safe box-sizing rules so no element overflows the screen width on iPhone.
- Document history: no more phantom entries — the log no longer records a change when the before and after values are identical; None and empty string are now treated as equivalent to prevent false positives.
- Document history: names instead of IDs — changes to Responsible, Holder, and Category now show the person or category name in the history log instead of the numeric database ID.
- Document history: readable field names — field names in the history modal are now human-readable labels (e.g., "Responsible" instead of "titular_id", "Storage Location" instead of "location").
- Document history: readable status values — boolean and status values in the history log are now shown in plain language (e.g., "Yes"/"No" for archived, "active"/"deleted" for the deletion event).
- iPhone-style mobile interface: the app now has a dedicated mobile layout with a bottom tab bar (Dashboard, Search, Documents, Admin, More), a bottom sheet More menu that contains My Documents, Notifications, My Account, Help, About, the logged-in username, and Sign Out; document tables on mobile display as stacked card rows; modals slide up as bottom sheets; safe-area insets ensure compatibility with notched iPhones.
- PWA meta tags: added
apple-mobile-web-app-capable,apple-mobile-web-app-status-bar-style, andtheme-colorfor a better Add-to-Home-Screen experience on iOS. - View mode toggle: a floating button (mobile only) lets users switch between Mobile View and Web View; the preference is saved in localStorage and restored automatically on next visit.
- Full-window drag for modals: the quick-view card and New Document modal can now be dragged by clicking and holding anywhere on the window — not just the header; on the New Document modal, dragging is blocked when the click starts on an editable field (input, select, textarea) so that text selection and dropdowns continue to work normally.
- Document quick-view redesign: the quick-view modal now uses the same visual style as the New Document form — identical layout with labeled field groups, two-column rows for paired fields (Holder/Responsible, Issue Date/Validity Period, Alert/Critical Alert), and read-only field values displayed in closed input-style boxes; modal is draggable by the header.
- Document quick-view card: clicking any part of a document row (except action buttons) in All Documents, My Documents, Dashboard, Archived, and Deleted views opens a read-only modal showing all document fields — name, status badge, category, holder, responsible, issue date, expiry date, validity period, alert days, critical days, days remaining, storage location, and observations; modal closes on Close button, ESC key, or click outside.
- Conditional Report priority: when both Scheduled and Conditional reports are active, Conditional now takes priority; if documents require attention (Expired, Critical, or Due Soon), only the Conditional is sent and Scheduled is suppressed for that cycle; if Conditional is active but no documents require attention, neither report sends; Scheduled only sends when Conditional is paused.
- Priority explanation in UI: the Conditional Report card now displays a note explaining the priority behavior between Scheduled and Conditional reports.
- Email reports translated to English: all document report emails (scheduled and conditional) are now in English; subject lines, column headers, status labels, and section titles have been updated.
- Report type identification: each email now includes a banner identifying whether it is a Scheduled Report or a Conditional Report.
- Archived documents excluded from reports: archived documents are no longer included in email reports or in the conditional report trigger logic.
- Logout now invalidates the session token: logging out revokes the current JWT server-side; a revoked token cannot be used again even if it has not yet expired.
- Password reset tokens hashed in the database: reset link tokens are now stored as SHA-256 hashes; the plaintext token is only sent in the email link and never persisted.
- Admin password reset sends a link, not a temporary password: when an admin triggers a password reset for a user, a secure one-hour reset link is sent by email instead of a plaintext temporary password.
- JWT algorithm fixed to HS256: the signing algorithm is now hardcoded and cannot be overridden by configuration, preventing algorithm-confusion attacks.
- HTTP security headers: all responses now include
X-Content-Type-Options,X-Frame-Options,X-XSS-Protection,Referrer-Policy,Permissions-Policy, andContent-Security-Policyheaders.
- Performance — Documents Audit: the Documents Audit tab now loads in a single database query instead of one query per document; no visible change in behaviour.
- Health check endpoint: a new
GET /healthendpoint verifies the database connection and scheduler state, returning 503 if either is unavailable. Railway is now configured to use this endpoint. - Email links fixed: all email links (reports, password reset, admin reset) now read the app URL from the
APP_URLenvironment variable; the old hardcoded fallback URL has been removed. - Report settings validation: the API now rejects invalid schedule values (e.g. unknown frequency or day names) with a 422 error before they reach the database.
- Automated tests + CI: a
pytesttest suite covering document status calculation, authentication, access control, audit log preservation, and input validation now runs automatically on every push via GitHub Actions.
- Fix Group by Holder: The "Group by Holder" option was incorrectly grouping documents by the Responsible field. It now correctly groups by the Holder field. Documents with no Holder appear under a "No Holder" tab.
- New Group by Responsible: "Responsible" is now available as a Group by option in All Documents. Documents with no Responsible appear under a "No Responsible" tab.
- Holder / Responsible split: Documents now have two separate person fields — Holder and Responsible. Category field visibility is configurable per category (admin+ only via the settings icon in the Categories tab). All document tables, the document modal, My Documents, and email reports show both fields separately.
- My Documents role filter: My Documents now loads documents where you are either the Holder or the Responsible. A new filter lets you show All, Holder only, or Responsible only.
- "Administration +" label: Users with the admin+ role see "Administration +" in the sidebar link and admin page title instead of "Administration".
- Inline search in All Documents: A search box in the All Documents toolbar filters documents in real time by name, observations, holder name, or responsible name. Works alongside existing filters and group-by; persists across sessions.
- Delete from Archived Documents: Each row in the Archived Documents tab now has a delete button. Confirming moves the document to Deleted Documents (same as the regular soft-delete flow).
- 5-year retention block removed: the RBAC 91 5-year hold on permanent deletion is confirmed removed;
deleted_attimestamp is still recorded on soft delete for audit purposes; the explicit confirmation modal introduced in v1.60 is the sole protection gate
- Permanent delete — confirmation modal: the browser confirm() prompt has been replaced with a styled modal that clearly states the action is permanent and irreversible, requiring an explicit button click to proceed
- Admin tabs reordered: tab order is now Users → Categories → Holders/Responsible → Validity & Alerts → Archived → Deleted Documents → Documents Audit
- 5-year retention block removed: the RBAC 91 5-year hold on permanent deletion has been removed; the
deleted_attimestamp is still recorded for audit purposes
- Data integrity hardening (Sprint 2): audit logs for permanently deleted documents are now preserved forever — the document name is snapshotted into each log entry before deletion, and orphaned logs appear in the Documents Audit tab (admin view) as italic entries with a "Deleted" badge; permanent deletion is now blocked until 5 years after the document was soft-deleted (RBAC 91 retention); holder names now enforced as unique at the database level; login rate limiting moved from server memory to PostgreSQL so lockouts survive container restarts
- Fix Deleted Documents tab showing active documents: admin_plus users now correctly see only soft-deleted documents in the Deleted tab (role check was excluding admin_plus)
- Fix permanent delete failing silently: activity log references to the document are now removed before deletion, preventing a database constraint error; an error message is shown if the operation fails
- Security hardening (Sprint 1): admin seed user now gets a randomly generated password printed once on first run; all document and user data rendered into HTML is now sanitized via
escapeHtml()to prevent XSS; report settings write endpoints restricted to admin role; scope bug fixed in scheduler startup
- Documents total card on Dashboard: a new informational card shows total active and archived document counts; updated in real time when switching status filters
- Close document modal with ESC: pressing Escape closes the document modal; in Duplicate mode, if changes have been made, a confirmation prompt appears with "Discard Changes" / "Continue Editing" options
- Preserve active group tab: after saving, editing, or deleting a document, the previously active group tab in All Documents is automatically re-selected instead of resetting to the first tab
- Archive document: new Archive button (purple, box-archive icon) on every document row in All Documents, My Documents, and Dashboard; archived documents are hidden from all normal views and appear in a new "Archived" tab under Administration; archived documents can be unarchived at any time; all archive/unarchive actions are logged in the activity log
- Toolbar label alignment: "FILTERS" and "VIEW" section labels in the All Documents toolbar are now vertically centered relative to the filter controls
- Category filter refresh after save: saving a document now refreshes the Category filter dropdown in All Documents and My Documents views, preserving the current selection
- New Document pre-fill from active tab: when Group By is set to Category or Holder and a tab is active, clicking New Document pre-fills the corresponding field with the active group's value
- Toolbar — Filters / View split: the All Documents toolbar now shows two labeled sections separated by a vertical divider: Filters (Status and Category) and View (Group By), making the purpose of each control immediately clear
- Revert sticky header: removed
position:stickyfrom table headers and restoredoverflow:hiddenon.titular-groupand.group-card— the sticky approach broke the card layout and border-radius clipping
- Fix sticky table header: removed
overflow:hiddenfrom.titular-group,.admin-panel, and.group-card— these containers were preventingposition:stickyfrom working on table headers in All Documents, My Documents, and Dashboard views
- No expiry date — disable + buttons: the Add (+) buttons next to Alert Before Expiry and Critical Alert are now also disabled (not just dimmed) when "No expiry date" is checked
- Date mask DD/MM/YYYY: Issue Date and Expiry Date fields now accept input in DD/MM/YYYY format with automatic slash insertion; dates are validated on blur and converted to/from YYYY-MM-DD when communicating with the backend
- Group By — horizontal tabs: in All Documents view, grouping now displays a horizontal tab bar instead of collapsible cards; clicking a tab switches the visible group without reloading data
- Sticky table header: column headers remain visible when scrolling long document lists in All Documents, My Documents, and Dashboard views
- No expiry date — disable alert fields: when the "No expiry date" checkbox is checked, the Alert Before Expiry and Critical Alert fields (and their + buttons) are also disabled and dimmed, consistent with Validity Period and Expiry Date
- Sliding session: the login session now auto-renews — a background token refresh call is made at most once every 30 minutes while you work, so the 12-hour expiry resets with activity; no interruption or re-login required during an active session
- Permanent documents: new "No expiry date" checkbox in the document form; when checked, Validity Period and Expiry Date are disabled; the document gets a green Permanent badge and shows ∞ in the Days column; Permanent documents appear in the Dashboard summary card (∞ icon) and in the Status filter dropdown; group-by ordering places Permanent between Valid and Pending Date
- History modal — empty fields: Before and After columns now show — when the value is an empty string, not only when null
- Filter toolbar — View Options label: a "View Options" label now appears at the left of the filter panel in both All Documents and My Documents
- Filter toolbar — filter order: filters are now ordered Status → Category → Group by in All Documents, and Status → Category in My Documents
- Filter toolbar — All Documents and My Documents: filter controls are now displayed in a dedicated toolbar panel with visible labels above each dropdown (Category, Status, Group by); title and New Document button are separated into a top bar; a Clear Filters button resets all filters at once; selected filters are persisted per user in localStorage and restored automatically when returning to the view
- Fix — clear Observations / Location on Edit: clearing the Observations or Storage Location fields and saving now correctly empties the value; previously the field was kept due to a backend bug that ignored null values and forced empty strings to "None"
- Storage Location: new optional field on documents to record where the file is stored (physical folder, cloud path, etc.); appears as a sub-line under the document name in All Documents and My Documents tables
- All Documents — Group By: new Group By dropdown in the All Documents header lets you group documents by Status, Category, or Holder/Responsible; each group appears as a collapsible card showing the group name and count; cards start expanded and collapse or expand with a smooth animation; column sorting continues to work with grouping active
- Search — highlight row: clicking Open in search results navigates to All Documents and highlights the matching row in blue; the highlight clears when you click the row or change page
- Search — Clear button: new Clear button resets the search field and results list
- My Documents — Holder column: the My Documents table now includes the Holder/Responsible column, matching the All Documents layout exactly
- Delete user — recipient option: when permanently deleting a user who is also a report recipient, a checkbox lets admins simultaneously remove their email from the recipients list
- My Account — Preferences spacing: the Preferences card is now visually separated from Change Password for consistency with other pages
- Manual: added My Documents and Search sections; updated Login, Dashboard, Documents, Adding Documents, Users, and My Account sections to reflect current functionality
- Duplicate Document: any document can now be duplicated via the Duplicate button (purple copy icon); the form opens pre-filled with all fields from the original — Save is disabled until at least one field is changed; duplication is recorded in the document's history log
- My Documents — full actions: the My Documents view now shows Edit, Duplicate, History, and Delete action buttons for each document, matching the All Documents view
- Search page: new Search item in the sidebar; type any term and press Search to find documents by name, observations, category, or holder; results show status, days remaining, and an Open button that navigates directly to the document in All Documents
- Startup fix: fixed a crash on cold start caused by a database migration running too late; the app now starts correctly after Railway deployments
- Draggable document modal: the New/Edit Document window can now be dragged by its title bar to reposition it and see the documents list behind; the window no longer closes when clicking outside — only Save or Cancel close it
- My Documents — New Document: added "+ New Document" button in the My Documents view; opens the form pre-filled with the current user as holder and "Tripulação" as category
- Landing page preference: each user can now choose the default page shown after login (Dashboard, All Documents or My Documents) in My Account → Preferences; the setting is saved per user and applied immediately on the next login
- My Documents: new sidebar view showing only documents where the logged-in user is the holder/responsible; supports category and status filters and sortable columns; users without an associated holder see a friendly message
- Delete user — fix: permanent user deletion now correctly removes associated document logs, password reset tokens, and nullifies activity log references before deleting the user record
- Modal z-index fix: all modals (document, delete confirmation, etc.) were unresponsive due to the overlay intercepting clicks; corrected z-index so the modal box renders above the overlay
- Password reset link — fix: the reset link sent by email now correctly opens the "Set New Password" modal instead of redirecting to the login screen
- Self-service password reset: a "Forgot password?" link on the login screen lets users request a reset link by email; the link is valid for 1 hour and allows setting a new password without admin involvement
- Admin password reset: admins can now reset any user's password directly from the Users table (key icon); a temporary password is generated and sent to the user's email; the user should change it immediately via My Account
- Conditional Report — "Only send when attention required" toggle removed: this toggle has been removed from the UI; the Conditional Report now always behaves as conditional (only sends when documents require attention), which is its only meaningful mode
- Conditional Report — unified info block: the "Only send when attention required" toggle is now integrated inside the schedule info block — the card is fully self-contained with schedule, status, firing condition, and toggle in one place
- Conditional Report — condition description: the info block now explicitly describes when emails fire — thresholds are configured per document in the Documents view
- Conditional Report — status indicator: the Conditional Report card now shows an Active/Paused status (green dot + label), matching the Scheduled Report card
- Conditional Report — schedule summary: the card now displays the active schedule (frequency, day, time UTC-3) and the firing condition, making both report cards self-contained
- Fixed — Activity Log email date window: the daily Activity Log email was reporting activity from the current day instead of the previous full day; all events (including late-night logins) are now correctly captured in the 00:00–23:59 UTC-3 window of the previous day
- Notifications Settings — redesigned layout: the Report Settings tab has been restructured for clarity — Master Status card controls global on/off only; each report type (Scheduled and Conditional) now has its own dedicated Send Now button; the Conditional Report description is displayed directly in its card
- Cancel Schedule removed: the red Cancel Schedule button has been removed; schedule state is now managed exclusively via the Scheduled Report toggle, consistent with the rest of the interface
- Security — login rate limiting: after 10 failed login attempts from the same IP within 5 minutes, further attempts are blocked for 5 minutes; a successful login resets the counter
- Notifications Settings: page renamed from "Report Settings"; now uses tab navigation with Report Settings and Activity Log Settings (Activity Log visible to admin+ only)
- Documents Audit: column headers are now clickable for ascending/descending sort
- Fixed: Documents Audit route conflict resolved — audit data now loads correctly
- New role admin+: elevated role above admin with access to exclusive features; not selectable in the UI
- Documents Audit: new tab in Administration (visible to all users) showing all documents with Created by, Creation date, Last modified by, and Last modified date; filterable by all columns; deleted documents shown in a distinct style; click to navigate directly to the document
- Daily Activity Log email (admin+ only): configurable daily email with all login, logout and document activity in chronological order; timestamps displayed in UTC-3 (São Paulo, Brazil); configurable via Report Settings → Activity Log Settings
- Fixed: email timestamps now display in UTC-3 (São Paulo, Brazil) with explicit timezone label
- Fixed: Delete modals for Users, Categories and Holders now show a single Cancel button in the footer — action choices (Keep / Delete) are inline; no more duplicate or inline Cancel buttons
- Fixed: Delete button missing for active categories — now correctly shows Edit + Deactivate + Delete, consistent with Holders/Responsible
- Admin tables: Actions column and header now hidden for non-admin users in Users, Categories, and Holders/Responsible tabs
- Delete Category: confirmation modal now shows two options — keep documents (move to Unassigned) or move them to Deleted — matching the Delete Holder flow
- Fixed: Delete button was missing for active categories — now shows correctly alongside Edit and Deactivate, consistent with Holders/Responsible
- Admin page: non-admin users no longer see the "Validity & Alerts" and "Deleted Documents" tabs; Users, Categories and Holders/Responsible remain visible in read-only mode
- Fixed: clicking Cancel on any "Add option" prompt no longer shows an "Invalid number" error — the dialog simply closes with no action
- Document rows are now color-coded by status: soft yellow (Due Soon), soft orange (Critical), soft red (Expired) — applies to Dashboard and Documents views
- Clicking a status card on the Dashboard resets the category filter to "All", showing all matching documents across categories
- Password requirements: passwords must be at least 8 characters and contain both letters and numbers; an inline warning appears as you type if the requirement is not met, and disappears once it is; applies to user creation (Admin) and password change (My Account)
- Report Settings: time selector rebuilt as a single HH:MM field from 00:00 to 23:30 in 30-minute steps
- Report Settings: Cancel Schedule button updated to match the standard button style
- Dashboard: "All" tab added — shows all documents from all categories when no filter is selected
- Dashboard summary cards are now clickable — click any card to filter documents by that status; click again to clear
- Alert Before Expiry now defaults to 60 days on all new documents
- Observations field now defaults to "None" if left blank; all existing documents with no observations have been updated
- Status badge colors improved — more distinct yellow (Due Soon), orange (Critical), and red (Expired)
- Dashboard table no longer shows Alert / Critical Alert columns (cleaner view)
- Documents table now shows Critical Alert column alongside Alert
- Report Schedule: time selector simplified to a single HH:MM dropdown in 30-minute increments
- Saved schedule now displayed below the form showing frequency, time, and active status with option to cancel
- Session is now persistent — users remain logged in until they close and reopen the browser
- Fixed: Expiry date calculation now uses proper calendar arithmetic — e.g. 01/02/2026 + 3 Years correctly produces 01/02/2029 regardless of leap years
- 4-level status system: Valid → Due Soon (yellow) → Critical — Expiring Soon (orange) → Expired (red)
- New Critical Alert field on every document (default: 10 days, configurable)
- Critical Alert Options section added to Admin → Validity & Alerts
- Email report updated with Critical section and 3-card summary
- All existing documents automatically inherit 10-day critical threshold
- Recipient removal confirmation dialog translated to English
- Changelog translated to English
- User Manual added — accessible from the sidebar under Help
- Sidebar now includes a Help / Manual link
- Email reports redesigned: organized by category within each section
- Report language changed to Portuguese (BR)
- Subject line is now dynamic — shows counts or "Tudo em dia"
- Password visibility toggle (eye icon) added to all password fields
- Users can be added as report recipients directly from the user creation/edit form
- Expired documents show "Vencido há X dias" (days overdue as positive number)
- Sidebar version label format updated to "Version X.XX © YEAR"
- About page: Changelog now loads inline, no new tab
- Fixed: delete confirmation modal not working in any Admin section
- Full Safari compatibility rewrite
- Users admin: Edit, Deactivate, and Delete actions with cascade options
- Holders admin: same three actions with cascade options