Current State
Snapshot
As of 2026-03-30, the frontend is a Vite-powered React application under
frontend/src with a Tauri desktop host under frontend/src-tauri.
It provides the active UI surface for the local data pipeline: dashboard, inventory management, conversion authoring, job monitoring, and output browsing. There is no routed replay or visualization workflow in the current desktop app.
Route Map
Primary Navigation
| Route | Description |
|---|---|
/dashboard | Summary cards, trend views, blockers, and drill-through links to inventory, jobs, and outputs |
/inventory | Asset listing with search, tag, file type, indexing status, duration, size, and sort filters. Upload, directory scan, bulk indexing, and tag management |
/outputs | Output listing with filters for format, role, asset, conversion, and availability. Presets for ready datasets and JSON sidecars |
/jobs | Job history with type/status filters and polling for active jobs |
Contextual Routes
| Route | Description |
|---|---|
/assets/:assetId | Asset summary, indexed metadata, tags, topic table, related jobs and conversions, and index/reindex actions |
/convert | Bootstrap route that resolves to /convert/use when saved configs exist, or /convert/new otherwise |
/convert/new | Sequential create wizard: source selection, inspect, draft, spec editing, preview, save config |
/convert/use | Saved config flow with dropdown selection, config details, run action, and post-submission status polling |
/jobs/:jobId | Job detail with links to related assets and conversion context |
/outputs/:outputId | Output detail with source links, file/content links, and artifact metadata |
/replay | Legacy compatibility redirect to /inventory |
/visualize | Legacy compatibility redirect to /inventory |
Root Redirect
/ redirects to /dashboard by default, or /inventory when query params are present.
Conversion Authoring Workflow
The conversion workflow is split into two paths:
Create new (/convert/new):
- Source asset selection
- Topic inspection with sample-count, depth, and decode settings
- Spec drafting with inline
UseandTriggertopic selection - Raw JSON spec editing
- Preview with scrollable timestamp rows, field data, and presence data
- Save as a reusable config
Use saved config (/convert/use):
- Top-level config dropdown
- Selected config details and migration notes
- Run action using the saved config
- Post-submission status polling with job status, output path, and reported files
- Deep-link support via
saved_config_id,source_asset_id, andconversion_idquery params
Representation-policy details such as effective TFRecord image payload contract are surfaced on conversion status, job detail, and output detail pages for verification.
Data Layer
| File | Purpose |
|---|---|
lib/api.ts | Backend request/response types and fetch helpers |
hooks/use-backend.ts | SWR hooks for assets, conversions, jobs, outputs, tags, dashboard, and saved configs |
lib/conversion-authoring.ts | JSON parsing, spec summaries, and inspection helpers |
hooks/use-index-asset.ts | Indexing mutations and pending-state tracking |
hooks/use-upload-assets.ts | Upload flow with bounded parallel requests |
hooks/use-scan-directory.ts | Directory scan flow |
hooks/use-create-conversion.ts | Conversion submit helper |
lib/backend-runtime.ts | Desktop runtime snapshot and capability contract |
hooks/use-desktop-backend-runtime.ts | React binding for desktop runtime state |
Tests
The frontend currently has 11 test files using Vitest with React Testing Library and jsdom. Coverage is still targeted rather than exhaustive.
Current test coverage includes:
- desktop bootstrap, runtime, and app shell behavior
- backend connection notice rendering
- inventory upload and directory-scan dialogs
- SWR backend hook behavior
- conversion entry resolution helpers
- output preview, representation-policy, and output-formatting utilities
Dormant Code
components/conversion-dialog.tsx— older modal-style conversion UI that is not used by the active routed experiencelib/conversion-workflow.tsx— helper module retained for that older modal flow
Known Limitations
- Saved searches and saved selections are still planned-only placeholders in inventory
- The active authoring experience still expects users to tune the final conversion spec as raw JSON
- Some legacy client contract names remain in the type layer, such as
prepare_visualizationin job types anddefault_episodein indexed asset metadata - The repo still carries some Next-oriented tooling drift even though the active frontend runtime is Vite + React Router + Tauri