- Corrected the name in various files including CLAUDE.md, README.md, and configuration files to reflect the updated branding.
- Ensured consistency in the use of the new name throughout the project, enhancing brand identity.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Complete visual overhaul of all pages and components with generous spacing,
bold typography, hover effects, gradient accents, and section differentiation.
Hero features animated terminal mockup and gradient text. Cards use hover
transforms with brand-colored shadows. CTAs use gradient backgrounds.
All i18n keys, data structures, SEO meta, and composable logic preserved.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
UDrawer (vaul-vue bottom-sheet) rendered content in DOM even when closed,
causing mobile nav to show on desktop. Replaced with USlideover (proper
sidebar panel). Also: backdrop-blur header, UButton for actions, Lucide
icons, brand color active states.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Nuxt prefixes components in subdirectories (layout/AppHeader → LayoutAppHeader).
Setting pathPrefix: false allows using <AppHeader>, <HeroSection>, etc. directly.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Hero with stats (available services count, rating) and profile CTA
- Service cards grid with NuxtImg, price/status badges, order buttons
- FAQSection with UAccordion using homeFAQs data
- Final CTA section linking to Fiverr profile
- Dynamic route /project/[id] with findById composable
- 404 via createError if project not found
- Hero grid: image + info + CTA buttons (demo, source, custom)
- About section with features list (checkmarks)
- Technologies section with TechBadge
- Gallery thumbnails with zoom overlay, opens ProjectGallery modal
- Sidebar: project info card + related projects
- Responsive 2-col layout (main + sidebar)
- SUMMARY.md with 3 tasks, 17 files, 239s duration
- STATE.md advanced to phase 3 plan 1
- ROADMAP.md updated with plan progress
- COMP-01 to COMP-04 marked complete
- Remove PAGE-07 from requirements (formation deleted per D-19)
- No redirect, /formation returns 404 naturally
- Plan 04 now includes full legacy src/ cleanup
- Update success criteria: 7 routes, SMTP instead of EmailJS
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Contact form uses server-side nodemailer via Nuxt API route (not EmailJS)
- Formation page removed from Phase 3 scope (was SaaS pricing, not portfolio)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Formation was a SaaS pricing page unrelated to the portfolio.
Removed: page, nav link, locale keys (nav.formation, seo.formation,
pricing.*) in both FR and EN, legacy source files.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Introduced a new docker-compose.yml file to define the portfolio service.
- Configured Traefik routing with TLS settings and redirect middleware for non-www to www.
- Set up environment variables and network configuration for the service.
Decisions: 6-section landing, UModal+UCarousel gallery with thumbnails,
3-field contact form with EmailJS+Zod, SSR Docker with runtimeConfig.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
All 3 TypeScript errors resolved, build passes, server renders.
Phase 2 SSR Shell marked complete.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@nuxt/ui provides the Vite plugin but tailwindcss package itself
must be installed for @import "tailwindcss" to resolve in CSS.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Nuxt UI v3 manages Tailwind v4 internally. The old tailwind.config.js
pointed to src/ and used Tailwind v3 format, causing SSR conflicts.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
These are legacy configs from the Vue SPA. Nuxt manages Vite and
PostCSS internally — external configs cause IPC connection errors.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@nuxtjs/i18n resolves langDir relative to its own i18n/ directory,
not the project root. Moved fr.json and en.json accordingly.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Sticky header with z-[1020], desktop nav with locale-aware NuxtLinks
- FR/EN text toggle using useSetLocale, dark/light icon toggle using useColorMode
- Mobile UDrawer with stacked nav links and toggles
- WCAG: min-w-11 min-h-11 touch targets, focus-visible:ring-2, aria-current on active link
- useSeoMeta() with localized title/description/og tags on all 6 pages
- Homepage JSON-LD with Person + ProfessionalService schema
- og:image absolute URL on every page
- Stub templates with max-w-7xl wrapper and h1
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- nav, footer, a11y, seo keys from UI-SPEC copywriting contract
- All existing keys migrated from src/locales/fr.ts and en.ts
- Includes home, projects, about, contact, fiverr, faq, pricing, projectData, testimonials, common
- Emojis stripped from translation values for clean rendering
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Brand color #85cb85 as CSS @theme with full shade palette
- app.config.ts maps Nuxt UI primary to brand
- colorMode with cookie storage, dark default, no FOUC
- i18n baseUrl and site.url for absolute SEO URLs
- Static og:image placeholder in public/
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>