🗺️ ROADMAP & PRIORITAS PENGERJAAN
Status: 🔴 Belum dimulai | 🟡 Sedang berjalan | 🟢 Selesai
✅ Sudah Selesai
Tugas
🟢
Portal FE (my.gisportal.id) — auth, profile, dashboard
🟢
Asset Management UI — list, detail, edit meta, assign owner
🟢
Admin: LDAP User & Group management (phone, dept, title, dll)
🟢
Admin: Permission management berbasis LDAP Group
🟢
GeoNet Collector — agent, snapshot, asset read service + owner info
🟢
Permission guard FE (sidebar, bottom-nav filter by permission)
🔴 Fase 1 — Content & Home Feed (Mulai sekarang — tidak ada dependency)
Dashboard home saat ini kosong. Content service adalah nilai tambah langsung terlihat user.
#
Tugas
Estimasi
1
Backend geonet-content — FastAPI, Post, Like, Comment, thumbnail OSS
4-6 hari
2
FE Home Feed — grid thumbnail di dashboard, Post Card (view/like/comment)
2-3 hari
3
FE Post Detail — halaman /posts/:slug, rich text, komentar bersarang
1-2 hari
4
FE Admin: Create/Edit Post — Tiptap editor, upload thumbnail, jadwal publish
2-3 hari
5
FE Admin: Manage Posts — reorder priority, bulk status, konfigurasi tampilan
1-2 hari
🔴 Fase 2 — Mail Server (Prerequisite Ticketing & Mail UI)
#
Tugas
Estimasi
6
Install Mailcow — Docker, multi-domain (geonet.co.id, gegeo.my.id)
2-3 hari
7
Konfigurasi LDAP Mailcow — SSO ke AD 10.100.1.40
1 hari
8
Thunderbird — konfigurasi IMAP, simpan data ke NAS
1 hari
🔴 Fase 3 — Ticketing (Butuh Mailcow untuk notif email)
#
Tugas
Estimasi
9
Install Zammad — Docker, LDAP, kategori (Hardware/Software/ESRI/dll), SLA
2-3 hari
10
Konfigurasi Zammad — group mapping, webhook, auto-assign, public portal
1 hari
11
FE Ticketing — list, form buat tiket, detail+log timeline, dashboard IT
3-5 hari
12
Integrasi Tiket ↔ Asset — tiket bisa dikaitkan ke asset spesifik
1 hari
🔴 Fase 4 — Push Notification (Butuh Zammad webhook sebagai sumber event)
#
Tugas
Estimasi
13
Backend geonet-push — FastAPI + VAPID, subscribe per user LDAP
2-3 hari
14
FE Push — Service Worker handler, permission UI, notif center navbar
1-2 hari
15
Trigger : Zammad → push, Collector alert → push, broadcast IT
1 hari
🔴 Fase 5 — Mail UI & Monitoring (Butuh Mailcow API)
#
Tugas
Estimasi
16
Mail UI — Inbox, Sent, Draft, Contacts, Calendar, Tasks, Rules
5-7 hari
17
Monitoring alert detail dialog (standar UI ADR)
1 hari
🔴 Fase 6 — Infrastruktur (Bisa paralel kapanpun)
#
Tugas
Estimasi
18
Mikrotik — PPP login via LDAP
1 hari
19
Windows Server AD — LDAP SSO + SAML
2-3 hari
Urutan pengerjaan :
① Content/Home Feed → ② Mailcow → ③ Zammad+Ticketing → ④ Push Notif → ⑤ Mail UI → ⑥ Infra
ADR — Standar Dialog Preview / Edit (UI Pattern)
Aturan Wajib
Semua dialog preview/edit WAJIB menggunakan <Dialog> dari @/components/ui/dialog (bukan Sheet/Drawer)
Ukuran: sm:max-w-lg (detail lebar) atau sm:max-w-md (form pendek)
Struktur wajib:
Header berwarna (gradient) — berisi ikon, judul, sub-judul
Body dengan overflow-y-auto max-h-[65dvh] — scrollable
Footer sticky dengan border-t bg-muted/30 — tombol Batal + Simpan
Untuk dialog yang punya preview DAN edit, gunakan 2 tab (tab "Detail" + tab "Edit")
Tab menggunakan komponen <Tabs> dari @/components/ui/tabs
Info 2-kolom: grid grid-cols-[160px_1fr] untuk label–value
Referensi Implementasi
src/app/(app)/profile/page.tsx — <Dialog> Edit Profil & Ganti Password
src/components/asset-management/asset-detail-dialog.tsx — Dialog Asset (2 tab)
Komponen yang Mengikuti Standar Ini
Ticketing Microservice
Platform: Zammad (Rekomendasi Production)
Docker di server 10.100.1.24, domain: zammad.gisportal.id
LDAP Auth terintegrasi ke AD 10.100.1.40
REST API digunakan oleh FE Next.js di /ticketing
Setup Zammad
Kategori Tiket
Hardware: Komputer, Laptop, Printer, Server, Jaringan, dll
Software:
ESRI (ArcGIS Desktop, ArcGIS Pro, ArcGIS Online, ArcGIS Enterprise, Extension)
BlueMarble (Global Mapper, Geographic Calculator, dll)
DataEast (MapInfo, dll)
Microsoft (Office, Windows, Server, dll)
Lainnya (input bebas)
Asset Request (Pengadaan): Permohonan pembelian hardware/software baru
Issue Umum: Gangguan layanan, akses, dll
Alur Tiket (Workflow)
Open → In Progress → Pending (menunggu user/pihak lain) → Resolved → Closed
↓
Escalate (jika SLA breach)
Setiap transisi status tercatat di log timeline (audit trail)
Assignee: user LDAP atau group LDAP (IT-Admin/IT-Staff/divisi terkait)
Requester: user internal (SSO LDAP) atau guest publik (email + nama)
FE Integration (/ticketing di my.gisportal.id)
Zammad API Client (src/lib/zammad-client.ts)
Push Notification Microservice
Arsitektur yang Disarankan: Web Push (VAPID) + ntfy / Superstream
Opsi Backend
Platform
Protokol
Docker
PWA Support
LDAP
Nilai
ntfy
HTTP Push + WebSocket
✅
✅ (Web Push)
via proxy
🥇 Ringan & simpel
Webpush custom (FastAPI)
Web Push VAPID
✅
✅
✅ native
🥈 Full kontrol
Firebase FCM
FCM
❌ self-host
✅
❌
❌ vendor lock-in
Apprise
Multi-channel
✅
❌
❌
Sebagai relay saja
Rekomendasi: Custom FastAPI Push Service + Web Push VAPID
Self-hosted, no vendor lock-in
Compatible Web Push API — bekerja di browser (Chrome, Firefox, Edge, Safari iOS 16.4+)
PWA: Service Worker push event sudah didukung @ducanh2912/next-pwa
Subscription per-user (LDAP username) disimpan di DB
Trigger dari Zammad webhook, Collector alert, atau manual
Alur Push Notification
Event (Zammad tiket baru / Asset alert / dll)
│
▼
Push Service API (FastAPI, port 17000)
│
├─ Lookup subscription by user/group LDAP
├─ Web Push VAPID → Browser/PWA Service Worker
└─ (opsional) relay ke ntfy/email/webhook
│
▼
Browser / PWA
Service Worker `push` event
│
▼
Notification (judul, body, icon, action button, url)
Setup Push Service
Sumber Event (Trigger)
FE Integration (Next.js PWA)
Kategori Notifikasi
🎫 Ticketing : tiket baru assigned, update status, komentar baru, SLA overdue
🖥️ Asset Management : device offline > X menit, disk usage > 90%, tiket asset baru
📢 Broadcast IT : pengumuman, maintenance, downtime
(Future) 📊 Monitoring: alert Zabbix
Content / Posting Microservice (geonet-content)
Saran Profesional
Gunakan pola Headless CMS + custom API — bukan CMS full seperti WordPress.
Ini memberi kontrol penuh atas schema, permission berbasis LDAP group, dan integrasi ke push notification.
Stack yang Disarankan
Backend : FastAPI + PostgreSQL (konsisten dengan Collector)
Storage thumbnail/gambar : QNAP OSS (S3 bucket super-apps, path content/)
Rich text body : simpan sebagai HTML atau Markdown (pakai Tiptap editor di FE)
CDN/resize : thumbnail di-generate otomatis via Pillow saat upload (multi-resolusi: 400px, 800px)
Model Data
Post
Post
├── id (UUID)
├── title (string)
├── slug (string, unique)
├── body (text — HTML/Markdown)
├── thumbnail_url (string — OSS path)
├── status (draft | published | archived)
├── priority (int — urutan manual oleh admin)
├── published_at (datetime | null)
├── created_by (ldap_username)
├── created_at / updated_at
├── tags[] (many-to-many)
└── category (string: announcement | info | event | update | dll)
PostEngagement (per post)
├── view_count (int, increment atomic)
├── like_count (int)
└── comment_count (int — cached, sync dari PostComment)
PostLike
├── post_id
└── ldap_username (unique per post+user)
PostComment
├── id
├── post_id
├── ldap_username
├── body (text)
├── created_at
└── parent_id (null = top-level, isi = reply)
API Endpoints
GET /posts — list posting (filter: status, kategori, tag; sort: date/views/likes/comments/priority)
GET /posts/:slug — detail + increment view_count
POST /posts — buat posting (butuh permission content.create)
PUT /posts/:id — edit posting (butuh permission content.edit atau own post)
DELETE /posts/:id — hapus (butuh permission content.manage)
POST /posts/:id/like — toggle like (user LDAP)
GET /posts/:id/comments — list komentar + reply
POST /posts/:id/comments — tambah komentar
PUT /admin/posts/reorder — ubah urutan priority (butuh permission content.manage)
POST /admin/posts/:id/thumbnail — upload + resize thumbnail ke OSS
Permission LDAP Group (tambah ke group_permissions)
Permission
Fungsi
content.view
Lihat posting (semua user default)
content.create
Buat posting baru
content.edit
Edit semua posting (moderator)
content.manage
Kelola urutan, status, hapus, konfigurasi tampilan
Konfigurasi Tampilan (Admin Panel)
Setup Backend
FE Integration (/ home & /posts)
Home Dashboard — feed thumbnail posting (grid responsif, lazy load)
Post Card : thumbnail, judul, kategori, tanggal, ikon view/like/comment count
Post Detail — halaman /posts/:slug dengan body rich text, komentar bersarang
Like button — toggle, animasi, optimistic update
Comment section — list + form reply, pagination
Admin: Create/Edit Post — form dengan Tiptap rich text editor, upload thumbnail, jadwal publish
Admin: Manage Posts — tabel dengan drag-and-drop reorder (priority), bulk status change
Admin: Config — panel jumlah tampilan, mode urutan, layout grid
Content API Client (src/lib/content-client.ts)
FE
my.gisportal.id
│
├─ Dashboard
├─ Profile (Action : Edit Profile, Ganti Password, Test Email)
├─ Ticketing
├─ Asset Management
├─ GeoNetAgent
├─ Monitoring
└─ Mail
│
├─ Inbox
├─ Sent
├─ Draft
├─ Contacts
├─ Calendar
├─ Tasks
└─ Rules
Microservices
Mailserver (Mailcow)
Produk
Web UI
API
Multi Domain
Docker
Enterprise
Nilai
Mailcow
⭐ ⭐ ⭐ ⭐ ⭐
⭐ ⭐ ⭐ ⭐ ⭐
✅
✅
⭐ ⭐ ⭐ ⭐ ⭐
🥇
iRedMail
⭐ ⭐ ⭐ ⭐
⭐ ⭐ ⭐
✅
⚠️
⭐ ⭐ ⭐ ⭐ ⭐
🥈
Zimbra
⭐ ⭐ ⭐ ⭐ ⭐
⭐ ⭐ ⭐ ⭐
✅
❌
⭐ ⭐ ⭐ ⭐ ⭐
🥉
Modoboa
⭐ ⭐ ⭐ ⭐
⭐ ⭐ ⭐ ⭐
✅
⚠️
⭐ ⭐ ⭐ ⭐
⭐ ⭐ ⭐
Stalwart Mail
⭐ ⭐ ⭐ ⭐ ⭐
⭐ ⭐ ⭐ ⭐ ⭐
✅
✅
⭐ ⭐ ⭐ ⭐ ⭐
⭐ ⭐ ⭐ ⭐ ⭐
Setup
Install Thunderbird
Mikrotik
Windows Server 2012 R2 Active Directory