Commit Graph

226 Commits

Author SHA1 Message Date
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 0994260641 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é.
2026-04-22 23:19:51 +02:00
kayjaydee 1810e3ed3d 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).
2026-04-22 23:16:01 +02:00
kayjaydee 7ce378a419 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.
2026-04-22 22:57:15 +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 4e7c84912a 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.
2026-04-22 22:49:59 +02:00
kayjaydee 29f4a47ace 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).
2026-04-22 22:40:49 +02:00
kayjaydee 237e7c06af fix(nuxt.config): add hook to prevent Docker build hangs due to esbuild zombie process 2026-04-22 22:36:50 +02:00
kayjaydee b424a2deed 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
2026-04-22 22:24:00 +02:00
kayjaydee e44175b9e4 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 37b87b4b54 docs(08): capture API correction — Kotlin→Java rewrite based on hytalemodding.dev 2026-04-22 22:03:44 +02:00
kayjaydee a4fd4e78d2 refactor(08-03): rewrite EN article with real Hytale Java API 2026-04-22 22:02:59 +02:00
kayjaydee eb3553753a refactor(08-03): rewrite FR article with real Hytale Java API 2026-04-22 22:01:56 +02:00
kayjaydee fc7392ee1a refactor(08-02): rewrite EN article with real Hytale Java API 2026-04-22 22:00:42 +02:00
kayjaydee 1d30828a6f refactor(08-02): rewrite FR article with real Hytale Java API 2026-04-22 22:00:37 +02:00
kayjaydee b8ddd8e14e 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 6eb81b1f5b 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
2026-04-22 21:53:25 +02:00
kayjaydee 078e1a8a5f docs(08-02): capture summary — first Hytale plugin tutorial (FR+EN seed article) 2026-04-22 21:52:53 +02:00
kayjaydee 5c10c275b1 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)
2026-04-22 21:52:21 +02:00
kayjaydee bb0ddcfa38 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)
2026-04-22 21:52:16 +02:00
kayjaydee 0ba23acd1b 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 7acea07812 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 c0308edc2d docs(08-01): scaffold HytaleRecentArticles SUMMARY — component bilingue + i18n FR/EN + injection /hytale 2026-04-22 21:48:48 +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 5eb494278d 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 9cc1dbec5d 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
2026-04-22 18:38:13 +02:00
kayjaydee 9d6ed1780b 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 32609a9843 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 110c2dff86 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 6956155ce9 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 ae274e77ca 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 306e7bb12f 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 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 d37f870f49 docs(07-03): blog listing SEO enrichment SUMMARY — D-16 + CollectionPage/Breadcrumb JSON-LD 2026-04-22 11:17:55 +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 b69252c556 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 44fcca6345 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 1a2cfc360b 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 2ec6a213f0 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 543bcb00fb 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 43d52a42e9 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 0577cc4041 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 a9c9aef9b8 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 275d8f268c 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 71ab4f29d0 docs(06-04): article chrome SUMMARY — BlogToc + BlogPrevNext + enriched [slug].vue 2026-04-22 10:10:41 +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 42369a1cb4 feat(06-04): add BlogPrevNext component (grid 2 cols, BlogCard compact variant) 2026-04-22 10:06:52 +02:00
kayjaydee be532c545d feat(06-04): add BlogToc component (sticky desktop + drawer mobile + IntersectionObserver highlight) 2026-04-22 10:06:38 +02:00
kayjaydee a6582885a2 docs(06-03): blog listing page SUMMARY 2026-04-22 10:05:57 +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