SISGO Meet adalah platform komunikasi video konferensi real-time berbasis WebRTC yang terintegrasi secara native dengan aplikasi desktop lintas platform (Windows, macOS, dan Linux). Platform ini dirancang untuk memfasilitasi kolaborasi interaktif melalui fitur unggulan Live Screen Annotation Overlay, yang memungkinkan pengguna melakukan coret-coret di atas layar desktop secara real-time dan tersinkronisasi antar seluruh peserta rapat.
- Arsitektur Sistem
- Fitur Unggulan
- Teknologi dan Dependensi Utama
- Struktur Direktori Proyek
- Prasyarat Sistem
- Konfigurasi Environment Variable
- Panduan Pengembangan (Development)
- Panduan Kompilasi dan Distro (Production Build)
- Otomatisasi CI/CD Release via GitHub Actions
- Troubleshooting dan Catatan Kompatibilitas
Aplikasi ini menggunakan arsitektur Hybrid Cloud-Desktop yang memisahkan logika UI/WebRTC dengan runtime bawaan sistem operasi.
+-------------------------------------------------------------------+
| Client Layer (Electron) |
| +------------------------+ +-----------------------------+ |
| | Main App Window | | Transparent Overlay | |
| | (Next.js / WebRTC Core)| | (Canvas & Interaksi Screen) | |
| +-----------+------------+ +--------------+--------------+ |
+--------------|----------------------------------|-----------------+
| Electron IPC Bridge |
+----------------------------------+
|
v
+-------------------------------------------------------------------+
| Signaling & Network Layer |
| +------------------------+ +-----------------------------+ |
| | WebSocket Signaling | | WebRTC Peer-to-Peer Data | |
| | (wss.sisgo.co.id) | | (DataChannel Sync Garis) | |
| +------------------------+ +-----------------------------+ |
+-------------------------------------------------------------------+
- Electron Main Process (
electron/main.ts): Bertanggung jawab atas pengelolaan jendela transparan (Overlay), deteksi resolusi multi-monitor, konfigurasi flag X11/XWayland di Linux, serta pembuatan menu native. - Preload Script (
electron/preload.js): Menyediakan jembatan IPC yang aman dengan menerapkancontextIsolation: truedan menyuntikkan metodewindow.electronAPI. - Renderer Process (Next.js App Router): Menjalankan logika antarmuka pengguna, komunikasi suara/video WebRTC (SimplePeer), serta rendering Canvas 2D untuk fungsi corat-coret.
- Multi-Monitor Bounds Detection: Sistem secara otomatis menghitung koordinat virtual screen gabungan dari seluruh monitor yang terhubung (termasuk monitor dengan koordinat offset negatif).
- Mode Interaksi dan Jeda (Pause / Resume): Pengguna dapat menjeda layar corat-coret secara instan untuk berinteraksi langsung dengan aplikasi di belakangnya (seperti Notion, VS Code, Browser), kemudian melanjutkan sesi corat-coret tanpa kehilangan riwayat gambar.
- Visual Cursor Preview: Saat mode penghapus (Eraser) aktif, kursor crosshair akan secara otomatis berubah menjadi penunjuk lingkaran transparan yang menyesuaikan dengan ukuran ketebalan stroke.
- Setiap goresan garis, perubahan warna, ukuran stroke, maupun aksi pembersihan kanvas (Clear All) dikirimkan melalui saluran data WebRTC ke seluruh anggota ruang rapat.
- Desain Minimalis Dark Glassmorphism: Toolbar melayang yang ergonomis tanpa elemen mengganggu.
- Keamanan Aplikasi: Menu bar bawaan sistem disembunyikan (
Menu.setApplicationMenu(null)), dan akses DevTools/Inspect Element secara otomatis dimatikan pada mode produksi.
- Framework Web: Next.js 16 (App Router), React 19.
- Desktop Engine: Electron 43.
- Komunikasi Real-Time: WebRTC (SimplePeer), WebSockets.
- Styling dan Ikon: Vanilla Inline CSS, Lucide React Icons.
- Packaging Tool: Electron Builder (NSIS untuk Windows, DMG untuk macOS, AppImage untuk Linux).
meetgo/
├── .github/
│ └── workflows/
│ └── build-desktop.yml # Konfigurasi CI/CD GitHub Actions multi-OS
├── app/
│ ├── overlay/
│ │ └── page.tsx # Halaman Canvas Overlay corat-coret utama
│ ├── overlay-mini/
│ │ └── page.tsx # Halaman Floating Mini Button (Pause/Resume)
│ ├── [roomId]/
│ │ └── page.tsx # Ruang Pertemuan Video WebRTC
│ └── layout.tsx # Root Layout Next.js
├── electron/
│ ├── main.ts # Main process Electron & manajemen jendela
│ ├── preload.js # Bridge IPC contextBridge antara Main & Renderer
│ └── tsconfig.json # Konfigurasi TypeScript khusus Electron
├── hooks/
│ └── useWebRTC.ts # Hook penanganan koneksi P2P WebRTC & DataChannel
├── types/
│ └── electron-api.d.ts # Deklarasi tipe global untuk window.electronAPI
├── package.json # Dependensi dan skrip proyek
└── tsconfig.json # Konfigurasi TypeScript utama
- Node.js: Versi
20.xatau22.x(LTS direkomendasikan). - npm: Versi
10.xatau yang lebih baru. - OS Kompatibilitas:
- Windows 10 / 11 (64-bit)
- macOS 11 Big Sur atau yang lebih baru (Apple Silicon & Intel)
- Linux (Ubuntu/Debian) dengan dukungan X11 atau XWayland
Buat file .env.local pada direktori akar proyek dengan menyertakan konfigurasi URL server Anda:
NEXT_PUBLIC_BASE_URL=your_web_base_url
NEXT_PUBLIC_API_SOCKET_URL=your_socket_url
NEXT_PUBLIC_SIGNAL_SERVER=your_signaling_server_urlnpm installnpm run devServer lokal akan berjalan pada http://localhost:3001.
npm run desktop:devPerintah ini akan mengompilasi TypeScript Electron dan membuka jendela aplikasi desktop secara simultan.
Sebelum melakukan packaging, pastikan TypeScript Electron dapat terkompilasi dengan menjalankan:
npm run build:electronnpm run desktop:build:winHasil file installer NSIS (SISGO Meet Setup X.X.X.exe) akan tersimpan di direktori dist/.
npm run desktop:build:linuxHasil file executable SISGO Meet-X.X.X.AppImage akan tersimpan di direktori dist/.
npm run desktop:build:mac(Catatan: Build macOS membutuhkan lingkungan OS macOS native).
Proyek ini telah dikonfigurasi dengan pipeline otomatisasi pembuatan paket rilis lintas platform (Windows, macOS, dan Linux) menggunakan GitHub Actions.
-
Pastikan seluruh perubahan kode telah di-commit ke branch
main:git add . git commit -m "penyesuaian fitur rilis" git push origin main
-
Buat tag versi baru (menggunakan format
v*):git tag v1.0.5 git push origin v1.0.5
-
Pipeline GitHub Actions akan secara otomatis menjalankan 3 runner terpisah (
windows-latest,macos-latest, danubuntu-latest) serta mengunggah file installer ke halaman GitHub Releases.
Pada lingkungan desktop Linux yang menggunakan sesi Wayland, fungsi setIgnoreMouseEvents Electron dibatasi oleh protokol Wayland. Aplikasi ini secara otomatis menangani batasan ini dengan:
- Memaksa eksekusi melalui skrip
ozone-platform=x11(XWayland). - Menggunakan arsitektur Show/Hide pada window Canvas daripada bergantung pada passthrough event mouse sistem.
Untuk menjaga ukuran installer tetap kecil (~70MB - 90MB), konfigurasi package.json secara eksplisit mengecualikan folder .next dan node_modules yang tidak diperlukan oleh aplikasi desktop client.
Hak Cipta (c) 2026 Tim SISGO Meet. Seluruh hak cipta dilindungi undang-undang.