Lalabase
Tickets, Doku, Zeiterfassung und Kundengespräche an einem Ort, durchsuchbar per KI. Für Softwarefirmen mit Kundenprojekten. Open Source: auf deinem eigenen Server oder in unserer Cloud in Deutschland.
Translation pending
Daily movement, vehicle checklist, repair tickets & job requests.
Translation pending
BusinessHTML · JavaScriptGitHub @izhanfleetsjConnection unstableOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
Loading the full README. The saved excerpt is shown below.
Web app untuk sistem fleet: Dashboard, Driver & Requester (workshop ticket & job request), Repair & Maintenance (compliance register road tax / inspection / insurance / JKKP / APAD), Costing, Hiring Management, Utilization, New / Dispose dan Settings WhatsApp. Dibina dari prototype fleet_dashboard_workshop_ticket_updated_8.html. Prototype itu simpan data dalam storage artifact Claude; app ini simpan data dalam database di server (Supabase Postgres di Vercel, atau SQLite bila run sendiri), jadi semua staff (admin, PIC branch, driver) nampak data yang sama.Read the full README ↗
Web app untuk sistem fleet: Dashboard, Driver (pergerakan harian, checklist & tiket repair), Requester (permohonan kerja), Repair & Maintenance (compliance register road tax / inspection / insurance / JKKP / APAD), Costing, Hiring Management, Utilization, New / Dispose dan Settings WhatsApp.
Dibina dari prototype fleet_dashboard_workshop_ticket_updated_8.html. Prototype itu
simpan data dalam storage artifact Claude; app ini simpan data dalam database di
server (Supabase Postgres di Vercel, atau SQLite bila run sendiri), jadi semua staff (admin, PIC branch, driver) nampak data yang sama.
| Prototype | App ini | |
|---|---|---|
| Simpanan data | Claude artifact storage | Supabase Postgres (Vercel) atau SQLite (data/fleet.db, local/Docker) + 50 versi terakhir setiap data disimpan untuk rollback |
| Login admin | Password dalam kod HTML (sesiapa boleh nampak) | Password disemak di server, sesi guna cookie HttpOnly (12 jam) |
| Data admin sahaja | Disekat di browser sahaja | Server tolak simpan kenalan WhatsApp, fleet target & utilization jika bukan admin |
| Library (Chart.js, XLSX, PDF.js) | CDN | Dibundle dalam public/vendor — tak bergantung pada CDN |
| Telefon | Layout desktop sahaja | Layout mobile (menu ☰), boleh install sebagai app (PWA) di Android / iPhone |
| Backup | — | Butang ⬇ Download Backup di Settings (admin) → fail JSON semua data |
| Bahasa | English sahaja (campur BM) | Butang BM / EN di atas — semua teks, popup & carta tukar terus; pilihan diingat (public/i18n.js) |
| Tema | Cerah sahaja | Butang 🌙 / ☀️ — mod gelap & cerah, ikut tetapan peranti pada kali pertama |
| Akses halaman | Semua halaman terbuka; admin login dalam Compliance Register | Butang 🔒 Log Masuk Admin di bawah menu kiri. Tanpa login hanya 01 Pemandu & 02 Pemohon — Kenderaan Sendiri / Sewa dipaparkan; 00 Dashboard & 03–10 untuk admin sahaja (02 Daftar Pematuhan, 03 Insurans). Pilihan "Branch anda / Read only" dibuang |
Setiap tajuk lajur ada butang ▾: susun (A→Z / Z→A, atau Lama→Baru untuk tarikh), kotak Cari, senarai tanda nilai dengan (Pilih Semua) dan (Kosong). Lajur tarikh disenaraikan ikut tahun → bulan (⊞ 2026 → Oktober, November…) dan boleh ditapis ikut status (Tamat Tempoh / Hampir Tamat / OK / Tiada tarikh). Nilai dalam setiap senarai ikut tapisan lajur lain. Butang ▾ bertukar kuning bila lajur ditapis; ✕ Kosongkan semua tapisan di bawah jadual.
Di bawah jadual Daftar Pematuhan: kalendar bulanan (Ahad–Sabtu) setiap tarikh tamat Cukai Jalan, Pemeriksaan, Insurans, JKKP & APAD — warna ikut status (merah tamat, oren ≤ 30 hari, hijau OK). Pilih bulan / tahun (◀ ▶), tanda jenis & branch (cth. Cukai Jalan + OSJ & OPJ), dan 🖨 Cetak setahun untuk 12 muka surat A4 landskap. Kalendar dibina terus dari data daftar, jadi berubah serta-merta bila tarikh dikemas kini. Cuti umum Malaysia dipaparkan dalam kalendar (hari cuti berwarna merah) — kebangsaan dan negeri ikut branch yang dipilih. Setiap cuti ditanda branch yang terlibat (atau Semua branch) — boleh diedit oleh admin di Settings → Cuti Umum (Kalendar); tarikh cuti Islam / lunar adalah anggaran sehingga diwartakan.
Daftar insurans setiap kenderaan: Syarikat Insurans, No. Polisi, Perlindungan (Komprehensif / Pihak Ketiga, Kebakaran & Kecurian / Pihak Ketiga), Nilai Dilindungi, Premium, Tarikh Mula, Tarikh Tamat & Status, dengan penapis gaya Excel yang sama. Kotak ringkasan: kenderaan berinsurans, tamat, tamat ≤ 30 hari, jumlah premium. Tarikh Tamat ialah ruangan Insurans yang sama dalam Daftar Pematuhan — tukar di mana-mana satu, kedua-duanya ikut.
PDF polisi: setiap baris ada 📎 Muat naik PDF / 📄 Lihat PDF. Butang 📥 Import PDF polisi terima banyak
fail sekaligus dan padankan setiap fail ikut nama fail — sama dengan No. Polisi sedia ada (cth. WB7392V - AUG 25-26.pdf)
atau bermula dengan no. plat. Fail disimpan di server (Supabase Storage, bucket peribadi fleet-files yang dicipta
automatik; atau SQLite bila run sendiri), maksimum 4 MB setiap fail, admin sahaja boleh muat naik / buka.
🔗 Import dari Google Sheet: paste link Google Sheet (sharing Anyone with the link can view) yang setiap barisnya
ada no. plat (atau nama PDF bermula dengan plat) dan link Google Drive PDF polisi (fail Drive juga mesti Anyone with
the link). Server salin setiap PDF terus dari Drive. Nama fail PDF lama dalam ruangan No. Polisi dikosongkan.
Di 02 Pemohon — Kenderaan Sendiri / Sewa → Log Permintaan Kerja, tekan 📋 Tampal dari WhatsApp, copy mesej dari group WhatsApp dan paste — borang diisi serta-merta. Pilih Branch Anda, semak, tekan Hantar Permintaan.
2 LORI TIPPER → Item (Lorry Tipper) + Unit = 2 (baris pertama tanpa label)
TARIKH:2/10/26 → Tarikh (2/10/26, 2.10.2026, 2 Okt, esok, hari ini)
MASA:10.00 → Masa (10.00, 2.30 ptg, 8am, 1400)
COMPANY:akli s/b → Syarikat dipadankan dengan senarai (AKLI); tiada → Lain-lain
SV:Yus'ran 01128278075 → Sv + No. Telefon Sv
LOKASI:jln pjs 2d/1 → Lokasi (link Google Maps / koordinat juga ditambah)
LOAD: 3 pasir 3 Crusher run → Muatan
TNB:Navin → label lain dimasukkan ke Projek supaya tiada maklumat hilang
Lokasi (pin peta WhatsApp): pin tak ikut bila copy teks. Buka pin → Google Maps → copy link
(Share → Copy link) atau koordinat (cth. 3.076100, 101.633995) → paste dalam kotak yang sama.
Link/koordinat yang ditampal sendiri ditambah pada Lokasi sedia ada, bukan menggantikannya.
Label boleh huruf besar/kecil, guna : atau =, dan format tebal WhatsApp tidak mengganggu.
Parser: public/wa-parse.js.
Di 01 Pemandu & Pemohon (paling atas). Setiap hari sebelum keluar kerja, pemandu isi: tarikh, branch,
kenderaan, nama & no telefon, odometer & minyak, checklist ringkas (10 item — ✓ OK / ✕ Rosak; jika ada yang rosak,
borang Tiket Repair Bengkel di bawah diisi awal dan pemandu diminta hantar tiket) dan pergerakan (satu baris setiap tempat/job).
Satu rekod setiap kenderaan setiap hari — admin boleh Edit / padam.
Log Pergerakan tunjuk semua kenderaan ikut tarikh/branch, dan 📋 Salin laporan untuk WhatsApp
menghasilkan format group (tarikh + hari, 1) PLAT, nama, -TEMPAT). Item checklist yang rosak
hari ini muncul dalam Perlu Perhatian di Dashboard.
App ini di-host di Vercel (halaman dari public/ + API serverless dalam api/) dan data
disimpan dalam Supabase Postgres (Vercel tak ada disk kekal, jadi SQLite tak boleh digunakan di sana).
Supabase → SQL Editor → New query → paste isi supabase/schema.sql → Run.
(Selamat untuk run semula.)
Supabase → Project Settings → API Keys → salin Project URL dan
secret key (sb_secret_…, atau service_role key versi lama). Jangan guna publishable/anon key.
Vercel → Project → Settings → Environment Variables (tanda Production + Preview):
| Nama | Nilai |
|---|---|
SUPABASE_URL | https://<project-ref>.supabase.co |
SUPABASE_SERVICE_ROLE_KEY | secret key dari langkah 2 |
ADMIN_PASSWORD | password admin baru |
SESSION_SECRET | rentetan rawak panjang (node -e "console.log(require('crypto').randomBytes(32).toString('hex'))") |
Vercel → Deployments → ⋯ → Redeploy (env var baru hanya dibaca selepas deploy semula).
Buka https://<app>.vercel.app/api/health — mesti tunjuk "ok":true,"storage":"supabase".
Kalau ada yang belum diset, app akan tunjuk banner merah di atas skrin.
Secret key hanya ada di server Vercel — tak pernah dihantar ke browser. Jadual Supabase dikunci dengan RLS supaya anon/publishable key tak boleh baca data.
Perlu Node.js 22.9 atau lebih baru. Tiada npm install diperlukan (tiada dependency).
cp .env.example .env # isi ADMIN_PASSWORD & SESSION_SECRET
npm start # http://localhost:3000
docker build -t fleet-ops .
docker run -d -p 3000:3000 -v fleet-data:/data \
-e ADMIN_PASSWORD='password-kuat' -e SESSION_SECRET='rentetan-rawak-panjang' \
fleet-ops
Database disimpan dalam volume /data — backup folder/volume ini.
| Nama | Default | Keterangan |
|---|---|---|
PORT | 3000 | Port server |
ADMIN_PASSWORD | komatsu2026 | Tukar sebelum guna sebenar |
SESSION_SECRET | rawak setiap restart | Set supaya admin tak ter-logout bila server restart |
DATA_DIR | ./data | Lokasi fail SQLite (bila Supabase tak diset) |
SUPABASE_URL | — | Bila diset bersama SUPABASE_SERVICE_ROLE_KEY, data disimpan di Supabase |
SUPABASE_SERVICE_ROLE_KEY | — | Secret / service_role key (server sahaja) |
Di Vercel, ADMIN_PASSWORD, SESSION_SECRET dan Supabase wajib — tanpa itu login admin
dan simpanan data dimatikan (tiada password default di internet awam).
Untuk guna di luar office, letak di belakang HTTPS (cth. Nginx / Caddy / Cloudflare Tunnel, atau hosting macam Render / Railway / Fly.io dengan persistent disk). Service worker & install app di telefon perlukan HTTPS.
Buka URL app dalam Chrome (Android) → menu ⋮ → Install app / Add to Home screen. iPhone: Safari → Share → Add to Home Screen.
| Method | Path | Keterangan |
|---|---|---|
GET | /api/storage/:key | Baca data (fleetComplianceRegister_v2, fleetTickets_v1, fleetHiringRecords_v1, fleetCostingData_v1, fleetUtilizationData_v1, fleetTargetConfig_v1, fleetContactsConfig_v1) |
PUT | /api/storage/:key | Simpan data { "value": "<json text>" } |
POST | /api/login / /api/logout | Login / logout admin |
GET | /api/session | Role semasa |
GET | /api/export | Backup semua data (admin) |
GET / PUT / DELETE | /api/files/:id | Baca / muat naik / padam PDF polisi (admin) |
POST | /api/files/fromdrive | Salin PDF dari Google Drive (admin) |
GET | /api/gsheet/:id | Baca Google Sheet (xlsx) untuk import (admin) |
GET | /api/health | Status konfigurasi server & storage |
Request yang ubah data mesti hantar header X-Requested-With: fleet-app (perlindungan CSRF).
wa.me (staff tekan Send sendiri) — belum guna WhatsApp Business API.