CleanFrame
삼성 The Frame용 개인 홈 화면, 포크와 맞춤을 위한 시작점
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기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