Alle Projekte
Live

Plattform von Bora Bulir

2026·Mitgründer und Vizepräsident · Entwickler
Next.jsTypeScriptSupabasePostgreSQLTailwindPWAnext-intlVercel

Öffentliche Website und Admin-Panel für den Verein Bora Bulir — Frontend mit Next.js, Backend mit Supabase und Row Level Security, statisch generierte öffentliche Seiten mit On-Demand-Revalidierung.

Kontext

Der Verein Bora Bulir ist ein gemeinnütziger Verein aus Portugal, der sich der Kulturförderung und dem Erhalt des Kulturerbes in der Region Barroso widmet. Ich bin Mitgründer und habe seine digitale Plattform entwickelt: die öffentliche Website unter bulireventos.com und das Admin-Panel, mit dem das Team sie verwaltet.

Frontend

  • Next.js 14 (App Router) + TypeScript + Tailwind, mit eigenem Design auf Basis von Figma
  • Startseite mit Countdown zum nächsten Event, dazu Events, News, Galerie und eine Merch-Seite
  • Installierbare PWA mit einer eigenen Seite /instalar, die iOS-Nutzern zeigt, wie sie die App zum Home-Bildschirm hinzufügen
  • i18n PT/EN mit next-intl

Backend (Supabase)

  • PostgreSQL-Schema mit Tabellen für events, photos, news_posts, sponsors, newsletter_subscribers, admins, site_settings sowie Merch-Kollaborationen und -Fotos
  • Row Level Security auf allen Tabellen
  • Storage Buckets für Galerie, Events, Sponsoren, News und Videos

Admin-Panel

  • Anmeldung mit E-Mail und Passwort, Zugriff über die Tabelle admins gesteuert
  • Mobile-first, damit Inhalte direkt vom Smartphone aus aktualisiert werden können
  • Verwaltet sämtliche Inhalte der Website — einschliesslich der Merch-Seite zur Kollaboration mit DiffyClo

Sicherheit

Ein Audit vor dem Launch hat Server Actions aufgedeckt, die ausgeführt wurden, ohne zu prüfen, ob der Aufrufer Admin ist. Ich habe sie behoben, indem ich jede Admin-Action mit einer assertAdmin-Prüfung abgesichert habe.

Performance

Das Layout machte die gesamte Website dynamisch, und im kostenlosen Supabase-Plan dauerten Antworten 7 bis 21 Sekunden. Ich habe die öffentlichen Seiten auf statische Generierung (SSG) mit On-Demand-Revalidierung pro Inhaltstyp (revalidateTag) umgestellt und /admin dynamisch belassen.