Docs: refresh every README against the current code
Verified each documented command, path, port and env var against what the code actually does, and corrected the drift. Phone App. Was still titled Car Control. The navigation description was also stale: the app moved to a RootShell bottom nav (Garage, Charging, Settings, and Users for admins), so the Settings gear and admin action the dashboard bullet described no longer exist. Adds the Charging screen, noting its public tab is placeholder data and only the Home tab's OCPP control is real, and rebuilds the lib/ tree, which had lost i18n.dart, theme.dart, widgets/ and three screens. Web App. Node 18+ was wrong. The installed Vite is 8.1.2, whose engines field is ^20.19.0 || >=22.12.0 - Node 18 is EOL and cannot build this. API Server. The config table gained OCPP_REQUIRE_TLS, OCPP_PUBLIC_URL, PB_BOOTSTRAP and DRIVERVAULT_SUPERADMIN_*, plus a note that PLUGINS_FILE and the panel-written .env resolve against the working directory (a volume, in Docker). Plugins. Per-tenant credentials sat under "not yet implemented", but /api/integrations/* has done exactly that for both built-ins for a while. Narrowed the roadmap item to the genuinely missing generic version. New Docker/README.md and Docker AIO/README.md: the root README's component table linked those directories as documentation but neither had any. The root README now points at them. All 8 markdown files pass a relative-link check. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 4.8
parent
01d82ebda9
commit
a0eb5e4e9d
+31
-15
@@ -1,6 +1,6 @@
|
||||
# Car Control — Phone App (Flutter)
|
||||
# DriverVault — Phone App (Flutter)
|
||||
|
||||
A Flutter client for the Car Control maintenance tracker. Talks **only** to the
|
||||
A Flutter client for the DriverVault maintenance tracker. Talks **only** to the
|
||||
API Server (same contract and auth as the web app — a PocketBase token relayed by
|
||||
the server, not a JWT the server mints). At full feature parity with the web app
|
||||
(data export/import is the only deliberate omission).
|
||||
@@ -11,12 +11,16 @@ deprecated.
|
||||
|
||||
## Features
|
||||
|
||||
Once signed in, `RootShell` hosts the app behind a persistent **bottom
|
||||
navigation bar** — Garage, Charging, Settings, and Users for admins — in an
|
||||
`IndexedStack`, so each section keeps its state as you switch tabs.
|
||||
|
||||
- **Login** — email/password against `/api/auth/login`, password show/hide, and a
|
||||
collapsible **Server settings** section to override the API base URL on-device.
|
||||
- **Biometric / face sign-in + app lock** — see the dedicated section below.
|
||||
- **Dashboard** — car list with next-due status badges (date + km, worst-of),
|
||||
a "shared" chip on cars owned by someone else, pull-to-refresh, **Add car**
|
||||
FAB, Settings gear, and an admin action (admins only).
|
||||
- **Garage (dashboard)** — car list with next-due status badges (date + km,
|
||||
worst-of), a "shared" chip on cars owned by someone else, pull-to-refresh and
|
||||
an **Add car** FAB.
|
||||
- **Car detail** — all spec fields (incl. VIN and transmission / differential /
|
||||
brake / coolant specs), a **share** sheet (owner only), quick odometer update,
|
||||
edit car, and delete car (type-to-confirm; cascades). Actions are gated by the
|
||||
@@ -45,13 +49,20 @@ deprecated.
|
||||
workshop visit, refill, document and part (PDF or image, up to 10MB). Picked
|
||||
with `file_picker`, fetched back through the API Server — never a public URL —
|
||||
and opened with the phone's own viewer via `open_filex`.
|
||||
- **Charging** — mirrors the web `Charging.vue`, split into two tabs. **Public**
|
||||
is a discovery map with a demo session and nearby stations: presentational
|
||||
placeholders, because there is no public-charging API yet (same as the web).
|
||||
**Home** carries the one real piece — an OCPP control card that drives your
|
||||
own charger through the Anker Solix control endpoints, once you pick Own/Proxy
|
||||
CSMS under Settings → Integrations.
|
||||
- **Settings** — account (name / email verification / password), appearance
|
||||
(theme + dark mode, **language**, **region**, date format, **currency**, font
|
||||
size), profile (avatar via `image_picker`, bio), **Security** (biometric
|
||||
toggle), and the account-deletion state machine. Auth relays PocketBase's own
|
||||
stateless tokens, so there is no per-device session list to show or revoke.
|
||||
- **Admin** — user management screen (list / create / role / reset password /
|
||||
delete), gated by the admin role.
|
||||
size), profile (avatar via `image_picker`, bio), **integrations** (Toyota,
|
||||
Anker Solix), **Security** (biometric toggle), and the account-deletion state
|
||||
machine. Auth relays PocketBase's own stateless tokens, so there is no
|
||||
per-device session list to show or revoke.
|
||||
- **Users (admin)** — user management tab (list / create / role / reset password
|
||||
/ delete), shown only for the admin role.
|
||||
|
||||
Sharing/ownership: `Car.access` drives `isOwner` / `canWrite` / `isReadOnly`
|
||||
getters that gate the UI, mirroring the server's access checks.
|
||||
@@ -134,15 +145,20 @@ Notes:
|
||||
```
|
||||
lib/
|
||||
├── config.dart # default API base URL (kDefaultApiBase)
|
||||
├── models.dart # Car (+ access getters), ServiceRecord, Part, AuthUser, UserProfile, Session
|
||||
├── models.dart # Car (+ access getters), the record types, integrations, profile
|
||||
├── api.dart # ApiClient — the only thing that calls the API Server
|
||||
├── auth.dart # AuthService (token persistence, app-lock flag, ChangeNotifier)
|
||||
├── biometric.dart # BiometricAuth — local_auth + secure storage; biometricAuth singleton
|
||||
├── app_settings.dart # AppSettings (theme/locale/date/font), persisted; drives MaterialApp
|
||||
├── i18n.dart # translation lookup — t("key"); en/pl/da with en fallback
|
||||
├── theme.dart # shared colours/tones (status badges, charging tiles)
|
||||
├── format.dart # date/km formatting + next-service status (worst-of date/km)
|
||||
├── main.dart # app root; routes Login / Lock / Dashboard; lifecycle-based re-lock
|
||||
├── main.dart # app root; routes Login / Lock / RootShell; lifecycle re-lock
|
||||
├── widgets/
|
||||
│ └── attachment_field.dart # pick / view / clear a record's attached file
|
||||
└── screens/
|
||||
├── login_screen.dart dashboard_screen.dart car_detail_screen.dart
|
||||
├── car_form_sheet.dart settings_screen.dart admin_users_screen.dart
|
||||
└── lock_screen.dart
|
||||
├── root_shell.dart # bottom-nav shell: Garage, Charging, Settings, Users
|
||||
├── login_screen.dart lock_screen.dart dashboard_screen.dart
|
||||
├── car_detail_screen.dart car_form_sheet.dart record_form_sheets.dart
|
||||
└── charging_screen.dart settings_screen.dart admin_users_screen.dart
|
||||
```
|
||||
|
||||
Reference in New Issue
Block a user