- Mappe: each design now sits in a CSS laptop frame with a phone view
beside it. Maison Verte and Tanzhaus Kranich play a short muted
scroll loop (565/728 KB, H.264), started only while in view and not
at all with prefers-reduced-motion. Atelier Rosenhain is a short
one-pager, so it keeps its still.
- Hero: the Google result mock-up is replaced by a laptop + phone
showing two of the designs. customImage still overrides it.
- Admin schema follows: hero.visual laptop/phone, mappe mobileImage
and video; the Google-card fields are gone.
- "KI" now appears once, honestly, in the About paragraph. Replaced in
the meta description, hero lead, highlight II, services lead and
card 02, process step 03, the About quote and the footer. The
section title now reads "Individuell, sorgfältig, technisch solide."
Em dashes in the prototypes were replaced in the browser before
recording, so none show up in the videos.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Reported as reading "krass nach KI" on the Maison Verte shot. The Mappe
copy itself has none - the dashes were inside the screenshot, i.e. in
the prototype's own text. The prototype carries 34 em dashes overall;
four of them sat in the area the shot captures:
- "bei null an — Ballett, ..." -> colon
- "höflich absagen — wir rufen ..." -> full stop, new sentence
- "Prototyp — Studio, Personen, ..." -> middle dot
- "Foto hochkant — Tänzerin ..." -> middle dot
Checked the other two shots for the same flaw, since they sit right
next to it, and fixed one each: Tanzhaus Kranich ("Discofox bei — in
Gruppen" -> comma) and Atelier Rosenhain's banner, which I had written
that way myself.
All three screenshots recaptured and verified: zero em dashes in the
captured viewport of each. Sources edited in Downloads, which is where
the prototypes live.
The em dash is a known AI-slop marker here; the same cleanup was done
once before on the faceart prototype.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
The logo was blurry because logo.png came from a 320x60 JPEG. It is
drawn 299 css px wide, so a 2x display needs ~597px and a 3x phone
~896px - it had roughly half, respectively a third, of the pixels it
needed. No amount of rescaling fixes that.
The real source was in the repo's own history instead: the prototype
in Downloads/lara-webdesign.html carries the mark as one SVG with a
single viewBox - the wave field plus the "larpaso" wordmark as a path
drawn from EB Garamond italic. Both paths, the sage/straw/rose gradient
and the petrol #2C4A42 are taken from there verbatim, so this is the
decided mark, not a redrawing. It only looked like a smooth pill
because the JPEG was too coarse to show the waves.
The "WEBDESIGN" label is converted to outlines from Schibsted Grotesk
rather than set as <text>: an SVG loaded via <img> gets no webfonts and
would silently fall back to a system face - the same reasoning the
existing wortmarke-zu-pfad.py gives for the wordmark.
Also removed "Keine Onlineshops." from the "Was wir nicht machen" list,
as requested. The price list still reads "Nicht enthalten: Fotoshooting,
Logo-Neuentwurf, Onlineshop" - that one scopes the 500 € package rather
than declaring what we do at all, so it is left for now.
logo.png and logo.jpg stay in place as fallbacks.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Requested: make the site lighter, the way the colours were originally.
Taken from the house palette "Papier & Gold" (warm off-white, gold as
the only accent): papier #FCFAF6, papier-2 #F4EFE4, card #FFFDF8, ink
#1C1813, quiet #6B6154.
Gold needs more than one hex value. The old dark theme used a single
light gold for both text and fills, which works on a dark ground but
breaks on paper: #C9A461 as text scores 2.25:1. So primary and accent
are now the dark gold #7A5D1F, which carries fill *and* type (5.90:1 on
paper, and takes cream text on top), with #FFFDF8 as its contrast.
googleBlue became Google's actual link blue so the search mock stays
readable on a light ground. Fonts untouched.
Fixed a pre-existing bug this exposed: ".nav-links a" also matched the
header CTA and overrode .btn-primary's colour, so the button rendered
muted text on the primary fill - 1.01:1, effectively invisible. It just
never showed on the dark theme, where both tones were light. Narrowed
to ".nav-links ul a", matching the :hover rule right below it.
Rebuilt the logo as a transparent PNG: logo.jpg had the old dark
background baked in and sat on the page as a black box, with its
"WEBDESIGN" label in light grey that disappears on paper. The pill is
preserved pixel for pixel (row-wise fill so the dark lettering inside
stays opaque, then eroded 1px to drop the old anti-aliasing halo); the
label is recoloured to ink. logo.jpg is kept.
Verified in the browser across all three pages: 228 rendered text
elements measured, 0 WCAG AA failures, tightest pair 5.82 - which is
exactly the documented figure for "quiet on paper". No horizontal
scroll, no console errors.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
The third Mappe slot referred to the faceart Goslar prototype, which
carries a real business's name, prices and copy that the owner never
approved - so it had to stay nameless behind nameHidden, leaving a
placeholder in the portfolio.
Built a fresh prototype for a fully invented studio instead ("Atelier
Rosenhain" in the invented town of Bad Ellerstein, fictional prices),
matching the other two entries, which are invented businesses too. It
carries the same "frei erfunden" banner as Maison Verte. Source lives
next to the other prototypes:
Downloads/kosmetik-rosenhain-prototyp.html
Uses the house "Rosenholz" palette and the EB Garamond + Archivo
pairing. Verified in the browser: 40 rendered text elements measured,
0 WCAG AA failures (tightest pair 5.22), both fonts actually active,
no horizontal scroll at 1600px or 390px.
The existing entry text already promised "jede Behandlung mit Dauer und
Preis, Termin direkt aus der Liste heraus", so the treatment list with
duration, price and a per-row booking button sits in the hero where the
screenshot shows it. Text left unchanged.
nameHidden is now false and the Mappe renders no placeholders at all.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
The Mappe section rendered "Bildschirmfoto einsetzen" placeholders for
all three entries. Two of them are our own concept work with invented
businesses, so they can be shown:
- Maison Verte (tanzschulprototyp-maisonverte.html)
- Tanzhaus Kranich, Terra variant (tanzhaus-kranich-terra.html)
Captured at 1600x900 @2x via Playwright, downscaled to WebP. The first
card spans the full grid width (.mappe-item:first-child), which maxes
out at 1104px, so Maison Verte is 2208px wide for a true 2x; the
half-width card is 1200px. 60 KB and 32 KB.
Stored under public/mappe/ rather than public/uploads/, because uploads
are gitignored (production mounts a volume there) and these are fixed
repo assets that must ship with the build.
The third entry (faceart Goslar) deliberately keeps its placeholder: it
carries a real business's name, prices and copy, and the owner has not
approved any of it - which is why nameHidden is already true. A
screenshot would put her name on our sales page regardless.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Adds a self-service editor at admin.larpaso.de so texts, images, links,
Impressum/Datenschutz, fonts, font sizes and colors can be changed without
a developer. All homepage/legal content moves into content/site.json and
a new content/theme.json drives every CSS color/font/size token; the
Astro pages read from these at build time.
The admin/ service (Node/Express) provides bcrypt+session login with
rate limiting, a schema-driven form UI (including a hex/RGB/alpha color
picker), image upload, and a publish action that runs the Astro build
and republishes into a volume shared with the nginx website container -
so edits go live without redeploying that container.
See DEPLOYMENT_ADMIN.md for the server-side setup steps.
Replaces the previous multi-page structure (Startseite, Leistungen,
Über uns, Kontakt) with one long-form page covering pricing, work
samples, process and FAQ, matching the new visual identity (dark
theme, serif display type, sage-green logo mark). Old routes now
redirect to the corresponding anchors. Adds Impressum and Datenschutz
stub pages with clearly marked placeholders for the still-missing
real content (contact details, founder bios, portfolio, pricing
specifics).
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Multi-stage Dockerfile (node build -> nginx serve), nginx config with
_astro asset caching, .dockerignore, and .gitignore hardening for
TLS key files. Astro already builds static output with site set to
https://larpaso.de.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JmTVcwbGJBYP7gu4P7b1yG