Commit graph

10 commits

Author SHA1 Message Date
Lara
9cdeb53859 Adopt the names entered via the admin editor, de-duplicating first names
The live content volume held three values that were never in git,
entered through the editor: both surnames and a company line added to
the Impressum. Publishing from git would have silently wiped them, so
they are adopted here first.

Corrected while adopting: the footer fields are surnames - the template
already prints "Lara" and "Pascal" in front - but full names had been
entered, so larpaso.de currently reads "Lara Lara Kristin Löhr und
Pascal Pascal Scholz". Storing "Kristin Löhr" yields the intended
"Lara Kristin Löhr und Pascal Scholz".

The Impressum line is taken over verbatim, company name included.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-10-04 13:35:45 +02:00
Lara
f8763ed6f5 Switch the site to the light "Papier & Gold" palette
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>
2026-10-04 13:19:51 +02:00
Lara
a105bee995 Remove the Lara/Pascal short bios from the about section
Dropped on request. The two bios were never written, so the section
rendered two red placeholder paragraphs asking for three to four
sentences each.

Removed in all four places so nothing dangles: the .about-bios markup
block and its CSS rule in index.astro, the laraBio/pascalBio keys in
content/site.json, and the two fields in the admin editor's schema -
otherwise the editor would still offer inputs that no longer render.

The about section keeps its eyebrow, title, quote and three paragraphs,
the last of which already explains that the name is built from Lara and
Pascal plus "paso".

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-10-04 13:11:14 +02:00
Lara
dd4411f182 Replace the withheld faceart entry with an invented cosmetics studio
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>
2026-10-04 13:06:49 +02:00
Lara
7c2b1557da Add portfolio screenshots for the two in-house concept studies
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>
2026-10-04 13:03:08 +02:00
Lara
da52c95583 Fill in Pascal's surname in the footer
The footer rendered a red "[Nachname]" placeholder for both names.
Pascal's surname is already in the repo via impressum.anbieterAngaben
("Pascal Scholz, Weinkampswende 14, 30539 Hannover"), so it can be
filled in without guessing.

Lara's surname stays empty on purpose - it is not recorded anywhere in
the repo and must not be invented.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-10-04 12:55:20 +02:00
dcc722b6db Add VSBG dispute-resolution notice and Haftungsausschluss to Impressum
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-24 22:55:01 +02:00
a920880a20 Fill in Impressum with real Anbieter-Angaben
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-24 22:35:37 +02:00
7c67ae1ff5 Add WYSIWYG rich-text editor and reorganize admin UI into tabs
Rich-text fields (hero lead, paragraphs, FAQ-style copy, datenschutz
sections, etc.) now use a proper toolbar editor - bold/italic/underline
buttons plus a per-selection font picker drawn from the same curated
font list as the Design tab - instead of typed **markdown** syntax.

Content is stored as a small allowlisted HTML subset (strong/em/u/span
with a validated data-font/br) and sanitized server-side with
sanitize-html on every save (admin/lib/rich-sanitize.js), independent
of what the client sends - verified this rejects script tags, event
handlers, and made-up font names while preserving legitimate markup,
and that re-saving already-sanitized content is a no-op.

The Astro site mirrors the same allowlist at render time for
defense-in-depth (src/lib/rich-sanitize.ts) and only requests Google
Fonts for fonts actually referenced somewhere in content, in addition
to the two Design-tab fonts - verified a font used via a data-font span
gets its own Google Fonts request and [data-font] CSS rule in the
built page, and that unused fonts don't get requested.

Migrated the three existing fields that used the old markdown-lite
syntax (**bold**/*italic*) to real HTML so they keep rendering
correctly under the new system.

Also replaces the single long scrolling admin page with a tabbed
sidebar (grouped "Inhalte"/"Design") to cut down on clutter, per
feedback that the all-in-one-page layout was hard to navigate.
2026-09-21 23:11:19 +02:00
93178a24e3 Add login-protected admin editor for content and design
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.
2026-09-21 21:35:09 +02:00