Add REST endpoints and frontend wiring for per-language project actions:
- POST /api/workspace/{project}/translation/{lang}/queue — queue translation
- POST /api/workspace/{project}/audio/{lang}/queue — queue audio generation
- GET/POST /api/workspace/{project}/format/{lang} — format metadata (EPUB/PDF)
- GET /api/workspace/{project}/review/{lang}/chapters/{chapter} — utterance review
- GET/POST /api/workspace/{project}/front-matter/{lang} — front matter editor
- GET /api/workspace/{project}/chapters/{lang} — chapter list
- GET /api/workspace/{project}/chapter-content/{lang}/{chapter} — chapter text
Frontend fixes:
- Review page shows per-language text (English source, Chinese translation, etc.)
- Non-translated languages show 'Queue translation' button only
- Speaker data from English source matched by paragraph ID
- UmbraAudio column layout: Speaker, Variation, Text, Actions
- Chapter tree in left sidebar: Front matter, Back matter, Body
- Audio Format label at top of sidebar
- Pandoc formatting toolbar for front matter text editing
6.5 KiB
Plan — Umbra Tools UI (Program / Project model)
Updated: 2026-10-25 Status: shell fully implemented and verified; backend endpoint built
Core model (per user decisions)
| Concept | Definition |
|---|---|
| Program | A book (workspace project from /api/workspace). Top-level container. |
| Project | Each language under a Program = a full manuscript (front + body + back matter), independent per language. Separate build per language. |
| Language project activities | Translate, Create audio, Format (EPUB/PDF metadata), Publish/download |
| Audio | Structural, matches UmbraAudio build system (speakers/voices, proper names, chapters, assignments, runs, queue) |
| Edit | Per-language front matter fully independent (copyright, ISBN per language) + binder: chapters → sections → scenes |
Activity dropdown (topbar, left to right)
Control Panel | Program | Edit | Audio | Format
Program selector (topbar, middle-left)
- Hidden until a program is chosen ("Select Program")
- After program chosen: lists ALL languages as "EN — Deal Hunter Translations", "ZH-HANS — Deal Hunter Translations", etc.
- Selecting a language navigates to
#program/<id>/<lang>— enters that language project - Works from any activity (Program, Edit, Audio, Format) — switching languages changes the main panel
Left rail (activity-dependent)
Control Panel: Dashboard / Accounts / Organizations / Projects / Audit log (+ Nodes)
Program (no language): Create / Import / Export / Build / Analyze
Program + language selected: Overview / Metadata / Translate / Audio / Format / Publish
Edit: Binder — Front matter (Title page, Copyright, Dedication, TOC, Foreword, Preface, Acknowledgments, Prologue) / Body (Sections, Chapters, Scenes) / History (Save version)
Audio: Overview / Speakers / Proper names / Chapters / Assignments / Runs / Queue (UmbraAudio structure)
Format: EPUB / PDF tabs — Cover, ISBN, Translated blurb, Translated Amazon search terms, Print profile, Page count/spine
Shell files (done and verified)
web/umbra-app.html— markup with Program selector + Format optionweb/assets/umbra-app.js— two-level routing (program → language project), per-language left rail, per-language dashboard, language switching from any activityweb/assets/api.js— addedprojectStatus(),projectDetail()methodsweb/assets/styles.css— language-row, project-rows, program-selector visibility, binder tree groups, language-detail panel, audio layout
Backend (done)
GET /api/workspace/{project_id}— project detailGET /api/workspace/{project_id}/status— per-language status for all 10 target languages + English sourceumbratrans_web/project_status.py— adapter overproductions/<book>-<lang>/, reports all configured target languages per programumbratrans_web/schemas.py— added ProjectDetailResponse, ProjectStatusResponse, HealthResponse, LogoutResponse, PasswordResetAvailableResponse, ResetPasswordRequest, SessionUserResponse, alias namesumbratrans_web/config.py— addedproductions_root(env:UMBRATRANS_PRODUCTIONS_ROOT)- Env var set:
UMBRATRANS_PRODUCTIONS_ROOT=/home/umbra/src/UmbraTrans/productions
10 target languages (configured)
| # | Language | Tag | Status for Deal Hunter |
|---|---|---|---|
| 1 | English (source) | en | Complete (32/32 chapters) |
| 2 | Simplified Chinese | zh-Hans | Text translated (32/32 chapters) |
| 3 | Spanish | es-ES | Not started |
| 4 | French | fr-FR | Not started |
| 5 | German | de-DE | Not started |
| 6 | Italian | it-IT | Not started |
| 7 | Portuguese | pt-BR | Not started |
| 8 | Russian | ru-RU | Not started |
| 9 | Japanese | ja-JP | Not started |
| 10 | Korean | ko-KR | Not started |
| 11 | Arabic | ar-SA | Not started |
Verified (headless Firefox, live data, zero console errors)
| View | Activity | Topbar | Left rail | Main |
|---|---|---|---|---|
| Landing | control | — | Control Panel | System overview |
| Program list | program | — | Create/Import/Export/Build/Analyze | 2 programs |
| Program detail | program | Deal Hunter Translations | Program-level | 11 language rows with status pills + actions |
| Language project (zh) | program | ZH-HANS — Deal Hunter Translations | Project-level (Overview/Metadata/Translate/Audio/Format/Publish) | 32/32 chapters, Text translated, Edit front matter / Review utterances / Queue audio / Format EPUB / Format PDF / EPUB↓ / PDF↓ |
| Edit (en/zh) | edit | EN/ZH-HANS — Deal Hunter Translations | Binder (front matter + chapters/scenes) | Editable surface per language |
| Audio (zh) | audio | ZH-HANS — Deal Hunter Translations | Speakers/Proper names/Chapters/Assignments/Runs/Queue | Audio production (structural, UmbraAudio structure) |
| Format (zh) | format | ZH-HANS — Deal Hunter Translations | EPUB/PDF tabs | Cover, ISBN, Blurb, Keywords, Print profile, Page count |
Per-language action buttons (program detail view)
| Language | Translation state | Actions |
|---|---|---|
| English (source) | Complete | Edit front matter, Review text, Queue audio, Format EPUB, Format PDF |
| Simplified Chinese | Complete | Edit front matter, Review utterances, Queue audio, Format EPUB, Format PDF, EPUB↓, PDF↓ |
| Others (9) | Not started | Queue translation |
Language project detail panel
- Translation status (chapters done/total)
- Edit front matter, Review utterances by chapter, Queue audio
- Utterance-by-chapter review section (placeholder — wires to audio backend)
- Outputs table (EPUB, PDF download links when available)
Hash deep links
#program/<id>, #program/<id>/zh-Hans, #edit/<id>/zh-Hans, #audio/<id>/zh-Hans, #format/<id>/zh-Hans — all survive refresh
Default activity
Admin → Control Panel; Member → Program
Test account (disposable, deactivated)
- Email:
bossnerd.work@gmail.com, Role: platform_admin — deactivated after validation - Password:
bsnrd.work@pass
Next (backend wiring)
Per-language action buttons are structural with explanatory disabled titles. To make them live:
- Queue translation → translation queue endpoint
- Create audio / Queue audio → audio generation endpoint (UmbraAudio-aligned, takes English audio data)
- Format EPUB/PDF → edition metadata endpoint (ISBN, blurb, keywords per language)
- Review utterances by chapter → utterance-per-chapter review view (maps translation text to audio, speaker alignment)
- Edit front matter → per-language front matter editor (ISBN, copyright per language)