Dorian 0c9a0ccd95 bundles: locale-aware copy via i18n keys
Bundle data was carrying localized strings (name, usage, items,
description, imageAlt, badge) directly, so EN visitors saw German
copy on the bundle page and home grid. Strings are now keyed under
bundle.<id>.<field> in the i18n catalogue (DE + EN); src/api/bundles.js
keeps only structural data + i18n key references.

HomePage builds a localizedBundles computed that resolves the keys
through t() before passing to the Bundles design-system component,
so the existing component stays agnostic of i18n. BundlePage exposes
a `bundleCopy` computed for the same reason, and resolvedItems now
maps over `itemKeys` instead of static labels.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-04 11:02:46 +01:00
2026-04-19 15:09:27 +01:00
2026-04-19 15:09:27 +01:00
2026-04-22 09:44:58 +01:00
2026-04-19 15:09:27 +01:00
2026-04-21 11:27:25 +01:00
2026-04-19 15:09:27 +01:00
2026-04-19 15:09:27 +01:00

Kaiser Natron

Ecommerce frontend. Vue 3 + Vite + Tailwind v4. Backend (PHP / MySQL, Stripe for payments) is plugged in at the src/api/ boundary.

Setup

npm ci
npm run dev

Design system

Everything visual lives in src/design-system/:

  • tokens/ — color, typography, spacing, radius (CSS custom properties consumed by Tailwind v4's @theme)
  • primitives/ — atomic components (Button, Input, Badge, Stack)
  • patterns/ — composed components (ProductCard, etc.)

Browse the full system at /design when running npm run dev. This is the single source of truth — new UI composes these, never one-off styling.

API boundary

src/api/ exposes a typed surface the backend dev fills in. Until then, fixtures in src/api/ drive the UI so frontend work is unblocked.

Endpoint specs for backend integration live under docs/api/:

  • docs/api/cart.md — cart endpoints, types, error codes, and how to swap the local implementation for HTTP.
  • docs/api/checkout.md — Stripe handoff: PaymentIntent creation, client-side confirmation, and the webhook that finalises the order.
  • docs/api/orders.md — order lookup and customer order history.
  • docs/api/customers.md — account, login, and address endpoints used by the checkout and account pages.

Supply chain

All dep versions are pinned exactly (no ^/~). Use npm ci (not npm install) in CI and before builds. Run npm audit before adding any new dep.

Deployment (Portainer dev-showcase stack)

This is the showcase path, not real production — the dev machine is the source of truth for the built output. The container has no build step: it just copies a prebuilt dist/ into nginx.

Release flow:

npm run build          # produces /dist
git add dist && git commit -m "build: <what changed>"
git push

Then in Portainer → StacksPull and redeploy. The site comes up on host port 5555 (/health returns 200 ok).

Base image: nginx:1.27.3-alpine (pinned). When this graduates to real production, reintroduce the multi-stage Node build + the hardening (read_only, security_opt, resource caps) that lived in earlier revisions of this file.

Description
No description provided
Readme 86 MiB
Languages
Vue 54.3%
HTML 28.5%
JavaScript 12%
Python 3.3%
CSS 1.8%
Other 0.1%