OpenMasjid
Proyek dari daftar awesome-indonesia.
Proyek dari daftar awesome-indonesia.
Platform digital terpadu untuk DKM (Dewan Kemakmuran Masjid) — satu aplikasi untuk mengelola profil masjid, jadwal sholat, kegiatan kajian, pendaftaran jamaah, hingga tampilan layar TV di ruang utama.
🎯 Dibuat dengan Metode Vibe Coding
✨ Aplikasi ini dibangun menggunakan metode VIBE CODING ✨
Pendekatan pengembangan modern yang memanfaatkan AI sebagai partner coding untuk membangun aplikasi production-grade dengan lebih cepat dan efisien.
👉 Pelajari selengkapnya di: mahirvibecoding.com 🚀
⚠️ Status: Dalam Pengembangan (Not Production Ready)
Project ini masih dalam tahap pengembangan aktif dan belum siap digunakan di lingkungan produksi. Fitur, schema database, dan API masih dapat berubah sewaktu-waktu tanpa pemberitahuan.
Untuk info lebih lengkap, kolaborasi, atau pertanyaan, hubungi @codingtengahmalam di Instagram atau Threads.
OpenMasjid adalah platform multi-masjid: satu deployment melayani banyak masjid, masing-masing
di alamatnya sendiri (openmasjid.id/<nama-masjid>) dengan data, akun, dan pengurus yang terisolasi
penuh (Row Level Security PostgreSQL). Masjid baru bisa mendaftar sendiri di /register.
Setiap masjid mendapatkan tiga permukaan utama:
Dibangun dengan Nuxt 4 + Nuxt UI v4, PostgreSQL via Drizzle ORM, validasi Zod, dan autentikasi Better Auth. Panduan teknis lengkap untuk kontributor & AI agent ada di AGENTS.md.
adhan dari koordinat & metode masjid (default Kemenag RI), dengan next prayer countdown.Intl) berdampingan dengan tanggal Masehi.users), dengan status hadir/belum dan tombol check-in untuk operator.admin (pengurus DKM), viewer (read-only DKM), jamaah (jamaah terdaftar)./admin hanya untuk role admin & viewer.created_at / updated_at / created_by / updated_by).| Lapisan | Teknologi |
|---|---|
| Framework | Nuxt 4, Vue 3, TypeScript |
| UI | Nuxt UI v4 (Tailwind CSS v4) + Lucide icons |
| Validasi | Zod v4 + drizzle-zod (skema dipakai bersama server & form) |
| ORM & Migrasi | Drizzle ORM + drizzle-kit (dengan relations) |
| Database | PostgreSQL 15+ (mis. Supabase) |
| Auth | Better Auth (email & password, sesi cookie, role) |
| Waktu Sholat | adhan |
| QR Code | qrcode |
| Package Manager | Bun |
Galeri singkat dari tiga permukaan OpenMasjid. Klik gambar untuk versi penuh — file aslinya tersimpan di docs/screenshot/.
| Rute | Mode | Deskripsi |
|---|---|---|
/ |
Publik | Landing: cari masjid (nama/kota) → beranda masjid, plus direktori |
/register |
Publik | Daftarkan masjid baru: cukup nama masjid, nama, email, password |
/<masjid> |
Publik | Portal jamaah — profil, jadwal sholat, pengumuman, petugas & kegiatan |
/<masjid>/events/<slug> |
Publik | Detail kegiatan & pendaftaran jamaah |
/<masjid>/my-tickets |
Jamaah | Tiket QR kegiatan yang diikuti |
/<masjid>/announcements |
Publik | Semua pengumuman yang sedang tayang |
/<masjid>/duties |
Publik | Jadwal petugas per pekan |
/<masjid>/display |
Publik TV | Tampilan layar besar |
/<masjid>/transparency |
Publik | Ringkasan keuangan untuk jamaah |
/<masjid>/auth/login |
Auth | Login pengurus/jamaah masjid tersebut |
/<masjid>/auth/register |
Auth | Buat akun jamaah |
/<masjid>/auth/forgot-password, /reset-password |
Auth | Reset password |
/<masjid>/auth/accept-invite |
Auth | Terima undangan pengurus |
/<masjid>/admin |
Admin | Dashboard (+ checklist lengkapi profil) |
/<masjid>/admin/setup |
Admin | Wizard lengkapi profil setelah daftar |
/<masjid>/admin/announcements |
Admin | Pengumuman |
/<masjid>/admin/duties |
Admin | Jadwal petugas |
/<masjid>/admin/check-in |
Admin | Check-in tiket QR |
/<masjid>/admin/events/** |
Admin | Kegiatan: daftar, detail, tambah, ubah |
/<masjid>/admin/registrants |
Admin | Pendaftar & check-in |
/<masjid>/admin/categories |
Admin | Kategori kegiatan |
/<masjid>/admin/cashbook/** |
Admin | Buku kas: ringkasan, transaksi, akun, kategori, laporan |
/<masjid>/admin/settings |
Admin | Pengaturan masjid & jadwal sholat |
/<masjid>/admin/team |
Pemilik | Kelola pengurus & undangan |
Akun berlaku per masjid: pengurus dan jamaah masjid A tidak bisa masuk ke masjid B dengan akun yang sama.
Peran: admin (kelola data), viewer (lihat saja), dan pemilik (admin yang juga mengelola pengurus).
bun install
.env.example menjadi .env lalu isi DATABASE_URL, DATABASE_DIRECT_URL,
BETTER_AUTH_SECRET (openssl rand -base64 32), BETTER_AUTH_URL, SEED_TENANT_*, dan SEED_ADMIN_*.bun run db:migrate # terapkan migrasi (pakai DATABASE_DIRECT_URL / role owner)
# sekali saja: buat role aplikasi tanpa BYPASSRLS, lalu pakai di DATABASE_URL
psql "$DATABASE_DIRECT_URL" -f server/db/sql/app-role.sql
bun run db:seed # satu masjid contoh + akun pemiliknya
# opsional, data contoh:
bun run db:seed:events
bun run db:seed:cashbook
bun run dev
Aplikasi tersedia di http://localhost:3000; masjid contoh ada di /<SEED_TENANT_SLUG>, CMS-nya di
/<SEED_TENANT_SLUG>/auth/login dengan akun SEED_ADMIN_*. Masjid lain bisa didaftarkan di /register.Pemeriksaan kualitas & build production:
bun run lint
bun run typecheck
bun run test # unit test
bun run test:isolation # uji isolasi antar masjid (server harus jalan)
bun run build && bun run preview
Project internal — TBD.