Lalabase
티켓·문서·근무시간·고객대화를 한 곳에 모아 KI로 검색, 소프트웨어 기업 고객 프로젝트용, 오픈소스로 자체 서버·독일 클라우드에 배포
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
Aplikasi tracking penjualan (Meta Ads online + offline). Sedang dipindahkan dari satu file index.html ke aplikasi Next.js dengan database Supabase. Dua bug ditemukan & diperbaiki saat verifikasi pertama (detail di riwayat commit fix: perbaiki tipe database & versi @supabase/ssr): versi @supabase/ssr yang tidak cocok dengan @supabase/supabase-js, dan interface di src/types/database.ts yang seharusnya type alias (TypeScript gotcha — interface tidak punya index signature tersirat, dibutuhkan @supabase/postgrest-js untuk menurunkan tipe insert/update).README 전문 보기 ↗
Aplikasi tracking penjualan (Meta Ads online + offline). Sedang dipindahkan dari
satu file index.html ke aplikasi Next.js dengan database Supabase.
Live saat ini: https://kasirkiojay.vercel.app
| Bagian | Status |
|---|---|
| Skema database (role, biaya operasional, target, mesin stok, view keuangan) | Ditulis, belum dijalankan ke Supabase — perlu izin eksplisit karena ini database produksi |
| Frontend Next.js (dashboard, transaksi, produk, keuangan, pelanggan, akun) | typecheck, lint, build lulus. Halaman /login diuji langsung di browser (desktop & mobile) dan berhasil memanggil Supabase Auth asli. Halaman lain (dashboard dll) belum bisa diuji — butuh tabel/view dari migrasi di atas |
| Repo Git | Sudah (git init, beberapa commit) |
| Auto-deploy Vercel | Belum |
Dua bug ditemukan & diperbaiki saat verifikasi pertama (detail di riwayat
commit fix: perbaiki tipe database & versi @supabase/ssr): versi
@supabase/ssr yang tidak cocok dengan @supabase/supabase-js, dan
interface di src/types/database.ts yang seharusnya type alias (TypeScript
gotcha — interface tidak punya index signature tersirat, dibutuhkan
@supabase/postgrest-js untuk menurunkan tipe insert/update).
Node.js sempat gagal terpasang lewat winget di sesi otomatis (macet
menunggu prompt izin admin/UAC yang tidak ada desktop interaktif untuk
mengkliknya). Diatasi dengan memasang Node.js portable (zip, tanpa
installer/tanpa admin) dari nodejs.org, diekstrak ke
%LOCALAPPDATA%\nodejs-portable, dan ditambahkan ke PATH level-user lewat
[Environment]::SetEnvironmentVariable(...,"User") — tidak menyentuh
pengaturan admin/mesin sama sekali.
Kalau kamu buka terminal baru dan node -v belum ketemu, tutup lalu buka
lagi terminalnya (PATH level-user baru kebaca di proses baru). Kalau masih
belum ketemu juga, pasang manual:
winget install OpenJS.NodeJS.LTS
atau unduh installer .msi versi LTS dari https://nodejs.org.
Setelah node -v dan npm -v jalan:
npm install
npm run dev
Buka http://localhost:3000 — akan redirect ke /login. Login pakai akun
Supabase yang sama dengan kasirkiojay.vercel.app. Halaman setelah login baru
akan berfungsi penuh setelah migrasi SQL di bawah dijalankan.
Jalankan berurutan di Supabase Dashboard → SQL Editor, satu file satu kali jalan, periksa hasilnya sebelum lanjut ke berikutnya.
| Urutan | File | Isi |
|---|---|---|
| 1 | supabase/migrations/0001_roles_and_profiles.sql | Tabel profiles, role admin/staff, RLS semua tabel |
| 2 | supabase/migrations/0002_stock_engine.sql | Stok pindah ke trigger database, kolom affects_stock |
| 3 | supabase/migrations/0003_expenses_and_targets.sql | Biaya operasional + target bulanan |
| 4 | supabase/migrations/0004_financial_views.sql | View omset/profit/laba rugi |
Backup dulu sebelum menjalankan (Supabase → Database → Backups), karena ini menyentuh data produksi.
Semua akun yang sudah ada otomatis jadi admin supaya tidak ada yang terkunci. Turunkan yang perlu jadi staff:
update public.profiles set role = 'staff' where email = '[email protected]';
select email, role from public.profiles order by role, email;
Frontend lama (index.html) masih mengurangi stok sendiri dari browser.
Begitu trigger aktif, stok akan berkurang dua kali lipat. Pilih salah satu:
index.html (di submitTransaction, updateTxStatus, dan deleteTx).| Admin | Staff | |
|---|---|---|
| Lihat transaksi | ya | ya |
| Input transaksi | ya | ya |
| Ubah transaksi | semua | hanya miliknya sendiri |
| Hapus transaksi | ya | tidak |
| Ubah produk & HPP | ya | tidak |
| Input spend iklan | ya | tidak |
| Biaya operasional (termasuk gaji) | ya | tidak bisa lihat |
| Target bulanan | ubah | lihat saja |
Dijaga oleh RLS di database, bukan oleh tampilan — jadi tidak bisa ditembus lewat browser.
Transaksi berapa pun tanggalnya boleh diinput. Yang perlu diperhatikan: jangan biarkan transaksi historis mengurangi stok fisik yang ada di rak sekarang.
Alur yang benar:
affects_stock = false.affects_stock = true (default).Untuk setiap transaksi historis, isi HPP yang berlaku saat itu, bukan HPP sekarang. HPP disimpan per transaksi, jadi profit historis tetap akurat tanpa perlu tabel riwayat harga terpisah.
| Route | Isi | Akses |
|---|---|---|
/login | Login email/password | semua |
/dashboard | Omset, profit, tren, produk terlaris, RTS, target bulan ini | semua (target & iklan hanya tampil untuk admin) |
/dashboard/iklan | Input spend iklan & chat masuk harian | admin |
/transaksi | Daftar transaksi + filter + ubah status + hapus | semua (hapus & ubah status transaksi orang lain: admin) |
/transaksi/tambah | Input transaksi baru, boleh tanggal mundur, toggle "data historis" | semua |
/produk | Daftar produk + stok | semua (ubah HPP/stok: admin) |
/keuangan | Biaya operasional + target bulanan + ringkasan laba rugi | admin |
/pelanggan | Database pelanggan agregat dari transaksi + tombol WA | semua |
/akun | Info akun, role, logout | semua |
src/lib/*.ts (kecuali format.ts dan dashboard.ts) berisi Server Actions
— jalan di server, dipanggil langsung dari Client Component. RLS di database
tetap jadi pertahanan utama; pengecekan role di situ hanya untuk pesan error
yang lebih ramah.
salin_biaya_berulang(date) menyalin biaya bertanda berulang dari bulan
sebelumnya. Kalau ada biaya bertanggal 29–31, cek hasilnya di bulan yang
lebih pendek.