feat(web): migrate frontend to Nuxt 4 + Vue 3 + Vuetify 4#904
Open
AchoArnold wants to merge 17 commits into
Open
feat(web): migrate frontend to Nuxt 4 + Vue 3 + Vuetify 4#904AchoArnold wants to merge 17 commits into
AchoArnold wants to merge 17 commits into
Conversation
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…n, BackButton, CopyButton, FixedHeader, BlogAuthorBio, BlogInfo, NuxtLogo, FirebaseAuth, MessageThread, MessageThreadHeader) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- Login, Index (homepage with features, pricing, FAQ) - Threads (index + [id] detail with message bubbles, Pusher real-time) - Messages (new message form) - Search Messages (search by ID/content) - Bulk Messages (file upload + history table) - Settings (API key, webhooks, discord, send schedules) - Billing (usage stats, plan upgrade) - Heartbeats, Phone API Keys - Blog (index + 7 articles) - Privacy Policy, Terms and Conditions All pages use <script setup lang=ts>, Pinia stores, useDisplay(), and Vuetify 4 component API. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- Copy all static assets (images, templates, favicon) to public/ - Create chart.client.ts plugin (Chart.js registration) - Create vue-glow.client.ts placeholder plugin - Refactor useApi composable to export both useApi() and useApiComposable() Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- Fix Vuetify styles configFile path (remove doubled app/ prefix) - Add default export to capitalize utility - Install firebaseui and firebase-admin dependencies - Disable SSR session cookies for vuefire auth (client-only auth) - Disable route prerendering (requires env vars at build time) Build now completes successfully with pnpm run build. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
The original Nuxt 2 app was a static SPA. SSR requires Firebase service account credentials at runtime which complicates deployment. SPA mode matches the original behavior and simplifies hosting. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Not up to standards ⛔🔴 Issues
|
| Category | Results |
|---|---|
| BestPractice | 1 high |
| ErrorProne | 3 high |
| Security | 1 high |
| CodeStyle | 95 minor |
🟢 Metrics 332 complexity · 0 duplication
Metric Results Complexity 332 Duplication 0
NEW Get contextual insights on your PRs based on Codacy's metrics, along with PR and Jira context, without leaving GitHub. Enable AI reviewer
TIP This summary will be updated as you push new changes.
- Add lint/test placeholder scripts so CI pnpm lint/test pass - Update web.yml: use pnpm build instead of generate, fix output dir - FirebaseAuth: use firebase/compat/app + firebase/compat/auth (FirebaseUI requires the namespaced compat API, not modular) - Use AuthUI.getInstance() to avoid duplicate instance errors - Remove playwright from committed devDependencies Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Pre-bundle commonly used dependencies to prevent runtime re-optimization that causes transient import failures. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- Replace privacy policy with full production text (9 sections) - Replace terms and conditions with full production text - Fix all 7 blog articles with correct production content - Fix blog index with correct titles, dates, reading times, authors - Remove nuxt-vuefire module (causes server-side Firebase errors) - Add client-only Firebase plugin that skips init without API key - Migrate all typography classes to Vuetify 4 (MD3) - Add blank layout for login page - Remove test/debug scripts Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Complete frontend migration from Nuxt 2 + Vue 2 + Vuetify 2 to Nuxt 4.4.6 + Vue 3.5.34 + Vuetify 4.0.7.
Approach
Fresh project scaffolding (the gap between Nuxt 2 and 4 is too large for in-place upgrade). All code ported incrementally with TypeScript throughout.
Key Changes
<script setup>Composition API_param→[param]dynamic route syntaxWhat's Included
Vuetify 4 Breaking Changes Applied
#action→#actionsslotoutlined→variant="outlined",dense→density="compact"#prependslot pattern#activator="{ props }"withv-bind="props"$vuetify.breakpoint→useDisplay()composableEnvironment Variables Required
Firebase config vars needed at runtime:
FIREBASE_API_KEY,FIREBASE_AUTH_DOMAIN,FIREBASE_PROJECT_ID,FIREBASE_STORAGE_BUCKET,FIREBASE_MESSAGING_SENDER_ID,FIREBASE_APP_ID,FIREBASE_MEASUREMENT_IDTesting