Commit Graph
53 Commits
Author SHA1 Message Date
t.indorf d4aa90422f feat(marketing): add real application screenshots 2026-10-13 13:13:14 +02:00
t.indorf abe73bb9ac Update public feature details and align SEO metadata 2026-10-13 09:23:46 +02:00
t.indorf 1472779781 Add announcement editing and reliable per-recipient mail delivery 2026-10-13 08:53:22 +02:00
t.indorf 661776e609 feat: add password recovery and everyday workflow improvements 2026-10-12 17:51:50 +02:00
t.indorf 061024d901 feat: show planning availability and manage Kita access roles 2026-10-12 16:28:56 +02:00
t.indorf 99d3a63eed Merge main with notdienst planning and notification improvements 2026-10-12 15:37:10 +02:00
t.indorf 00f602a7aa feat: complete notdienst planning, quick wins and notifications 2026-10-12 15:34:09 +02:00
t.indorf e50a8c646b fix: preserve invitations for admins with a family 2026-10-10 07:26:25 +02:00
t.indorf e6a30be579 Merge family absence flows while preserving security hardening 2026-10-10 07:08:41 +02:00
t.indorf a9f57acf70 Merge current features with security hardening and automatic safe initialization 2026-10-09 23:29:19 +02:00
t.indorf 8915fe7df6 Improve family invitations and absence management flows 2026-10-09 22:59:36 +02:00
t.indorf 656ada80bd Harden authentication, tenant isolation and security boundaries 2026-10-09 22:49:55 +02:00
t.indorf 4702bf5abb feat: create and invite educators in a single form 2026-10-09 21:59:04 +02:00
t.indorf 979f795341 feat: add parent announcements and family or child event responses 2026-10-09 21:44:19 +02:00
t.indorf 8b32e4a832 feat: add household emergency duty alarms and deadline worker 2026-10-09 11:02:24 +02:00
t.indorf 90b8843cda Add educator email invitations and staff notification preferences 2026-10-08 11:32:38 +02:00
t.indorf 043fed2e46 Add educator leave management and working time accounts 2026-10-07 15:25:55 +02:00
t.indorf ec3f4f933d test: make calendar actions testable from CLI and add integration test script 2026-05-23 19:20:54 +02:00
t.indorf 3ce5638449 feat: implement emergency duty (Notdienst) swapping for parents 2026-05-23 19:18:30 +02:00
t.indorf 27c5a6940a feat: implement premium responsive mobile shell and drawer 2026-05-22 15:50:03 +02:00
t.indorf f28956194c feat: add directory opt-out sync and layout/xss seed data extensions 2026-05-22 15:22:12 +02:00
t.indorf e9595fab21 feat: show family assignment counts in notdienst planning dropdown and support editing unassigned days in published plans 2026-05-21 14:29:13 +02:00
t.indorf f6acb3d271 feat: default to Month view and implement household services filter toggle for parents 2026-05-21 13:24:42 +02:00
t.indorf 339563bf4d feat: display published Notdienst assignments in appointment calendar with custom styling for own assignments 2026-05-21 13:04:52 +02:00
t.indorf 9915c8213e fix(notdienst): resolve timezone offset mismatch in plan generation and fix linter warning in calendar modal 2026-05-21 12:53:46 +02:00
t.indorf ab7432f3a3 Merge branch 'codex/replace-alert-dialogs' into codex/notdienst-month-settings 2026-05-21 10:46:31 +02:00
t.indorf 84aae1d72e Implement missing UI button features, filters, search, and view toggles across all modules 2026-05-21 10:44:23 +02:00
t.indorf 89364e9011 Replace native confirms with dialogs 2026-05-20 23:48:40 +02:00
t.indorf e7eb43462c Fix server/client component boundary issue with reasonColor/reasonLabel helper functions by moving them to shared utils 2026-05-20 23:09:59 +02:00
t.indorf 1c5d2f10ac Apply linen design system across app 2026-05-20 22:47:52 +02:00
t.indorf 99ff978116 Fix live test follow-up issues 2026-05-19 14:28:32 +02:00
t.indorf 3fa3b9b108 Merge branch 'codex/fix-invite-activation' 2026-05-19 11:14:28 +02:00
t.indorf 84714b8b32 Fix server action state exports 2026-05-19 11:09:53 +02:00
t.indorf 968d108c28 Improve invite email layout 2026-05-19 10:29:42 +02:00
t.indorf b5eb288104 Merge branch 'codex/fix-public-landing-clean' 2026-05-18 16:56:45 +02:00
t.indorf ce1a5c9e42 Make landing page public and redirect auth users directly 2026-05-18 16:55:21 +02:00
t.indorf 6c79e0a8e1 Merge claude/profil-and-mail-fixes into main
Fix mail layouts, /invite form-reset, profile validation
2026-05-17 23:54:07 +02:00
t.indorf 935845ce56 Merge claude/onboarding-fixes into main
Persist values, tighten validation, and a11y on /onboarding
2026-05-17 23:53:57 +02:00
t.indorf cb4f7409bc Merge claude/register-fixes into main
Persist values, a11y errors, and aria-invalid on /register
2026-05-17 23:53:38 +02:00
t.indorfandClaude Opus 4.7 fa06da324c Fix mail layouts, /invite form-reset, profile validation
Mail templates (6 templates touched):
- New shared `_styles.ts` exports a robust font stack starting with
  Arial/Helvetica so mail readers that lack -apple-system and
  BlinkMacSystemFont don't fall back to Monospace (observed in at least
  one webmail client).
- `fontFamily` is now set on every text-bearing element, not only on
  `<Body>`, because some clients (Outlook, several webmail readers) do
  not inherit body CSS into nested sections.
- ASCII substitutions are gone: "Ueber" → "Über", "fuer" → "für",
  "bestaetigen" → "bestätigen", "uebernehmen" → "übernehmen",
  "verlaesslich" → "verlässlich".
- InviteEmail + NewsEmail buttons switch from the off-brand yellow
  (#f0b84b) to the brand dark green so the CTA matches the header.

/invite form:
- InviteState gains an `attempt` counter plus echoed checkbox `values`,
  mirroring the /register and /onboarding fix from earlier branches. A
  failed submit no longer wipes the Datenschutz / Adressbuch-Opt-In
  ticks. Passwords stay empty for security.
- Field error <p> elements gain role="alert" + aria-live="polite" so
  screen readers announce validation failures on submit. Inputs use
  aria-describedby to link to error / helper text.

Profile validation:
- Telephone numbers must match a permissive pattern that still rejects
  obvious garbage (previously "abc-123-not-a-phone" was accepted).
- Postal codes must match an alphanumeric pattern of 3–10 chars
  (previously "ABCDE" was accepted).
- Child date-of-birth is now validated via superRefine: it must be a
  parseable date, not in the future, and not before 1900. Previously a
  kid born in 2030 was accepted.
- The three Profil server actions now surface the first Zod issue
  message instead of generic "Ungültige Eingabedaten." toasts.

Misc:
- "fuer" → "für" in the Adressbuch page subtitle.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-17 23:49:01 +02:00
t.indorfandClaude Opus 4.7 af2c3b245a Persist values, tighten validation, and a11y on /onboarding
- Server action echoes kitaName, the three module booleans, and the
  Mindest-Verfügbarkeiten value on every error path so failed submits no
  longer wipe what the user typed; OnboardingState gains an `attempt`
  counter that drives a per-field remount key on the client.
- Schema now rejects min=0 when the Notdienst module is active (via
  superRefine) — previously a kita could be created with 0 minimum days,
  which is fachlich sinnlos. When the module is off, 0 stays valid.
- Validation error messages reworded from terse fragments ("Nicht
  negativ.", "Bitte ganze Zahl.") to full sentences.
- Field error <p> elements gain role="alert" + aria-live="polite" so
  screen readers announce them on submit.
- CardTitle now accepts as="h1" and the onboarding page uses it for
  "Willkommen, …" — the page now has a real top-level heading.
- ModuleCheckbox uses aria-labelledby + aria-describedby so the
  accessible name is just the module title; the longer description is
  exposed as secondary info instead of being concatenated into the AN.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-17 20:46:31 +02:00
t.indorf e8b62f6008 Tighten landing page positioning 2026-05-17 20:43:26 +02:00
t.indorf 380c67963b Add superadmin audit and Kita management 2026-05-16 12:02:59 +02:00
t.indorfandClaude Opus 4.7 8640001f6f Persist values, a11y errors, and aria-invalid on /register
- Server action now echoes firstName, lastName, email, and the privacy
  checkbox state on every error path so failed submits don't wipe the form.
- New `attempt` counter on RegisterState drives a remount key per field,
  bypassing React's default <form action> reset semantics.
- Error <p> elements gain role="alert" + aria-live="polite" so screen
  readers announce validation failures live.
- Privacy checkbox now flags aria-invalid when not accepted and points to
  the error message via aria-describedby.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-16 11:55:28 +02:00
t.indorf 0b80c62beb Add contact email confirmation and abuse protection 2026-05-16 11:38:30 +02:00
t.indorf 9542def530 Add RSVP events and Unsplash image support 2026-05-15 21:28:36 +02:00
t.indorf 89cf1dfe84 added more page content 2026-05-11 16:06:33 +02:00
t.indorf 70a50d89ab added robots udn sitemap 2026-05-11 12:23:43 +02:00
t.indorf fcea4a9168 integrated umami 2026-05-11 09:28:06 +02:00
t.indorf 639c470cb2 chore: update contact details and placeholder values in impressum page 2026-05-09 23:47:21 +02:00