🗺️ ROADMAP & PRIORITAS PENGERJAAN
Status: 🔴 Belum dimulai | 🟡 Sedang berjalan | 🟢 Selesai
✅ Sudah Selesai
Microservice & Infrastruktur yang Sudah Running di Server (10.100.1.24)
Service
Domain
Keterangan
Terintegrasi ke Super Apps?
my-portal (Next.js)
my.gisportal.id
FE Super Apps
✅ Ya — ini super apps
geonet-console (Laravel)
console.gisportal.id
Backend API: auth, LDAP, permission
✅ Ya — API utama
geonet-collector (FastAPI)
collector.gisportal.id / agent.gisportal.id
Asset management, GeoNetAgent
✅ Ya — asset management
Grafana + Loki + Promtail
grafana.gisportal.id
Monitoring & log aggregation
<EFBFBD> Belum terintegrasi FE
Uptime Kuma
uptime.gisportal.id
Service uptime monitoring
🔶 Belum terintegrasi FE
n8n
n8n.gisportal.id
Workflow automation
🔶 Standalone
Node-RED
node-red.gisportal.id
IoT/flow automation
🔶 Standalone
Dockge
dockge.gisportal.id
Docker stack manager
🔶 Internal ops
Zabbix
zabbix.gisportal.id
Network monitoring (10.100.1.42)
🔶 Belum terintegrasi FE
Gitea
git.gisportal.id
Git server (10.100.1.41:3000)
🔶 Source control
Jira
jira.gisportal.id
Project management (10.100.1.55)
🔶 Existing ticketing lama
PostgreSQL (2x)
internal
DB untuk console & collector
✅ Ya
QNAP OSS
file.gisportal.id / obj.gisportal.id
S3 storage avatar & file
✅ Ya
Catatan penting :
jira.gisportal.id → sudah ada Jira di 10.100.1.55. Pertimbangkan apakah Zammad akan menggantikan atau paralel dengan Jira.
zabbix.gisportal.id → sudah ada monitoring. Integrasi alert Zabbix ke Push Notification bisa jadi prioritas di Fase 4.
grafana.gisportal.id → sudah ada, bisa digunakan untuk dashboard monitoring di FE super apps.
Yang Sudah Dibangun di Super Apps (my.gisportal.id)
Fitur
🟢
Auth (login LDAP, logout, session)
🟢
Profile (edit, ganti password, avatar OSS, device card)
🟢
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 — Gitea Integration (Tidak ada dependency — bisa mulai kapanpun)
Gitea v1.16.5 sudah running di git.gisportal.id (10.100.1.41:3000) dengan REST API aktif.
#
Tugas
Estimasi
16
Setup OAuth2 Gitea — daftarkan super apps sebagai OAuth client di Gitea
0.5 hari
17
src/lib/gitea-client.ts — API client (issues, repos, user) dengan token/OAuth
1 hari
18
FE: Gitea Issues — list issues per repo, form buat issue, detail+komentar
2-3 hari
19
FE: Repo Explorer — list repo milik user, branch, commit history, releases
2-3 hari
20
Profile: Gitea Token — simpan personal access token di profile (fallback jika tidak pakai OAuth)
0.5 hari
🔴 Fase 6 — Mail UI & Monitoring (Butuh Mailcow API)
#
Tugas
Estimasi
21
Mail UI — Inbox, Sent, Draft, Contacts, Calendar, Tasks, Rules
5-7 hari
22
Monitoring alert detail dialog (standar UI ADR)
1 hari
🔴 Fase 7 — Infrastruktur (Bisa paralel kapanpun)
#
Tugas
Estimasi
23
Mikrotik — PPP login via LDAP
1 hari
24
Windows Server AD — LDAP SSO + SAML
2-3 hari
Urutan pengerjaan :
① Content/Home Feed → ② Mailcow → ③ Zammad+Ticketing → ④ Push Notif → ⑤ Gitea → ⑥ Mail UI → ⑦ Infra
(Gitea Fase 5 bisa dikerjakan paralel dengan Fase 2-4 karena tidak ada dependency)
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
Gitea Integration (git.gisportal.id)
Status
Gitea v1.16.5 sudah running di 10.100.1.41:3000 → domain git.gisportal.id
REST API aktif (/api/v1/) — tidak perlu install apapun, langsung integrasi
Swagger UI tersedia di git.gisportal.id/api/swagger
Auth Strategy
Pilihan: OAuth2 (rekomendasi)
Daftarkan super apps sebagai OAuth Application di Gitea (Settings → Applications → OAuth2)
Callback URL: https://my.gisportal.id/auth/gitea/callback
Flow: user klik "Hubungkan Gitea" → redirect OAuth → dapat access token → simpan di session/DB
Fallback : user input Personal Access Token manual di halaman Profile
API Endpoint yang Digunakan
Auth:
GET /user — info user yang login
GET /users/{username} — profil user
Issues:
GET /repos/{owner}/{repo}/issues — list issues (filter: state, label, assignee)
POST /repos/{owner}/{repo}/issues — buat issue baru
GET /repos/{owner}/{repo}/issues/{index} — detail issue
PATCH /repos/{owner}/{repo}/issues/{index} — update (close, assign, label)
GET /repos/{owner}/{repo}/issues/{index}/comments — komentar
POST /repos/{owner}/{repo}/issues/{index}/comments — tambah komentar
GET /repos/{owner}/{repo}/labels — label/kategori tersedia
Repositories:
GET /user/repos — semua repo milik user
GET /repos/{owner}/{repo} — detail repo (stars, forks, size, last push)
GET /repos/{owner}/{repo}/branches — daftar branch
GET /repos/{owner}/{repo}/commits — commit history
GET /repos/{owner}/{repo}/releases — releases / tags
GET /repos/search?q=&topic= — search repo
FE Tasks
Setup & Auth
Halaman Issues (/gitea/issues)
Halaman Repo Explorer (/gitea/repos)
Permission (tambah ke group_permissions)
Permission
Fungsi
gitea.view
Lihat issue & repo (semua user yang punya akun Gitea)
gitea.create_issue
Buat issue baru
gitea.manage
Admin Gitea (close issue, assign, label)
Catatan
Issue dari super apps dan Gitea web sinkron sempurna — data disimpan di Gitea, super apps hanya read/write via API
Tidak perlu database tambahan di super apps untuk Gitea — semua state di Gitea
Bisa jadi alternatif/pelengkap Zammad untuk bug tracking development (Zammad = IT helpdesk, Gitea = dev issues)
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