Commit Graph

1113 Commits

Author SHA1 Message Date
Zaid Marzguioui
1215e351c1 fix: UX improvements for German association users
Some checks failed
Workflow / ʦ TypeScript (push) Failing after 6m6s
Workflow / ⚫️ Test (push) Has been skipped
- fix(member-detail): display gender in German (Männlich/Weiblich/Divers)
  instead of raw English enum values (male/female/diverse)

- fix(member-detail): display country names in German (Österreich, Deutschland)
  instead of raw ISO codes (AT, DE)

- fix(member-statistics): total member count was always 0
  getStatistics() returns per-status counts without a total key;
  now computes total by summing all status counts

- fix(i18n): add 56 breadcrumb segment translations for DE and EN
  Breadcrumbs were showing English path segments (Courses, Calendar,
  Registrations) because translation keys for URL path segments were
  missing. Added all segment-level route translations so breadcrumbs
  now display in German throughout the app.
2026-04-03 22:10:02 +02:00
Zaid Marzguioui
9f83b5cc75 Merge branch 'main' of https://gitea.frontieralgorithmics.de/zaid.marzguioui/myeasycms-v2
Some checks failed
Workflow / ʦ TypeScript (push) Failing after 5m40s
Workflow / ⚫️ Test (push) Has been skipped
2026-04-03 18:42:10 +02:00
Zaid Marzguioui
5b169a381f fix: resolve 4 QA bugs found in Docker production build
- fix(member-management): Zod v4 .partial() on refined schema crash
  Separated CreateMemberBaseSchema from superRefine so .partial()
  works for UpdateMemberSchema. Fixes members-cms page crash.

- fix(course-management): snake_case→camelCase stats normalization
  getQuickStats RPC returns snake_case keys but templates expect
  camelCase. Added normalization layer so stats cards display values.

- fix(blog): add missing cover images for 5 German blog posts
  Posts referenced /images/posts/*.webp that didn't exist.

- fix(docker): remove non-existent catch_entries table from bootstrap
  dev-bootstrap.sh granted permissions on catch_entries which has no
  migration. Removed the stale reference.

- docs: add qa-checklist.md with full test report
2026-04-03 18:41:51 +02:00
T. Zehetbauer
9d5fe58ee3 feat: add shared notification, communication, and export services for bookings, courses, and events; introduce btree_gist extension and new booking atomic function
Some checks failed
Workflow / ʦ TypeScript (push) Failing after 5m42s
Workflow / ⚫️ Test (push) Has been skipped
2026-04-03 17:03:34 +02:00
4d538a5668 Merge pull request 'feat/members-redesign' (#1) from feat/members-redesign into main
Some checks failed
Workflow / ʦ TypeScript (push) Failing after 5m44s
Workflow / ⚫️ Test (push) Has been skipped
Reviewed-on: #1
2026-04-03 12:11:03 +00:00
T. Zehetbauer
5c5aaabae5 refactor: remove obsolete member management API module
Some checks failed
Workflow / ʦ TypeScript (pull_request) Failing after 5m57s
Workflow / ⚫️ Test (pull_request) Has been skipped
2026-04-03 14:08:31 +02:00
Zaid Marzguioui
b6092adc3e fix(billing): add billing feature flags as Dockerfile build args
Some checks failed
Workflow / ʦ TypeScript (push) Failing after 16m1s
Workflow / ⚫️ Test (push) Has been skipped
NEXT_PUBLIC_ENABLE_PERSONAL_ACCOUNT_BILLING and
NEXT_PUBLIC_ENABLE_TEAM_ACCOUNTS_BILLING must be set at build time
(ARG/ENV in Dockerfile + build args in docker-compose) because Next.js
bakes NEXT_PUBLIC_* into the bundle during 'next build'. Setting them
only as runtime environment vars has no effect.
2026-04-03 11:51:02 +02:00
T. Zehetbauer
124c6a632a feat: update Docker configuration for improved performance and add local environment example 2026-04-03 09:37:36 +02:00
T. Zehetbauer
d4acc3ba22 Merge remote-tracking branch 'origin/main'
# Conflicts:
#	apps/web/app/[locale]/home/[account]/members-cms/[memberId]/page.tsx
2026-04-02 23:37:19 +02:00
Zaid Marzguioui
28188bb3a6 fix(billing): wire up Stripe checkout with real price IDs and env vars
Some checks failed
Workflow / ʦ TypeScript (push) Failing after 6m3s
Workflow / ⚫️ Test (push) Has been skipped
- Replace 8 placeholder price IDs (price_starter_monthly, etc.) with real
  Stripe test-mode price IDs created via API
- Add STRIPE_SECRET_KEY, STRIPE_WEBHOOK_SECRET, NEXT_PUBLIC_BILLING_PROVIDER,
  and NEXT_PUBLIC_STRIPE_PUBLISHABLE_KEY to docker-compose.yml (build args + runtime)
- Add NEXT_PUBLIC_BILLING_PROVIDER ARG/ENV to Dockerfile
- Enable team and personal account billing (was 'false')
- Created Stripe webhook endpoint for production URL
- Created 4 Stripe products (Starter/Pro/Verband/Enterprise) with monthly+yearly prices

Checkout was crashing because:
1. STRIPE_SECRET_KEY was missing → Zod validation failed at createStripeClient()
2. STRIPE_WEBHOOK_SECRET was missing → same Zod schema rejection
3. NEXT_PUBLIC_BILLING_PROVIDER was unset → BillingProviderSchema.parse() failed
4. Price IDs were placeholders, not real Stripe price_xxx IDs
2026-04-02 23:34:30 +02:00
Zaid Marzguioui
f10a34c505 fix: comprehensive CMS QA fixes — i18n, UI labels, breadcrumbs
Some checks failed
Workflow / ʦ TypeScript (push) Failing after 6m6s
Workflow / ⚫️ Test (push) Has been skipped
- Fix i18n dotted permission keys causing INVALID_KEY console spam (en/de cms.json)
- Fix member detail breadcrumb showing UUID instead of member name
- Fix bookings stats card showing 'of' instead of 'Total'
- Fix events/registrations table 'status' column header resolving to object
- Fix finance search placeholder showing 'Show All' instead of search text
- Fix finance status filter default showing 'No data' instead of 'All'
- Fix applications page German pluralization 'Antrage' → 'Anträge'
- Add breadcrumbValues prop to CmsPageShell for UUID→name overrides
2026-04-02 22:59:42 +02:00
T. Zehetbauer
f43770999f feat: enhance member management features; add quick stats and search capabilities 2026-04-02 22:56:04 +02:00
Zaid Marzguioui
0932c57fa1 fix: revert ctx→_ctx rename — ctx IS used for auth in server actions
Some checks failed
Workflow / ʦ TypeScript (push) Failing after 6m13s
Workflow / ⚫️ Test (push) Has been skipped
The previous lint fix incorrectly renamed ctx to _ctx in server actions
that actually USE ctx.user.id for authorization. This caused runtime
'ctx is not defined' errors when creating pages, modules, etc.

Reverted all 13 action files back to using ctx properly.
2026-04-02 19:30:59 +02:00
Zaid Marzguioui
a1aa1bee86 fix: rename unused ctx params to _ctx, remove unused imports
Some checks failed
Workflow / ʦ TypeScript (push) Failing after 5m38s
Workflow / ⚫️ Test (push) Has been skipped
- Fix 17 unused ctx params in module-builder, verbandsverwaltung, sitzungsprotokolle actions
- Remove unused CardDescription/CardHeader/CardTitle from pricing calculator
- Remove unused FileSignature import from layout
2026-04-02 19:25:01 +02:00
Zaid Marzguioui
a3be926f6f fix(carousel): replace emoji lock with Lucide icon, widen container, fix tab overflow
Some checks failed
Workflow / ʦ TypeScript (push) Failing after 6m6s
Workflow / ⚫️ Test (push) Has been skipped
- Replace 🔒 emoji with Lucide <Lock> icon (3x3, muted) for cleaner browser chrome
- Widen carousel from max-w-4xl to max-w-5xl so tabs have room
- Bottom tabs: shrink-0 + scrollbar-none + centered flex layout
- Labels show on lg+ screens, icons-only on smaller screens
- Slightly larger tab hit targets (px-3 py-1.5, text-[11px])
2026-04-02 19:09:46 +02:00
Zaid Marzguioui
4f40abdce4 fix: override text-right alignment on Why Choose Us section items
Some checks failed
Workflow / ⚫️ Test (push) Has been cancelled
Workflow / ʦ TypeScript (push) Has been cancelled
The EcosystemShowcase component forces text-right on children when
textPosition="right", causing WhyItem content to be right-aligned.
Added text-left on the wrapper div to fix alignment.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-02 19:08:13 +02:00
Zaid Marzguioui
d87fbb050f feat: add feature carousel hero + enable Stripe billing
Some checks failed
Workflow / ʦ TypeScript (push) Failing after 6m5s
Workflow / ⚫️ Test (push) Has been skipped
- Replace static dashboard screenshot with interactive feature carousel
  9 slides: Dashboard, Mitglieder, Kurse, Finanzen, Veranstaltungen,
  Newsletter, Website, Buchungen, Dokumente
  Auto-advances every 6s, clickable sidebar + bottom tabs
  Virtual app UI rendered with shadcn components (no images needed)

- Enable Stripe test mode billing
  Add publishable key to .env.development, .env.production, docker-compose
  Add secret key to .env.development and docker-compose
  Add NEXT_PUBLIC_STRIPE_PUBLISHABLE_KEY to Dockerfile build args
2026-04-02 18:54:58 +02:00
Zaid Marzguioui
a6c9537195 feat(billing): update pricing tiers to MyEasyCMS plans (EUR)
Some checks failed
Workflow / ʦ TypeScript (push) Failing after 6m2s
Workflow / ⚫️ Test (push) Has been skipped
Replace MakerKit sample billing config with actual MyEasyCMS tiers:
- Starter: 29€/mo (250 members) — Mitgliederverwaltung, SEPA, Website, Newsletter
- Pro: 59€/mo (1.000 members) — Kursverwaltung, Buchungen, unbegrenzte Benutzer
- Verband: 199€/mo (10.000 members) — Mehrebenen-Hierarchie, Verbandssuche
- Enterprise: 349€/mo (unlimited) — dedizierte Infrastruktur, SLA, API

All plans: EUR currency, German feature labels, yearly = ~2 months free.
Also update marketing i18n subtitles.
2026-04-02 16:13:54 +02:00
Zaid Marzguioui
da862f2194 feat(pricing): add competitor price comparison calculator
Some checks failed
Workflow / ʦ TypeScript (push) Failing after 6m5s
Workflow / ⚫️ Test (push) Has been skipped
- Interactive slider for 50–10,000 members
- Real prices from SEWOBE, easyVerein, ClubDesk, WISO MeinVerein
- Bar chart comparing monthly/yearly costs
- Savings callout showing annual savings vs most expensive competitor
- Feature comparison table (Verband, Website, Kurse, SEPA, Support, etc.)
- SEWOBE Verband warning for 1000+ members
- Uses shadcn/ui components (Card, Badge, Button, Table)
- CTA linking to sign-up
- 4 tiers: Starter (29€), Pro (59€), Verband (199€), Enterprise (349€)
2026-04-02 15:32:55 +02:00
Zaid Marzguioui
0bd5d0cf42 fix: QA audit — lint cleanup, i18n fixes, module visibility, sidebar UX
Some checks failed
Workflow / ʦ TypeScript (push) Failing after 5m40s
Workflow / ⚫️ Test (push) Has been skipped
- Fix 97 lint errors → 0 (unused imports, params, variables across 40+ files)
- Fix i18n key format: colon → dot notation for next-intl compatibility
- Add missing i18n keys (routes.application, routes.home, confirm)
- Fix module visibility: sidebar now respects per-account DB features
- Fix inject function: use dot-notation keys, add collapsed:true defaults
- Fix ConfirmDialog: use useTranslations instead of hardcoded German defaults
- Fix events page: replace placeholder 'Beschreibung' with proper description
- Fix Dockerfile: add NEXT_PUBLIC_CI ARG for Docker builds
- Collapse secondary sidebar sections by default for cleaner UX
2026-04-02 14:39:20 +02:00
T. Zehetbauer
c6d564836f fix: add missing newlines at the end of JSON files; clean up formatting in page components
Some checks failed
Workflow / ʦ TypeScript (push) Failing after 17m4s
Workflow / ⚫️ Test (push) Has been skipped
2026-04-02 11:02:58 +02:00
Zaid Marzguioui
b26e5aaafa feat: pre-existing local changes — fischerei, verband, modules, members, packages
Some checks failed
Workflow / ʦ TypeScript (push) Failing after 6m20s
Workflow / ⚫️ Test (push) Has been skipped
Commits all remaining uncommitted local work:

- apps/web: fischerei, verband, modules, members-cms, documents,
  newsletter, meetings, site-builder, courses, bookings, events,
  finance pages and components
- apps/web: marketing page updates, layout, paths config,
  next.config.mjs, styles/makerkit.css
- apps/web/i18n: documents, fischerei, marketing, verband (de+en)
- packages/features: finance, fischerei, member-management,
  module-builder, newsletter, sitzungsprotokolle, verbandsverwaltung
  server APIs and components
- packages/ui: button.tsx updates
- pnpm-lock.yaml
2026-04-02 01:19:54 +02:00
Zaid Marzguioui
a1719671df fix: QA remediation — all 19 audit fixes (C+ → A-)
Some checks failed
Workflow / ⚫️ Test (push) Has been cancelled
Workflow / ʦ TypeScript (push) Has been cancelled
## Summary
Fixes all 31  FAILs and most ⚠️ WARNs from the QA audit (113/33⚠️/31).

## Changes

### FIX 1 — Loading Skeleton
- Replace full-screen GlobalLoader with PageBody-scoped animate-pulse skeleton
- Sidebar stays visible during page transitions

### FIX 2 — Status Badges i18n (15 files, 12 label maps)
- Add *_LABEL_KEYS maps to lib/status-badges.ts (i18n keys instead of German)
- Update all 15 consumer files to use t(*_LABEL_KEYS[status])
- Add status namespace to finance.json (de+en)
- Add registration_open to events.json status (de+en)
- Add status block to cms.json events section (de+en)
- Add missing pending/bounced keys to newsletter.json (de+en)
- Add active key to courses.json status (de+en)

### FIX 3 — Error Page i18n
- Replace 4 hardcoded German strings with useTranslations('common')
- Add error.* keys to common.json (de+en)

### FIX 4 — Account Not Found i18n
- Convert AccountNotFound to async Server Component
- Resolve default props from getTranslations('common')
- Add accountNotFoundCard.* keys to common.json (de+en)

### FIX 5 — Publish Toggle Button (6 strings + 2 bugs)
- Add useTranslations('siteBuilder'), replace 6 German strings
- Fix: add response.ok check before router.refresh()
- Fix: add disabled={isPending} to AlertDialogAction
- Fix: use Base UI render= prop pattern (not asChild)
- Add pages.hide/publish/hideTitle/publishTitle/hideDesc/publishDesc/
  toggleError/cancelAction to siteBuilder.json (de+en)

### FIX 6 — Cancel Booking Button (7 strings + bugs)
- Add useTranslations('bookings'), replace all strings
- Fix: use render= prop pattern, add disabled={isPending}
- Add cancel.* and calendar.* keys to bookings.json (de+en)

### FIX 7 — Portal Pages i18n (5 files, ~40 strings)
- Create i18n/messages/de/portal.json and en/portal.json
- Add 'portal' to i18n/request.ts namespace list
- Rewrite portal/page.tsx, invite/page.tsx, profile/page.tsx,
  documents/page.tsx with getTranslations('portal')
- Fix portal-linked-accounts.tsx: add useTranslations, replace
  hardcoded strings, fix AlertDialogTrigger render= pattern

### FIX 8 — Invitations View (1 string)
- Replace hardcoded string with t('invitations.emptyDescription')
- Add key to members.json (de+en)

### FIX 9 — Dead Navigation Link
- Comment out memberPortal nav entry (page does not exist)

### FIX 10 — Calendar Button Accessibility
- Add aria-label + aria-hidden to all icon buttons in bookings/calendar
- Add aria-label + aria-hidden to all icon buttons in courses/calendar
- Add previousMonth/nextMonth/backToBookings/backToCourses to
  bookings.json and courses.json (de+en)

### FIX 11 — Pagination Aria Labels
- Add aria-label to icon-only pagination buttons in finance/page.tsx
- Fix Link/Button nesting in newsletter/page.tsx, add aria-labels
- Add pagination.* to common.json (de+en)
- Add common.previous/next to newsletter.json (de+en)

### FIX 12 — Site Builder Type Safety
- Add SitePage interface, replace Record<string,unknown> in page.tsx
- Add SitePost interface, replace Record<string,unknown> in posts/page.tsx
- Remove String() casts on typed properties

### FIX 14 — EmptyState Heading Level
- Change <h3> to <h2> in empty-state.tsx (WCAG heading sequence)

### FIX 16 — CmsPageShell Nullish Coalescing
- Change description ?? <AppBreadcrumbs /> to !== undefined check

### FIX 17 — Meetings Protocol Hardcoded Strings
- Replace 5 hardcoded German strings with t() in protocol detail page
- Add notFound/back/backToList/statusPublished/statusDraft to meetings.json

### FIX 18 — Finance Toolbar Hardcoded Strings
- Replace toolbar filter labels with t() calls in finance/page.tsx

### FIX 19 — Admin Audit Hardcoded Strings
- Add getTranslations('cms.audit') to audit page
- Replace title, description, column headers, pagination labels
- Add description/timestamp/paginationPrevious/paginationNext to cms.json

## Verification
- tsc --noEmit: 0 errors
- Turbopack: Compiled successfully in 9.3s
- Lint: 0 new errors introduced
- All 8 audit verification checks pass
2026-04-02 01:18:15 +02:00
Zaid Marzguioui
a5bbf42901 Replace all marketing placeholder content with real MYeasyCMS content
Some checks failed
Workflow / ʦ TypeScript (push) Failing after 6m12s
Workflow / ⚫️ Test (push) Has been skipped
- Logo: Replace generic Makerkit SVG with MYeasyCMS branded logo (grid icon + styled text)
- Blog: Replace 3 SaaS placeholder posts with 5 real articles (Vereinsverwaltung, SEPA, Website, DSGVO, Mitglieder-Tipps)
- Changelog: Replace 6 generic entries with real feature announcements (Verbandsverwaltung, Fischerei, Dateien, Kurse, Einladungen, i18n)
- Documentation: Rewrite all 20 docs from Makerkit references to MYeasyCMS content
- FAQ: Replace 6 generic SaaS questions with 10 real MYeasyCMS questions
- Navigation: Replace Changelog link with Contact in main nav
- Footer: Reorganize into Product/Company/Legal sections
- Translations: Update all EN marketing strings to match real Com.BISS content
2026-04-01 21:09:06 +02:00
T. Zehetbauer
bbb33aa63d feat: add file upload and management features; enhance pagination and permissions handling
Some checks failed
Workflow / ʦ TypeScript (push) Failing after 5m43s
Workflow / ⚫️ Test (push) Has been skipped
2026-04-01 20:13:15 +02:00
T. Zehetbauer
db4e19c3af feat: add invitations management and import wizard; enhance audit logging and member detail fetching
Some checks failed
Workflow / ʦ TypeScript (push) Failing after 4m53s
Workflow / ⚫️ Test (push) Has been skipped
2026-04-01 19:02:55 +02:00
T. Zehetbauer
080ec1cb47 feat: add delete functionality for leases, catch books, and permits; implement newsletter update feature
Some checks failed
Workflow / ʦ TypeScript (push) Failing after 4m52s
Workflow / ⚫️ Test (push) Has been skipped
2026-04-01 17:53:39 +02:00
T. Zehetbauer
c6b2824da8 feat: add update and delete functionality for courses, events, and species; enhance attendance tracking and category creation
Some checks failed
Workflow / ʦ TypeScript (push) Failing after 4m53s
Workflow / ⚫️ Test (push) Has been skipped
2026-04-01 16:03:50 +02:00
T. Zehetbauer
7b078f298b feat: enhance API response handling and add new components for module management
Some checks failed
Workflow / ʦ TypeScript (push) Failing after 4m50s
Workflow / ⚫️ Test (push) Has been skipped
2026-04-01 15:18:24 +02:00
T. Zehetbauer
f82a366a52 Merge remote-tracking branch 'origin/main'
Some checks failed
Workflow / ʦ TypeScript (push) Failing after 4m51s
Workflow / ⚫️ Test (push) Has been skipped
2026-04-01 14:05:13 +02:00
Zaid Marzguioui
49fd6b65b9 fix(supabase): use internal URL for all server-side clients with cookie name matching
Some checks failed
Workflow / ʦ TypeScript (push) Failing after 5m38s
Workflow / ⚫️ Test (push) Has been skipped
ROOT CAUSE FIX: All server-side Supabase clients (server-client, middleware-client,
server-admin-client) now use SUPABASE_INTERNAL_URL (http://supabase-kong:8000)
when available, with cookieOptions.name set to match the external URL's cookie key
(e.g. sb-myeasycms-auth-token). This gives us:
- Reliable Docker-internal networking (no hairpin NAT through Traefik)
- Correct session cookie matching between browser and server
- No more 500 errors on SSR pages that query Supabase

Reverted per-page try/catch workarounds since root cause is now fixed.
2026-04-01 13:53:59 +02:00
T. Zehetbauer
5e1976f07b Merge remote-tracking branch 'origin/main' 2026-04-01 13:48:10 +02:00
Zaid Marzguioui
4aa11cd408 fix: add error handling to meetings + verband dashboard pages
Some checks failed
Workflow / ʦ TypeScript (push) Failing after 5m47s
Workflow / ⚫️ Test (push) Has been skipped
SSR pages crash with 500 when Supabase queries fail (expired session,
network issues). Now catch errors and render with empty data instead
of crashing the entire page.
2026-04-01 13:40:02 +02:00
T. Zehetbauer
a5baaae12f Merge remote-tracking branch 'origin/main'
Some checks failed
Workflow / ʦ TypeScript (push) Failing after 4m52s
Workflow / ⚫️ Test (push) Has been skipped
2026-04-01 13:33:58 +02:00
T. Zehetbauer
c98cada7f6 refactor: improve code readability and consistency in api.ts and common.json 2026-04-01 13:33:43 +02:00
Zaid Marzguioui
9484ba91f8 fix(db): add explicit GRANT permissions for all CMS module tables
Some checks failed
Workflow / ⚫️ Test (push) Has been cancelled
Workflow / ʦ TypeScript (push) Has been cancelled
The REVOKE+GRANT pattern in migrations can fail if a previous migration run
partially succeeded. Adding explicit GRANTs to dev-bootstrap.sh ensures all
tables have correct permissions on every deploy. Fixes 500 error on
Sitzungsprotokolle (meeting_protocol_items permission denied).
2026-04-01 13:32:32 +02:00
T. Zehetbauer
2a9d543ee4 Merge remote-tracking branch 'origin/main'
Some checks failed
Workflow / ⚫️ Test (push) Has been cancelled
Workflow / ʦ TypeScript (push) Has been cancelled
# Conflicts:
#	docker-compose.yml
2026-04-01 13:30:00 +02:00
Zaid Marzguioui
5294cfab61 feat: enable Fischerei, Sitzungsprotokolle, Verbandsverwaltung modules
Some checks failed
Workflow / ʦ TypeScript (push) Failing after 5m44s
Workflow / ⚫️ Test (push) Has been skipped
- Enable all 3 modules via NEXT_PUBLIC_ENABLE_* build args + runtime env
- Fix empty-string-to-null for date/optional columns in all module APIs:
  fischerei (24 fixes), verbandsverwaltung (15 fixes), sitzungsprotokolle (2 fixes)
- CACHE_BUST=12 for full rebuild with new feature flags
2026-04-01 13:23:57 +02:00
T. Zehetbauer
98afe6aa5f feat: enhance accessibility and testing with data-test attributes and improve error handling
Some checks failed
Workflow / ⚫️ Test (push) Has been cancelled
Workflow / ʦ TypeScript (push) Has been cancelled
2026-04-01 13:22:23 +02:00
T. Zehetbauer
da8a43a3b0 Merge remote-tracking branch 'origin/main'
# Conflicts:
#	apps/web/app/[locale]/home/[account]/_components/team-account-layout-mobile-navigation.tsx
#	packages/features/course-management/src/server/api.ts
#	packages/features/event-management/src/server/api.ts
#	packages/supabase/src/get-supabase-client-keys.ts
#	pnpm-lock.yaml
2026-04-01 13:22:17 +02:00
Zaid Marzguioui
8d8f4e94ee fix(api): convert empty strings to null for date/optional DB columns
Some checks failed
Workflow / ʦ TypeScript (push) Failing after 5m37s
Workflow / ⚫️ Test (push) Has been skipped
Course and event creation Server Actions were failing with 'Something went
wrong' because empty form strings ('') were being inserted into date/uuid
columns which reject empty strings. Now converts '' to null for all
optional fields (dates, descriptions, IDs, contact info).
2026-04-01 13:14:53 +02:00
Zaid Marzguioui
72227b5aab fix(auth): revert SUPABASE_INTERNAL_URL — cookie name mismatch
Some checks failed
Workflow / ʦ TypeScript (push) Failing after 6m17s
Workflow / ⚫️ Test (push) Has been skipped
Browser creates cookies keyed by the external hostname (sb-myeasycms-*),
but server was using SUPABASE_INTERNAL_URL (sb-supabase-kong-*) — different
keys = server can't find the session = infinite 'please wait' after login.

Both client and server now use the same NEXT_PUBLIC_SUPABASE_URL (external
domain). The SSR reaches Supabase via Traefik → Kong which works fine.
2026-04-01 11:42:00 +02:00
Zaid Marzguioui
0aa2773086 fix(docker): fix EACCES on .next/cache/images — chown for nextjs user
Some checks failed
Workflow / ʦ TypeScript (push) Failing after 5m35s
Workflow / ⚫️ Test (push) Has been skipped
2026-04-01 11:33:06 +02:00
Zaid Marzguioui
08357f568e fix(docker): actually use CACHE_BUST ARG to bust Docker layer cache
Some checks failed
Workflow / ʦ TypeScript (push) Failing after 5m29s
Workflow / ⚫️ Test (push) Has been skipped
The ARG was defined but never used in a RUN/ENV command, so Docker
ignored value changes and kept using cached COPY layers from the
very first build. Adding 'RUN echo' forces cache invalidation.
2026-04-01 11:22:24 +02:00
Zaid Marzguioui
b2c9503749 fix(proxy): graceful error handling when Supabase is unreachable
Some checks failed
Workflow / ⚫️ Test (push) Has been cancelled
Workflow / ʦ TypeScript (push) Has been cancelled
Wrap getUser() calls in proxy.ts with try/catch so the proxy doesn't
crash when the Supabase client can't connect. Without this, the proxy
fails silently and Next.js returns 404 for all locale-dependent routes
(/auth/sign-in, /join, etc.) because the locale rewrite never happens.
2026-04-01 11:18:44 +02:00
Zaid Marzguioui
1687735de0 fix: merge upstream, fix locale duplicate, add missing catalog deps
Some checks failed
Workflow / ʦ TypeScript (push) Failing after 12m20s
Workflow / ⚫️ Test (push) Has been skipped
- Merged upstream/main (MakerKit latest fixes)
- Fixed locales.tsx: removed hardcoded 'de' duplicate (defaultLocale already = 'de')
- Added missing pnpm catalog entries for custom packages:
  @measured/puck, @react-pdf/renderer, @tiptap/*, exceljs, iban, papaparse
- CACHE_BUST=7 for full rebuild
2026-04-01 11:02:06 +02:00
Zaid Marzguioui
8d9d62ca56 merge: upstream/main — latest MakerKit fixes and dependency updates 2026-04-01 10:56:45 +02:00
T. Zehetbauer
abac22feb1 feat: enhance accessibility and testing with data-test attributes and improve error handling
Some checks failed
Workflow / ⚫️ Test (push) Has been cancelled
Workflow / ʦ TypeScript (push) Has been cancelled
2026-04-01 10:46:44 +02:00
T. Zehetbauer
3bcc5c70a3 feat: add data-test attributes for improved testing in various components 2026-04-01 10:23:35 +02:00
T. Zehetbauer
fd8c2cc32a feat: add cross-organization member search and template cloning functionality 2026-04-01 10:15:35 +02:00