Audio recording management and transcription platform
Upload Β· Transcribe Β· Explore
- Audio Upload β Direct-to-OSS presigned upload with progress tracking (up to 500 MB)
- ASR Transcription β Aliyun DashScope async job, polled by a Cloudflare Cron Trigger
- AI Summaries β Multi-provider LLM summarization (OpenAI, Anthropic) with streaming markdown
- Audio Player β Custom player with play/pause, skip, variable speed, and progress seeking
- Transcript Viewer β Sentence view synced to playback, full-text view, one-click copy
- Word-Level Karaoke β Lazy-loaded word timestamps, clickable words for seeking, real-time highlighting
- Recording Management β CRUD, search, folders, tags, status filter, pagination, and sorting
- Dashboard β Charts and statistics for recording activity overview
- Cloudflare Access SSO β Email-based access control enforced at the edge
- Cloudflare D1 β Serverless SQLite store managed entirely on the Cloudflare edge
- Remote Backup β Bidirectional Backy integration (push + pull webhook)
- macOS App β Native Swift/SwiftUI menu bar app for meeting recording (mic + system audio)
ββββββββββββββββββββββββββββββββββββββββββββ
Browser ββββΆ β Cloudflare Access (SSO + JWT) β
ββββββββββββββββββββββββββββββββββββββββββββ€
β Worker `lyre-api` (apps/api) β
β β’ Hono router β
β β’ Static SPA via [assets] (apps/web) β
β β’ D1 binding `DB` β
β β’ Cron Trigger β ASR poll β
ββββββββββββββββββββββββββββββββββββββββββββ
β β
βΌ βΌ
Aliyun OSS Aliyun DashScope
(audio blobs) (qwen3-asr-flash)
apps/webβ Vite SPA, served as static assets by the Worker.apps/apiβ Hono Worker entry, middleware (Access JWT, bearer token), and route adapters.packages/apiβ Framework-agnostic handlers, services, repos, contracts (@lyre/api).apps/macosβ Native menu bar recorder that uploads via the Worker API.
# Requires Bun: https://bun.sh
bun installThe Worker reads its config from Wrangler (apps/api/wrangler.toml + secrets).
The Vite SPA only needs the API origin at build time.
See docs/01-deployment.md for the full list of Cloudflare bindings (D1, vars, secrets) and how to provision them.
# Vite SPA (web UI)
bun run web:dev
# Hono Worker against a local D1 (separate terminal)
bun run worker:dev# Build the SPA into apps/web/dist, then publish the Worker
bun run deploy # production
bun run deploy:test # staging environmentlyre/
βββ apps/
β βββ web/ Vite SPA (@lyre/web) β bundled into the Worker as static assets
β βββ api/ Hono Worker (@lyre/api-worker) β entry, middleware, routes, cron
β βββ macos/ Native Swift/SwiftUI menu bar app
βββ packages/
β βββ api/ @lyre/api β handlers, services, repos, contracts (framework-agnostic)
βββ docs/
βββ package.json Bun workspaces root
| Layer | Technology |
|---|---|
| Runtime | Bun (dev/build), Cloudflare Workers (prod) |
| Web | Vite 7 + React 19 + TypeScript 5 |
| API | Hono 4 on Cloudflare Workers |
| Database | Cloudflare D1 (SQLite) via Drizzle ORM |
| UI | shadcn/ui + Radix UI + Tailwind CSS v4 |
| Auth | Cloudflare Access (web) + bearer device tokens (macOS) |
| AI | Vercel AI SDK (OpenAI + Anthropic) |
| Storage | Aliyun OSS (zero-SDK, custom V1 signature) |
| ASR | Aliyun DashScope (qwen3-asr-flash-filetrans) |
| Job polling | Cloudflare Cron Trigger β cronTickHandler |
| Deploy | Wrangler (bun run deploy) |
| Command | Description |
|---|---|
bun run web:dev |
Start the Vite SPA dev server |
bun run worker:dev |
Start the Hono Worker locally (Wrangler) |
bun run lint |
Lint web + @lyre/api |
bun run typecheck |
Typecheck web + worker + @lyre/api |
bun run test |
Unit tests for web + worker + @lyre/api |
bun run test:coverage |
@lyre/api coverage gate |
bun run deploy |
Build SPA + publish Worker to production |
bun run deploy:test |
Build SPA + publish Worker to staging |
MIT Β© 2026

