14 KiB
phase, plan, type, wave, depends_on, files_modified, autonomous, requirements, must_haves
| phase | plan | type | wave | depends_on | files_modified | autonomous | requirements | must_haves | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 02-content | 01 | execute | 1 |
|
true |
|
|
Purpose: Every subsequent plan (hero refonte, hytale page) depends on these types, data, and i18n keys existing first. By completing data layer in wave 1, plans 02 and 03 can execute in parallel in wave 2.
Output: Updated types, site config, pricing data, testimonials fixes, complete FR+EN i18n keys.
<execution_context> @$HOME/.claude/get-shit-done/workflows/execute-plan.md @$HOME/.claude/get-shit-done/templates/summary.md </execution_context>
@.planning/PROJECT.md @.planning/ROADMAP.md @.planning/STATE.md @.planning/phases/02-content/02-CONTEXT.md @.planning/phases/02-content/02-RESEARCH.md @.planning/phases/02-content/02-UI-SPEC.md@shared/types/index.ts @app/data/site.ts @app/data/testimonials.ts @i18n/locales/fr.json @i18n/locales/en.json
Task 1: Add types, update site.ts, create pricing.ts, fix testimonials.ts shared/types/index.ts, app/data/site.ts, app/data/pricing.ts, app/data/testimonials.ts shared/types/index.ts, app/data/site.ts, app/data/testimonials.ts 1. **shared/types/index.ts** — Add `PricingTier` interface and `jobTitle` to `SiteConfig`: ```typescript export interface PricingTier { id: string priceFixed: string | null priceLabel?: string featured?: boolean } ``` Add `jobTitle?: string` field to `SiteConfig` interface (after `description`).-
app/data/site.ts — Per D-20, D-21, D-16:
- Change
titleto:"Killian' DAL-CIN - Hytale Plugin Developer | Freelance" - Add
jobTitle: 'Hytale Plugin Developer'afterdescription - Change
seo.organization.nameto:"Killian' DAL-CIN - Hytale Plugin Developer" - Change
seo.organization.aggregateRating.reviewCountfrom'10'to'5'
- Change
-
app/data/pricing.ts — Create new file per D-09, D-10. Export
hytalePricing: PricingTier[]with 5 tiers:import type { PricingTier } from '~~/shared/types' export const hytalePricing: PricingTier[] = [ { id: 'simple', priceFixed: '50€', featured: false }, { id: 'complex', priceFixed: null, priceLabel: 'Sur devis', featured: true }, { id: 'custom', priceFixed: null, priceLabel: 'Sur devis', featured: false }, { id: 'maintenance', priceFixed: '30€/mois', featured: false }, { id: 'web', priceFixed: null, priceLabel: 'Sur devis', featured: false }, ]Note: Use "A partir de 50€" / "A partir de 30€/mois" as priceFixed values matching UI-SPEC copywriting contract. Actually, price display text goes through i18n — priceFixed stores the raw value. The i18n keys will hold display strings like "A partir de 50€".
-
app/data/testimonials.ts — Per D-16:
- Change
totalReviews: 10tototalReviews: 5 - Add
featured: truetocolo263andcobra2testimonials (per D-15, need 3 featured for homepage) grep -q "PricingTier" shared/types/index.ts && grep -q "jobTitle" shared/types/index.ts && grep -q "Hytale Plugin Developer" app/data/site.ts && grep -q "reviewCount: '5'" app/data/site.ts && grep -q "totalReviews: 5" app/data/testimonials.ts && grep -q "hytalePricing" app/data/pricing.ts && echo "PASS" || echo "FAIL" <acceptance_criteria> grep "PricingTier" shared/types/index.tsreturns the interface definitiongrep "jobTitle" shared/types/index.tsshows field in SiteConfiggrep "jobTitle: 'Hytale Plugin Developer'" app/data/site.tsmatchesgrep "reviewCount: '5'" app/data/site.tsmatchesgrep "totalReviews: 5" app/data/testimonials.tsmatchesgrep "hytalePricing" app/data/pricing.tsreturns the exported array- 3 testimonials have
featured: true</acceptance_criteria> Types extended, site.ts repositioned to Hytale, pricing data created with 5 tiers, testimonials stats corrected to 5 with 3 featured
- Change
nav section — add "hytale": "Hytale" (same in both languages)
home section — update/add these keys (per D-01, D-02, D-03, D-04, UI-SPEC copywriting contract):
home.title: FR "Hytale Plugin Developer" / EN "Hytale Plugin Developer"home.subtitle: FR "Des plugins performants et sur-mesure pour votre serveur Hytale" / EN "High-performance, custom plugins for your Hytale server"home.badge.available: FR "Disponible pour vos projets" / EN "Available for projects"home.cta.discord: FR "Rejoindre sur Discord" / EN "Join on Discord"home.cta.contact: FR "Me contacter" / EN "Contact me"home.stats.projects: FR "50+ projets" / EN "50+ projects"home.stats.rating: FR "Note 5.0" / EN "5.0 rating"home.terminal.role: FR "Hytale Plugin Developer" / EN "Hytale Plugin Developer"
hytale section — create entirely (per D-08, CONT-02, UI-SPEC):
hytale.hero.label: FR "// hytale" / EN "// hytale"hytale.hero.title: FR "Plugins Hytale sur-mesure" / EN "Custom Hytale Plugins"hytale.hero.subtitle: FR "Developpement de plugins performants pour votre serveur Hytale, de la conception a la livraison." / EN "High-performance plugin development for your Hytale server, from design to delivery."hytale.services.label: FR "// services" / EN "// services"hytale.services.title: FR "Expertise Hytale" / EN "Hytale Expertise"hytale.services.subtitle: FR "Des solutions adaptees a chaque besoin" / EN "Solutions tailored to every need"hytale.pricing.label: FR "// tarifs" / EN "// pricing"hytale.pricing.title: FR "Tarifs" / EN "Pricing"hytale.pricing.subtitle: FR "Des offres transparentes pour chaque projet" / EN "Transparent pricing for every project"hytale.pricing.cta: FR "Demander un devis" / EN "Request a quote"hytale.pricing.popular: FR "Populaire" / EN "Popular"hytale.pricing.from: FR "A partir de" / EN "From"hytale.pricing.perMonth: FR "/mois" / EN "/month"hytale.pricing.onQuote: FR "Sur devis" / EN "Custom quote"
Per tier (simple, complex, custom, maintenance, web) — UI-SPEC copywriting contract:
hytale.pricing.simple.name: FR "Plugin Simple" / EN "Simple Plugin"hytale.pricing.simple.description: FR "Un plugin basique avec des fonctionnalites simples" / EN "A basic plugin with simple features"hytale.pricing.simple.features.0through.3: FR features list / EN features list- "Fonctionnalites de base" / "Basic features"
- "Configuration simple" / "Simple configuration"
- "Documentation incluse" / "Documentation included"
- "Support 30 jours" / "30-day support"
hytale.pricing.complex.name: FR "Plugin Complexe" / EN "Complex Plugin"hytale.pricing.complex.description: FR "Un plugin avance avec des systemes complexes" / EN "An advanced plugin with complex systems"hytale.pricing.complex.features.0through.3:- "Systemes avances" / "Advanced systems"
- "Integration API" / "API integration"
- "Tests complets" / "Comprehensive testing"
- "Support 60 jours" / "60-day support"
hytale.pricing.custom.name: FR "Developpement Sur-Mesure" / EN "Custom Development"hytale.pricing.custom.description: FR "Un projet entierement personnalise" / EN "A fully customized project"hytale.pricing.custom.features.0through.3:- "Architecture sur-mesure" / "Custom architecture"
- "Fonctionnalites illimitees" / "Unlimited features"
- "Support prioritaire" / "Priority support"
- "Maintenance incluse" / "Maintenance included"
hytale.pricing.maintenance.name: FR "Maintenance & Support" / EN "Maintenance & Support"hytale.pricing.maintenance.description: FR "Support continu pour vos plugins" / EN "Ongoing support for your plugins"hytale.pricing.maintenance.features.0through.3:- "Mises a jour regulieres" / "Regular updates"
- "Corrections de bugs" / "Bug fixes"
- "Support technique" / "Technical support"
- "Monitoring" / "Monitoring"
hytale.pricing.web.name: FR "Developpement Web" / EN "Web Development"hytale.pricing.web.description: FR "Sites web et applications pour votre communaute" / EN "Websites and apps for your community"hytale.pricing.web.features.0through.3:- "Site responsive" / "Responsive website"
- "SEO optimise" / "SEO optimized"
- "Dashboard admin" / "Admin dashboard"
- "Integration Discord" / "Discord integration"
seo section — add hytale page SEO keys (per I18N-04):
seo.hytale.title: FR "Plugins Hytale sur-mesure | Killian' DAL-CIN" / EN "Custom Hytale Plugins | Killian' DAL-CIN"seo.hytale.description: FR "Developpement de plugins Hytale performants et sur-mesure. Du plugin simple au projet complexe, des solutions adaptees a votre serveur." / EN "High-performance custom Hytale plugin development. From simple plugins to complex projects, solutions tailored to your server."
testimonials section — add/update keys:
testimonials.label: FR "// temoignages" / EN "// testimonials"testimonials.title: FR "Ce que disent nos clients" / EN "What our clients say"testimonials.stats.reviews: FR "avis clients" / EN "client reviews"testimonials.stats.rating: FR "note moyenne" / EN "average rating"testimonials.stats.projects: FR "projets livres" / EN "projects delivered"testimonials.empty: FR "Aucun temoignage disponible pour l'instant." / EN "No testimonials available yet."
IMPORTANT: Preserve ALL existing keys in both JSON files. Only ADD new keys and UPDATE the specific home.title, home.subtitle, home.cta keys. Do NOT remove any existing keys.
grep -q "hytale.hero.title" i18n/locales/fr.json && grep -q "hytale.hero.title" i18n/locales/en.json && grep -q "hytale.pricing.simple.name" i18n/locales/fr.json && grep -q "nav.*hytale" i18n/locales/fr.json && grep -q "seo.hytale" i18n/locales/en.json && echo "PASS" || echo "FAIL"
<acceptance_criteria>
- grep "hytale.hero.title" i18n/locales/fr.json finds the key (nested or flat)
- grep "hytale.pricing.simple.name" i18n/locales/en.json finds the key
- grep "hytale" i18n/locales/fr.json | wc -l returns 30+ matches
- grep "nav" i18n/locales/fr.json includes "hytale"
- grep "seo" i18n/locales/en.json includes hytale title and description
- All existing keys are preserved (no regression)
</acceptance_criteria>
Both fr.json and en.json contain all i18n keys for hero, hytale page, pricing tiers, testimonials, nav, and SEO — complete bilingual coverage for phase 2
<threat_model>
Trust Boundaries
| Boundary | Description |
|---|---|
| Static data files | All data is hardcoded in TypeScript files, no user input |
STRIDE Threat Register
| Threat ID | Category | Component | Disposition | Mitigation Plan |
|---|---|---|---|---|
| T-02-01 | I (Information Disclosure) | pricing.ts | accept | Pricing is intentionally public — displayed on website |
| T-02-02 | T (Tampering) | i18n JSON files | accept | Static files served via SSR, no runtime modification possible |
| </threat_model> |
<success_criteria>
- Types compile cleanly with strict mode
- Data layer is complete — plans 02 and 03 can reference all types, data, and i18n keys
- No hardcoded strings remain in the data layer </success_criteria>