name: 1753-english-site description: >- Create a complete English version of the 1753 SKINCARE Next.js frontend using i18n routing and 8 parallel sub-agents. Use when asked to translate the site to English, create an English version, or set up internationalisation.
1753 English Site – Orchestrated Translation
Creates an identical English version of the 1753 SKINCARE site by introducing
Next.js [locale] routing and translating every user-facing string.
Eight sub-agents work in parallel, each owning a vertical slice.
Architecture
frontend/src/
├── middleware.ts ← locale detection + redirect
├── lib/i18n/
│ ├── index.ts ← getDictionary(), Locale type
│ ├── sv.ts ← Swedish dictionary (extracted from current hardcoded text)
│ └── en.ts ← English dictionary (translated)
├── app/
│ └── [locale]/ ← all existing pages move here
│ ├── layout.tsx
│ ├── page.tsx
│ ├── produkter/
│ │ ├── page.tsx
│ │ └── [id]/page.tsx
│ ├── ... (all other routes)
│ └── not-found.tsx
├── components/ ← shared components receive `locale` / dict props
└── providers/
└── locale-provider.tsx ← React context for current locale + dictionary
URL scheme
| Svenska (default) | English |
|---|---|
/ → redirect → /sv |
/en |
/sv/produkter |
/en/products |
/sv/om-oss |
/en/about |
/sv/kontakt |
/en/contact |
/sv/kassa |
/en/checkout |
/sv/hudanalys |
/en/skin-analysis |
/sv/villkor |
/en/terms |
/sv/integritetspolicy |
/en/privacy |
/sv/logga-in |
/en/login |
/sv/registrera |
/en/register |
/sv/mitt-konto |
/en/my-account |
/sv/skriv-omdome |
/en/write-review |
/sv/betalning/lyckad |
/en/payment/success |
/sv/betalning/misslyckad |
/en/payment/failed |
Admin pages (/admin/*) stay Swedish only – no translation needed.
Execution plan – 8 agents
Run agents 1 first (infrastructure), then agents 2–8 in parallel.
Agent 1: i18n Infrastructure (run first, alone)
Files to create/edit:
frontend/src/middleware.ts– intercept requests, detect locale from cookie / Accept-Language / path prefix, redirect bare/to/svfrontend/src/lib/i18n/index.ts–Localetype ("sv" | "en"),localesarray,defaultLocale,getDictionary(locale)that dynamically imports the right dictionaryfrontend/src/lib/i18n/sv.ts– extract every user-facing string from all 24 pages + 11 translatable components into a flat-ish dictionary object, organised by page/section keysfrontend/src/lib/i18n/en.ts– English translations of sv.ts (same keys, translated values)frontend/src/providers/locale-provider.tsx– React context that provideslocale,dictionary, and at(key)helper- Move
frontend/src/app/layout.tsx→frontend/src/app/[locale]/layout.tsx, add locale param, wrap withLocaleProvider frontend/src/app/layout.tsx– minimal root layout that just renders children (the[locale]segment handles the real layout)- Update
next.config.js/next.config.mjsif needed for i18n
Key rules:
sv.tsmust contain the EXACT current Swedish text (copy-paste, not paraphrase)- Dictionary keys use dot notation:
home.hero.title,header.nav.products,checkout.form.firstNameetc. - The
t()helper supports interpolation:t("cart.freeShippingIn", { amount: 200 })
Output: commit the infrastructure; confirm all existing pages still render (Swedish) before agents 2–8 start.
Agent 2: Layout, Header, Footer, TopBanner
Scope: Shared chrome visible on every page.
| File | What to do |
|---|---|
components/header.tsx |
Replace hardcoded nav labels, logo alt text, mobile menu text with t() calls. Map Swedish route names to locale-aware paths (e.g. /sv/produkter vs /en/products). |
components/footer.tsx |
Translate footer sections, link labels, copyright text, contact info labels. |
components/top-banner.tsx |
Translate marquee messages. |
components/cookie-banner.tsx |
Translate cookie consent text and button labels. |
app/[locale]/layout.tsx |
Ensure <html lang={locale}> is set. Translate metadata (title, description, OG tags). |
Agent 3: Homepage
Scope: app/[locale]/page.tsx
Translate:
- Hero section (headline, subtext, CTA button)
- Review carousel labels
- "Vart sortiment" section heading + subtext
- Product card labels (via props or dict)
- "Varfor 1753?" section (all feature cards: titles, descriptions, detail popups)
- Any other homepage sections
Keep all animations, interactions, and layout identical.
Agent 4: Product pages
Scope:
app/[locale]/produkter/page.tsx(product listing)app/[locale]/produkter/[id]/page.tsx(product detail)app/[locale]/produkter/[id]/product-detail.tsxapp/[locale]/produkter/product-grid.tsxapp/[locale]/produkter/loading.tsxcomponents/product-card.tsxcomponents/reviews-section.tsxlib/products.ts– add English name/description/ingredients fields
Product data in lib/products.ts must be extended with English fields:
{
name: "CBD Ansiktsolja",
nameEn: "CBD Facial Oil",
shortDesc: "...",
shortDescEn: "...",
longDesc: "<p>...</p>",
longDescEn: "<p>...</p>",
ingredients: "...",
ingredientsEn: "..."
}
Components select the right field based on locale.
Agent 5: Checkout flow
Scope:
app/[locale]/kassa/page.tsxapp/[locale]/betalning/lyckad/page.tsxapp/[locale]/betalning/misslyckad/page.tsxcomponents/cart-drawer.tsx
Translate:
- All form labels, placeholders, validation messages
- Order summary labels
- Subscription terms text
- Cart drawer (item labels, totals, CTA)
- Payment success/failure messages
Ensure sessionStorage keys and API calls remain unchanged.
Agent 6: Auth & Account
Scope:
app/[locale]/logga-in/page.tsxapp/[locale]/registrera/page.tsxapp/[locale]/mitt-konto/page.tsxapp/[locale]/mitt-konto/loading.tsxproviders/auth-provider.tsx(translate any user-facing error messages)
Translate:
- Login/register form labels, placeholders, validation text
- Dashboard sections (overview, orders, loyalty tiers, routines, wishlist, settings)
- All tab labels, stat labels, tier names and descriptions
- Password requirement text
Agent 7: Content pages
Scope:
app/[locale]/om-oss/page.tsx+layout.tsxapp/[locale]/kontakt/page.tsx+layout.tsxapp/[locale]/villkor/page.tsxapp/[locale]/integritetspolicy/page.tsxapp/[locale]/hudanalys/page.tsx+layout.tsx
Translate all body copy, headings, metadata. For legal pages (villkor, integritetspolicy), ensure the English version is a proper legal translation, not just casual.
Agent 8: Misc, SEO & Verification
Scope:
app/[locale]/skriv-omdome/page.tsx+review-form.tsxapp/[locale]/not-found.tsxcomponents/chat-widget.tsxcomponents/notification.tsxapp/[locale]/sitemap.ts– generate entries for both/sv/and/en/app/[locale]/robots.ts– include both locale sitemapscomponents/analytics.tsx– no translation needed, just verify
Verification checklist (run after all agents):
-
npm run buildpasses with zero errors - All
/sv/...routes render identical to current site - All
/en/...routes render with English text - Language switcher in header works
- Cart, auth, checkout flows work in both locales
- SEO metadata is locale-correct
-
<html lang>attribute switches correctly - No Swedish text leaks onto English pages
- No console errors
Translation tone guide
The English copy should match the brand voice:
- Honest, warm, rebellious – never clinical or corporate
- Short sentences. Direct address.
- "Your skin deserves honesty" not "Our products provide optimal dermal outcomes"
- Keep the anti-conventional-skincare attitude
- Product names stay in their original form (e.g. "Fungtastic", "DUO-kit")
- Scientific claims keep source references
How to run
# In Composer / Agent chat:
"Create the English version of the site using the 1753-english-site skill"
The orchestrating agent should:
- Read this SKILL.md
- Launch Agent 1 (infrastructure) and wait for completion
- Launch Agents 2–8 in parallel
- After all complete, run the verification checklist from Agent 8
- Commit all changes with message:
feat(i18n): add complete English version of the site