Event Marketplace / SaaS
Plannzy
SaaS event marketplace με multi-tenant organizers + Mailgun + Turnstile
Από idea σε LIVE σε εβδομάδες, Coolify auto-deploy + edge security
Challenge
Τι έπρεπε να λυθεί
Greenfield SaaS με ζητούμενο γρήγορο time-to-market χωρίς compromise σε security. Δύο τύποι users (organizers, attendees) με τελείως διαφορετικά UX, transactional emails σε κάθε booking step (confirmation, reminder, post-event survey), και πιθανότητα bot signup spam που θα γέμιζε τη βάση με junk events.
Solution
Τι χτίσαμε
Next.js + Supabase με auth από day 1, Mailgun integration για όλα τα transactional emails, Turnstile σε signup + booking forms, και Coolify auto-deploy ώστε iteration να είναι instant. Multi-tenant data model: organizer tenants ξεχωριστά από user accounts, ένας user μπορεί να είναι organizer σε ένα brand και attendee σε άλλο.
Custom Modules
Τι το κάνει διαφορετικό
Multi-tenant organizer model
Tables: organizers (tenant), organizer_members (user-tenant bridge με role), events, bookings. Ένας user account μπορεί να είναι owner σε ένα organizer + admin σε άλλο + απλώς attendee αλλού. Switching context χωρίς logout.
Mailgun transactional pipeline
Booking confirmation email, reminder 24h πριν, post-event survey link. Templates με Mailgun template engine, fallback σε raw HTML αν template fail. Webhook tracking για bounces + opens, αυτόματο suppression σε hard bounces.
Cloudflare Turnstile σε όλα τα public forms
Signup, booking, contact, event submission. Server-side token verification με 2nd-attempt fallback αν αποτύχει network. Invisible mode σε mobile για να μη χαλάει UX, managed mode σε desktop.
Coolify auto-deploy από GitHub
Push σε main → Coolify rebuild + zero-downtime swap. Health check στο `/api/health` που τσεκάρει DB connection + Mailgun status πριν θεωρηθεί healthy. Rollback με ένα click αν health fail.
Custom auth με magic link + password fallback
Default flow: email magic link, χωρίς password. Power users μπορούν να set password για session persistence στο mobile. Rate limiting per IP + per email ώστε bot signups να μη γεμίζουν inbox.
Per-organizer dashboard με metrics
Bookings count, revenue, attendee list με export CSV, refund flow. Organizer βλέπει μόνο δικά του events + bookings μέσω RLS policy `organizer_id = auth.organizer_id()`.
GlitchTip error tracking + uptime
Self-hosted GlitchTip στο errors.wideview.dev. Frontend + backend errors capture, source maps για readable stacks. Uptime monitor κάθε 5 λεπτά στο public homepage + organizer login.
Live από production
Πώς δείχνει στην πράξη
Screenshots από το ζωντανό site. Τιμές, ονόματα πελατών και ευαίσθητα στοιχεία είναι μασκαρισμένα με skeleton blur ώστε να φαίνεται μόνο το functionality.

Mobile
Hero mobile με 3-filter search για event vendors

Desktop
Hero desktop με luxury wedding aesthetic

Mobile
Explore mobile, listing cards με reviews + location

Desktop
Explore desktop με 5-axis filtering

Desktop
Signup modal με optional phone και T&C checkbox
Tech Stack
Με τι χτίστηκε
Όλο το stack είναι τυποποιημένο. Δεν βασίζεται σε κρυφά παραμετροποιημένα plugins ή proprietary cloud services. Μπορεί να μεταφερθεί ή να συντηρηθεί από οποιαδήποτε ομάδα γνωρίζει το stack.
FAQ
Συχνές ερωτήσεις
Πόσο γρήγορα μπορεί να βγει σε production ένα SaaS marketplace;
Το Plannzy πήγε από idea σε LIVE σε 6 εβδομάδες. Στήθηκε Next.js + Supabase με auth από day 1, multi-tenant data model, Mailgun integration για όλα τα transactional emails, Cloudflare Turnstile σε όλα τα public forms, και Coolify auto-deploy ώστε iteration να γίνεται σε λεπτά. Το secret είναι χρήση proven stack αντί για custom-everything: Supabase για auth + DB + RLS, Mailgun για deliverability, Cloudflare για security edge.
Πώς αποφεύγεται bot signup spam σε νέο SaaS;
Στήσαμε Cloudflare Turnstile σε signup, booking, contact και event submission forms, με invisible mode σε mobile για να μη χαλάει UX και managed mode σε desktop. Server-side token verification έχει 2nd-attempt fallback αν αποτύχει network. Επίσης rate limiting per IP + per email στο magic link auth ώστε scripted signups να μη γεμίζουν τη βάση με junk events πριν καν ξεκινήσει το product.
Μπορεί ένας user να είναι organizer σε ένα brand και attendee σε άλλο ταυτόχρονα;
Ναι. Το data model είναι organizers (tenant) + organizer_members (user-tenant bridge με role) + events + bookings. Ένα user account μπορεί να είναι owner σε ένα organizer + admin σε άλλο + απλώς attendee αλλού. Switching context γίνεται χωρίς logout, και τα RLS policies (organizer_id = auth.organizer_id()) εξασφαλίζουν ότι ο organizer βλέπει μόνο δικά του events + bookings.
Στηρίζεται email magic link login ή χρειάζεται password;
Default flow είναι email magic link, χωρίς password. Power users μπορούν να set password για session persistence στο mobile (όπου το magic link είναι λιγότερο convenient). Έτσι αποφεύγεις την password fatigue που έχει frustrate τους περισσότερους signups, και οι heavy users έχουν την επιλογή να κρατήσουν session ζωντανή.
Πώς γίνεται deploy νέας version χωρίς downtime;
Push σε main branch → Coolify rebuild + zero-downtime swap. Health check στο /api/health που τσεκάρει DB connection + Mailgun status πριν θεωρηθεί healthy το νέο container. Αν health fail, το παλιό container παραμένει live και rollback γίνεται με ένα click. GlitchTip στο errors.wideview.dev πιάνει frontend + backend errors με source maps, και uptime monitor κάθε 5 λεπτά τσεκάρει public homepage + organizer login.