Skip to content

Migrate from Svelte 5 to Vue 3 with Office Space theme#7

Merged
jvalentini merged 9 commits into
masterfrom
office-space-vue
Jan 2, 2026
Merged

Migrate from Svelte 5 to Vue 3 with Office Space theme#7
jvalentini merged 9 commits into
masterfrom
office-space-vue

Conversation

@jvalentini

Copy link
Copy Markdown
Owner

What

Replaced Svelte 5 with Vue 3 and redesigned the UI with an Office Space theme. All components now use Vue's composition API with post-it note styling, flair badges, and Lumbergh imagery.

Key changes:

  • Rewrote all components (App, TextInput, VoiceInput, OutputPanel, SettingsPanel, TPSHeader) in Vue
  • Replaced reactive state management from Svelte stores to Vue ref/reactive
  • Added ProcessingBadge, FlairBadge, and PostItNote components for themed UI elements
  • Switched from SVG graphics to PNG images (stapler, Lumbergh)
  • Added oxlint configuration and fixed all linter warnings
  • Updated build config for Vue hot module replacement

Why

Standardize on Vue 3 for better ecosystem support and create a more distinctive UI that matches the corporate satire tone of the passive-aggressive content rewriter. The Office Space theme reinforces the app's purpose of translating workplace communication.

Testing

  • Build passes with bun build
  • Type checks pass with tsc --noEmit
  • Biome and oxlint show 0 warnings/errors
  • All components render correctly with the new theme
  • Manual testing of text/voice input, settings panel, and output display

Breaking Changes

None - this is a UI framework migration that doesn't affect the core rewriting logic or API.

- Replace all Svelte components with Vue 3 equivalents
- Implement Office Space-inspired design system:
  - TPS report styling with greenbar paper background
  - Vintage UI elements (stamps, post-it notes, flair badges)
  - CRT monitor aesthetics for voice input
  - 1990s corporate office color palette
- Update dependencies: remove Svelte, add Vue 3
- Migrate state management from Svelte stores to Vue reactive refs
- Refactor component architecture while preserving functionality:
  - Header → TPSHeader (with Lumbergh quote)
  - Output → OutputPanel (TPS report format)
  - Settings → SettingsPanel
  - VoiceInput/TextInput (CRT and paper form styling)
  - Add new components: PostItNote, FlairBadge
- Expand CSS with vintage design system (dot matrix fonts, perforation edges)
- Update Vite config for Vue 3 support
- Remove Svelte-specific config files
- Add component imports to App.vue (TPSHeader, PostItNote, VoiceInput, TextInput, SettingsPanel, OutputPanel)
- Add FlairBadge import to TPSHeader.vue
- Add missing state imports to VoiceInput.vue (inputMode, voiceStatus, liveTranscript)
- Add missing state imports to TextInput.vue (inputMode, isProcessing)
- Add missing state imports to OutputPanel.vue (transformedPlain, transformedEmail, changes)
- Add missing state import to SettingsPanel.vue (apiKey)

Resolves all Vue warnings about failed component resolution.
- Replace emoji stapler with custom SVG in TPSHeader
- Update branding from 'CORPORATE COMMUNICATIONS COMPLIANCE' to 'LANGUAGE COMPLIANCE SYSTEM'
- Change trademark symbol from ™ to ®
- Remove flair strip from header, add scattered flair pins around main content
- Transform TextInput, VoiceInput, and OutputPanel to yellow post-it note styling
- Redesign SettingsPanel with interactive AI flair badge toggle (starburst design)
- Update color scheme to match post-it note aesthetic (yellow gradients, brown text)
- Add post-it note visual effects (shadows, curl corners, slight rotations)
- Enhance button styling with 3D effects and better visual feedback
- Improve overall Office Space movie aesthetic throughout the UI
- Introduce ProcessingBadge component in App.vue for AI processing indication
- Enhance flair badge hover effect by removing unnecessary transition styles
- Update starburst design in SettingsPanel for improved visual clarity
- Replace button-based input mode selection in VoiceInput and TextInput with a tab-switcher for improved UX
- Update App.vue to pass mode-switching events to VoiceInput and TextInput components
- Remove unnecessary styles and elements related to previous button layout
- Enhance ProcessingBadge with a new design and animations for better visual feedback
…photo

- Remove starburst SVG background and replace it with a circular image of Bill Lumbergh
- Update styles for flair-circle and lumbergh-photo for improved visual effects
- Adjust flair-content positioning and flair-status styles for better alignment and readability
- Enhance responsiveness of the AI flair toggle component
- Remove FlairBadge from App.vue for a cleaner layout
- Eliminate unused pin-backing styles from SettingsPanel.vue
- Update TextInput and VoiceInput components to use an image icon instead of an emoji for mode selection
- Introduce a new stapler image asset for branding consistency in TPSHeader.vue
- Adjust styles for improved alignment and visual appeal across components
- Add .oxlintrc.json with TypeScript, Unicorn, and ESLint rules
- Update lint:fix script to run both Biome and Oxlint with auto-fix
- Apply automatic fixes: toSorted(), error cause, unused imports
- Suppress non-critical warnings (function scoping, event listeners, await in loop)
- Update function names in various components to remove leading underscores for clarity
- Modify linter configuration to disable unused variable warnings
- Enhance biome.json with additional linter rules for better code quality
- Adjust OutputPanel to handle changes more robustly
- Clean up computed properties in FlairBadge, TPSHeader, and other components
@cloudflare-workers-and-pages

Copy link
Copy Markdown

Deploying worksafe with  Cloudflare Pages  Cloudflare Pages

Latest commit: 1f9e383
Status: ✅  Deploy successful!
Preview URL: https://d1d6dd54.worksafe.pages.dev
Branch Preview URL: https://office-space-vue.worksafe.pages.dev

View logs

@jvalentini
jvalentini merged commit 24db5c2 into master Jan 2, 2026
5 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant