Features¶
Dark Theme¶
Light, Dark, and System (follows OS preference) themes available
Select from the user menu (top-right dropdown)
Preference is stored in a browser cookie and applied server-side — no flash on page load
Aircraft Fleet¶
Fleet overview with aircraft cards and thumbnail images
Color-coded airworthiness status badges (Green/Orange/Red)
Quick access to update hours from the aircraft page
Issue count summaries per aircraft
Oil and fuel consumption charts (Chart.js)
Aircraft Management¶
Aircraft detail page with tabbed interface:
Overview — Aircraft info, flight hours, and notes
Components — Component list with service intervals and reset functionality
Logbook — Maintenance log entries with AI-assisted import
Squawks — Active and resolved maintenance issues with priority levels
ADs — Airworthiness Directives management with compliance tracking
Inspections — Periodic inspection requirements and history
Documents — Document collections with multi-page image viewer
Major Records — Major repair and alteration records
Oil / Fuel — Consumption records with trend charts
Component Tracking¶
Parent-child hierarchy for nested component relationships
Component types with consumable flags
Three independent tracking modes per component:
Replacement (
replacement_critical) — periodic replacement viareplacement_hours+hours_since_overhaulTBO (
tbo_critical) — time between overhauls viatbo_hours+hours_since_overhaulInspection (
inspection_critical) — requires periodic inspections
Service reset for replacement-critical components via a modal with two options:
Service in place — resets OH/SVC hours only; use when the component is inspected, adjusted, or cleaned without being physically replaced
Replace — resets OH/SVC hours and total time in service; use when a new unit is installed (e.g. oil change, new filter)
Automatic sync of component hours when aircraft hours are updated
Airworthiness Status¶
Automatic status calculation with color-coded badges:
Red (Grounding): Overdue ADs, grounding squawks (priority 0), overdue required inspections, overdue critical component replacements
Orange (Caution): ADs due within 10 hours, inspections due within 30 days, component replacements due within 10 hours
Green: All checks pass
Squawk Management¶
Priority levels:
Ground Aircraft (Red) — immediately grounds the aircraft
Fix Soon (Orange)
Fix at Next Inspection (Blue)
Fix Eventually (Grey)
Link squawks to specific components
Attachment support (images, PDFs)
View resolved squawk history
Airworthiness Directives (ADs)¶
Create and edit ADs directly from the aircraft detail page
Compliance tracking with due dates
Recurrence support: one-time, hourly, monthly, annually
Automatic end-of-month due date calculation for monthly/annual recurrence
Overdue AD detection with airworthiness status impact
Compliance history per AD
Inspections¶
Define periodic inspection types with intervals (hours and/or days)
Track compliance records with dates and hours
Automatic overdue/due-soon detection integrated into airworthiness status
Inspection history
Logbook¶
Maintenance log entries with hours, dates, and mechanic signoffs
AI-assisted transcription of scanned logbook pages:
Anthropic (Claude models, cloud) — requires
ANTHROPIC_API_KEYOllama (self-hosted) — requires
OLLAMA_BASE_URL
File attachment support for logbook pages
Documents¶
Documents organized in collections
Multi-page document support with thumbnail navigation
Full-screen image viewing
Per-collection and per-document visibility controls for public share links:
Private (lock) — not visible on any share link
All share links (globe) — visible to both Status and Maintenance tokens
Maintenance only (wrench) — visible only to Maintenance-level tokens
Documents in a collection inherit the collection’s visibility by default; individual documents can override it
Notes¶
Add timestamped notes to aircraft with author attribution
Edit and delete notes
Mark individual notes as public to expose them on share links
Public Sharing¶
Owners can create up to 10 share links per aircraft
Two privilege levels per link:
Current Status — Overview, airworthiness, active squawks, public notes, current AD/inspection status. No maintenance history.
Maintenance Detail — Full history including logbook, AD/inspection history, resolved squawks, and major repairs.
Optional expiration date and label per link
Revoke individual links without affecting others
Public views are fully read-only; no account required
Aircraft Import / Export¶
Transfer complete aircraft records between Simple Aircraft Manager instances using a .sam.zip archive.
Export¶
Available from the Sharing & Access tab of the aircraft detail page (owner/admin only)
Downloads a
.sam.zipcontainingmanifest.json(all aircraft data) plus attached files (pictures, document images, squawk attachments)Files missing from storage are noted in the manifest but do not block export
Import¶
Dashboard — click the import button next to “New Aircraft” to upload a
.sam.zipArchive is validated before import begins: zip bomb detection, path traversal checks, magic-byte file verification, schema version check, and tail number conflict detection
If the tail number already exists, you can provide an alternate tail number before confirming
Import runs in the background; progress and any warnings are shown in the UI
All internal IDs are remapped — the imported aircraft gets fresh UUIDs
Rolls back cleanly if an error occurs mid-import
CLI¶
# Export
python manage.py export_aircraft N12345
python manage.py export_aircraft N12345 -o /tmp/n12345.sam.zip
# Import (dry run — validates without creating records)
python manage.py import_aircraft /tmp/n12345.sam.zip --owner alice --dry-run
# Import
python manage.py import_aircraft /tmp/n12345.sam.zip --owner alice
python manage.py import_aircraft /tmp/n12345.sam.zip --owner alice --tail-number N99999
See configuration.md for AIRCRAFT_CREATE_PERMISSION and import size settings.
Role-Based Access Control¶
Three roles per aircraft:
Action |
Admin |
Owner |
Pilot |
|---|---|---|---|
View all data |
Yes |
Yes |
Yes |
Update hours, create squawks/notes/oil/fuel |
Yes |
Yes |
Yes |
Edit/delete squawks, notes |
Yes |
Yes |
No |
CRUD components, logbook, ADs, inspections, documents |
Yes |
Yes |
No |
Edit/delete aircraft, manage roles & sharing |
Yes |
Yes |
No |
Create / import aircraft |
Configurable — see |
Admin = Django staff/superuser, bypasses all per-aircraft checks.
AIRCRAFT_CREATE_PERMISSION controls who can create or import aircraft instance-wide:
any(default) — any authenticated userowners— only users who already own at least one aircraft, plus adminsadmin— admins only
OIDC Authentication¶
Optional single sign-on via any OIDC-compatible provider (Keycloak, etc.):
Automatic user provisioning from OIDC claims
Hybrid authentication — OIDC and local Django accounts coexist
RP-initiated logout clears both Django and provider sessions
Feature flag: set
OIDC_ENABLED=trueto enable
See configuration.md for required environment variables.
Oil & Fuel Tracking¶
Record oil additions and fuel fills with quantities and hours
Consumption trend charts (Chart.js)
Shared mixin architecture for consistent UI
Major Records¶
Track FAA Form 337 major repairs and alterations
List view on aircraft detail page
Visible on maintenance-level share links
Per-Aircraft Feature Flags¶
Owners can enable or disable individual features per aircraft from the Settings tab
All features are on by default
Built-in flags: Flight Tracking, Oil Consumption, Fuel Consumption, Oil Analysis, Airworthiness Enforcement, Public Sharing
Plugins may register additional feature flags via
aircraft_featureson theirSAMPluginConfig; plugin features appear in the Settings tab alongside built-in onesAdministrators can globally disable features for all aircraft using the
DISABLED_FEATURESenvironment variable; globally disabled features cannot be re-enabled per aircraft
See the Plugin System guide for the aircraft_features API and the Settings tab user guide for details.
Plugin System¶
Out-of-tree plugins extend the UI and API without modifying core source files
Plugins are standalone Django apps that subclass
SAMPluginConfigExtension points: global navigation links, management views, aircraft detail tabs (standalone or sub-tabs inside existing groups), Alpine.js mixins, dashboard tiles, API endpoints, and page URL patterns
Discovery: directory scan (
SAM_PLUGIN_DIR) or explicit module list (SAM_PLUGINS) env varsContainer packaging:
SAM_PLUGIN_PACKAGESinstalls plugin packages from PyPI at startup
See the Plugin System developer guide for full documentation.