30 Commits

Author SHA1 Message Date
kayjaydee 33bbb7a3b9 feat(localization): implement localePath for project links across components
- Updated HytaleDemoGrid.vue, ProjectCard.vue, FeaturedProjectsSection.vue, about.vue, and project/[id].vue to utilize localePath for project links, enhancing localization support.
- This change ensures that project URLs are correctly localized, improving user experience across different languages.

This commit strengthens the site's multilingual capabilities by standardizing project link paths.
2026-04-28 19:29:40 +02:00
kayjaydee d5dbbb6dff feat(hytale): add HytaleDemoGrid component and demo data
- Introduced HytaleDemoGrid.vue to showcase live Hytale plugins with a responsive layout.
- Created hytaleDemos.ts to manage demo data, including details for VotePipe and GravityFlip plugins.
- Updated Hytale page to include the new demo grid section.
- Enhanced AppFooter and ServicesSection with i18n support for better localization.
- Added new blog post detailing the development process of the GravityFlip plugin, available in both English and French.

This commit enhances the visibility of Hytale plugins and improves the overall user experience on the site.
2026-04-25 15:39:53 +02:00
kayjaydee 133f7fdaa3 feat(rebrand): pricing market-calibrated + remove /fiverr entirely
PRICING (/hytale) calibrated from market research (RESEARCH/Hytale/):
- Plugin Express: from 400€ (1-2j, petit système scopé)
- Projet Sur-Mesure: from 1 500€ (2-6 sem, featured popular)
- Système MMO Complet: from 5 000€ (4-8 sem, stack complet)
- Retainer Mensuel: from 800€/mois (4-8h/sem)
- Site Gaming/Serveur: from 1 000€ (Nuxt SSR + vote-rewards)

Source: TJM défensif senior Java FR 7ans = €450-650/jour (Freelance.com,
Arc.dev, Portage360). Segments cibles : small network (2-5 staff) +
mid-tier RPG/MMO (5-15 staff). Hobbyistes redirigés vers plugins
productisés BBB $15-25 (phase 10 future).

REMOVED /fiverr page entirely:
- Deleted app/pages/fiverr.vue (page removed from build + SEO)
- Removed from AppHeader navLinks + AppFooter quickLinks + socialLinks
- Removed nav.fiverr + a11y.fiverr + seo.fiverr + full fiverr.* block
  from fr.json + en.json (~75 clés chacun)
- Removed fiverr + FiverrConfig + FiverrService from site.ts + shared types
- Removed /fiverr internal links priority (redirected to /hytale)
- JSON-LD index.vue sameAs cleaned (LinkedIn + Gitea only, no Fiverr)
- reviewsLink testimonials redirected to /contact
Rationale: analyse de marché explicite "Fiverr destroys senior
positioning faster than it generates revenue"

RESEARCH/Hytale/ added (3 deep reports on pricing + prospection).
2026-04-24 13:32:23 +02:00
kayjaydee 72e25d9406 feat(rebrand): align jobTitle + meta + i18n on Hytale Plugin Developer (REBRAND-01/02/03)
- app/pages/index.vue: JSON-LD utilise siteConfig.jobTitle (Hytale Plugin Developer)
  + siteConfig.contact.email au lieu de hardcode "Developpeur Full Stack"
- nuxt.config.ts: site.name "Developpeur Full Stack" → "Hytale Plugin Developer"
- app/data/site.ts: description "Professional Full Stack Developer..." →
  "Hytale Plugin Developer & Web Developer..."
- i18n/fr.json + en.json: refonte positionnement sur 14 clés
  - a11y.logoLabel, seo.home/about/contact, about.title/intro/approach/cta,
    home.cta2, contact.title/subtitle/faq.projectTypes, projects.subtitle
  - Le titre principal "Hytale Plugin Developer & [Freelance] Web Dev"
  - Les 2 occurrences "full stack" restantes sont contextuelles (skills)

Laisse les projets web/bot existants (virtual-tour, flowboard, xinko...) visibles,
mentionne Hytale plugins car Phase 10 (5 démos) est planifiée.
2026-04-22 22:55:37 +02:00
kayjaydee 2d004b15a7 feat(08-01): inject HytaleRecentArticles in /hytale + add i18n keys FR/EN
- app/pages/hytale.vue: <HytaleRecentArticles /> inserted after TestimonialsSection wrapper, before closing root div
- i18n/locales/fr.json: hytale.recentArticles {title, subtitle, viewAll} accentue style (aligned with blog.* 2026)
- i18n/locales/en.json: mirror keys
- No script changes (auto-import Nuxt)
2026-04-22 21:47:57 +02:00
kayjaydee 2582c87df4 feat(07-02): enrich blog article page with full SEO meta + Article/Breadcrumb JSON-LD
- D-15: useSeoMeta extended with ogImage (absolute via resolveOgImage),
  ogUrl (canonical), ogLocale + ogLocaleAlternate (emitted only when bilingual
  pair exists), twitterCard + twitterImage, article:published_time,
  article:modified_time (fallback to date when updated absent — D-13),
  articleAuthor
- SEO-11/SEO-15: useSchemaOrg([defineArticle, defineBreadcrumb])
  — Article author/publisher reference global Person via @id=#killian
  (from app/utils/seo-person.ts KILLIAN_PERSON_ID), image mirrors ogImage,
  mainEntityOfPage = canonical; BreadcrumbList emits Accueil → Blog → title
- Pitfall 7: altExists query via queryCollection('blog_en'|'blog_fr') with
  literal collection names (Vite extractor constraint)
- inLanguageTag computed cast to satisfy overly narrow defineArticle typings
  without changing runtime emission
- Validated SSR: curl /fr/blog/test-kotlin-syntax returns og:image absolute,
  article:published_time, Article JSON-LD (author @id=#killian), BreadcrumbList 3 items
2026-04-22 11:19:58 +02:00
kayjaydee d2ab5681da feat(07-03): enrich blog listing with D-16 useSeoMeta + CollectionPage/Breadcrumb JSON-LD
- Add SITE_URL + OG_FALLBACK constants (fallback hardcoded, resolveOgImage helper owned by 07-02)
- Extend useSeoMeta: ogImage (absolute /og-blog-default.jpg), ogUrl, ogLocale, ogLocaleAlternate, twitterCard, twitterImage
- Add useSchemaOrg([defineWebPage CollectionPage, defineBreadcrumb(Accueil -> Blog)])
- inLanguage resolved at setup (type constraint: literal union, not ComputedRef)
- Requirements: SEO-10, SEO-13, SEO-15
2026-04-22 11:17:10 +02:00
kayjaydee a6bb9463dd feat(06-04): enrich blog article page with breadcrumb, TOC, prev/next
- isFr converti en computed (fix Phase 5 non-reactive isFr)
- { watch: [locale] } sur les 2 useAsyncData (article + surround)
- queryCollectionItemSurroundings avec littéraux 'blog_fr'/'blog_en', fields explicites
- Article query WITHOUT draft filter (direct URL access, D-14)
- Surround query WITH .where('draft','=',false).order('date','DESC')
- Mapping prev=surround[1], next=surround[0] (Pitfall 4 DESC order)
- Header: UBreadcrumb + H1 + meta row (date Intl + reading time) + tags + cover NuxtImg eager
- Layout grid desktop [1fr_16rem] avec max-w-3xl colonne article
- ContentRenderer prose wrapper Phase 5 préservé
- BlogToc aside + BlogPrevNext en bas
- ogType: 'article' (préparation Phase 7)

Requirements: BLOG-03, BLOG-06
2026-04-22 10:09:23 +02:00
kayjaydee 39dfef5c5a feat(06-03): add blog listing page /blog (hero + grid + empty state)
- Query bilingue queryCollection('blog_fr') / queryCollection('blog_en') literal branches (Phase 5 gotcha)
- .where('draft', '=', false).order('date', 'DESC') with { watch: [locale] }
- Hero pattern /projects.vue: slogan // blog + H1 gradient + 3 stats (articles/tags/languages)
- Grid 1/2/3 responsive cols using BlogCard default variant
- Empty state with UIcon book-open + UButton CTA to /contact
- useSeoMeta minimal (full SEO + JSON-LD reserved for Phase 7)

Requirements: BLOG-02, BLOG-06
2026-04-22 10:05:16 +02:00
kayjaydee 7db3aae52c feat(blog): add dynamic blog post rendering with i18n support and error handling in [slug].vue 2026-04-22 00:20:52 +02:00
kayjaydee f0bf0a989c refactor(config): update nuxt.config.ts to enhance module configuration, remove deprecated files, and improve contact form validation with zod schema 2026-04-21 23:15:04 +02:00
kayjaydee 388c05a3a2 fix(05): update test.vue path to /fr/blog prefix, add compatibilityDate 2026-04-21 16:55:57 +02:00
kayjaydee c6320760fb feat(05): i18n strategy prefix — /fr/blog and /en/blog explicit routes, update collection prefixes 2026-04-21 16:49:32 +02:00
kayjaydee 2b8aa6d377 fix(05): blog EN path uses /en/blog prefix to match blog_en collection 2026-04-21 16:47:12 +02:00
kayjaydee fb9491dc62 feat(05): add blog/[...slug].vue — render @nuxt/content articles via queryCollection 2026-04-21 16:45:34 +02:00
kayjaydee 52d49dce71 fix(05-02): widen test page to max-w-6xl 2026-04-21 15:26:05 +02:00
kayjaydee ca3f257bb7 fix(05-02): widen test page to max-w-3xl 2026-04-21 15:25:41 +02:00
kayjaydee 49f7e70c9d fix(05-02): rebuild Alert sans UAlert, ProseImg img natif, test.vue layout propre 2026-04-21 15:24:22 +02:00
kayjaydee 8f4c6d01fd feat(05-02): add test articles FR/EN and temporary test page
- content/fr/blog/test-kotlin-syntax.md: FR test article covering all 4 validation criteria
- content/en/blog/test-kotlin-syntax.md: EN version with same slug
- app/pages/test.vue: temporary page at /test for visual checkpoint verification
- Both articles contain: kotlin code block, NuxtImg image, markdown table, 4 callout types
2026-04-21 14:36:49 +02:00
kayjaydee 85fe859612 feat(hytale): implement Hytale plugin development page and related components
- Added a new `/hytale` page with sections for hero, services, and pricing.
- Updated existing components to support Hytale-specific content and i18n.
- Modified site configuration and state to reflect the new focus on Hytale plugin development.
- Enhanced testimonials section to feature relevant client feedback.
- Adjusted navigation to include a link to the new Hytale page.
2026-04-11 04:19:27 +02:00
kayjaydee 6b828aff67 fix: update portfolio branding to "Killian' DAL-CIN" across all documentation and components
- 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.
2026-04-08 19:54:46 +02:00
kayjaydee 355df8dbbe feat: redesign entire portfolio with bold modern dark theme
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.
2026-04-08 19:08:55 +02:00
kayjaydee 8443f590b7 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 72fc84e2ef 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 bc7cdacf80 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 bd78920ddf 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 59495cabf3 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 9e0149d49d 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.
2026-04-08 17:24:54 +02:00
kayjaydee 7f767154b3 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
2026-04-08 16:25:13 +02:00
kayjaydee 01b0c13250 feat(01-01): initialize Nuxt 4 project with all modules
- nuxt.config.ts with compatibilityVersion 4, SSR, 6 modules
- app/app.vue and app/pages/index.vue minimal setup
- pnpm as package manager with all dependencies installed
- TypeScript strict mode enabled
- .gitignore updated for Nuxt (.nuxt, .output, .env)
- tsconfig.json extends .nuxt/tsconfig.json
2026-04-08 14:51:52 +02:00