Platform Manajemen Acara & Partisipasi untuk LSM Indonesia
Bernas adalah platform SaaS modern yang dirancang untuk membantu Lembaga Swadaya Masyarakat (LSM) di Indonesia mengelola acara, melacak intensi partisipasi, mengorganisir sumber daya, dan mencocokkan keterampilan dengan peluang.
- π Manajemen Acara - Buat, organisir, dan kelola acara dengan tag dan pelacakan partisipasi
- β Manajemen Tugas - Pecah acara menjadi tugas-tugas actionable dengan persyaratan keterampilan
- π₯ Intensi Partisipasi - Lacak siapa yang tertarik, konfirmasi, atau tidak tersedia untuk acara
- π Perpustakaan Sumber Daya - Penyimpanan terpusat untuk dokumen, tautan, dan sumber daya bersama dengan tagging
- π― Sistem Keterampilan - Cocokkan keterampilan anggota dengan kebutuhan acara dan tugas
- π·οΈ Sistem Tag - Kategorikan acara dan sumber daya dengan tag berwarna yang dapat dikustomisasi
- π€ Manajemen Anggota - Kontrol akses berbasis peran dengan izin granular
- π Onboarding Organisasi - Alur bergabung yang efisien dengan persetujuan admin
- π Dukungan Multi-Organisasi - Beralih antar organisasi dengan mudah
- Framework: Next.js 16 (App Router) + React 19
- Bahasa: TypeScript
- Styling: Tailwind CSS 4
- Komponen UI: shadcn/ui (Radix UI primitives)
- Database: Supabase (PostgreSQL)
- Autentikasi: Supabase Auth (OAuth + Magic Links)
- Storage: Supabase Storage
- RLS: Row Level Security untuk proteksi data
@tanstack/react-table- Tabel data advanced dengan sorting/filteringsonner- Notifikasi toastnext-intl- Internasionalisasi (i18n ready)lucide-react- Library ikonnext-themes- Manajemen tema
- Node.js 18+
- npm/yarn/pnpm
- Supabase CLI (untuk pengembangan lokal)
-
Clone repository
git clone https://github.com/yourusername/bernas.git cd bernas -
Install dependencies
npm install
-
Setup environment variables
cp .env.example .env.local
Konfigurasi environment variables:
NEXT_PUBLIC_SUPABASE_URL=your_supabase_url NEXT_PUBLIC_SUPABASE_ANON_KEY=your_supabase_anon_key
-
Jalankan Supabase lokal (opsional)
npx supabase@latest start
Akses Supabase Studio di http://127.0.0.1:54323
-
Jalankan development server
npm run dev
Buka http://localhost:3000 untuk melihat aplikasi
bernas/
βββ src/
β βββ app/ # Halaman Next.js App Router
β β βββ dashboard/ # Rute aplikasi utama
β β βββ auth/ # Alur autentikasi
β β βββ onboarding/ # Onboarding organisasi
β βββ components/ # Komponen React
β β βββ ui/ # shadcn/ui primitives
β β βββ administration/ # Komponen panel admin
β β βββ members/ # Manajemen anggota
β β βββ organization/ # Komponen organisasi
β β βββ resources/ # Perpustakaan sumber daya
β β βββ skills/ # Manajemen keterampilan
β β βββ tags/ # Manajemen tag
β βββ lib/ # Utilities dan helpers
β βββ supabase/ # Klien Supabase
β βββ permissions.ts # Helper izin
βββ supabase/
β βββ migrations/ # Migrasi database
βββ AGENTS.md # Dokumentasi teknis
βββ FEATURES.md # Spesifikasi produk
βββ PATTERNS.md # Pola kode & best practices
organizations- Data organisasi dengan kode join dan avatarorg_members- Record keanggotaan dengan penugasan roleroles- Role khusus per organisasipermissions- Izin sistem (predefined)role_permissions- Pemetaan role-permissionjoin_requests- Alur permintaan bergabung organisasi
events- Data acaratasks- Tugas yang terkait dengan acaraparticipation- Intensi partisipasi anggotaevent_tags- Tag UPPERCASE untuk kategorisasievent_tag_links- Relasi acara-tagevent_skill_links- Keterampilan yang dibutuhkan untuk acara
resources- Perpustakaan sumber daya dengan URL/fileresource_tag_links- Relasi sumber daya-tagskills- Keterampilan lowercase (terpisah dari tag)member_skills- Penugasan keterampilan anggotatask_skill_links- Keterampilan yang dibutuhkan untuk tugas
- Sign-in:
/auth/sign-in(Google OAuth di produksi, magic link di lokal) - Callback:
/auth/callback - Sign-out:
/auth/sign-out
- Kontrol akses berbasis peran (RBAC)
- Izin granular (mis.,
members.remove,events.create) - Admin bypass (admin memiliki semua izin)
- Kebijakan RLS menerapkan izin di tingkat database
# Jalankan Supabase lokal
npx supabase@latest start
# Hentikan Supabase lokal
npx supabase@latest stop
# Reset database (terapkan migrasi + seed data)
npx supabase@latest db reset- App: http://localhost:3000
- Supabase Studio: http://127.0.0.1:54323
- Mailpit (email lokal): http://127.0.0.1:54324
Database sudah dilengkapi dengan data testing komprehensif untuk development lokal:
# Reset database dan load data seed
npx supabase db resetTest Accounts (Password: password123):
alice@test.com- Admin (semua izin)bob@test.com- Coordinator (bisa create/edit)charlie@test.com- Member (izin terbatas)diana@test.com- Member (untuk testing skill)eve@test.com- Belum onboarding
Data Seed Includes:
- 1 organisasi (Ruang Baca Dino π¦)
- 3 acara dengan partisipasi
- 10 tugas dalam berbagai status
- 6 keterampilan dengan penugasan anggota
- 4 tag acara dengan warna
- 3 sumber daya
Quick Test URL:
http://localhost:3000/ruang-baca-dino/events/e1111111-1111-1111-1111-111111111111
π Panduan Testing Lengkap: TESTING_GUIDE.md
- AGENTS.md - Stack teknis, arsitektur, dan pola pengembangan
- FEATURES.md - Spesifikasi fitur dan roadmap produk
- PATTERNS.md - Pola kode, best practices, dan konvensi
- TESTING_GUIDE.md - Panduan testing dengan data seed
- Open Design - Border minimal, layout lapang
- Mobile-First - Desain responsif dengan breakpoint Tailwind
- Accessible - Dibangun di atas Radix UI primitives
- Konsisten - Sistem desain berbasis shadcn/ui
Kontribusi sangat diterima! Silakan baca file dokumentasi untuk pola kode dan konvensi sebelum mengirim PR.
Dibangun dengan β€οΈ untuk komunitas LSM di Indonesia.
Dibuat dengan Next.js, Supabase, dan Tailwind CSS