Skip to content

Commit 4055980

Browse files
committed
feat: real-time bot with Gemini AI, broadcast, subscribe, status + web optimizations
1 parent ebf0b30 commit 4055980

File tree

7 files changed

+654
-202
lines changed

7 files changed

+654
-202
lines changed

README.md

Lines changed: 134 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -1,64 +1,118 @@
11
# PRISMA - Platform Informasi & Manajemen RT 04
22

3-
## 🚀 Quick Start
3+
Selamat datang di repositori **PRISMA (Platform Informasi & Sistem Manajemen RT 04)**. Proyek ini adalah solusi digital end-to-end berstandar enterprise yang ditujukan untuk memodernisasi tata kelola administrasi tingkat Rukun Tetangga (RT), pengelolaan kas, keamanan lingkungan, serta pelayanan warga menggunakan teknologi kecerdasan buatan (AI).
4+
5+
---
6+
7+
## 🏗️ Tech Stack
8+
9+
Sistem ini dikembangkan menggunakan teknologi terdepan dalam ekosistem JavaScript dan Python:
10+
- **Frontend Framework**: Next.js 16.1.4 (App Router) dengan React 19.
11+
- **Language**: TypeScript secara menyeluruh tipe-data ketat (strict typing).
12+
- **Styling**: Tailwind CSS v4 untuk *utility-first* styling, dipadukan dengan konfigurasi PostCSS.
13+
- **AI & Data Science (Backend)**: Python 3.10+ (FastAPI) untuk *Natural Language Processing*, *Computer Vision*, dan *LLM Inference* (Local LLM via Ollama/Llama 3.2).
14+
- **Web Backend & Tooling**: Node.js ecosystem, `dotenv` untuk pengelolaan environment.
15+
- **Testing**: `vitest` bersama `@testing-library/react` dan `jsdom` untuk _unit test_ dan _integration test_ yang secepat kilat.
16+
- **Bot Engine**: `node-telegram-bot-api` bersama `pdfkit` (untuk auto-generate dokumen administrasi PDF).
17+
18+
---
19+
20+
## 🗄️ Database
21+
22+
Arsitektur data PRISMA dirancang fleksibel menyesuaikan tingkat deployment (mulai dari local tier sampai enterprise tier cloud):
23+
1. **Cloud Database (Primary)**: @supabase/supabase-js dan PostgreSQL (Neon Tech) dengan Drizzle ORM (terpisah sesuai branch environment).
24+
2. **Local / Edge Database**: Penggunaan `sql.js` (SQLite `prisma_demo.db`) di memori untuk keperluan fast-demo, stand-alone mode tanpa setup yang rumit.
25+
3. **Legacy Fallback**: Kompatibilitas relasional RDBMS dengan MySQL (XAMPP basis port 3306) untuk kemudahan host di level komunitas yang lebih umum.
26+
27+
---
28+
29+
## 🎨 UI/UX Design
30+
31+
Kami mengadopsi standar desain **Enterprise Modern** yang intuitif dan interaktif bagi seluruh warga (dari kalangan milenial maupun senior):
32+
- **Component Library**: Radix UI Primitives (`@radix-ui/react-*`) menjamin _accessibility_ tinggi tanpa keharusan design bawaan (A11y Compliant).
33+
- **Smooth Animations**: Interaksi antarmuka didukung transisi elemen mulus dari `framer-motion`.
34+
- **Theming & Color Scheme**: Menggunakan `next-themes` (Dark Mode / Light Mode Auto-detection) dengan Tailwind `clsx` & `tailwind-merge`.
35+
- **Responsive & Mobile First**: Elemen-elemen seperti Navbar, Chatbot Widget (`chatbot.tsx`), dan layout administrasi responsif sempurna di layar perangkat *smartphone* maupun tablet secara proporsional.
36+
- **Inti Pengalaman Warga**: Menghadirkan *floating dashboard*, sistem tiket pelaporan instan, visualisasi data kas transparan, dan navigasi yang sangat _user-friendly_.
37+
38+
---
39+
40+
## 📈 Scalability
41+
42+
Platform tidak hanya berjalan dalam mode _monolith_ melainkan dirancang modular:
43+
- **Microservices Deployment**: Pemisahan jelas antara layer Presentation (Next.js port 3000), ML Model Endpoints (FastAPI port 8000), dan Vector/RAG Chat Backend (port 8001).
44+
- **Cloud Delivery Network (CDN)**: Memanfaatkan Cloudflare Pages (lewat `deploy:cf` `wrangler` CLI) dan Vercel (melalui `vercel.json` config) sehingga static asset dapat diakses global dengan *latency* amat rendah.
45+
- **State Management**: Perluasan service dapat diskalkulasikan tanpa mengganggu operasi main UI thread. Jika traffic chat membludak, sistem dapat men-scale secara bebas *Backend Chat* (RAG Engine) saja.
46+
47+
---
48+
49+
## ⚡ Optimization
50+
51+
Agar aplikasi memiliki *Time to Interactive (TTI)* dan stabilitas yang unggul:
52+
- **Build Optimization**: Memanfaatkan engine turbopack Next.js; gambar, transisi font, dan layout *server-side rendering (SSR)* berjalan *seamless*.
53+
- **SEO & Web Indexing**: `next-sitemap` dikonfigurasikan agar pengumuman publik RT mudah dirayapi standar *search engine* bila dibuka ke ruang lingkup RT publik/nasional.
54+
- **Testing Terstruktur**: Integrasi *Vitest* dalam konfigurasi workflow untuk menjamin tiada penurunan perfoma *regression bugs* saat rilis *fitur* baru.
55+
56+
---
57+
58+
## 🛡️ Security & Keamanan
59+
60+
Data kependudukan adalah hal krusial, di dalamnya termasuk keamanan privasi warga:
61+
- **Anti XSS & Sanitization**: Layanan komunikasi dijaga dari manipulasi _scripting_ berbahaya (XSS injection) dengan implementasi lib `dompurify`, `sanitize-html`, serta `xss`. Sistem telegram bot (`sanitizeBotInput()`) memotong payload kode arbitrer secara otonom.
62+
- **Data Encryption**: Proses hasing menggunakan algoritma modern dari `bcryptjs`.
63+
- **Bot/Spam Protection**: Pelaporan publik di web page diamankan melalui integrasi reCAPTCHA v2/v3 (`react-google-recaptcha`).
64+
- **Rate-Limiting Logic**: Pengaturan beban IP dengan `ip-rate-limit` pada layer Node.js & *flood guard* otomatis di layer Telegram Server untuk menahan serangan/spammer warga dengan limit standar 30 entri pesan per menit per user ID.
65+
- **Isolated Credentials**: Token, kunci enkripsi, dan credential API diamankan di luar repositori publik menggunakan file lingkungan *strict* (`.env.bot`, `.env.local`).
66+
67+
---
68+
69+
## 🤖 AI Agents
70+
71+
PRISMA melampaui website RT konvensional dengan menghadirkan Kecerdasan Buatan melalui entitas asisten mandiri:
72+
1. **Interactive RAG Web Agent (Siaga)**: Chatbot interaktif terbenam pada pojok sistem Web (`src/components/chat/chatbot.tsx`). Menghubungi API Chat RAG (Retrieval-Augmented Generation) di Python untuk memberi respons pintar terkait pedoman kepengurusan dan arahan URL *Real-time*.
73+
2. **Autonomous Telegram Bot (24/7 Virtual Asisstant)**: Bot Telegram pintar (`scripts/telegram-bot.ts`) sebagai jalur darurat saat _web infrastructure_ tidak dibuka.
74+
-**Fungsi Administratif Otomatis**: Membuat *Surat Pengantar* untuk warga seketika dan mencetak file output validasi berupa *PDF* (`pdfkit`).
75+
-**Integrasi Penjawab Cepat**: Menyampaikan histori keuangan real-time kas RT, status laporan keamanan, dan integrasi _Ticket ID_ warga.
76+
3. **Advanced AI Microservices**: `FastAPI` Engine mampu memperkirakan tren (`predict/financial`), klasifikasi visi masalah lingkungan (seperti jalanan berlubang/sampah berserakan lewat `vision/classify`), dan analisis sentimen terhadap komplain warga yang masuk (untuk memprioritaskan penyelesaian).
77+
78+
---
79+
80+
## 🚀 Quick Start (Menjalankan Sistem)
481

582
### Menjalankan Semua Services Sekaligus
683

784
```powershell
8-
# Dari root folder
85+
# Dari root folder, jalankan orchestrator
986
npm run dev:all
1087
11-
# Atau langsung
88+
# Atau langsung mengeksekusi powershell script
1289
.\run-all.ps1
1390
```
1491

1592
### Menjalankan Services Secara Terpisah
1693

17-
```powershell
18-
# Terminal 1: Frontend (Next.js) - Port 3000
19-
npm run dev
20-
21-
# Terminal 2: AI Backend (FastAPI) - Port 8000
22-
npm run dev:ai-backend
94+
1. **Frontend (Next.js) - Port 3000**
95+
```powershell
96+
npm run dev
97+
```
2398

24-
# Terminal 3: Chatbot Backend (RAG) - Port 8001
25-
npm run dev:chatbot
26-
```
99+
2. **AI Backend NLP/Vision (FastAPI) - Port 8000**
100+
```powershell
101+
npm run dev:ai-backend
102+
```
27103

28-
## 🔧 Konfigurasi Port
104+
3. **Chatbot Retrieval Agent Backend (RAG) - Port 8001**
105+
```powershell
106+
npm run dev:chatbot
107+
```
29108

30-
| Service | Port | URL |
31-
| ---------------- | ----- | -------------------------------- |
32-
| Frontend Next.js | 3000 | http://localhost:3000 |
33-
| AI Backend | 8000 | http://localhost:8000/docs |
34-
| Chatbot Backend | 8001 | http://localhost:8001/chat |
109+
*(Telegram Bot dapat dinyalakan dengan menjalankan `npm run bot` setelah mengatur token di file `.env.bot`.)*
35110

36-
## 📁 Struktur Proyek
111+
---
37112

38-
```
39-
prisma/
40-
├── src/ # Frontend Next.js
41-
│ ├── app/ # App Router pages
42-
│ └── components/ # React components
43-
├── central-node/ # Backend services
44-
│ ├── ai-backend/ # AI Platform (Port 8000)
45-
│ │ ├── main.py # FastAPI app
46-
│ │ ├── models/ # ML models
47-
│ │ └── requirements.txt
48-
│ ├── backend-python/ # Chatbot RAG (Port 8001)
49-
│ │ ├── main.py # FastAPI app
50-
│ │ ├── data/ # PDF documents
51-
│ │ └── requirements.txt
52-
│ └── run-ai.ps1 # AI backend runner
53-
├── run-all.ps1 # Run all services
54-
├── package.json # NPM scripts
55-
└── .env.local # Environment variables
56-
```
57-
58-
## 🔌 API Endpoints
113+
## 🔌 API Endpoints Reference
59114

60115
### AI Backend (Port 8000)
61-
62116
- `GET /docs` - Swagger documentation
63117
- `POST /api/v1/nlp/sentiment` - Sentiment analysis
64118
- `POST /api/v1/nlp/chat` - AI chat
@@ -67,44 +121,67 @@ prisma/
67121
- `GET /api/v1/recommend/activities/{warga_id}` - Activity recommendations
68122

69123
### Chatbot Backend (Port 8001)
70-
71124
- `POST /chat` - RAG-based chat with Siaga assistant
72125

73-
## ⚙️ Environment Variables
126+
---
127+
128+
## 📂 Struktur Direktori & Fungsi Subfolder (Features & Functions)
129+
130+
Proyek ini menggunakan arsitektur **Feature-Sliced Design** yang terpusat di direktori `src/` dan `scripts/`:
131+
132+
### 1. `src/app/` (Next.js App Router)
133+
Berisi *route handlers* dan *pages* antarmuka sistem:
134+
- **`/admin`**: Panel dashboard khusus Ketua RT/Pengurus untuk memvalidasi laporan warga, mengelola surat, dan analitik.
135+
- **`/auth`**: Sistem registrasi warga, login, dan manajemen sesi pengguna.
136+
- **`/keuangan`**: Modul transparansi kas RT. Berisi rekapitulasi dana dan histori pembayaran.
137+
- **`/layanan`**: Pusat layanan mandiri (*self-service*). Termasuk pelaporan keamanan lingkungan (*Security*) komprehensif.
138+
- **`/surat`**: Route khusus untuk memproses dan mencetak pengajuan dokumen (Surat Pengantar RT, dll).
139+
- **`/profile` & `/settings`**: Personalisasi profil warga, data domisili, dan preferensi akun.
140+
141+
### 2. `src/components/` (React Components)
142+
Berisi modul UI *reusable* pembentuk antarmuka:
143+
- **`/chat`**: Memuat `chatbot.tsx`, antarmuka widget *floating* untuk **AI Siaga (RAG Agent)** berinteraksi via Python Backend.
144+
- **`/home`**: Komponen layout *Landing Page* / Dashboard warga (pengumuman, info kas singkat, navigasi *shortcut*).
145+
- **`/layout`**: Struktur kerangka aplikasi (navbar, sidebar) tertata rapi merespon ukuran perangkat *mobile-first*.
146+
- **`/ui`**: *Base primitives* komponen (Button, Card, Input) dari Radix UI yang di-styling responsif menggunakan Tailwind CSS.
147+
- **`pwa-install-prompt.tsx`**: Modul notifikasi mengajak warga menginstal PWA (Progressive Web App) ke ponsel.
148+
- **`/surat`**: Form interaktif dan tampilan layout spesifik untuk formulir dokumen.
149+
150+
### 3. `scripts/` (Edge & Background Jobs)
151+
- **`telegram-bot.ts`**: Hub mesin *Telegram Bot* otonom 24/7 Node.js. Menanggapi prompt warga dan men-*generate* file PDF secara mandiri langsung (`pdfkit`).
152+
- **`generate_db.js`**: Script inisiasi dan *seeding* struktur tabel (*mock data*) otomatis untuk `prisma_demo.db` (Local SQLite Database).
153+
154+
---
155+
156+
## ⚙️ Environment Variables (.env.local)
74157

75158
```env
76-
# Backend URLs
159+
# URL Backbone
77160
NEXT_PUBLIC_AI_BACKEND_URL="http://localhost:8000"
78161
NEXT_PUBLIC_CHAT_API_URL="http://localhost:8001/chat"
79162
80-
# Database (MySQL/XAMPP)
163+
# Database Relasional Legacy (Bila tidak memakai Drizzle/Supabase)
81164
DB_HOST=localhost
82165
DB_PORT=3306
83166
DB_NAME=admin_rt
84167
```
85168

86-
## 🛠️ Prerequisites
87-
88-
- **Node.js** 18+ (untuk frontend)
89-
- **Python** 3.10+ (untuk backend)
90-
- **XAMPP** (opsional, untuk MySQL database)
169+
---
91170

92171
## 📝 Troubleshooting
93172

94-
### Port sudah digunakan
173+
**A. Port konflik / Port sudah digunakan**
95174
```powershell
96-
# Cek process yang menggunakan port
175+
# Temukan Process ID (PID)
97176
netstat -ano | findstr :3000
98-
netstat -ano | findstr :8000
99-
netstat -ano | findstr :8001
100177
101-
# Kill process (ganti PID)
178+
# Kill process berdasarkan nomor PID
102179
taskkill /PID <PID> /F
103180
```
104181

105-
### Virtual environment tidak ditemukan
182+
**B. Modul Python "Virtual environment" tidak beroperasi**
106183
```powershell
107-
# Buat ulang virtual environment
184+
# Rebuild virtual environment khusus Windows
108185
cd central-node/ai-backend
109186
python -m venv venv
110187
.\venv\Scripts\activate

0 commit comments

Comments
 (0)