Deliver a hardened, non-redundant NVR platform evolution with reusable integrations and a native Windows x64 dashboard + installer experience.
- Keep only integrations that add distinct capability or measurable quality gain.
- Reuse shared modules before adding new provider-specific logic.
- Validate each phase with build/test checks before progressing.
- Ship incremental updates that are independently stable.
- Create execution backlog (
todo.md) and roadmap blueprint. - Scaffold native Windows x64 dashboard in Tauri.
- Set installer bundle targets to MSI + NSIS.
- Add deterministic build commands for dashboard and Windows x64 bundle artifacts.
- Implement dashboard onboarding/install wizard flow.
- Wire dashboard to local service discovery/config endpoints.
- Create provider-agnostic ingest interfaces (
common/src/ingest.ts).IngestProvider,IngestSession,IngestFrame,IngestConnectionOptions,RetryOptionsconnectWithRetry()shared exponential-backoff helper
- Add shared recording pipeline, retention, and recovery logic (
common/src/recording.ts).RecordingPipelineclass (segment rotation, size+age retention pruning, crash-safe index)NullSegmentIndexfor testing;SegmentIndexinterface for FS/DB backends
- Ensure new providers plug into one pipeline instead of duplicated code paths.
- All providers implement
IngestProvider→ pipeline consumesIngestSessiongenerically
- All providers implement
- Add unit tests for ingest and recording core (
common/test/ingest.test.ts,common/test/recording.test.ts).- 17 passing tests covering session lifecycle, retry logic, rotation, retention, and recovery
- Finalize feature-vs-overlap matrix (
docs/provider-overlap-matrix.md). - Reject integrations that duplicate existing capability without meaningful enhancement.
- Scaffold Blink provider implementing shared
IngestProviderinterface (plugins/blink/).BlinkIngestProvider,BlinkCameraDevice, stub client ready for upstream library swap
- Unified event metadata schema (
common/src/event-schema.ts).ScryptedEvent,DetectionResult,DetectionClass,EventTypetypesbuildEvent(),createEventId(),computeAggregateConfidence()helpers- Type guards:
isDoorbellEvent,isMotionEvent,isHighConfidence
- Timeline enrichment with confidence scores (
common/src/timeline.ts).TimelineEnricher— TTL ring-buffer, segment annotation, tag derivationbuildDoorbellEvent()convenience factory used by Blink + Ring
- Single detection orchestration layer —
DoorbellCastOrchestrator(common/src/doorbell-cast.ts) fans out to display targets without duplicating detection logic. - Sub-project: PiP Doorbell Cast (
plugins/pip-doorbell-cast/).ChromecastPipTarget— castv2-client, live stream → PiP overlay on Chromecast/VizioFireTvPipTarget— ADB TCP via adbkit, native PiP broadcast Intent on Fire TVDoorbellMixin+PipDoorbellCastPlugin— MixinProvider attaches to anyBinarySensor + Cameradoorbell device; zero provider-specific code
- Tests: 31 tests covering schema, timeline, cast orchestrator (all pass)
- Reliability controls (
common/src/reliability.ts):BoundedQueue<T>— head-drop queue guards against unbounded memoryCrashSafeRunner— auto-restart with capped backoff (configurable maxRestarts)SessionRestartGuard— manages IngestSession lifecycle + auto-restartcheckStorageHealth()— disk space check for recording output directories
- Test coverage (
common/test/reliability.test.ts) — 9 tests, all pass. - Rollout notes:
docs/phase4-phase5-rollout-notes.md - Total: 57 tests passing, 0 failing across all phases.
- Install dependencies
- Build changed components
- Run relevant tests
- Confirm no security regressions in changed surfaces
All planned phases (1–5) are complete. The platform is ready for:
- Production hardening of the Blink client (swap
StubBlinkClientfor a real library). - Signed Windows x64 release pipeline.
- App rebrand assets (name, icon, splash screen).