尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證正在載入完整 README。 以下為已儲存的摘錄。
Vehicle vitals monitoring, threshold warnings, predictive maintenance and a full service record for modern cars.檢視完整 README ↗Turn vehicle telemetry into clear health alerts, maintenance forecasts, range estimates, and trip history.
Live demo: vitadrive.vercel.app
The dashboard includes responsive Trips, Health, and Overview views:
| Trips | Health | Mobile Overview |
|---|---|---|
flowchart LR
bridge["OBD-II bridge"] -->|vehicle API key| api["FastAPI on Vercel"]
clients["REST clients"] --> api
browser["Browser SPA<br/>native ES modules"] -->|Clerk session| api
api --> security["Clerk JWT · API keys<br/>DB rate limits · CSP"]
api --> services["Service layer<br/>monitor · anomaly JSON · maintenance<br/>range · trips · retention"]
services --> sqlalchemy["SQLAlchemy Core"]
sqlalchemy --> postgres["Supabase PostgreSQL"]
sqlalchemy --> sqlite["SQLite"]
cron["Vercel Cron"] --> prune["/api/cron/prune"]
prune --> services
services -. optional errors and traces .-> sentry["Sentry"]
See the architecture guide for the request lifecycle, schema and migrations, authentication modes, retention, and configuration.
| Decision | Why | Trade-off |
|---|---|---|
| FastAPI | Typed request validation, OpenAPI, and one API that serves both the dashboard and REST clients. | Application behavior follows FastAPI/Starlette middleware and dependency semantics. |
| SQLAlchemy Core + Alembic | Explicit queries support SQLite and PostgreSQL; migrations make schema changes reproducible. | Schema changes and migration scripts require deliberate, manual review. |
| Database-backed rate limits | Counters are shared across short-lived Vercel instances. | Limited requests add database work and depend on database availability. |
| Daily summaries after 30 days | Keeps long-term sensor trends while bounding raw-reading growth. | Older samples are represented by daily aggregates, not individually retained readings. |
| Vanilla ES modules, no build | The static dashboard can be served directly without a bundler or generated assets. | Module boundaries and imports are maintained by hand; modern browser module support is required. |
| Anomaly model exported to JSON | Inference stays in plain Python without a PyTorch or NumPy runtime dependency. | Training is a separate PyTorch workflow and must export updated weights. |
| Clerk JWT authentication | Public JWKS verification scopes vehicle data to the signed-in owner without storing passwords. | Deployed environments must configure Clerk; auth-off mode is only for trusted local development. |
| Stdlib-only bridge with offline buffer | Runs beside the car, retries REST delivery, and keeps queued readings in local SQLite during outages. | The bridge must run continuously on a connected device and manage its local buffer. |
| Strict script CSP | External modules and delegated actions avoid allowing inline script execution. | New UI behavior must use external modules rather than inline scripts or handlers. |
pip-audit checks dependencies; Dependabot proposes weekly Python and GitHub Actions updates.pytest --cov reports 181 passed, 7 skipped; 89.21% total coverage (85% required).onclick attributes. Native modules and delegated data-action events removed that script exception.python -m venv .venv
source .venv/bin/activate
pip install -e ".[dev]"
vitadrive demo --days 60
vitadrive serve
Open http://127.0.0.1:8000. Local use defaults to SQLite and auth-off mode; do not expose that configuration publicly.
docker compose up --build
docker compose run --rm app vitadrive demo
Open http://localhost:8000. The database port is not
published to the host. Stop the stack and remove its local volume with
docker compose down -v.
Install the optional adapter support on a device connected to the vehicle, then send readings to a running VitaDrive server:
pip install -e ".[obd]"
vitadrive bridge <VIN> --url https://<your-vita-drive-host> --api-key <vehicle-api-key>
See the OBD bridge guide for hardware, simulation, buffering, and service setup. For Vercel, Supabase, Clerk, and environment variables, see the deployment guide.
vitadrive/
adapters/ OBD-II and simulated reading sources
migrations/ Alembic environment and revisions 0001–0004
static/js/ Browser-native dashboard ES modules; no build step
api.py FastAPI routes and error handling
anomaly.py JSON-backed anomaly inference
bridge.py Vehicle-side delivery, retries, and offline buffer
service.py Monitoring and reporting orchestration
storage.py SQLAlchemy Core tables and persistence
trips.py Trip detection and efficiency summaries
docs/
adr/ Architecture decision records
images/ Dashboard screenshots and tour
ARCHITECTURE.md Request, data, deployment, and configuration reference
tests/ Unit, API, migration, and documentation tests
e2e/ Playwright browser tests
The API's interactive schema is available at /docs when the app is running.
Dashboard code is plain ES modules in vitadrive/static/js/ with no build step.
Standard OBD-II exposes only a subset of the monitored signals; several vehicle-specific metrics require manufacturer telematics or a CAN gateway. Default thresholds and service intervals are generic—follow the vehicle's owner manual. Nearby results depend on OpenStreetMap coverage, and recall results come from the US NHTSA database by model and year rather than VIN.
MIT