Skip to Content
FrontendCurrent State

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

RouteDescription
/dashboardSummary cards, trend views, blockers, and drill-through links to inventory, jobs, and outputs
/inventoryAsset listing with search, tag, file type, indexing status, duration, size, and sort filters. Upload, directory scan, bulk indexing, and tag management
/outputsOutput listing with filters for format, role, asset, conversion, and availability. Presets for ready datasets and JSON sidecars
/jobsJob history with type/status filters and polling for active jobs

Contextual Routes

RouteDescription
/assets/:assetIdAsset summary, indexed metadata, tags, topic table, related jobs and conversions, and index/reindex actions
/convertBootstrap route that resolves to /convert/use when saved configs exist, or /convert/new otherwise
/convert/newSequential create wizard: source selection, inspect, draft, spec editing, preview, save config
/convert/useSaved config flow with dropdown selection, config details, run action, and post-submission status polling
/jobs/:jobIdJob detail with links to related assets and conversion context
/outputs/:outputIdOutput detail with source links, file/content links, and artifact metadata
/replayLegacy compatibility redirect to /inventory
/visualizeLegacy 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 Use and Trigger topic 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, and conversion_id query 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

FilePurpose
lib/api.tsBackend request/response types and fetch helpers
hooks/use-backend.tsSWR hooks for assets, conversions, jobs, outputs, tags, dashboard, and saved configs
lib/conversion-authoring.tsJSON parsing, spec summaries, and inspection helpers
hooks/use-index-asset.tsIndexing mutations and pending-state tracking
hooks/use-upload-assets.tsUpload flow with bounded parallel requests
hooks/use-scan-directory.tsDirectory scan flow
hooks/use-create-conversion.tsConversion submit helper
lib/backend-runtime.tsDesktop runtime snapshot and capability contract
hooks/use-desktop-backend-runtime.tsReact 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 experience
  • lib/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_visualization in job types and default_episode in indexed asset metadata
  • The repo still carries some Next-oriented tooling drift even though the active frontend runtime is Vite + React Router + Tauri
Last updated on