Aplikasi billing & manajemen ISP (fiber optic) — PWA pelanggan, portal teknisi & kolektor, admin panel lengkap, multi-vendor OLT, RADIUS, WhatsApp/Telegram, pembayaran QRIS. Kredit & lisensi (ISC): - Base kode & repo: alijayanet/billing-rtrw oleh Alijaya Net — terima kasih banyak atas base kode dan repo yang bermanfaat. - Add-on: GoWA, LibreSpeed/OpenSpeedTest, Uptime Kuma, notification-forwarder. - Dikembangkan menjadi OPEN-ISP oleh oxpoe — https://github.com/oxpoe/open-isp
29 KiB
Changelog Perubahan Kode — Billing RTRW
Project : /opt/billing-rtrw
Host : deneva
Service : billing-rtrw (systemd, port 3001)
Owner : billing:billing
Project ini belum memakai Git, jadi file ini adalah satu-satunya catatan perubahan. Setiap perubahan kode selalu disertai backup file asli (lihat bagian Rollback pada tiap entri).
Format: ## [versi] — tanggal (terbaru di atas).
[v1.9.7] — 2026-09-28 16:55 — Full UI/UX Modernization & Database Optimization (Gentelella Tiles, uiverse.io Effects & Google Fonts)
1. Modernisasi Lengkap Seluruh Halaman Utama Admin (Gentelella Admin Style)
- views/admin/dashboard.ejs: Implementasi Tile KPI Stat horizontal (Total ONU, Online, Offline, Warning Redaman) dan Tile Keuangan (Pendapatan, Pelanggan Aktif, Tagihan Belum Bayar, Total Piutang) dengan indikator tren visual.
- views/admin/customers.ejs: Mengubah stat-grid filter pelanggan menjadi Gentelella Tile Cards interaktif (Total, Aktif, Disuspend, Nonaktif/Baru) dengan highlight filter aktif dan angka monospaced.
- views/admin/billing.ejs: Mengubah summary tagihan menjadi Gentelella Tile Cards (Total Tagihan, Sudah Bayar, Belum Bayar, Rasio Lunas).
- views/admin/monitoring.ejs & views/admin/olts.ejs: Menambahkan Google Fonts universal (Inter + JetBrains Mono).
2. Harmonisasi Desain Portal Pelanggan & Login (uiverse.io Style)
- views/login.ejs: Menyelaraskan seluruh palette warna dari hardcoded Indigo ke tema resmi Skyfiber (Teal #0d9488 & Cyan #06b6d4), menambahkan Google Fonts Plus Jakarta Sans, dan uiverse elevated glass card.
- views/dashboard.ejs: Menambahkan Google Fonts JetBrains Mono untuk pembacaan parameter teknis (IP, MAC, redaman dBm) dan efek micro-animation tombol .btn-uiverse-glow.
3. Optimasi Database SQLite
- Eksekusi PRAGMA integrity_check (hasil: ok).
- Eksekusi PRAGMA optimize untuk query planner performa tinggi.
File disentuh
- public/css/admin.css
- views/admin/dashboard.ejs
- views/admin/customers.ejs
- views/admin/billing.ejs
- views/admin/monitoring.ejs
- views/admin/olts.ejs
- views/login.ejs
- views/dashboard.ejs
- views/isolated.ejs
- update-code.md
Rollback
cp /opt/billing-rtrw/views/admin/customers.ejs.bak-gentelella /opt/billing-rtrw/views/admin/customers.ejs
cp /opt/billing-rtrw/views/admin/billing.ejs.bak-gentelella /opt/billing-rtrw/views/admin/billing.ejs
cp /opt/billing-rtrw/views/admin/dashboard.ejs.bak-gentelella /opt/billing-rtrw/views/admin/dashboard.ejs
cp /opt/billing-rtrw/views/login.ejs.bak-plusjakarta /opt/billing-rtrw/views/login.ejs
cp /opt/billing-rtrw/views/dashboard.ejs.bak-uiverse /opt/billing-rtrw/views/dashboard.ejs
sudo systemctl restart billing-rtrw.service
[v1.9.6] — 2026-09-28 16:35 — Modernisasi UI/UX (Gentelella Admin Tiles, uiverse.io Effects & Google Fonts) + Matikan Service Biznet
1. Pematian Layanan di Server Biznet (Pencegahan Tabrakan Service)
- Service
billing-rtrw.servicedi hostbiznetdi-stop dan di-disable (sudo systemctl stop & disable). - Process PM2 di
biznetdi-stop dan di-delete. - Hasil: Menghilangkan konflik 409 pada Telegram Bot dan mencegah duplikasi trigger cron isolir/tagihan antar-server.
2. Adopsi Desain Gentelella Admin (views/admin/dashboard.ejs & public/css/admin.css)
- Mengganti grid metrik lama dengan modul Gentelella Tile Stats (
.tile_count&.tile_stats_count):- Border samping berwarna aksen (
tile-primary,tile-success,tile-danger,tile-warning). - Label
count_topuppercase dengan ikon jelas. - Nilai metrik
countberbobot 800 dengan font monospaced tabular. - Sub-label
count_bottomdengan indikator tren (trend-up,trend-down,trend-warn).
- Border samping berwarna aksen (
- Menambahkan class kontainer
.x_panel&.x_titledan soft badges (.badge-soft-success,.badge-soft-danger, dll).
3. Adopsi Desain uiverse.io (views/dashboard.ejs)
- Menambahkan efek glassmorphism tingkat tinggi dengan border glow gradient dan shadow elevasi.
- Menambahkan animasi tombol mikro-interaktif (
.btn-uiverse-glow) dengan hover lift-up (translateY(-2px)) dan klik aktif responsif.
4. Standarisasi Google Fonts Universal
- Mengintegrasikan Inter (antarmuka admin & tabel data), Plus Jakarta Sans (portal pelanggan & public landing), dan JetBrains Mono (data teknis IP, MAC, serial, dBm) melalui Google Fonts dengan koneksi teroptimasi (
preconnectdandisplay=swap).
File disentuh
- public/css/admin.css
- views/admin/dashboard.ejs
- views/dashboard.ejs
- update-code.md
Rollback
cp /opt/billing-rtrw/public/css/admin.css.bak-gentelella /opt/billing-rtrw/public/css/admin.css
cp /opt/billing-rtrw/views/admin/dashboard.ejs.bak-gentelella /opt/billing-rtrw/views/admin/dashboard.ejs
cp /opt/billing-rtrw/views/dashboard.ejs.bak-uiverse /opt/billing-rtrw/views/dashboard.ejs
sudo systemctl restart billing-rtrw.service
[v1.9.5] — 2026-09-28 16:20 — Fix Telegram Polling Flood, Unifikasi Tipografi (Plus Jakarta Sans) & Harmonize Login UI
1. Perbaikan Telegram Bot Polling Error Flood (services/telegramBot.js)
- Log server sebelumnya dibanjiri pesan error setiap 8 detik: error: Telegram Polling Error:.
- Penyebab: Terdeteksi error code 409 Conflict dari API Telegram karena bot token yang sama masih aktif dijalankan di server lama (biznet/migrasi).
- Solusi:
- Menambahkan penanganan error detail (error?.response?.body?.description || error.message) agar terbaca jelas di logger.
- Implementasi throttling logger (maksimal 1 log per 2 menit untuk error berulang yang sama).
- Memisahkan level warning khusus bila terjadi 409 Conflict, sehingga journalctl bersih tanpa spam error.
2. Unifikasi Tipografi & Harmonisasi Desain (views/login.ejs & views/isolated.ejs)
- Menyelaraskan seluruh font pada portal publik & login pelanggan ke Plus Jakarta Sans (Google Fonts).
- Menyesuaikan palette warna primer & hover pada halaman login (views/login.ejs) menggunakan tema Teal/Cyan (#0d9488, #14b8a6, #2dd4bf) agar selaras dengan dashboard pelanggan.
- Menambahkan Plus Jakarta Sans pada halaman terisolir (views/isolated.ejs).
File disentuh
- services/telegramBot.js
- views/login.ejs
- views/isolated.ejs
- update-code.md
Rollback
cp /opt/billing-rtrw/services/telegramBot.js.bak-pollfix /opt/billing-rtrw/services/telegramBot.js
cp /opt/billing-rtrw/views/login.ejs.bak-plusjakarta /opt/billing-rtrw/views/login.ejs
cp /opt/billing-rtrw/views/isolated.ejs.bak-plusjakarta /opt/billing-rtrw/views/isolated.ejs
sudo systemctl restart billing-rtrw.service
[v1.9.4] — 2026-09-27 18:35 — Fix Theme Toggle (Dark/Light Mode), FOUC Prevention & Light Theme Styling
Masalah
- Tombol toggle tema (#theme-icon di header dashboard pelanggan) tidak berfungsi sama sekali saat diklik.
- Penyebab:
- Logika Negasi Terbalik di toggleTheme(): Saat mode awal gelap, contains('light') bernilai false sehingga !false adalah true. Kode terus-menerus menyimpan dan menerapkan mode 'dark', tidak pernah beralih ke 'light'.
- Class Collision pada <html>: <html class='dark'> memiliki class 'dark' permanen. applyTheme lama hanya menambahkan class 'light' tanpa menghapus class 'dark'. Tailwind CSS (darkMode: 'class') tetap mengaktifkan semua style dark:... selama class 'dark' ada di <html>.
- FOUC saat reload: Tidak ada script sinkronisasi langsung di <head>, sehingga halaman sempat berkedip gelap sebelum DOMContentLoaded berjalan.
- Missing data-theme: Tidak mengeset atribut data-theme='light'/'dark' yang diperlukan oleh theme.css.
Solusi & Perbaikan
- Perbaikan toggleTheme() & applyTheme(mode):
- Menghapus class 'dark' dan menambahkan 'light' saat beralih ke mode terang, dan sebaliknya saat mode gelap.
- Menetapkan atribut data-theme pada <html> secara konsisten.
- Sinkronisasi kedua key penyimpanan (skyfiber-customer-theme & app-theme).
- Mengubah ikon toggle secara dinamis: fa-sun text-amber-500 pada mode terang, fa-moon text-amber-400 pada mode gelap.
- Inline Script di <head>:
- Menambahkan skrip sinkronisasi tema instan di dalam <head> sebelum browser merender body untuk mencegah kedip (FOUC).
- Penyempurnaan Styling Mode Terang (Light Mode):
- Floating glass dock disesuaikan dengan latar frosted transparan putih dan sliding pill bergradasi lembut.
- Penyesuaian kontras input form, teks judul, card modal, dan gradien banner (tagihan lunas, tagihan aktif, info router).
File disentuh
- views/dashboard.ejs
- update-code.md
Rollback
cp /opt/billing-rtrw/views/dashboard.ejs.bak-themefix-20260927183449 /opt/billing-rtrw/views/dashboard.ejs
systemctl restart billing-rtrw.service
[v1.9.3] — 2026-09-27 18:30 — Fix PWA Auto-Login, Persistent Remember Token & Session Lifetime
Masalah
- Ketika PWA di-install di HP dan user login, saat aplikasi PWA di-kill atau ditutup, user terlempar ke halaman login lagi.
- Penyebab utama:
start_urldimanifest.webmanifestdiset ke/customer/login?source=pwa.- Rute
/customer/logindan/memeriksareq.session.customer, sementara rute login hanya menyimpanreq.session.phonedanreq.session.pppoe_username(customerselalu undefined), sehingga selalu merender form login ulang. - Masa berlaku cookie sesi bawaan hanya 24 jam dan disimpan di RAM (MemoryStore) tanpa token persistensi native.
- Service worker (
public/sw.js) melakukan fallback navigasi ke/customer/loginsaat jaringan lambat/offline.
Solusi & Perbaikan
- PWA Start URL: Mengubah
start_urldi/manifest.webmanifestmenjadi/customer/dashboard. - Persistent Auto-Login Token (90 Hari):
- Layanan baru
services/customerAuthTokenService.jsdengan tabel SQLitecustomer_auth_tokens. - Mengeluarkan cookie
customer_remember(90 hari, httpOnly, secure, lax) saat login langsung maupun verifikasi OTP. - Middleware auto-login di
routes/customerPortal.jsyang secara otomatis memulihkan sesi pelanggan ketika aplikasi dibuka kembali.
- Layanan baru
- Penyelarasan Guard Sesi:
- Rute
/customer/dan/customer/loginkini memeriksareq.session.phone || req.session.customersehingga pengguna yang sudah login langsung dialihkan ke/customer/dashboard. - Objek
req.session.customerkini diisi lengkap pada direct login dan OTP.
- Rute
- Masa Berlaku Cookie Sesi: Ditingkatkan dari 24 jam menjadi 30 hari.
- Logout Bersih: Rute
/customer/logout(mendukung POST dan GET) mencabut token dari database dan menghapus cookiecustomer_remembersertacustomer.sid. - Fallback Offline SW v6: Navigasi offline dialihkan ke
/offline.htmldengan tombol "Coba Lagi", bukan ke halaman login. - Penyimpanan Lokal Form: Menyimpan ID pelanggan terakhir di
localStoragepadaviews/login.ejs.
File disentuh
services/customerAuthTokenService.js(file baru)app-customer.jsroutes/customerPortal.jspublic/sw.jsviews/login.ejs
[v1.9.2] — 2026-09-27 18:15 — Multi-Vendor WiFi SSID & Password Changer (Huawei / Nokia / FiberHome / ZTE)
Perbaikan Ganti SSID & Password WiFi Multi-Vendor
- Mengatasi kegagalan ganti password TR-069 akibat penumpukan multiple parameter paths dalam satu payload SOAP atomik.
- Menghindari pengiriman
PreSharedKey.1.PreSharedKey(format hex 64 digit) bersamaan denganKeyPassphrase, yang sebelumnya memicu SOAP fault 9007 (Invalid Parameter Value) di modem. - Deteksi Vendor Otomatis (
HWTC,FiberHome,Nokia,ZTE,ZICG,CIOT,CDTC):- Huawei / FiberHome / Nokia: memprioritaskan
PreSharedKey.1.KeyPassphrase(menghindari fault 9007 karena penolakanKeyPassphrasetop-level). - ZTE / ZICG / CIOT: memprioritaskan
KeyPassphrase.
- Huawei / FiberHome / Nokia: memprioritaskan
- SSID 2.4G & 5G: Mengirim path tunggal yang tepat untuk 2.4 GHz (
WLANConfiguration.1.SSID) dan 5 GHz (WLANConfiguration.5.SSID) jika perangkat dual-band, tanpa menimpa interface guest/sekunder. - Fallback cerdas berbasis standar TR-098 per vendor.
File disentuh
services/customerDeviceService.js
Rollback
cp /opt/billing-rtrw/services/customerDeviceService.js.bak-wififix /opt/billing-rtrw/services/customerDeviceService.js
sudo systemctl restart billing-rtrw
[v1.9.1] — 2026-09-27 16:30 — 5-Tab Floating Dock, PPOB Soon, Profil Tiket & WhatsApp Anti-Ban
1. Floating Dock 5-Tab (Dashboard Pelanggan)
- Menghilangkan tombol tengah (+) Aksi Cepat dan popup modal sheet.
- Menjadikan navbar 5 tombol langsung: Beranda, Router, PPOB (badge gradient "Soon"), Tagihan (ping unread), dan Profil.
- Pusat Bantuan & Pembuatan Tiket Kendala diintegrasikan ke dalam Tab Profil (
tab-profile) dengan tombol cepat ke form pelaporan dan WhatsApp CS. - Ditambahkan tombol "Kembali ke Profil" di halaman tiket bantuan (
tab-bantuan). - Banner "Layanan PPOB Segera Hadir" pada tab PPOB (
tab-ppob).
2. Sinkronisasi Upstream & Fix Anti-Ban WhatsApp
- Verifikasi repository upstream
alijayanet/billing-rtrw: base commitffd3c62sudah mencakup seluruh perbaikan OLT Hioso (gap-fill DDM, Buffer UTF-8 decoding, slow SNMP session) dan timezone midnight hourCycle h23. - Menambahkan proteksi anti-ban WhatsApp pada alert monitoring (
services/whatsappBot.mjs):- Mematuhi toggle
genieacs_monitoring_enabled(tidak kirim alert jika toggle OFF). - Jeda acak (8-20 detik) antar penerima saat kirim broadcast alert ke admin/teknisi.
- Mematuhi toggle
- Menjadwalkan pemeriksaan monitoring harian pada jam 07:00 pagi (
config/genieacs.js) lewatnode-cronuntuk mencegah spam alert berulang.
File disentuh
views/dashboard.ejsservices/whatsappBot.mjsconfig/genieacs.js
[v1.9.0] — 2026-09-26 22:55 — Floating Dock Navbar + CDN Pin + SW v5
Perubahan UI besar (navbar) sekaligus perbaikan regresi PWA/offline.
Navbar: floating glass dock
- Bottom nav lama (waterdrop, 6 tombol horizontal) diganti floating glass
dock sesuai referensi
adaptive_glassmorphism_floating_dock.html. - Struktur: 4 tombol langsung (Beranda, Router, Tagihan, Profil) + 1 tombol
tengah
+yang membuka quick-action sheet berisi PPOB, Bantuan, Reconnect, Poll ONU. PPOB & Bantuan sengaja dipindah ke sheet agar dock tidak terlalu padat. - ** keenam tab tetap bisa diakses**,
id="tab-*"tidak berubah:tab-beranda,tab-router,tab-ppob,tab-tagihan,tab-bantuan,tab-profile. - CSS baru:
.dock-glass,.dock-pill(sliding pill),.dock-item,.dock-icon, quick-sheet overlay.safe-area-inset-bottomuntuk iPhone. - JS baru:
updatePillPosition(),toggleQuickSheet(),openQuickSheet(),closeQuickSheet(), statecurrentTab,isSheetOpen.switchTab()sekarang menandai.dock-itemaktif dan memindahkan pill. - Support keyboard: angka
1–6pindah tab,Escapemenutup sheet. - Ikon memakai Lucide (
data-lucide) +lucide.createIcons(). - CSS
.waterdrop-activeyang tidak terpakai lagi dibuang.
Perbaikan regresi offline/PWA
-
Semua CDN dashboard kini di-pin ke versi tetap (sebelumnya
@latest/ tanpa versi → bisa berubah atau break tanpa notice):||Aset|URL| |---|---| |Lucide|
https://unpkg.com/lucide@1.48.0/dist/umd/lucide.min.js| |Chart.js|https://cdn.jsdelivr.net/npm/chart.js@4.5.1/dist/chart.umd.min.js| |Tailwind|https://cdn.tailwindcss.com/3.4.17|https://unpkg.com/lucide@latestdanhttps://cdn.tailwindcss.com(tanpa versi) sama-sama redirect 302 tiap load → di-pin ke URL final. -
Bug: service worker hanya cache-first
cdn.jsdelivr.net, sehingga Tailwind, FontAwesome, Google Fonts, dan Lucide tidak tersedia saat offline — layout PWA hancur. Sekarangsw.jspunya arrayCDN_HOSTS:cdn.jsdelivr.net,unpkg.com,cdnjs.cloudflare.com,cdn.tailwindcss.com,fonts.googleapis.com,fonts.gstatic.com. -
Cache bust:
CACHE_NAME/CDN_CACHEcustomer-pwa-v4→-v5, plus 5 URL baru masukPRECACHE_URLS.
File disentuh
views/dashboard.ejs(1481 baris)public/sw.js(173 baris)
Verifikasi
- Render EJS OK,
divseimbang160/160. - Live
/customer/dashboardHTTP 200,divseimbang184/184. - Semua CDN membalas 200 tanpa redirect.
systemctl is-active billing-rtrw=active, journal tanpa error.
Rollback
cd /opt/billing-rtrw
cp views/dashboard.ejs.bak-twpin-225510 views/dashboard.ejs
cp public/sw.js.bak-twpin-225510 public/sw.js
sudo systemctl restart billing-rtrw
Catatan
- Tampilan visual (sliding pill, animasi sheet, posisi icon) belum dicek di browser sungguhan — verifikasi di atas semuanya server-side.
[v1.8.2] — 2026-09-26 22:30 — Fix flash message toast
notifdari server sebelumnya tidak tampil. Kini di-render sebagai variabelFLASH({ text, type }) lalu dimunculkan lewat#toast-container.- Pemetaan tipe:
danger → error,warning → info, selain ituinfo. - Render diproteksi dari injeksi
</script>via.replace(/</g, '\u003c').
File disentuh
views/dashboard.ejs
Rollback
cp views/dashboard.ejs.bak-flashfix-20260926221014 views/dashboard.ejs
sudo systemctl restart billing-rtrw
[v1.8.1] — 2026-09-26 22:10 — Fix route /customer/reboot + ACS Connection Request 401
1. Route reboot
POST /customer/rebootgagal auth karena hanya memakaisession.phonesebagai token device.- Kini memakai
buildCustomerDeviceTokens()sehingga mencoba seluruh kandidat token (tag, username, serial, MAC, IP).
2. Connection Request 401 (fix kritis)
- ACS membalas HTTP 401 saat perangkat menjalankan Connection Request karena
ConnectionRequestUsername/ConnectionRequestPasswordbelum diset. - Diperbaiki dengan
provisionConnectionRequestAuth(deviceId)diservices/acsServerService.js, dipanggil darihandleInform(). - Alur: Basic challenge → 401 → Digest auth → HTTP 200.
- Default username
skyfiber, password =crypto.randomBytes(12)hex per perangkat, disimpan di database. - Berlaku hanya untuk perangkat yang sedang online; 3 perangkat offline akan ter-provisioning otomatis saat melakukan Inform.
Hasil
- 102/105 perangkat sukses di-provisioning, 0 provisioning task gagal.
- Perubahan SSID/reboot kini berlaku ~10 detik (sebelumnya gagal).
- 3 perangkat offline akan ter-provisioning otomatis saat Inform berikutnya.
File disentuh
routes/customerPortal.js(3967 baris)services/acsServerService.js(1711 baris)
Rollback
cd /opt/billing-rtrw
cp routes/customerPortal.js.bak-rebootfix-20260926221014 routes/customerPortal.js
cp services/acsServerService.js.bak-crfix-20260926221014 services/acsServerService.js
sudo systemctl restart billing-rtrw
[v1.8.0] — 2026-09-26 18:04–21:07 — Redesign dashboard (APPS-style)
Redesain tampilan dashboard pelanggan dengan gaya APPS.
Yang ditambahkan
- Banner promo dari database (
GET /customer/api/promo-slides). - Chart pemakaian isolate-day (maks. 3 bulan riwayat), menggantikan
polling traffic realtime yang sebelumnya membebani server.
Helper:
buildUsageSummary(profile, activePackage). - LibreSpeed speedtest inline (sub-router
section-speedtest). - Quick-action Reconnect (
POST /customer/customer/reconnect) dan Poll ONU (POST /customer/api/device/refresh). - Sub-tab router: WiFi, Speedtest, Pemakaian.
- Tampilan AXS/PPOB (
/customer/ppob,/customer/topup). - Link WhatsApp admin otomatis ke nomor pertama di
settings.whatsapp_admin_numbers. - Tema persisten via
localStorage. - Tombol toggle lihat IP (
isIpVisible).
Perbaikan
- Semua endpoint palsu
/api/customer/*diarahkan ke route/customer/*asli. - Badge GPON: merah
Bad GPONbila ONU tidak terdeteksi atau PPPoE offline. - Form WiFi/ONT otomatis disabled bila ONU absent, dengan pesan penjelasan.
- Variabel yang dihitung defensif di ketiga cabang render:
hasUnpaid,latestUnpaid,latestInvoice,pppoeIP,pppoeUptime,stMaxMbps. - Penghapusan modal Bootstrap yang rusak.
- Layout mobile dirapikan.
File disentuh
views/dashboard.ejs
Rollback
cp views/dashboard.ejs.bak-prefn-20260926210734 views/dashboard.ejs
# atau ke markup/endpoint stabil terakhir:
cp views/dashboard.ejs.bak-pre-newdesign-20260926181219 views/dashboard.ejs
sudo systemctl restart billing-rtrw
[v1.7.0] — 2026-09-26 12:55–14:24 — Self-registration, tabular layout, PWA
- Self-registration (
/customer/register) + pairing tag perangkat (POST /customer/change-tag). - Tata letak tabel Payments/Fitur dikembalikan ke mode tabular
(
.bak-tabrapikan,.bak-tabcss). - Toggle lihat/sembunyikan password WiFi.
- Tampilan jatuh tempo (due) tagihan.
- Struktur
divdiperbaiki (tag tidak seimbang) —.bak-divfix. - Navbar sticky di mobile —
.bak-sticky. - Service worker diperbaiki & di-cache ulang —
.bak-swfix,sw3. rxPowerACS ditangani diservices/acsServerService.js.
File disentuh
views/dashboard.ejs,routes/customerPortal.js,public/sw.js,services/acsServerService.js
Rollback
cd /opt/billing-rtrw
cp views/dashboard.ejs.bak-divfix-20260926142250 views/dashboard.ejs
cp public/sw.js.bak-swfix-20260926142327 public/sw.js
Daftar endpoint yang dipakai dashboard
Semua Calls dari views/dashboard.ejs (sudah diverifikasi terhadap router):
| Aksi | Method | Endpoint |
|---|---|---|
| Promo slides | GET | /customer/api/promo-slides |
| Poll ONU / refresh | POST | /customer/api/device/refresh |
| Reconnect | POST | /customer/customer/reconnect |
| Ganti SSID | POST | /customer/change-ssid |
| Ganti password | POST | /customer/change-password |
| Reboot | POST | /customer/reboot |
| Buat tiket (+foto) | POST | /customer/tickets/create (multipart) |
| Bayar invoice | GET | /customer/payment/create/:id |
| PPOB | GET | /customer/ppob |
| Top up | GET | /customer/topup |
| Logout | GET | /customer/logout |
Catatan: tidak ada route
/customer/poll-onu. Tombol "Poll ONU" memanggilPOST /customer/api/device/refresh.
TODO / tindak lanjut
Detail lengkap ada di /home/oxpoe/Documents/CATATAN-OPS-SKYFIBER.txt
section 11 (mode 600, jangan dibagikan).
Keamanan — perlu tindakan
- Rotasi
telegram_bot_token(via@BotFather→/revoke; token baru jangan dikirim ke chat mana pun). - Rotasi
admin_password. - Rotasi
admin_api_key. - Amankan backup
backups/settings_20260926_211113.json(masih memuat token lama) atau hapus setelah rotasi. - Inisialisasi Git (
git init+ commit awal) supaya changelog berikutnya punya riwayat & diff.
Fungsional
- Password WiFi pelanggan uji masih nilai sementara dan harus dikembalikan ke nilai asli (nilai uji tercatat di notes section 11).
- 3 perangkat belum punya CR credentials, akan provisioning otomatis saat
online:
-
001141-CL601-ZTEGCBBFB774-B4E46B-SIGMA Z99LX XPON-ZICG27766207-B4E46B-SIGMA Z99LX XPON-ZICG27766F6A - Alur pembayaran belum diuji end-to-end (butuh invoice uji).
- Cek visual floating dock di browser/HP sungguhan.
- Test PWA mode offline (SW v5) — belum pernah diuji.
- Keputusan: apakah FUP enforcement mengikuti isolate-day.
- Parity peta admin desktop vs mobile.
- Pemetaan kecepatan WiFi 2.4GHz vs 5GHz.
Cara rollback umum
cd /opt/billing-rtrw
sudo systemctl stop billing-rtrw
# salin backup yang dikehendali ke file aslinya
sudo systemctl start billing-rtrw
sudo journalctl -u billing-rtrw -n 50 --no-pager
Backup tersedia (format .bak-<label>-<timestamp>):
| File | Backup |
|---|---|
views/dashboard.ejs |
.bak-rxpower, .bak-selfapp-*, .bak-akun-*, .bak-due-*, .bak-tabcss-*, .bak-usage-ui-*, .bak-togglepass-*, .bak-tabrapikan-*, .bak-mobile-*, .bak-usageview-*, .bak-usagehelper-*, .bak-tailadmin-*, .bak-divfix-*, .bak-sticky-*, .bak-prefn-*, .bak-pre-newdesign-*, .bak-flashfix-*, .bak-dock-*, .bak-cdnpin-*, .bak-twpin-* |
routes/customerPortal.js |
.bak-selfapp-*, .bak-usageview-*, .bak-usagehelper-*, .bak-akun-*, .bak-rebootfix-* |
services/acsServerService.js |
.bak-rxpower-*, .bak-crfix-* |
public/sw.js |
.bak-selfapp-*, .bak-sw3-*, .bak-swfix-*, .bak-v4-*, .bak-twpin-* |
[v1.9.8] - 2026-09-28: Rombak Total UI/UX Multi-Portal (5-Color Modern Design System)
Ringkasan Rilis
Rombak visual dan interaksi total pada seluruh portal aplikasi (Landing Page/Pelanggan, Customer PWA Dashboard, Admin Portal, Teknisi, Kolektor, dan Agen) menggunakan palette 5-warna konsisten, tipografi Google Fonts universal, elemen cyber-glassmorphism terinspirasi dari uiverse.io, dan panel KPI dense terinspirasi dari Gentelella.
Design System & Palette
- Dark 1 (Latar Utama):
#161A21 - Dark 2 (Gelap Sedang / Surfaces & Cards):
#1F2420 - Dark 3 (Abu-abu Gelap / Aksesori & Borders):
#2A313C - Accent Lime (Aksen Hijau Neon):
#ADFF2F - Light (Putih Terang / Teks):
#F2F5F1 - Typography:
Plus Jakarta Sans: Landing, PWA Pelanggan, Heading & KartuInter: Admin tabel, form controls, dense gridJetBrains Mono: Angka teknis (IP PPPoE, MAC, Serial, RX/TX Optical Power, Speed, Bandwidth)
Modul yang Dirombak
- Landing Page & Customer Login (
views/login.ejs):- Cyber-glassmorphism card hero, paket internet (
#packages), fitur (#features), layanan (#services), contact. - PWA Install Modal dengan status online/offline otomatis.
- Cyber-glassmorphism card hero, paket internet (
- Halaman Isolir / Walled Garden (
views/isolated.ejs):- Palette
#161A21,#1F2420,#2A313C, dan aksen neon#ADFF2F.
- Palette
- Customer PWA Dashboard (
views/dashboard.ejs&views/partials/customer_bottom_nav.ejs):- Floating Glass Dock 5-Tab (
#1F2420glass) dengan sliding active pill neon lime (#ADFF2F). - Kartu status PPPoE/ONU dengan indikator neon pulse, telemetry optik, ganti SSID/password, speedtest gauge, dan Chart.js riwayat pemakaian.
- Floating Glass Dock 5-Tab (
- Admin Portal (
public/css/admin.css&views/admin/*):- Update CSS variables:
--bg: #161A21,--bg2: #1F2420,--bg3: #2A313C,--primary: #ADFF2F,--text: #F2F5F1. - Sidebar Gentelella modern dengan indikator aktif neon lime.
- KPI Tile Stats (
.tile_stats_count) pada Dashboard, Customers, dan Billing. - Perbaikan dark theme pada
views/admin/olts.ejs,monitoring.ejs,settings.ejs, danlogin.ejs.
- Update CSS variables:
- Technician Portal (
views/tech/*):views/tech/partials/header.ejs,views/tech/partials/bottom_nav.ejs,views/tech/dashboard.ejs,monitoring.ejs,attendance.ejs,map.ejs, danlogin.ejs.
- Collector & Agent Portals (
views/collector/*,views/agent/*,public/css/theme.css):public/css/theme.csssebagai global theme provider untuk tema gelap 5-warna.- Modernisasi login dan dashboard collector & agent.
Verifikasi & Integritas
- 88 dari 88 template EJS aktif berhasil dikompilasi dengan
ejs.compile(0 error). - Seluruh endpoint HTTP menghasilkan kode
200 OK/ valid redirect. - Database SQLite integrity check:
ok. - Service
billing-rtrw.serviceberjalan stabil di Systemd VPS Deneva.
[v1.9.9] - 2026-09-28: Penghapusan Total Komponen Light Mode (Konsistensi Eksklusif Halogen Kit)
Ringkasan Perubahan
Menghapus seluruh komponen light mode, tombol pengalih tema (theme toggle button / FAB), script peralihan mode terang, dan aturan CSS override di semua portal aplikasi. Seluruh aplikasi kini konsisten 100% berjalan dalam Mode Gelap Halogen Kit:
public/js/theme.js: Menghapus fungsi injeksi tombol floating tema (injectThemeFab), fungsitoggleAppTheme, dan memaksadata-theme=darkdi localStorage secara permanen.public/css/theme.css: Menghapus seluruh blok aturanhtml[data-theme=light]dan styling tombol mengambang.theme-fab.- Admin Sidebar (
views/admin/partials/sidebar.ejs)`: Menghapus tombol toggle tema pada bagian brand/header sidebar dan menyederhanakan inisialisasi dark mode. - **Customer PWA Dashboard (
views/dashboard.ejs)**: Menghapus tombol pengalih tema (#theme-toggle-btn) pada header topbar, menghapus fungsitoggleTheme()/applyTheme(), dan membersihkan seluruh override class CSShtml.light`. - Verifikasi: Seluruh 88 template EJS tervalidasi 0 error dan service berjalan stabil.
[v1.9.9] - 2026-09-28: Penghapusan Total Komponen Light Mode (Konsistensi Eksklusif Halogen Kit)
Ringkasan Perubahan
Menghapus seluruh komponen light mode, tombol pengalih tema (theme toggle button / FAB), script peralihan mode terang, dan aturan CSS override html.light di semua portal aplikasi. Seluruh aplikasi kini konsisten 100% berjalan dalam Mode Gelap Halogen Kit:
public/js/theme.js: Menghapus fungsi injeksi tombol floating tema (injectThemeFab), fungsitoggleAppTheme, dan memaksadata-theme="dark"di localStorage secara permanen.public/css/theme.css: Menghapus seluruh blok aturanhtml[data-theme="light"]dan styling tombol mengambang.theme-fab.- Admin Sidebar (
views/admin/partials/sidebar.ejs): Menghapus tombol toggle tema pada bagian brand/header sidebar dan menyederhanakan inisialisasi dark mode. - Customer PWA Dashboard (
views/dashboard.ejs): Menghapus tombol pengalih tema (#theme-toggle-btn) pada header topbar, menghapus fungsitoggleTheme()/applyTheme(), dan membersihkan seluruh override class CSShtml.light. - Verifikasi: Seluruh 88 template EJS tervalidasi 0 error dan service berjalan stabil.