Oracle3
Oracle3: 예측시장 거래 엔진·MCP 서버
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
Web app sederhana untuk mencatat iuran bulanan (IPL) warga. Dibuat dengan Next.js + Supabase. Cocok untuk pemakaian oleh 1-2 pengurus (RT/RW/bendahara), gratis untuk skala kecil.README 전문 보기 ↗
Web app sederhana untuk mencatat iuran bulanan (IPL) warga. Dibuat dengan Next.js + Supabase. Cocok untuk pemakaian oleh 1-2 pengurus (RT/RW/bendahara), gratis untuk skala kecil.
Fitur:
households_public/payments_public — data pribadi tidak pernah
terbuka lewat halaman ini)/bayar-ipl (link "Bayar IPL" di nav dan di kartu "IPL Bulan
Ini" pada Dashboard), tanpa perlu pilih rumah (otomatis rumahnya sendiri,
tidak bisa klaim untuk rumah lain)supabase/schema.sql di repo ini.
Ini akan membuat tabel households, payments, expenses, settings,
activity_log, profiles (role), bucket Storage bukti-transfer
(privat, untuk foto transfer), beserta Row Level Security-nya. File ini
aman dijalankan ulang kalau kamu update schema-nya nanti (idempotent).Project URL dan anon public key.Setiap user punya satu baris di tabel profiles dengan kolom role
(warga atau pengurus). Default untuk user baru adalah warga
(read-only) — kalau kamu buat akun baru lewat Authentication → Users, dia
otomatis dapat role warga dan hanya bisa lihat Dashboard + Laporan.
Untuk menjadikan seseorang pengurus (akses penuh: catat pembayaran, kelola warga, ubah pengaturan), jalankan di SQL Editor:
update profiles set role = 'pengurus'
where id = (select id from auth.users where email = '[email protected]');
Akun yang sudah ada sebelum fitur role ini ditambahkan otomatis jadi
pengurus (tidak ada yang kehilangan akses saat migrasi).
Pengurus juga bisa membuat login warga baru langsung dari halaman
Pengaturan di app (bukan lewat Supabase dashboard) — akun yang dibuat
lewat panel ini selalu jadi role warga dan wajib dipilihkan rumahnya
(household_id di profiles), supaya pas login dia langsung lihat status
iuran rumahnya sendiri di Dashboard ("Info Anda"). Untuk pengurus tetap
lewat SQL di atas. Fitur ini butuh service_role key (lihat langkah 2 di
bawah).
npm install
cp .env.local.example .env.local
# isi NEXT_PUBLIC_SUPABASE_URL dan NEXT_PUBLIC_SUPABASE_ANON_KEY
# dari Project Settings > API di Supabase
#
# isi juga SUPABASE_SERVICE_ROLE_KEY dari Project Settings > API > service_role
# (secret, JANGAN pakai prefix NEXT_PUBLIC_, dan jangan commit ke git — key
# ini bisa bypass semua RLS, hanya dipakai server-side untuk fitur "Tambah
# User Warga" di halaman Pengaturan, dan untuk form "Bayar IPL" tanpa login
# di halaman Login)
#
# opsional: isi FONNTE_TOKEN untuk fitur kirim WhatsApp — daftar akun gratis
# di fonnte.com, hubungkan nomor WhatsApp (scan QR), lalu ambil token dari
# dashboard-nya. Tanpa ini, tombol "Kirim" di Pengaturan akan gagal dengan
# pesan error yang jelas, fitur lain tetap jalan normal.
#
# opsional juga: isi WABLAS_TOKEN + WABLAS_BASE_URL untuk pakai Wablas
# sebagai alternatif — gateway mana yang benar-benar dipakai diatur lewat
# toggle "Layanan WhatsApp" di halaman Pengaturan (settings.whatsapp_provider
# di database), bukan dari env ini. Berguna kalau Fonnte sedang tidak
# mengirim dengan baik. WABLAS_BASE_URL adalah subdomain server akunmu
# (terlihat di dashboard Wablas, mis. https://sby.wablas.com). Kalau Wablas
# menolak dengan pesan "IP not authorized" (server ini tidak punya IP
# tetap), isi juga WABLAS_SECRET_KEY (nilai terpisah di halaman yang sama
# dengan token) — Wablas menerima permintaan dari IP manapun kalau secret
# key ini disertakan.
#
# opsional: isi WABLAS_WEBHOOK_SECRET (string acak bebas) untuk fitur
# "Percakapan WhatsApp" di halaman Humas. Dipakai oleh dua webhook Wablas
# yang beda, tiap satu diisi terpisah di dashboard Wablas:
# 1. Pesan masuk (balasan warga) — Device > Setting > Webhook Receive,
# isi https://<domain-kamu>/api/webhooks/wablas?token=<isi
# WABLAS_WEBHOOK_SECRET di sini>
# 2. Status kirim (terkirim/diterima/dibaca) — field "Tracking URL" di
# Device Setting (atau lewat API POST /api/device/change-tracking-url
# kalau tidak ada di dashboard), isi
# https://<domain-kamu>/api/webhooks/wablas-tracking?token=<token yang
# sama>
# Tanpa ini, pesan yang dikirim dari Kiwari tetap tercatat sebagai
# "Terkirim" generik — hanya status real-time dan balasan masuk yang
# kosong.
npm run dev
Buka http://localhost:3000, login pakai akun yang dibuat di langkah 1.4.
.env.local
(NEXT_PUBLIC_SUPABASE_URL, NEXT_PUBLIC_SUPABASE_ANON_KEY,
SUPABASE_SERVICE_ROLE_KEY, dan FONNTE_TOKEN kalau dipakai).Catatan: project Supabase gratis akan "tidur" otomatis setelah 7 hari tanpa aktivitas, tapi akan aktif lagi otomatis begitu ada request (jeda beberapa detik saja). Tidak masalah untuk pemakaian bulanan seperti ini.
households — daftar rumah/warga (no. rumah, nama, no. HP, status aktif).
Kolom alt_names: nama lain yang bisa jadi pengirim transfer untuk unit
itu (mis. istri/suami), dipisah koma — dipakai OCR bukti transfer di
halaman Login supaya tetap cocok walau yang transfer bukan kepala
keluarga yang terdaftarpayments — satu baris = satu warga bayar untuk satu bulan/tahun tertentu
(unique per warga+bulan+tahun, jadi tidak bisa double-input). Kolom
status: pending (klaim mandiri dari halaman Login, belum diverifikasi)
atau confirmed (dicatat pengurus, atau klaim yang sudah dikonfirmasi) —
hanya confirmed yang terhitung Lunas di Dashboard/Laporan/export CSV.
Kolom receipt_path: path file bukti transfer di Storage, kalau diuploadexpenses — pengeluaran kas (tanggal, keterangan, jumlah, dicatat oleh);
hanya pengurus yang bisa insert, tapi semua user login bisa baca (tidak
ada data pribadi warga di tabel ini)settings — nominal iuran bulanan defaultactivity_log — jejak siapa mencatat/mengubah apa (khusus pengurus)profiles — role tiap user (warga / pengurus) + household_id yang
menautkan login warga ke rumahnya, satu baris per akun loginhouseholds_public / payments_public — view read-only untuk halaman
Laporan versi warga: cuma expose unit_no + status bayar, tanpa nama,
no. HP, catatan, atau siapa yang mencatatKarena ini data uang, sebaiknya rutin (mis. tiap bulan) export CSV dari halaman Laporan sebagai cadangan di luar database. Supabase juga punya backup otomatis di paket berbayar, tapi export manual sudah cukup untuk skala ini.