Commit Graph

137 Commits

Author SHA1 Message Date
kayjaydee 55f9c8eaf6 feat(03-03): create error.vue (404 page) with i18n keys
- error.vue in app/ with statusCode display, i18n message, clearError redirect
- Added error.notFound, error.generic, error.backHome keys to fr.json and en.json
2026-04-08 18:38:35 +02:00
kayjaydee 91ac322c57 feat(03-03): build Fiverr page with hero, service cards, FAQ accordion, and CTA
- 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
2026-04-08 18:38:01 +02:00
kayjaydee af12fa5e4f feat(03-02): project detail page with dynamic route and gallery
- 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)
2026-04-08 18:37:58 +02:00
kayjaydee ffa6ba8bfe feat(03-03): build About page with tech stack badges and Contact page with form
- About: hero bio, 5 tech categories with TechBadge (UCard grid), approach cards, CTA
- Contact: hero stats, ContactForm component, contact info from siteConfig, social links, FAQ cards
2026-04-08 18:37:34 +02:00
kayjaydee 8e9c6c7848 feat(03-02): projects page with search and category filters
- Text search filtering by title, description, technologies
- Category filter buttons (UButton solid/soft variants)
- ProjectCard grid responsive 1/2/3 columns
- Empty state with reset button
- Stats: total projects, featured, categories
2026-04-08 18:37:17 +02:00
kayjaydee a4b53caaa2 feat(03-02): landing page with 6 sections
- HeroSection, FeaturedProjectsSection, ServicesSection
- TestimonialsSection, FAQSection with homeFAQs, CTASection
- Preserved useSeoMeta and JSON-LD from Phase 2 stub
2026-04-08 18:36:49 +02:00
kayjaydee eff8ca4210 docs(03-01): complete shared components plan
- 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
2026-04-08 18:35:37 +02:00
kayjaydee 84e4202536 feat(03-01): create ContactForm with Zod validation and nodemailer SMTP server route
- ContactForm.vue: UForm + Zod schema (name/email/message) + useToast feedback
- server/api/contact.post.ts: nodemailer SMTP with server-side validation + HTML escaping
- SMTP credentials in private runtimeConfig (T-03-03)
- HTML escaping prevents XSS in email body (T-03-02)
2026-04-08 18:34:38 +02:00
kayjaydee 7f715e4b01 feat(03-01): create 9 shared components for landing sections and project display
- HeroSection: title + subtitle + 3 CTA UButtons
- FeaturedProjectsSection: 3 featured projects via useProjects()
- ServicesSection: 4 service cards with UCard + UIcon
- TestimonialsSection: UCard per testimonial with ratings and stats
- FAQSection: UAccordion with i18n-resolved items
- CTASection: final CTA with 2 UButtons
- ProjectCard: NuxtLink + NuxtImg + UBadge + schema.org microdata
- TechBadge: Technology lookup with NuxtImg + UBadge level
- ProjectGallery: UModal fullscreen + UCarousel + thumbnails + keyboard nav
2026-04-08 18:34:03 +02:00
kayjaydee 21450afb20 feat(03-01): install deps, migrate site config, add SMTP runtimeConfig, wrap UApp
- Install nodemailer, zod, @types/nodemailer
- Create app/data/site.ts with migrated siteConfig from src/config/site.ts
- Add SiteConfig, ContactInfo, SocialLink, FiverrService, FiverrConfig to shared/types
- Add smtpHost/smtpUser/smtpPass/smtpTo to private runtimeConfig
- Wrap app.vue with UApp for useToast() support
2026-04-08 18:32:24 +02:00
kayjaydee b10ff2bc0b docs(03): fix plan blockers — remove formation completely, cleanup legacy
- 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>
2026-04-08 18:29:39 +02:00
kayjaydee 3e38ea02b1 docs(03): create phase 3 plans — pages, components, Docker SSR
4 plans across 3 waves: shared components + deps (wave 1),
pages landing/projects/detail + about/contact/fiverr/404 (wave 2),
Dockerfile SSR + GA4 + docker-compose (wave 3).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-08 18:25:28 +02:00
kayjaydee 039cabd8f4 docs(03): research phase Pages & Ship domain
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-08 18:19:06 +02:00
kayjaydee 36768e2441 docs(03): update context — SMTP direct OVH, remove formation from scope
- 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>
2026-04-08 17:26:02 +02:00
kayjaydee ab9831cce9 feat: remove formation/pricing page and all related content
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>
2026-04-08 17:24:54 +02:00
kayjaydee 0f8627b397 feat(docker): add docker-compose configuration for portfolio service
- 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.
2026-04-08 16:48:47 +02:00
kayjaydee a93a362d21 docs(03): create phase 3 context from discussion
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>
2026-04-08 16:48:21 +02:00
kayjaydee eb3e979d59 docs(state): mark phase 2 verification pass and complete
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>
2026-04-08 16:41:19 +02:00
kayjaydee 3687f6dcf5 fix: add tailwindcss as devDependency for Nuxt UI v3
@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>
2026-04-08 16:39:39 +02:00
kayjaydee 0565fe4b6a fix: remove legacy tailwind.config.js conflicting with Nuxt UI v3
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>
2026-04-08 16:38:07 +02:00
kayjaydee 6ae48691bd fix: remove vite.config.ts and postcss.config.js conflicting with Nuxt
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>
2026-04-08 16:34:12 +02:00
kayjaydee 00b4f3c79c fix(i18n): move locale files to i18n/locales/ for @nuxtjs/i18n resolution
@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>
2026-04-08 16:33:07 +02:00
kayjaydee 09cfc0aaf3 fix(02): resolve 3 typecheck errors and i18n langDir path
- useSetLocale → destructured setLocale from useI18n()
- addSeoAttributes → seo option for useLocaleHead()
- process.env → import.meta.env for Nuxt compatibility
- langDir: 'locales/' → 'app/locales/' (Nuxt 4 resolves from project root)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-08 16:31:58 +02:00
kayjaydee 5597c6a8dd docs(02-02): complete layout shell plan (header + footer + default layout) 2026-04-08 16:27:02 +02:00
kayjaydee cfe0180c1f feat(02-02): create AppFooter, default layout, update app.vue with useLocaleHead
- AppFooter with copyright + Gitea/LinkedIn/Fiverr social icons (rel=noopener noreferrer)
- Default layout wraps header + slot + footer with min-h-screen flex
- app.vue uses NuxtLayout + useLocaleHead for global hreflang/canonical
- Fixed a11y.github -> a11y.gitea in both locale files
2026-04-08 16:26:14 +02:00
kayjaydee 93e5d4bc29 docs(02-03): complete per-route SEO metadata plan
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-08 16:26:04 +02:00
kayjaydee 23fa399d6b feat(02-02): create AppHeader with nav, lang/theme toggles, mobile drawer
- 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
2026-04-08 16:25:16 +02:00
kayjaydee 0a58201f74 feat(02-03): add per-route SEO metadata and JSON-LD to all page stubs
- 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>
2026-04-08 16:25:13 +02:00
kayjaydee 67c511f247 docs(02-01): complete design system + i18n config plan
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-08 16:23:48 +02:00
kayjaydee 898ef5c3cd feat(02-01): migrate i18n translations for Phase 2 scope
- 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>
2026-04-08 16:23:03 +02:00
kayjaydee d27b9a3d3c feat(02-01): design system, color-mode, sitemap config
- 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>
2026-04-08 16:17:04 +02:00
kayjaydee 33c382f0b7 docs(state): phase 2 planned 2026-04-08 16:13:48 +02:00
kayjaydee 66392740be docs(02): update CONTEXT.md D-05 Gitea + D-12 static og:image 2026-04-08 16:12:23 +02:00
kayjaydee 05e54db4ff docs(02): create phase 2 SSR shell plans 2026-04-08 16:10:05 +02:00
kayjaydee 8cb65c92cd docs(02): research phase SSR shell domain 2026-04-08 15:57:15 +02:00
kayjaydee 08caf52183 docs(state): record phase 2 UI-SPEC session 2026-04-08 15:38:39 +02:00
kayjaydee e9ecfacc92 docs(phase-02): UI design contract for SSR Shell 2026-04-08 15:37:38 +02:00
kayjaydee 0875ec2136 docs(state): record phase 2 context session 2026-04-08 15:32:51 +02:00
kayjaydee 8015a0ea38 docs(02): capture phase context 2026-04-08 15:32:30 +02:00
kayjaydee f1ed93e5d4 docs(phase-01): evolve PROJECT.md after phase completion 2026-04-08 15:19:34 +02:00
kayjaydee 26c2279bdf docs(phase-01): complete phase execution 2026-04-08 15:18:49 +02:00
kayjaydee f64a6754c1 docs(01): add code review fix report 2026-04-08 15:18:04 +02:00
kayjaydee 43356352b3 fix(01): WR-04 add dynamic lang attr on html element via useHead 2026-04-08 15:17:36 +02:00
kayjaydee 89ce718c6c fix(01): WR-03 move Bootstrap and Tailwind CSS from database to front category 2026-04-08 15:17:25 +02:00
kayjaydee 7d81d47b3c fix(01): WR-02 use te() to detect missing i18n keys in useProjects 2026-04-08 15:17:12 +02:00
kayjaydee c6744ab107 fix(01): WR-01 complete i18n config with strategy, langDir and locale files 2026-04-08 15:17:00 +02:00
kayjaydee 184e1257fe fix(01): CR-01 move gtag ID to runtime config env var 2026-04-08 15:16:50 +02:00
kayjaydee 650b860cbb test(01): persist verification and human UAT items 2026-04-08 15:15:24 +02:00
kayjaydee 441ee5245e docs(01): add code review report 2026-04-08 15:13:01 +02:00
kayjaydee 978a564621 fix: restore CLAUDE.md deleted by worktree agent 2026-04-08 15:00:48 +02:00