kayjaydee
bc0b0ea01d
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
1282d0e350
feat(pricing): recalibrate to real Hytale market (149€/349€/790€)
...
Pricing refonte après rapport 3 (RESEARCH/Hytale/3 Pricing Calibration).
**Décision clé du rapport** : aucun serveur Hytale n'a payé €500+ pour
un plugin single en 2026 (public data). Top server Runeteria = 29 CCU
peak, €200-800/mois gross revenue ceiling. 70-80% du top 30 serveurs
= volunteer/owner-coded, zéro budget externe.
**Nouvelle grille adaptée à la réalité du marché Hytale** :
- Plugin Essentiel 149€ (1 feature, ≤8h, livraison 3-5j)
- Système Sur-Mesure 349€ (GUI in-game, ≤20h, 1-2 sem) [featured]
- Module Flagship 790€ (quote-based, top-30 tier only)
- Retainer Mensuel 450€/mois (~12h/mo)
- Site Gaming 500€
**Ajout** : pricingNote avec mention 45€/h (spot fixes) et flagship CTA.
Ancienne grille (400€/1500€/5000€) filtrait 95% du marché — non viable.
Nouvelle grille capture ~85% de la demande Hytale observée tout en
laissant room upsell pour les 5-8 flagship servers réels.
RESEARCH/Hytale/3 ajouté (rapport complet avec top 30 audit, BBB
scatter analysis, WTP evidence par segment, 3 scénarios projetés).
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-04-24 13:51:41 +02:00
kayjaydee
343df2dea2
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).
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-04-24 13:32:23 +02:00
kayjaydee
4d5ed19b9c
docs: audit plugins vs dominants gratuits (baseline top 10 CurseForge)
...
PLUGINS.md:
- FireballStaff → ChainLightning Sceptre (évite conflit Wan's Wonder
Weapons 342K free). Chaînage BFS 5 targets max radius 8, damage
dégressif 8/6/4/3/2, particles ELECTRIC_SPARK+END_ROD. Toujours 1j.
- Note "Audit concurrence" ajoutée listant les 6 dominants évités
IDEAS-BACKLOG.md:
- #12 TreasureHunt Map → EchoLocation Sonar (conflit BetterMap 502K).
Crystal sonar burst qui reveal + aggro mobs radius 15. Unique.
- #30 StatBoost Food → Storm Seal Talisman (conflit Wan's + RPG
Leveling). Weather interaction rare : charge pendant orages, décharge
AoE foudre au clic.
- Section Notes mise à jour avec audit complet des dominants
Principe conservé : wow + dev rapide 1-2j, mais différenciation
sémantique vs Wan's Wonder Weapons / BetterMap / Spellbook / RPG
Leveling. Catégories sous-servies (magie, quêtes, anti-triche) toujours
prioritaires selon analyse marché.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-04-22 23:19:51 +02:00
kayjaydee
1a31056633
docs: rebalance plugins + backlog after Hytale market analysis (avril 2026)
...
PLUGINS.md (Phase 10 actifs):
- GravityFlip conservé (teaser gif-ready, 1j)
- FireballStaff (magie, catégorie 1-seul-payant, 1j)
- ShadowClone Decoy (combat unique, gameplay-saving, 1j)
- GrapplingHook (mouvement classique wow, 1.5j)
- EarthquakeSlam (combat AoE visuel max, 1j)
Total: ~6.5j (vs 10j avant). Tous "wow + dev rapide" mais rééquilibrés
vers catégories moins saturées quand possible.
IDEAS-BACKLOG.md (pipeline long terme):
- 30 concepts réécrits, priorité aux catégories vides:
* Magie (8 ideas) - catégorie 1-seul-payant
* Quêtes & NPCs (4) - quasi vide
* Anti-triche light (3) - seulement 2 gratuits
* Discord intégrations (3) - seulement 6 payants
* Mini-bibliothèques (3) - catégorie 6 payants
* Combat counter-play (5) - différenciant dans 120 RPG
* MMO mechanics (4) - serveurs flagship demande
- Bundles pipeline suggérés (Spell Pack, MMO Essentials, Admin Suite, Combat)
- Frameworks long terme (myth_lib, Quest Framework, MythGuard, MythArena)
renvoyés en Phase 12+ (planning séparé)
Source: rapport analyse marché Hytale interne (BuiltByBit 235 créateurs,
295 plugins payants, 1221 serveurs, catégories sous-servies identifiées).
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-04-22 23:16:01 +02:00
kayjaydee
fc524486d5
docs(11): mark Phase 11 shipped — rebranding + cocon complete
...
- REBRAND-01/02/03 commited in f72170b (JSON-LD + 14 i18n keys FR/EN)
- COCON-01 already shipped with M1.1 carry-over (HytaleRecentArticles
live sur /hytale.vue:38, bilingue FR/EN avec filter tag hytale)
M1.2 progress: 4/6 plans (67%). Seule Phase 10 (5 demo plugins Hytale)
reste — user code les plugins en side, Plan 10-03 (HytaleDemoGrid) à
attaquer quand ≥1 plugin shippé sur GitHub.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-04-22 22:57:15 +02:00
kayjaydee
f72170b4f3
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.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-04-22 22:55:37 +02:00
kayjaydee
30b9efc5d2
docs(10): plan Phase 10 — 5 demo plugins Hytale
...
- 10-CONTEXT: specs des 5 plugins (GravityFlip, MagneticHand, TimeRewind,
BlackHoleGrenade, Paintball) avec core mechanics, wow factor, complexité
- 10-01-PLAN: brainstorm done (concepts locked)
- 10-02-PLAN: 5 waves de code (1 plugin par wave, complexité ascendante)
Java + Gradle Kotlin DSL + JDK 17 + MIT license, repos kayjaydee/hytale-*
- 10-03-PLAN: composant HytaleDemoGrid.vue + intégration /hytale +
i18n hytale.demos.* + data source app/data/hytaleDemos.ts
- IDEAS-BACKLOG.md (root): 30 concepts supplémentaires pour v1.3+
classés par mouvement/combat/monde/social/économie
Effort estimé Phase 10: ~10 jours code + 1-2 jours frontend intégration.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-04-22 22:49:59 +02:00
kayjaydee
042a05c3a8
docs(09): mark Phase 9 shipped — M1.1 live sur killiandalcin.fr
...
DEPLOY-02 + DEPLOY-03 validés. Build hang résolu via hook close dans
nuxt.config.ts (nuxt/nuxt#33987 ). Next: Phase 10 (démos plugins).
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-04-22 22:40:49 +02:00
kayjaydee
93f781f789
fix(nuxt.config): add hook to prevent Docker build hangs due to esbuild zombie process
2026-04-22 22:36:50 +02:00
kayjaydee
23cd320871
docs(m1.2): bootstrap milestone — ship to prod + credibility gap
...
- PROJECT.md: v1.2 active, why-now, scope resserré (deploy + demos + rebrand)
- REQUIREMENTS.md: v1.2 section (DEPLOY-02/03, DEMO-01/02/03, REBRAND-01/02/03, COCON-01)
- ROADMAP.md: phases 9 (Deploy), 10 (Demo Plugins), 11 (Rebranding + Cocon) — 6 plans
- STATE.md: reset progress 0/6, focus Phase 9, context gotchas M1.1 conservé
- MILESTONES.md: M1.1 partielle (Phase 8 carried), M1.2 active
Prochaine étape: /gsd-plan-phase 9
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-04-22 22:24:00 +02:00
kayjaydee
c32e44d0e8
chore: archive v1.1 milestone — SEO Hytale Autorité & Contenu shipped
...
M1.1 complete (phases 5-8, 13 plans):
- @nuxt/content v3 + Shiki syntax highlighting
- Blog listing + article pages SSR bilingue (TOC + prev/next)
- JSON-LD Article/Breadcrumb/CollectionPage + sitemap hreflang x-default
- 2 articles seed Hytale FR+EN (API Java réelle)
- Cocon sémantique /blog ↔ /hytale
2026-04-22 22:08:00 +02:00
kayjaydee
7768f6fd9d
docs(08): capture API correction — Kotlin→Java rewrite based on hytalemodding.dev
2026-04-22 22:03:44 +02:00
kayjaydee
bc1c4517f2
refactor(08-03): rewrite EN article with real Hytale Java API
2026-04-22 22:02:59 +02:00
kayjaydee
a61596a6fb
refactor(08-03): rewrite FR article with real Hytale Java API
2026-04-22 22:01:56 +02:00
kayjaydee
be613f8eeb
refactor(08-02): rewrite EN article with real Hytale Java API
2026-04-22 22:00:42 +02:00
kayjaydee
301ab48216
refactor(08-02): rewrite FR article with real Hytale Java API
2026-04-22 22:00:37 +02:00
kayjaydee
c5bcafce2f
docs(08): mark Phase 8 complete — M1.1 milestone shipped .planning/ROADMAP.md .planning/phases/08-content-cocon-semantique/08-VERIFICATION.md
2026-04-22 21:55:24 +02:00
kayjaydee
43a129fbfc
docs(08-03): article seed 2 positionnement Hytale 2026 SUMMARY
...
- 2 articles markdown FR+EN (même slug) 1148/1009 mots, draft: false
- Tags ['hytale', 'industry', 'analysis'], date 2026-04-21 (ordering test)
- Coroutines Kotlin lifecycle-aware (SupervisorJob + cancel onDisable)
- Cocon sémantique bidirectionnel fermé avec l'article 08-02
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-04-22 21:53:25 +02:00
kayjaydee
ba73a4d246
docs(08-02): capture summary — first Hytale plugin tutorial (FR+EN seed article)
2026-04-22 21:52:53 +02:00
kayjaydee
70407035e8
feat(08-03): add EN blog article 'Hytale plugin development in 2026'
...
- Positioning/authority article 1009 words, draft: false, same slug as FR
- Tags ['hytale', 'industry', 'analysis'], date 2026-04-21
- 6 sections mirroring FR structure (idiomatic EN, not literal translation)
- Same Kotlin coroutines code block (code not translated)
- 2 inline links to /en/hytale (intro + outlook section)
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-04-22 21:52:21 +02:00
kayjaydee
9dde719469
feat(08-03): add FR blog article 'Développement de plugins Hytale en 2026'
...
- Article positionnement/autorité 1148 mots, draft: false
- Tags ['hytale', 'industry', 'analysis'], date 2026-04-21
- 6 sections (intro, stack, patterns, écosystème, outlook, conclusion)
- 1 bloc Kotlin coroutines moderne (SupervisorJob + Dispatchers.IO + cancel lifecycle)
- 2 liens inline vers /hytale (intro + section outlook)
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-04-22 21:52:16 +02:00
kayjaydee
2d6b23acb5
feat(08-02): add EN article how-to-build-your-first-hytale-plugin
...
- Equivalent EN version (970 mots), same slug
- 3 Kotlin code blocks (build.gradle.kts, event listener, command)
- 2 inline links to /en/hytale (intro + build section)
- Frontmatter Zod-valid : draft false, tags [hytale, tutorial, kotlin], date 2026-04-22
2026-04-22 21:52:00 +02:00
kayjaydee
9f77ea9d87
feat(08-02): add FR article how-to-build-your-first-hytale-plugin
...
- Tutorial debutant plugin Hytale en Kotlin (1049 mots)
- 3 blocs code Kotlin realistes (build.gradle.kts, event listener, command)
- 2 liens inline vers /hytale (intro + build section)
- Frontmatter Zod-valide : draft false, tags [hytale, tutorial, kotlin], date 2026-04-22
2026-04-22 21:50:57 +02:00
kayjaydee
431cf7d572
docs(08-01): scaffold HytaleRecentArticles SUMMARY — component bilingue + i18n FR/EN + injection /hytale
2026-04-22 21:48:48 +02:00
kayjaydee
bf2ec8671c
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
ddfc685421
feat(08-01): add HytaleRecentArticles component (queryCollection bilingual + JS tag filter)
...
- Bilingual literal branches queryCollection('blog_fr'|'blog_en') (Phase 5 Pitfall D-03)
- JS post-filter tags.includes('hytale') + slice(0,2) (D-11 — SQLite LIKE unreliable on JSON array)
- v-if=articles.length hides section when no hytale-tagged articles (D-12)
- BlogCard variant=compact in grid 2 col desktop / 1 col mobile
- NuxtLink localePath('/blog') viewAll CTA
- useAsyncData key hytale-recent-${locale.value} + watch:[locale]
2026-04-22 21:47:23 +02:00
kayjaydee
abb7964214
docs(08): create phase plan — content & cocon sémantique (3 plans, 2 waves)
...
- 08-01 (W1): HytaleRecentArticles.vue scaffold + injection hytale.vue + i18n
- 08-02 (W2): article tutorial how-to-build-your-first-hytale-plugin FR+EN
- 08-03 (W2): article positionnement hytale-plugin-development-2026 FR+EN
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-04-22 18:38:13 +02:00
kayjaydee
0d92729654
docs(08): map analogs for seed articles + HytaleRecentArticles component .planning/phases/08-content-cocon-semantique/08-PATTERNS.md
2026-04-22 18:32:43 +02:00
kayjaydee
985dcdbd80
docs(08): capture phase context — 2 articles seed Hytale + HytaleRecentArticles section (cocon sémantique blog↔hytale) .planning/phases/08-content-cocon-semantique/08-CONTEXT.md
2026-04-22 12:19:00 +02:00
kayjaydee
0b1152c8a1
docs(07): mark Phase 7 complete in ROADMAP (4/4 plans) .planning/ROADMAP.md .planning/phases/07-seo-blog/07-VERIFICATION.md
2026-04-22 11:25:57 +02:00
kayjaydee
4bc0886a42
docs(07-04): complete sitemap dynamic feed plan
...
- Add 07-04-SUMMARY.md (endpoint Nitro bilingue + hreflang x-default + draft filter)
- Update STATE.md (14/15 plans, 93%)
- Check SEO-12 in REQUIREMENTS.md and ROADMAP.md
- Document gotcha queryCollection import from '@nuxt/content/server' (vue-tsc auto-import not resolved in server/)
2026-04-22 11:22:57 +02:00
kayjaydee
97ea1a8df2
docs(07-02): complete blog article SEO plan summary + state update
...
Plan 07-02 shipped: useSeoMeta D-15 + useSchemaOrg Article/Breadcrumb on /blog/[slug],
resolveOgImage helper + og-blog-default.jpg fallback. Curl SSR validated,
typecheck green. Requirements satisfied: SEO-10, SEO-11, SEO-13, SEO-15.
2026-04-22 11:21:46 +02:00
kayjaydee
466bed0944
feat(07-04): add dynamic sitemap URL feed for bilingual blog articles
...
- Nitro route server/api/__sitemap__/urls.ts via defineSitemapEventHandler
- Queries blog_fr + blog_en with literal strings and event first-arg (Pitfalls 1 & 2)
- Filters draft=false (D-10, T-07-06 mitigation)
- lastmod = updated ?? date (D-09)
- Emits hreflang alternates fr/en/x-default for bilingual pairs, none for single-language (D-11)
- Feeds @nuxtjs/sitemap via sitemap.sources declared in 07-01
2026-04-22 11:20:09 +02:00
kayjaydee
e17faae5d7
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
15e1a37e59
docs(07-03): blog listing SEO enrichment SUMMARY — D-16 + CollectionPage/Breadcrumb JSON-LD
2026-04-22 11:17:55 +02:00
kayjaydee
47c2839ae8
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
fae410243b
feat(07-02): add resolveOgImage helper + og-blog-default.jpg fallback asset
...
- app/utils/resolve-og-image.ts: absolutises frontmatter image or falls back to /og-blog-default.jpg
- public/og-blog-default.jpg: placeholder (copied from og-image.png) — branded 1200x630 design follow-up pending
2026-04-22 11:16:37 +02:00
kayjaydee
9b1717cbd8
docs(07-01): capture plan summary
...
Foundation SEO Blog shipped — nuxt-schema-org installed, blog schema extended
with updated field, global Person/WebSite schema.org emitted SSR, sitemap.sources
wired to future Nitro endpoint (07-04).
2026-04-22 11:14:46 +02:00
kayjaydee
654842ba44
feat(07-01): wire global schema.org Person + WebSite and sitemap sources
...
- nuxt.config.ts: register 'nuxt-schema-org' module + sitemap.sources=['/api/__sitemap__/urls']
- app/utils/seo-person.ts: KILLIAN_PERSON_ID + killianPerson (derived from siteConfig, email excluded)
- app/app.vue: useSchemaOrg([definePerson(killianPerson), defineWebSite({name, inLanguage})]) appended (D-12)
- Verified SSR: /fr emits JSON-LD Person @id=#killian + WebSite (curl, pas d'hydratation)
2026-04-22 11:13:51 +02:00
kayjaydee
17420afefe
chore(07-01): install nuxt-schema-org + add updated field to blog schema
...
- pnpm add -D nuxt-schema-org@^6.0.4 (D-01, D-04)
- content.config.ts blogSchema: updated: z.string().optional() (D-13, D-14)
- Caches content/.nuxt vidés (Pitfall 8)
2026-04-22 11:10:39 +02:00
kayjaydee
487e323a94
docs(roadmap): mark Phase 6 plans 03-04 complete (summaries present since 2026-04-22) .planning/ROADMAP.md
2026-04-22 11:09:26 +02:00
kayjaydee
7edc0b8123
docs(07): plan SEO blog — 4 plans (schema-org, useSeoMeta enrich, sitemap Nitro) .planning/phases/07-seo-blog/07-01-PLAN.md .planning/phases/07-seo-blog/07-02-PLAN.md .planning/phases/07-seo-blog/07-03-PLAN.md .planning/phases/07-seo-blog/07-04-PLAN.md .planning/ROADMAP.md
2026-04-22 10:40:12 +02:00
kayjaydee
d7a13f0d4a
docs(07): map analogs for new SEO files (schema-org + sitemap Nitro) .planning/phases/07-seo-blog/07-PATTERNS.md
2026-04-22 10:34:19 +02:00
kayjaydee
5bd5624121
docs(07): capture phase research — nuxt-schema-org + sitemap Nitro endpoint .planning/phases/07-seo-blog/07-RESEARCH.md
2026-04-22 10:32:18 +02:00
kayjaydee
680bbfbbe6
docs(07): capture phase context — SEO blog (JSON-LD via nuxt-schema-org, og:image hybride, sitemap Nitro endpoint, hreflang alternates)
2026-04-22 10:25:39 +02:00
kayjaydee
41ac2fdc08
docs(06-04): article chrome SUMMARY — BlogToc + BlogPrevNext + enriched [slug].vue
2026-04-22 10:10:41 +02:00
kayjaydee
f18b0bff2c
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
0ff36784e9
feat(06-04): add BlogPrevNext component (grid 2 cols, BlogCard compact variant)
2026-04-22 10:06:52 +02:00
kayjaydee
b72b564b69
feat(06-04): add BlogToc component (sticky desktop + drawer mobile + IntersectionObserver highlight)
2026-04-22 10:06:38 +02:00