# Subtitle Revision Workspace Implementation Plan > **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking. **Goal:** Redesign the subtitle-revision screen into a more cohesive editorial workspace while staying inside the current frontend design system. **Architecture:** Keep the existing component boundaries and logic intact, then improve hierarchy through coordinated shell styling and small presentation-only markup changes. The work is isolated to the shared stepper chrome, the subtitle-revision step layout, the transcription editor surface, and the timeline dock so the redesign remains low-risk and easy to verify. **Tech Stack:** Next.js 16, React, TypeScript, SCSS Modules, Vidstack, Lucide, Chrome DevTools MCP --- ## File Structure - Modify: `cofee_frontend/src/shared/ui/Stepper/Stepper.module.scss` Purpose: Reduce stepper visual dominance and align it with the calmer workspace shell. - Modify: `cofee_frontend/src/widgets/ProjectWizard/ProjectWizard.module.scss` Purpose: Introduce softer page-level spacing/canvas treatment around the active step content. - Modify: `cofee_frontend/src/features/project/SubtitleRevisionStep/SubtitleRevisionStep.tsx` Purpose: Add minimal presentational structure for player/editor panel headers and shell grouping. - Modify: `cofee_frontend/src/features/project/SubtitleRevisionStep/SubtitleRevisionStep.module.scss` Purpose: Build the unified editorial workspace shell and responsive balanced split behavior. - Modify: `cofee_frontend/src/features/project/TranscriptionEditor/TranscriptionEditor.tsx` Purpose: Add small semantic wrappers for a stronger editor header and cleaner segment metadata grouping. - Modify: `cofee_frontend/src/features/project/TranscriptionEditor/TranscriptionEditor.module.scss` Purpose: Redesign the editor surface, segment cards, and add-segment action within current tokens. - Modify: `cofee_frontend/src/widgets/TimelinePanel/TimelinePanel.module.scss` Purpose: Make the timeline feel like a docked rail within the same workspace shell. ## Task 1: Soften the Stepper and Page Canvas **Files:** - Modify: `cofee_frontend/src/shared/ui/Stepper/Stepper.module.scss` - Modify: `cofee_frontend/src/widgets/ProjectWizard/ProjectWizard.module.scss` - Test: `cd cofee_frontend && bunx tsc --noEmit` - [ ] **Step 1: Inspect the current stepper and wizard shell before editing** Run: ```bash sed -n '1,220p' cofee_frontend/src/shared/ui/Stepper/Stepper.module.scss sed -n '1,220p' cofee_frontend/src/widgets/ProjectWizard/ProjectWizard.module.scss ``` Expected: confirm the current stepper uses a saturated active pill and the wizard root is mostly structural with minimal page-level styling. - [ ] **Step 2: Update the stepper to feel quieter and more integrated** Apply changes in `cofee_frontend/src/shared/ui/Stepper/Stepper.module.scss` so the active step is calmer and the bar reads as context instead of a hero element. Use this shape for the key selectors: ```scss .root { position: relative; background: linear-gradient(180deg, variables.$bg-default 0%, variables.$bg-surface 100%); border-bottom: 1px solid variables.$border-subtle; } .scrollContainer { gap: 10px; padding: 18px 28px 14px; } .step { padding: 8px 14px 8px 8px; border-radius: 999px; background: rgba(255, 255, 255, 0.42); border: 1px solid transparent; } .stepActive { background: variables.$bg-surface; border-color: rgba(139, 92, 246, 0.16); box-shadow: 0 10px 24px rgba(24, 24, 27, 0.06); } .stepCompleted { background: rgba(255, 255, 255, 0.28); } ``` - [ ] **Step 3: Give the wizard a softer canvas around the active step** Update `cofee_frontend/src/widgets/ProjectWizard/ProjectWizard.module.scss` so the content area gets breathing room without changing behavior. Use this shape: ```scss .root { display: flex; flex-direction: column; height: calc(100vh - var(--header-height)); overflow: hidden; background: linear-gradient(180deg, variables.$bg-default 0%, rgba(255, 255, 255, 0.55) 100%); } .content { flex: 1; display: flex; flex-direction: column; overflow-y: auto; min-height: 0; padding: 18px 24px 24px; } ``` - [ ] **Step 4: Run the frontend type-check after the shell changes** Run: ```bash cd cofee_frontend && bunx tsc --noEmit ``` Expected: exit code `0`. - [ ] **Step 5: Commit the shell changes** ```bash git add cofee_frontend/src/shared/ui/Stepper/Stepper.module.scss cofee_frontend/src/widgets/ProjectWizard/ProjectWizard.module.scss git commit -m "feat: refine project wizard shell" ``` ## Task 2: Build the Subtitle Revision Workspace Shell **Files:** - Modify: `cofee_frontend/src/features/project/SubtitleRevisionStep/SubtitleRevisionStep.tsx` - Modify: `cofee_frontend/src/features/project/SubtitleRevisionStep/SubtitleRevisionStep.module.scss` - Test: `cd cofee_frontend && bunx tsc --noEmit` - [ ] **Step 1: Inspect the current subtitle-revision markup and styles** Run: ```bash sed -n '1,260p' cofee_frontend/src/features/project/SubtitleRevisionStep/SubtitleRevisionStep.tsx sed -n '1,260p' cofee_frontend/src/features/project/SubtitleRevisionStep/SubtitleRevisionStep.module.scss ``` Expected: confirm the current main grid, timeline, and footer are separate blocks with minimal shared shell styling. - [ ] **Step 2: Add panel headers and a single workspace shell in the TSX** Update `cofee_frontend/src/features/project/SubtitleRevisionStep/SubtitleRevisionStep.tsx` so the player and editor live inside named panels. Use this structure inside the `MediaPlayer` content: ```tsx

Просмотр

Видео проекта

...

Редактор

Транскрипция

...
...
...
``` - [ ] **Step 3: Style the workspace shell, balanced split, and responsive stack** Update `cofee_frontend/src/features/project/SubtitleRevisionStep/SubtitleRevisionStep.module.scss` with a single rounded shell, two equal panels, and a docked lower rail. Use this shape for the key selectors: ```scss .workspaceShell { display: flex; flex-direction: column; flex: 1; min-height: 0; border: 1px solid rgba(24, 24, 27, 0.08); border-radius: variables.$radius-lg; background: linear-gradient(180deg, rgba(255, 255, 255, 0.72) 0%, variables.$bg-surface 100%); box-shadow: 0 18px 48px rgba(24, 24, 27, 0.08); overflow: hidden; } .mainGrid { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); gap: 18px; padding: 20px; flex: 1; min-height: 0; } .panel { display: flex; flex-direction: column; min-height: 0; border: 1px solid rgba(24, 24, 27, 0.08); border-radius: variables.$radius-lg; background: rgba(255, 255, 255, 0.58); overflow: hidden; } ``` Add responsive collapse: ```scss @media (max-width: 1024px) { .mainGrid { grid-template-columns: 1fr; } } ``` - [ ] **Step 4: Verify the layout still type-checks** Run: ```bash cd cofee_frontend && bunx tsc --noEmit ``` Expected: exit code `0`. - [ ] **Step 5: Commit the workspace shell changes** ```bash git add cofee_frontend/src/features/project/SubtitleRevisionStep/SubtitleRevisionStep.tsx cofee_frontend/src/features/project/SubtitleRevisionStep/SubtitleRevisionStep.module.scss git commit -m "feat: redesign subtitle revision workspace shell" ``` ## Task 3: Redesign the Transcription Editor Surface **Files:** - Modify: `cofee_frontend/src/features/project/TranscriptionEditor/TranscriptionEditor.tsx` - Modify: `cofee_frontend/src/features/project/TranscriptionEditor/TranscriptionEditor.module.scss` - Test: `cd cofee_frontend && bunx tsc --noEmit` - [ ] **Step 1: Inspect the current transcription editor structure** Run: ```bash sed -n '1,320p' cofee_frontend/src/features/project/TranscriptionEditor/TranscriptionEditor.tsx sed -n '1,320p' cofee_frontend/src/features/project/TranscriptionEditor/TranscriptionEditor.module.scss ``` Expected: confirm the current editor has a plain header, dense segment rows, and a dashed add button. - [ ] **Step 2: Add semantic wrappers for a stronger header and cleaner metadata row** Update `cofee_frontend/src/features/project/TranscriptionEditor/TranscriptionEditor.tsx` with small presentation-only wrappers. Use this shape: ```tsx

Редактура

Редактор транскрипции

...
...
``` For each timing field, wrap the label and input in a chip-like container: ```tsx ``` - [ ] **Step 3: Rework the editor styling into a calmer editorial surface** Update `cofee_frontend/src/features/project/TranscriptionEditor/TranscriptionEditor.module.scss` so the editor looks less like a raw form and more like a reading/editing workspace. Use this shape for the key selectors: ```scss .root { display: flex; flex-direction: column; height: 100%; min-height: 0; background: transparent; } .header { display: flex; align-items: center; justify-content: space-between; padding: 18px 20px 14px; border-bottom: 1px solid rgba(24, 24, 27, 0.08); background: rgba(255, 255, 255, 0.68); } .segment { border: 1px solid rgba(24, 24, 27, 0.08); border-radius: variables.$radius-lg; padding: 14px; background: rgba(255, 255, 255, 0.82); box-shadow: 0 8px 24px rgba(24, 24, 27, 0.04); } .timeChip { display: inline-flex; align-items: center; gap: 8px; padding: 6px 10px; border-radius: 999px; background: variables.$bg-hover; border: 1px solid transparent; } .textArea { padding: 14px 16px; border-radius: variables.$radius-md; line-height: 1.65; background: rgba(244, 244, 245, 0.92); } ``` Replace the dashed add button treatment with a quieter inset surface: ```scss .addButton { margin: 0 20px 18px; padding: 12px 14px; border: 1px solid rgba(24, 24, 27, 0.08); border-radius: variables.$radius-md; background: rgba(255, 255, 255, 0.6); } ``` - [ ] **Step 4: Run the frontend type-check after the editor redesign** Run: ```bash cd cofee_frontend && bunx tsc --noEmit ``` Expected: exit code `0`. - [ ] **Step 5: Commit the editor redesign** ```bash git add cofee_frontend/src/features/project/TranscriptionEditor/TranscriptionEditor.tsx cofee_frontend/src/features/project/TranscriptionEditor/TranscriptionEditor.module.scss git commit -m "feat: refine transcription editor presentation" ``` ## Task 4: Dock the Timeline and Verify in Chrome **Files:** - Modify: `cofee_frontend/src/widgets/TimelinePanel/TimelinePanel.module.scss` - Test: `cd cofee_frontend && bunx tsc --noEmit` - Verify: Chrome at `http://localhost:3000/projects/83eb1396-8217-4ceb-ae32-b3b63cd01982` - [ ] **Step 1: Inspect the current timeline chrome** Run: ```bash sed -n '1,260p' cofee_frontend/src/widgets/TimelinePanel/TimelinePanel.module.scss ``` Expected: confirm the toolbar and label column are functional but visually flatter and less integrated with the workspace shell. - [ ] **Step 2: Update the timeline dock styling to match the workspace** Modify `cofee_frontend/src/widgets/TimelinePanel/TimelinePanel.module.scss` so the toolbar, labels column, and scroll area feel like a lower editing rail. Use this shape: ```scss .root { display: flex; flex-direction: column; align-self: stretch; height: 100%; min-width: 0; overflow: hidden; background: rgba(255, 255, 255, 0.56); } .toolbar { height: 40px; padding: 0 14px; border-bottom: 1px solid rgba(24, 24, 27, 0.08); background: rgba(255, 255, 255, 0.72); } .labelsColumn { width: 68px; background: rgba(255, 255, 255, 0.48); } .zoomBtn { width: 28px; height: 28px; border-radius: 999px; } ``` - [ ] **Step 3: Run the frontend type-check before browser verification** Run: ```bash cd cofee_frontend && bunx tsc --noEmit ``` Expected: exit code `0`. - [ ] **Step 4: Verify the redesigned screen in Chrome** Check the route: ```text http://localhost:3000/projects/83eb1396-8217-4ceb-ae32-b3b63cd01982 ``` Verify all of the following: - the stepper is still readable but less dominant - the player and editor read as one shell - the desktop split still feels balanced - the transcription cards are calmer and easier to scan - the timeline feels docked to the workspace - the footer stays visually anchored - the layout still holds together at a narrower viewport - [ ] **Step 5: Commit the timeline and verification-backed finish** ```bash git add cofee_frontend/src/widgets/TimelinePanel/TimelinePanel.module.scss git commit -m "feat: align timeline dock with subtitle workspace" ``` ## Self-Review ### Spec Coverage - Quieter stepper: covered by Task 1 - Single workspace shell: covered by Task 2 - Stronger transcription editor hierarchy: covered by Task 3 - Docked timeline integration: covered by Task 4 - Responsive balanced split: covered by Task 2 and Task 4 browser verification - Design-system constraint: enforced in every task by reusing existing tokens and limiting scope to SCSS/module presentation ### Placeholder Scan - No `TODO`, `TBD`, or deferred implementation notes remain - Each task lists exact files and commands - Each styling task includes concrete selector/code shapes instead of abstract guidance ### Type Consistency - `workspaceShell`, `panel`, `panelHeader`, `eyebrow`, and `panelTitle` are introduced in the step component only - `headerMeta`, `kicker`, `segmentMetaRow`, and `timeChip` are introduced in the editor only - No new logic APIs or renamed behavioral props are required