Commit Graph

11 Commits

Author SHA1 Message Date
Dorian
7881032613 feat: use Hero (split / brand tone) on the home page
Replaces the scaffolding copy block. Uses the existing i18n keys the
design-system showcase already exercises, with the italic emphasis
switched to text-accent-soft so the warm yellow reads on the
brand-green surface. Primary CTA → /shop, secondary → /anwendungen.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-21 12:05:20 +01:00
Dorian
fcb7673c31 fix: pull_policy: build so portainer doesn't chase docker hub
Portainer's "Pull and redeploy" runs `compose pull` before `compose up`.
With `image: kaiser-natron:portainer` set, that tries to pull the image
from Docker Hub and fails with "pull access denied" because the image
only exists as a local build artifact. `pull_policy: build` tells
compose to skip the pull step for this service.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-21 12:00:26 +01:00
Dorian
fe5b9641e0 fix(hero): image on top below lg in split layout
On mobile and tablet the split hero now stacks image-first, copy below
(matches the rhythm users expect when the product is the focal point).
Desktop is unchanged — text left, product right on lg+. Uses order-*
utilities so DOM order stays copy-first for readers/SEO while the
visual order flips.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-21 11:56:11 +01:00
Dorian
80f1c8db08 build: skip container npm, ship prebuilt dist for portainer showcase
The Portainer host keeps failing on `npm ci` inside the build stage
(both Alpine+libc6-compat and Debian slim exited 1 without ever surfacing
the real error to us). For a dev showcase this isn't worth chasing —
the dev machine is the source of truth for the built output anyway.

- Dockerfile: drop the Node build stage. Image is just nginx:1.27.3-alpine
  with /dist copied in. No npm inside the container.
- docker-compose.yml: drop the production hardening (read_only, tmpfs,
  security_opt, resource caps) and the container_name. Dev-only, don't
  inhibit things.
- .gitignore / .dockerignore: stop ignoring dist/ — it's committed now.
- README: document the `npm run build && commit && push` release flow
  and note what to reinstate when this graduates to real production.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-21 11:52:01 +01:00
Dorian
9b4eaafd99 fix: build on debian slim instead of alpine
Alpine + libc6-compat still lost the fight with Tailwind v4's prebuilt
oxide / lightningcss / rolldown bindings on the Portainer host. Debian
slim (glibc-native) is the known-good base for this stack. The serve
stage stays nginx:alpine, so the deployed image size is unchanged —
only the discarded build stage grew.

Also flip the home-page navbar from floating to the standard layout.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-21 11:47:23 +01:00
Dorian
a07058d656 feat: add Hero component to design system
- Responsive hero for home + category tops (390→1280px), composed from
  Button, Badge, and the Icon/Logo primitives already in the DS.
- Two layouts — split (copy left / product right on lg, stacked below)
  and centered — and three surface tones — cream, paper, brand. On the
  brand-green surface the secondary CTA is rendered with a cream outline
  pill since Button's ghost/secondary variants read dark-on-dark there.
- Decorative disc + soft glow behind the product cutout give the image
  a focal point without needing a photographed backdrop.
- Headline can be passed as a string prop or as a slot (so consumers
  can mix in the italic `text-brand-soft` emphasis used on the home page).
- Ships with a /design/hero showcase page that renders the component in
  the DevicePreview iframe across mobile / tablet / desktop, plus
  layout and tone tabs and a usage snippet. Preview route is
  /design/preview/hero so the iframe can include the live Navbar.
- i18n keys added to DE + EN; AT inherits from DE.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-21 11:44:15 +01:00
Dorian
469ef529b6 fix: add libc6-compat so tailwind oxide binary loads on alpine
The prebuilt @tailwindcss/oxide and lightningcss .node bindings expect a
glibc-compat runtime. On bare Alpine musl they fail to load during the
install-time probe, which cascades into `npm ci` exiting 1 in the
Portainer build.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-21 11:39:59 +01:00
Dorian
fdc871859b fix: use valid pinned node image tag
node:24.13.0-alpine3.20 was never published to Docker Hub, so the
Portainer build failed on pull. Switch to node:24.15.0-alpine3.23
(current Node 24 line on current Alpine line) and update README.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-21 11:36:01 +01:00
Dorian
9bc6b842cf product cards and containerisation 2026-04-21 11:27:25 +01:00
Dorian
20faf91bda chore: remove orphaned DesignPage.vue
Replaced by nested /design routes in src/pages/design/.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-19 15:12:45 +01:00
Dorian
7bd8e0a181 chore: initial commit
Vue 3 + Tailwind v4 frontend scaffold with living design system
at /design. Pinned dependencies, dev-only a11y toolbar with
colour-vision simulation, WCAG contrast checker, and axe-core audit.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-19 15:09:27 +01:00