Commit Graph
22 Commits
Author SHA1 Message Date
Zaid Marzguioui 72227b5aab fix(auth): revert SUPABASE_INTERNAL_URL — cookie name mismatch
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
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
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
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
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
Zaid Marzguioui c9f8101698 fix(docker): add SUPABASE_INTERNAL_URL for server-side Supabase access
Workflow / ʦ TypeScript (push) Failing after 6m31s
Workflow / ⚫️ Test (push) Has been skipped
Server-side code (proxy.ts, SSR, API routes) now uses SUPABASE_INTERNAL_URL
(http://supabase-kong:8000) instead of the external domain. This avoids
hairpin NAT / DNS resolution issues where Docker containers can't reach
their own external domain through the reverse proxy.

Browser-side JS still uses the external URL (baked at build time).
2026-03-31 22:55:15 +02:00
Zaid Marzguioui d27fab7505 fix: remove conflicting middleware.ts, proxy.ts already handles locale routing
Workflow / ⚫️ Test (push) Has been cancelled
Workflow / ʦ TypeScript (push) Has been cancelled
Next.js 16 uses proxy.ts instead of middleware.ts. The existing proxy.ts
already includes next-intl locale routing + auth guards. CACHE_BUST=5.
2026-03-31 22:49:35 +02:00
Zaid Marzguioui 4450776826 fix(i18n): add next-intl middleware for locale routing
Workflow / ʦ TypeScript (push) Has been cancelled
Workflow / ⚫️ Test (push) Has been cancelled
The middleware was deleted in the Next.js 16 upgrade but is still required
by next-intl to handle locale detection and URL rewriting. Without it,
/auth/sign-in can't resolve to [locale=de]/auth/sign-in → 404.

Uses createMiddleware from next-intl/middleware with the shared routing config.
2026-03-31 22:47:55 +02:00
Zaid Marzguioui e263bd93f8 fix(docker): restore runtime NEXT_PUBLIC vars, add DEFAULT_LOCALE build arg
Workflow / ⚫️ Test (push) Has been cancelled
Workflow / ʦ TypeScript (push) Has been cancelled
- Restore NEXT_PUBLIC_SUPABASE_URL + NEXT_PUBLIC_SUPABASE_PUBLIC_KEY at runtime
  (server code reads from process.env — needs these for SSR)
- Use external URL (API_EXTERNAL_URL) for both build and runtime
- Add NEXT_PUBLIC_DEFAULT_LOCALE=de as Dockerfile build arg so next-intl
  compiles with the correct default locale (was falling back to 'en')
- CACHE_BUST=3 to force full rebuild
2026-03-31 22:44:06 +02:00
Zaid Marzguioui f3f54da726 fix(docker): remove runtime NEXT_PUBLIC_SUPABASE_URL override
Workflow / ⚫️ Test (push) Has been skipped
Workflow / ʦ TypeScript (push) Failing after 5m36s
NEXT_PUBLIC_ vars are baked into the Next.js bundle at build time.
Setting them at runtime with Docker-internal URLs (http://supabase-kong:8000)
causes SSR to fail with 500 because RSC uses the runtime value which
is unreachable from the browser. Let the build-time value
(https://myeasycms.frontieralgorithmics.de) be used everywhere.
2026-03-31 22:18:05 +02:00
Zaid Marzguioui 7e7da0b465 fix(docker): bust cache to rebuild with correct SUPABASE_URL
Workflow / ʦ TypeScript (push) Failing after 5m33s
Workflow / ⚫️ Test (push) Has been skipped
CACHE_BUST=1→2 forces Docker to re-run 'pnpm install' and 'next build'
so NEXT_PUBLIC_SUPABASE_URL=https://myeasycms.frontieralgorithmics.de
gets baked into the client-side JS bundle.
2026-03-31 21:59:23 +02:00
Zaid Marzguioui 1fbe8a630c fix(docker): remove network_mode for Dokploy compatibility
Workflow / ʦ TypeScript (push) Failing after 5m32s
Workflow / ⚫️ Test (push) Has been skipped
Dokploy injects 'networks' into all compose services for Traefik routing,
which is mutually exclusive with 'network_mode: service:supabase-kong'.

Changes:
- Remove network_mode from app service
- App server-side Supabase URL: http://supabase-kong:8000 (Docker DNS)
- App browser-side Supabase URL: ${API_EXTERNAL_URL} (external domain)
- Kong catch-all route: app:3000 instead of localhost:3000
2026-03-31 18:48:59 +02:00
Zaid Marzguioui cae6657c53 fix(docker): simplify migrate command, remove heredoc
Workflow / ʦ TypeScript (push) Failing after 5m36s
Workflow / ⚫️ Test (push) Has been skipped
Replace shell heredoc with multiple -c flags for psql. Heredoc syntax
can cause issues in some Docker Compose implementations.
2026-03-31 18:39:25 +02:00
Zaid Marzguioui e7e5d4126a fix(docker): fix healthchecks for PostgREST, Storage, Studio
Workflow / ʦ TypeScript (push) Failing after 5m35s
Workflow / ⚫️ Test (push) Has been skipped
- PostgREST: replace wget healthcheck with TCP socket check — PostgREST
  v12 is a minimal image without wget/curl
- All services: add start_period to healthchecks to avoid premature
  unhealthy marking during initial startup
2026-03-31 18:30:06 +02:00
Zaid Marzguioui a2aa5598b5 fix(docker): make all services depend on db-migrate completion
Workflow / ʦ TypeScript (push) Failing after 5m33s
Workflow / ⚫️ Test (push) Has been skipped
PostgREST, Auth, Realtime, Storage, and Meta were starting before db-migrate
set role passwords. On existing volumes (where initdb didn't re-run),
these services would fail to authenticate to Postgres. Now all services
wait for db-migrate to complete successfully before starting.
2026-03-31 18:15:58 +02:00
Zaid Marzguioui 5f3d23273c fix(docker): remove host port bindings, add idempotent role passwords, Kong app route
Workflow / ʦ TypeScript (push) Failing after 5m33s
Workflow / ⚫️ Test (push) Has been skipped
Dokploy deployment fixes:
- Remove all host port bindings (Kong 8000/8443/3000, Studio 54323, Inbucket 54324,
  DB 5432) — Traefik handles external routing in Dokploy, host ports conflict
  with other services on the shared server
- Add idempotent ALTER ROLE password commands to db-migrate service — ensures
  role passwords are set even when DB volume persists across deployments
  (docker-entrypoint-initdb.d only runs on empty data dirs)
- Add catch-all app route to Kong config — proxies / to localhost:3000
  (Next.js app via network_mode: service:supabase-kong)
2026-03-31 18:09:10 +02:00
Zaid Marzguioui a1470bd9f4 fix(docker): use build args for NEXT_PUBLIC vars, remove host port exposure
Workflow / ʦ TypeScript (push) Failing after 5m37s
Workflow / ⚫️ Test (push) Has been skipped
- Dockerfile: replace hardcoded NEXT_PUBLIC env vars with ARG+ENV pattern
  so the same Dockerfile works for any environment (local dev, Dokploy prod)
- docker-compose.yml: pass SUPABASE_ANON_KEY as build arg to Dockerfile
- docker-compose.yml: remove DB port 5432 exposure (not needed on server,
  services communicate via Docker network)
2026-03-31 17:57:50 +02:00
Zaid Marzguioui ebd0fd4638 feat: complete CMS v2 with Docker, Fischerei, Meetings, Verband modules + UX audit fixes
Workflow / ʦ TypeScript (push) Failing after 6m26s
Workflow / ⚫️ Test (push) Has been skipped
Major changes:
- Docker Compose: full Supabase stack (11 services) equivalent to supabase CLI
- Fischerei module: 16 DB tables, waters/species/stocking/catch books/competitions
- Sitzungsprotokolle module: meeting protocols, agenda items, task tracking
- Verbandsverwaltung module: federation management, member clubs, contacts, fees
- Per-account module activation via Modules page toggle
- Site Builder: live CMS data in Puck blocks (courses, events, membership registration)
- Public registration APIs: course signup, event registration, membership application
- Document generation: PDF member cards, Excel reports, HTML labels
- Landing page: real Com.BISS content (no filler text)
- UX audit fixes: AccountNotFound component, shared status badges, confirm dialog,
  pagination, duplicate heading removal, emoji→badge replacement, a11y fixes
- QA: healthcheck fix, API auth fix, enum mismatch fix, password required attribute
2026-03-31 16:35:46 +02:00
Zaid Marzguioui 16648c92eb fix: Dockerfile — use pnpm start instead of standalone output
Workflow / ʦ TypeScript (push) Failing after 7m1s
Workflow / ⚫️ Test (push) Has been skipped
2026-03-29 23:28:42 +02:00
Zaid Marzguioui 1294caa7fa feat: MyEasyCMS v2 — Full SaaS rebuild
Workflow / ⚫️ Test (push) Has been cancelled
Workflow / ʦ TypeScript (push) Has been cancelled
Complete rebuild of 22-year-old PHP CMS as modern SaaS:

Database (15 migrations, 42+ tables):
- Foundation: account_settings, audit_log, GDPR register, cms_files
- Module Engine: modules, fields, records, permissions, relations + RPC
- Members: 45+ field member profiles, departments, roles, honors, SEPA mandates
- Courses: courses, sessions, categories, instructors, locations, attendance
- Bookings: rooms, guests, bookings with availability
- Events: events, registrations, holiday passes
- Finance: SEPA batches/items (pain.008/001 XML), invoices
- Newsletter: campaigns, templates, recipients, subscriptions
- Site Builder: site_pages (Puck JSON), site_settings, cms_posts
- Portal Auth: member_portal_invitations, user linking

Feature Packages (9):
- @kit/module-builder — dynamic low-code CRUD engine
- @kit/member-management — 31 API methods, 21 actions, 8 components
- @kit/course-management, @kit/booking-management, @kit/event-management
- @kit/finance — SEPA XML generator + IBAN validator
- @kit/newsletter — campaigns + dispatch
- @kit/document-generator — PDF/Excel/Word
- @kit/site-builder — Puck visual editor, 15 blocks, public rendering

Pages (60+):
- Dashboard with real stats from all APIs
- Full CRUD for all 8 domains with react-hook-form + Zod
- Recharts statistics
- German i18n throughout
- Member portal with auth + invitation system
- Public club websites via Puck at /club/[slug]

Infrastructure:
- Dockerfile (multi-stage, standalone output)
- docker-compose.yml (Supabase self-hosted + Next.js)
- Kong API gateway config
- .env.production.example
2026-03-29 23:17:38 +02:00
Zaid Marzguioui 61ff48cb73 Initial state for GitNexus analysis 2026-03-29 19:44:57 +02:00