Synaplan
開源 AI 平台,供企業使用:自行託管的 AI 代理、符合 GDPR 的聊天機器人小工具、RAG 知識庫、WhatsApp 與 Outlook AI、MCP、多模型路由。Docker、Kubernetes 或託管於 Germ
AI 翻譯
尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證正在載入完整 README。 以下為已儲存的摘錄。
Nama InsMobile (inspeksi mobile) adalah nama sistem ini dalam Rancangan Aktualisasi Arif Rahman Hakim — PD CPNS Kabupaten Lima Puluh Kota 2026. Website pemeriksaan K3RS untuk RSUD dr. Achmad Darwis. Tiga formulir diisi dari ponsel saat ronde, tersimpan di Neon Postgres, dan direkap di /admin dengan unduhan Excel. Menggantikan tiga Google Form yang sebelumnya dipakai. Pertanyaan, pilihan jawaban, dan status wajib-isi disalin apa adanya dari form asli.檢視完整 README ↗
Nama InsMobile (inspeksi mobile) adalah nama sistem ini dalam Rancangan Aktualisasi Arif Rahman Hakim — PD CPNS Kabupaten Lima Puluh Kota 2026.
Website pemeriksaan K3RS untuk RSUD dr. Achmad Darwis. Tiga formulir
diisi dari ponsel saat ronde, tersimpan di Neon Postgres, dan direkap di
/admin dengan unduhan Excel.
Menggantikan tiga Google Form yang sebelumnya dipakai. Pertanyaan, pilihan jawaban, dan status wajib-isi disalin apa adanya dari form asli.
| Formulir | Rute | Jumlah pertanyaan |
|---|---|---|
| Inspeksi Lingkungan K3RS | /forms/inspeksi-lingkungan | 36 dalam 8 bagian |
| Pemeriksaan Kondisi APAR | /forms/kondisi-apar | 10 |
| Tanggap Darurat & Kebakaran | /forms/tanggap-darurat | 19 dalam 2 bagian |
Formulir diisi dari ponsel: satu ketukan per pertanyaan, hijau untuk kondisi aman dan merah untuk temuan. Progres tersimpan di perangkat, jadi ronde yang terputus bisa dilanjutkan.
npm install
cp .env.example .env.local # lalu isi nilainya
npm run dev
Buka http://localhost:3000.
| Nama | Wajib | Keterangan |
|---|---|---|
DATABASE_URL | ya | Connection string Neon Postgres. DATABASE_URL_UNPOOLED dipakai bila DATABASE_URL kosong. |
ADMIN_USERNAME | ya | Nama pengguna untuk /admin. |
ADMIN_PASSWORD | ya | Kata sandi untuk /admin. |
SESSION_SECRET | ya | Penanda tangan cookie sesi. Minimal 32 karakter acak. |
Membuat SESSION_SECRET:
node -e "console.log(require('crypto').randomBytes(36).toString('base64url'))"
Tabel dibuat otomatis saat permintaan pertama — tidak ada langkah migrasi terpisah. Semua jawaban disimpan di satu tabel:
submissions(id, form_slug, area, inspection_date, answers jsonb, findings, created_at)
answers memakai id pertanyaan asli dari Google Form (q<entry-id>), sehingga
kolom tetap cocok meskipun teks pertanyaan diubah di kemudian hari.
findings menghitung jawaban Tidak dan Rusak — angka inilah yang
ditampilkan di rekap admin.
/admin meminta login, lalu menampilkan:
Berkas .xlsx berisi tiga lembar, satu per formulir. Satu baris = satu
pemeriksaan, satu kolom = satu pertanyaan, ditambah kolom Jumlah temuan.
Jawaban Tidak/Rusak diwarnai merah. Rentang tanggal di halaman admin ikut
diterapkan pada unduhan.
Tangkapan layar di atas dibuat dengan data fiktif. Untuk membuatnya ulang,
jalankan npm run dev lalu:
npm run seed:demo # isi 9 pemeriksaan contoh
npm run seed:demo -- --clean # hapus kembali baris yang tadi diisi
Baris contoh masuk lewat POST /api/submit, jadi ikut divalidasi seperti
pengisian sungguhan. Id yang terbentuk dicatat di scripts/.demo-ids.json;
--clean hanya menghapus id itu, tidak pernah baris lain. Skrip menolak
mengisi tabel yang sudah berisi data kecuali diberi --force.
src/lib/forms.ts dibuat otomatis dari HTML Google Form asli. Untuk
menyesuaikan pertanyaan, sunting berkas itu langsung — strukturnya sudah
tidak bergantung pada Google Form lagi. Tambahkan pertanyaan baru dengan id
yang belum pernah dipakai; jangan mengubah id lama, karena id itulah yang
mengikat data lama ke kolomnya.
Deploy ke Vercel. Setel keempat variabel lingkungan di Project Settings → Environment Variables sebelum deploy pertama.