ποΈ PRISMA β Platform Informasi & Sistem Manajemen RT 04
Structured Project Prompt β Full Lifecycle Documentation
Dokumen ini adalah prompt terstruktur, detail, dan spesifik yang mencakup seluruh siklus hidup proyek PRISMA:
Kerangka β Desain β Build β Develop β Maintain β Security β Database Schema
π Daftar Isi
Gambaran Umum Proyek
Arsitektur & Kerangka Sistem
Desain UI/UX Web
Build & Konfigurasi
Development Guidelines
Maintenance & Operasional
Security Framework
Database Schema Design
API & Service Layer
AI & Bot Integration
Testing Strategy
Deployment Pipeline
1. Gambaran Umum Proyek
1.1 Identitas Proyek
Atribut
Detail
Nama Proyek
PRISMA (Platform Informasi & Sistem Manajemen RT 04)
Versi
0.1.0
Repositori
github.com/ProgrammingDevelopment/PRISMA
Domain
Tata kelola RT/RW digital berbasis AI
Target User
Warga RT 04/RW 09, Pengurus RT, Staff Administrasi
Lokasi
Kelurahan Kemayoran, Jakarta Pusat
1.2 Tujuan Proyek
Digitalisasi Administrasi β Menggantikan proses manual pencatatan warga, surat-menyurat, dan kas RT menjadi digital.
Transparansi Keuangan β Membuka akses real-time data keuangan kas RT kepada seluruh warga.
Keamanan Lingkungan β Menyediakan sistem pelaporan insiden terintegrasi dengan notifikasi instan.
Pelayanan AI β Menghadirkan asisten virtual cerdas (Siaga) via web chatbot dan Telegram bot.
Aksesibilitas β Dapat diakses dari smartphone (PWA), tablet, dan desktop oleh seluruh lapisan usia warga.
1.3 Tech Stack Summary
βββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β PRISMA STACK β
ββββββββββββββββ¬βββββββββββββββββββββββββββββββββββββββ€
β Frontend β Next.js 16.1.4, React 19, TypeScript β
β Styling β Tailwind CSS v4, PostCSS, Framer Mo. β
β Component β Radix UI Primitives (@radix-ui/*) β
β State/Theme β next-themes, clsx, tailwind-merge β
β Database β sql.js (SQLite in-browser), Supabase β
β AI Frontend β @google/generative-ai, Ollama Client β
β AI Backend β Python FastAPI + Ollama LLM β
β Bot Engine β node-telegram-bot-api + pdfkit β
β PWA β @serwist/next (Service Worker) β
β Testing β Vitest + @testing-library/react β
β Security β bcryptjs, dompurify, xss, sanitize β
β Deploy β Cloudflare Pages, Vercel β
β I18n β next-intl (ID, EN, ZH) β
β SEO β next-sitemap β
ββββββββββββββββ΄βββββββββββββββββββββββββββββββββββββββ
2. Arsitektur & Kerangka Sistem
2.1 Arsitektur Diagram
graph TB
subgraph Client["π Client Layer"]
WEB["Next.js Web App<br/>(Port 3000)"]
PWA["PWA / Mobile Browser"]
TG["Telegram Bot Client"]
end
subgraph Presentation["π¨ Presentation (Next.js App Router)"]
PAGES["23 Pages/Routes"]
COMP["Reusable Components"]
THEME["Theme System<br/>Dark/Light Mode"]
end
subgraph Services["βοΈ Service Layer"]
DBSVC["databaseService.ts"]
AISVC["ai-service.ts"]
SECSVC["security.ts"]
HOOKS["security-hooks.ts"]
end
subgraph Data["ποΈ Data Layer"]
SQLITE["sql.js (SQLite)"]
MOCK["MockDB (localStorage)"]
SUPA["Supabase (Cloud)"]
end
subgraph AI["π€ AI Layer"]
OLLAMA["Ollama LLM Server<br/>(Port 11434)"]
FASTAPI["FastAPI Backend<br/>(Port 8000)"]
RAG["RAG Chat Backend<br/>(Port 8001)"]
end
subgraph Bot["π± Bot Layer"]
TGBOT["telegram-bot.ts"]
PDFGEN["PDFKit Generator"]
DSTORE["data-store.json"]
end
Client --> Presentation
Presentation --> Services
Services --> Data
Services --> AI
TG --> Bot
Bot --> OLLAMA
Bot --> DSTORE
Bot --> PDFGEN
Loading
2.2 Struktur Direktori
prisma/
βββ src/
β βββ app/ # Next.js App Router (Pages & Routes)
β β βββ page.tsx # Landing/Dashboard Page
β β βββ layout.tsx # Root Layout + Security Init
β β βββ globals.css # Global Design Tokens (Tailwind v4)
β β βββ admin/ # Admin Panel
β β β βββ page.tsx # Admin Dashboard
β β β βββ audit/page.tsx # Audit Log Viewer
β β β βββ files/page.tsx # File Manager
β β β βββ infrastruktur/page.tsx# Infrastructure Management
β β β βββ login/page.tsx # Admin Login
β β βββ auth/ # Authentication
β β β βββ login/page.tsx # User Login
β β β βββ register/page.tsx # User Registration
β β βββ galeri/page.tsx # Photo Gallery
β β βββ keuangan/ # Financial Module
β β β βββ laporan/page.tsx # Financial Reports
β β β βββ iuran/page.tsx # Monthly Dues
β β β βββ pembayaran/page.tsx # Payment Processing
β β β βββ custom/page.tsx # Custom Reports
β β β βββ event-budget/page.tsx # Event Budget
β β β βββ share/page.tsx # Share Reports
β β βββ layanan/ # Service Center
β β β βββ page.tsx # Service Hub
β β β βββ administrasi/page.tsx # Administration Services
β β βββ surat/ # Document Management
β β β βββ page.tsx # Letter Templates
β β β βββ keamanan/page.tsx # Security Report Form
β β βββ profile/page.tsx # User Profile
β β βββ search/page.tsx # Search Page
β β βββ settings/database/page.tsx# Database Settings
β β βββ telegram-webapp/page.tsx # Telegram WebApp View
β β βββ sw.ts # Service Worker (Serwist)
β β βββ manifest.ts # PWA Manifest
β βββ components/ # Reusable UI Components
β β βββ chat/chatbot.tsx # AI Chatbot Widget (Floating)
β β βββ home/ # Landing Page Components
β β βββ layout/ # Navbar, Sidebar, Footer
β β βββ surat/ # Letter Form Components
β β βββ ui/ # Radix UI Primitives
β β βββ pwa-install-prompt.tsx # PWA Install Banner
β β βββ theme-provider.tsx # Dark/Light Mode Provider
β β βββ theme-toggle.tsx # Theme Switch Button
β β βββ whatsapp-direct.tsx # WhatsApp Integration
β βββ Services/ # Business Logic Services
β β βββ databaseService.ts # Central DB API (SQLite + MockDB)
β β βββ aiService.ts # AI Backend Client
β β βββ dataService.ts # Data Transformation
β β βββ nlpService.ts # NLP Processing Client
β βββ lib/ # Core Library
β β βββ security.ts # OWASP Security Core (567 lines)
β β βββ security-hooks.ts # React Security Hooks (346 lines)
β β βββ sqliteDB.ts # SQLite In-Browser Engine
β β βββ mockDatabase.ts # Mock/Seed Data Fallback
β β βββ ai-service.ts # Ollama AI Client
β β βββ demo-credentials.ts # Demo Auth Credentials
β β βββ financial-utils.ts # Financial Calculations
β β βββ performance.ts # Performance Monitoring
β β βββ strategic-recommendations.ts # AI Recommendations
β βββ hooks/ # Custom React Hooks
β β βββ useSafeNavigation.ts # Safe Navigation Hook
β β βββ use-click-outside.ts # Click Outside Detection
β βββ config/
β βββ apiConfig.ts # API URL Configuration
βββ scripts/ # Background Scripts
β βββ telegram-bot.ts # Telegram Bot Engine (787 lines)
β βββ generate_db.js # SQLite DB Seeder
β βββ data-store.json # Bot Real-Time Data Store
β βββ bot-runner.ps1 # Bot Startup Script
βββ public/ # Static Assets
βββ messages/ # i18n Translation Files
βββ types/ # TypeScript Type Definitions
βββ next.config.ts # Next.js Configuration
βββ vitest.config.ts # Test Configuration
βββ tsconfig.json # TypeScript Configuration
βββ wrangler.json # Cloudflare Pages Config
βββ vercel.json # Vercel Config
βββ prisma_demo.db # SQLite Demo Database File
2.3 Layer Architecture
Layer
Tanggung Jawab
File Utama
Presentation
UI rendering, routing, theme
src/app/**/*.tsx, src/components/**
Hook
State management, side effects
src/hooks/*, src/lib/security-hooks.ts
Service
Business logic, API orchestration
src/Services/*
Data Access
Database CRUD, query engine
src/lib/sqliteDB.ts, src/lib/mockDatabase.ts
Security
Auth, encryption, sanitization
src/lib/security.ts
AI/Bot
LLM integration, bot commands
src/lib/ai-service.ts, scripts/telegram-bot.ts
3. Desain UI/UX Web
3.1 Design System
βββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β DESIGN SYSTEM β
ββββββββββββββββ¬βββββββββββββββββββββββββββββββββββββββ€
β Framework β Tailwind CSS v4 (utility-first) β
β Components β Radix UI Primitives (A11y) β
β Animations β Framer Motion (fluid transitions) β
β Theming β next-themes (Dark/Light auto) β
β Icons β Lucide React + React Icons β
β Typography β System fonts, Inter (Google Fonts) β
β Approach β Mobile-First Responsive β
ββββββββββββββββ΄βββββββββββββββββββββββββββββββββββββββ
3.2 Color Palette & Theming
/* Light Mode β Warm Professional */
--primary : # 0f172a /* Slate 900 (Headers, Nav) */
--primary-accent: # 1e40af /* Blue 800 (CTA, Links) */
--surface: # ffffff /* White (Cards, Panels) */
--background: # f8fafc /* Slate 50 (Page BG) */
--success: # 16a34a /* Green 600 */
--warning: # f59e0b /* Amber 500 */
--danger: # dc2626 /* Red 600 */
--text-primary: # 1e293b /* Slate 800 */
--text-secondary: # 64748b /* Slate 500 */
/* Dark Mode β Deep Professional */
--primary: # e2e8f0 /* Slate 200 (Headers) */
--primary-accent: # 60a5fa /* Blue 400 */
--surface: # 1e293b /* Slate 800 (Cards) */
--background: # 0f172a /* Slate 900 (Page BG) */
3.3 Layout Structure
ββββββββββββββββββββββββββββββββββββββββββββββββββββ
β [β‘ NAVBAR] π PRISMA RT 04 [π] [π/βοΈ] [π€] β
ββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β ββ MAIN CONTENT βββββββββββββββββββββββββββββββ β
β β β β
β β π Dashboard / Page Content β β
β β ββββββββ ββββββββ ββββββββ ββββββββ β β
β β βStat 1β βStat 2β βStat 3β βStat 4β β β
β β ββββββββ ββββββββ ββββββββ ββββββββ β β
β β β β
β β βββββ Feature Cards Grid ββββββββββββββββ β β
β β β π° Keuangan β π Surat β π¨ Keamananβ β β
β β β π₯ Warga β π’ Info β βοΈ Pengaturanβ β β
β β ββββββββββββββββββββββββββββββββββββββββββ β β
β β β β
β ββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β ββ FLOATING CHATBOT ββ β
β β π€ Siaga β β
β β Tanya saya! β β
β ββββββββββββββββββββββ β
ββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β [FOOTER] Β© PRISMA RT 04 β’ Links β’ Contacts β
ββββββββββββββββββββββββββββββββββββββββββββββββββββ
3.4 Halaman/Route Map
#
Route
Fungsi
Akses
1
/
Landing/Dashboard utama
Public
2
/auth/login
Login warga
Public
3
/auth/register
Registrasi warga baru
Public
4
/admin
Panel admin dashboard
Admin
5
/admin/login
Login admin
Public
6
/admin/audit
Audit log viewer
Admin
7
/admin/files
File management
Admin
8
/admin/infrastruktur
Infrastruktur RT
Admin
9
/keuangan/laporan
Laporan keuangan bulanan
Warga
10
/keuangan/iuran
Status iuran warga
Warga
11
/keuangan/pembayaran
Proses pembayaran
Warga
12
/keuangan/custom
Custom financial report
Admin
13
/keuangan/event-budget
Anggaran event RT
Admin
14
/keuangan/share
Share laporan keuangan
Warga
15
/layanan
Hub layanan mandiri
Warga
16
/layanan/administrasi
Administrasi kependudukan
Warga
17
/surat
Template surat RT
Warga
18
/surat/keamanan
Form lapor keamanan
Warga
19
/galeri
Galeri foto RT
Public
20
/profile
Profil pengguna
Warga
21
/search
Pencarian global
Warga
22
/settings/database
Pengaturan database
Admin
23
/telegram-webapp
Telegram WebApp view
Public
3.5 Komponen Reusable
Komponen
Lokasi
Fungsi
chatbot.tsx
components/chat/
Floating AI chatbot widget
pwa-install-prompt.tsx
components/
Banner install PWA
theme-provider.tsx
components/
Dark/Light mode context
theme-toggle.tsx
components/
Toggle switch tema
whatsapp-direct.tsx
components/
Quick WA action button
ui/*
components/ui/
Button, Card, Input, Dialog, Accordion, etc.
4. Build & Konfigurasi
4.1 Next.js Configuration
// next.config.ts β Key Settings
{
output : 'export' , // Static HTML Export (SSG)
images : { unoptimized : true } ,
trailingSlash : true , // URL compatibility
compress : true , // Gzip compression
poweredByHeader : false , // Remove X-Powered-By (security)
turbopack : { } , // Turbopack engine
logging : { fetches : { fullUrl : true } }
}
// + @serwist/next PWA wrapper (Service Worker)
4.2 Build Scripts
Script
Perintah
Fungsi
dev
next dev
Development server (port 3000)
build
next build
Production build + static export
start
next start
Production server
lint
eslint
Code linting
test
vitest run
Run unit tests
test:watch
vitest
Watch mode testing
test:ci
vitest run --reporter=verbose
CI verbose tests
deploy:cf
npm run build && npx wrangler pages deploy out
Cloudflare Pages deploy
bot
ts-node ... scripts/telegram-bot.ts
Start Telegram bot
4.3 Environment Variables
# .env.local β Web Application
NEXT_PUBLIC_AI_BACKEND_URL=" http://localhost:8000" # FastAPI AI Backend
NEXT_PUBLIC_CHAT_API_URL=" http://localhost:8001/chat" # RAG Chat Backend
DB_HOST=localhost # Legacy MySQL fallback
DB_PORT=3306
DB_NAME=admin_rt
# .env.bot β Telegram Bot
TELEGRAM_BOT_TOKEN=< bot-token> # Bot @mayoran04Bot
OLLAMA_API_URL=http://localhost:11434/api/chat # Ollama LLM endpoint
OLLAMA_MODEL= # Primary AI model
OLLAMA_API_KEY=< api-key> # API key (if needed)
ADMIN_CHAT_ID=< telegram-chat-id> # Admin notification target
NEXT_PUBLIC_AI_BACKEND_URL=http://localhost:3000 # Website monitoring URL
5. Development Guidelines
5.1 Coding Standards
Aspek
Standar
Language
TypeScript strict mode
Naming
camelCase (vars/functions), PascalCase (components/types)
Components
Functional components + hooks only
Imports
Absolute paths via @/ alias
State
React hooks (useState, useCallback, useEffect)
Side Effects
Custom hooks pattern (e.g., useSecureAuth)
Styling
Tailwind utility classes, clsx() for conditionals
Sanitization
ALL user input MUST pass through sanitizeInput()
Error Handling
try/catch with logSecurityEvent()
5.2 Component Development Pattern
// Template: Server-safe Client Component
"use client"
import { useState , useCallback } from 'react'
import { sanitizeInput } from '@/lib/security'
import { Button } from '@/components/ui/button'
interface Props {
// Always define explicit interfaces
}
export function FeatureComponent ( { ...props } : Props ) {
const [ data , setData ] = useState < Type > ( initial )
const handleAction = useCallback ( async ( ) => {
const sanitized = sanitizeInput ( rawInput ) // ALWAYS sanitize
// ... business logic
} , [ dependencies ] )
return (
< div className = "space-y-4" >
{ /* Mobile-first responsive layout */ }
< / d i v >
)
}
5.3 Data Flow Pattern
User Input β sanitizeInput() β Service Layer β Database Layer β Response
β β
βββ checkRateLimit() βββββββββββ
βββ logSecurityEvent() βββββββββ
6. Maintenance & Operasional
6.1 Monitoring Checklist
Item
Tool
Frekuensi
Website uptime
Telegram Bot auto-ping (5 min interval)
Real-time
Bot status
/status command
On-demand
Security audit log
getAuditLog() + Admin panel
Harian
Database size
Settings > Database page
Mingguan
Dependency updates
npm audit
Bulanan
SSL certificate
Cloudflare/Vercel auto-managed
Otomatis
6.2 Backup Strategy
Data
Metode
Lokasi Backup
SQLite Database
SqliteDB.exportDB() β download .db file
Manual download
data-store.json
Git version control
GitHub repository
Environment vars
Terpisah dari repo (.gitignore)
Secure vault
User uploads
Cloudflare/Vercel CDN
CDN edge nodes
6.3 Performance Targets
Metrik
Target
Cara Pencapaian
First Contentful Paint
< 1.5s
SSG + Turbopack
Time to Interactive
< 3s
Code splitting, lazy load
Lighthouse Score
> 90
PWA, compression, semantic HTML
API Response Time
< 200ms
SQLite in-memory, debounced save
Bot Response Time
< 5s
Ollama streaming, fallback model
6.4 Scaling Plan
Level 1 (Current): Monolith SSG + Client SQLite
β
Level 2: Supabase Cloud DB + Edge Functions
β
Level 3: Microservices (Next.js + FastAPI + RAG separated)
β
Level 4: Kubernetes orchestration + dedicated ML serving
7. Security Framework
7.1 OWASP Top 10 Coverage
OWASP
Implementasi di PRISMA
File
A01: Broken Access Control
Role-based auth (admin/staff/warga), session fingerprinting
security.ts
A02: Cryptographic Failures
XOR encryption (demo) + bcryptjs hashing, runtime key derivation
security.ts
A03: Injection
sanitizeInput() β multi-layer XSS/SQL inject strip, dompurify, xss lib
security.ts
A05: Security Misconfiguration
poweredByHeader: false, console suppression in prod
next.config.ts
A07: Auth Failures
Rate limiting (5 login/min, 5 min block), password strength validator
security.ts
A08: Data Integrity
CSRF token management (generateCSRFToken, validateCSRFToken)
security.ts
A09: Logging Failures
Audit log system (logSecurityEvent(), max 1000 entries)
security.ts
7.2 Security Module Map
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β security.ts (Core) β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
encryptData() / decryptData() β XOR + Base64 β
β β
secureStorage β Encrypted session β
β β
generateFingerprint() β Browser-based β
β β
sanitizeInput() / sanitizeObject()β Multi-layer clean β
β β
checkRateLimit() / resetRateLimit() β
β β
maskPhoneNumber/Email/NIK/Name β PII masking β
β β
storeCredentials/getCredentials β Secure session β
β β
generateCSRFToken/validateCSRF β Anti-CSRF β
β β
secureFetch() β Protected HTTP β
β β
validatePasswordStrength() β Password scoring β
β β
logSecurityEvent() / getAuditLog()β Audit trail β
β β
initSecurityProtections() β Anti-clickjack β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β security-hooks.ts (React) β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
useSecureAuth() β Login/logout + rate limit β
β β
useDataMasking() β Toggle sensitive data display β
β β
useSecureForm() β Auto-sanitize form inputs β
β β
useSecureApi() β Protected API calls β
β β
usePasswordStrength()β Real-time password scoring β
β β
useSecureStorage() β Encrypted localStorage hook β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
7.3 Bot Security (Telegram)
Perlindungan
Implementasi
Input Sanitization
sanitizeBotInput() β strip <script>, event handlers, javascript:, null bytes
Rate Limiting
30 messages/min/user, sliding window
Input Length Limit
Max 500 characters
Admin Authorization
ADMIN_CHAT_ID check for /broadcast command
Token Isolation
.env.bot excluded from git
Graceful Shutdown
SIGINT/SIGTERM handler saves stats before exit
7.4 Security Best Practices Prompt
Saat berinteraksi dengan AI untuk security:
Selalu validasi SETIAP input user melalui sanitizeInput()
Gunakan checkRateLimit() sebelum operasi sensitif
Pasang logSecurityEvent() pada setiap aksi auth dan form submit
Jangan pernah simpan credential dalam bentuk plaintext
Gunakan secureStorage (bukan localStorage langsung)
Mask semua PII (telepon, email, NIK) di tampilan publik
Validasi CSRF token pada setiap mutating request
8. Database Schema Design
8.1 Database Tiers
ββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β DATABASE ARCHITECTURE β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β Tier 1: Client-Side SQLite (sql.js) β
β βββ In-browser via WebAssembly β
β βββ Persisted in localStorage (base64) β
β βββ Zero server dependency β
β β
β Tier 2: Mock Database (localStorage JSON) β
β βββ Fallback for non-migrated entities β
β βββ Seed data for demo mode β
β β
β Tier 3: Cloud Database (Supabase/PostgreSQL) β
β βββ Production-ready β
β βββ Drizzle ORM integration (branch) β
β β
β Tier 4: Legacy MySQL (XAMPP) β
β βββ Community hosting fallback β
β β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββ
8.2 Entity Relationship Diagram (ERD)
erDiagram
USERS {
int id PK "AUTO_INCREMENT"
text email UK "NOT NULL"
text password "hashed"
text nama
text role "admin | staff | warga"
text no_telepon
}
WARGA {
int id PK "AUTO_INCREMENT"
text nama "NOT NULL"
text alamat
text status "Tetap | Kontrak | Kost | Baru"
text telepon
text created_at "DEFAULT datetime(now)"
}
PENGURUS {
int id PK "AUTO_INCREMENT"
text nama "NOT NULL"
text jabatan "NOT NULL"
text periode
text kontak
}
SECURITY_REPORTS {
int id PK "AUTO_INCREMENT"
text jenis_kejadian "NOT NULL"
text lokasi
text tanggal_kejadian
text status "Pending | InProgress | Resolved"
text priority "Low | Medium | High"
text nama_pelapor "NOT NULL"
text telepon_pelapor
text kronologi
text created_at "DEFAULT datetime(now)"
}
FINANCE_TRANSACTIONS {
int id PK "AUTO_INCREMENT"
text tanggal "NOT NULL"
text keterangan "NOT NULL"
text kategori
text tipe "CHECK: pemasukan | pengeluaran"
int jumlah "NOT NULL DEFAULT 0"
text created_at "DEFAULT datetime(now)"
}
LETTERS {
int id PK "AUTO_INCREMENT"
text template_id "NOT NULL"
text pemohon "NOT NULL"
text status "Pending | Approved | Rejected"
text data_json "JSON stringified form data"
text created_at "DEFAULT datetime(now)"
}
WARGA ||--o{ SECURITY_REPORTS : "reports"
WARGA ||--o{ LETTERS : "requests"
WARGA ||--o{ FINANCE_TRANSACTIONS : "pays"
USERS ||--|| WARGA : "linked"
PENGURUS ||--o{ LETTERS : "approves"
Loading
8.3 Table Definitions (SQLite DDL)
Table: users
CREATE TABLE IF NOT EXISTS users (
id INTEGER PRIMARY KEY AUTOINCREMENT,
email TEXT UNIQUE,
password TEXT , -- bcrypt hashed
nama TEXT ,
role TEXT , -- 'admin' | 'staff' | 'warga'
no_telepon TEXT
);
Table: warga
CREATE TABLE IF NOT EXISTS warga (
id INTEGER PRIMARY KEY AUTOINCREMENT,
nama TEXT NOT NULL ,
alamat TEXT ,
status TEXT DEFAULT ' Baru' , -- 'Tetap' | 'Kontrak' | 'Kost' | 'Baru'
telepon TEXT ,
created_at TEXT DEFAULT (datetime(' now' ))
);
-- Indexes
CREATE INDEX IF NOT EXISTS idx_warga_nama ON warga(nama);
CREATE INDEX IF NOT EXISTS idx_warga_status ON warga(status);
Table: pengurus
CREATE TABLE IF NOT EXISTS pengurus (
id INTEGER PRIMARY KEY AUTOINCREMENT,
nama TEXT NOT NULL ,
jabatan TEXT NOT NULL ,
periode TEXT ,
kontak TEXT
);
Table: security_reports
CREATE TABLE IF NOT EXISTS security_reports (
id INTEGER PRIMARY KEY AUTOINCREMENT,
jenis_kejadian TEXT NOT NULL ,
lokasi TEXT ,
tanggal_kejadian TEXT ,
status TEXT DEFAULT ' Pending' , -- 'Pending' | 'InProgress' | 'Resolved'
priority TEXT DEFAULT ' Medium' , -- 'Low' | 'Medium' | 'High'
nama_pelapor TEXT NOT NULL ,
telepon_pelapor TEXT ,
kronologi TEXT ,
created_at TEXT DEFAULT (datetime(' now' ))
);
-- Indexes
CREATE INDEX IF NOT EXISTS idx_security_status ON security_reports(status);
CREATE INDEX IF NOT EXISTS idx_security_priority ON security_reports(priority);
CREATE INDEX IF NOT EXISTS idx_security_date ON security_reports(tanggal_kejadian);
Table: finance_transactions
CREATE TABLE IF NOT EXISTS finance_transactions (
id INTEGER PRIMARY KEY AUTOINCREMENT,
tanggal TEXT NOT NULL ,
keterangan TEXT NOT NULL ,
kategori TEXT ,
tipe TEXT CHECK (tipe IN (' pemasukan' , ' pengeluaran' )) NOT NULL ,
jumlah INTEGER NOT NULL DEFAULT 0 ,
created_at TEXT DEFAULT (datetime(' now' ))
);
-- Indexes
CREATE INDEX IF NOT EXISTS idx_finance_tipe ON finance_transactions(tipe);
CREATE INDEX IF NOT EXISTS idx_finance_tanggal ON finance_transactions(tanggal);
Table: letters
CREATE TABLE IF NOT EXISTS letters (
id INTEGER PRIMARY KEY AUTOINCREMENT,
template_id TEXT NOT NULL ,
pemohon TEXT NOT NULL ,
status TEXT DEFAULT ' Pending' , -- 'Pending' | 'Approved' | 'Rejected'
data_json TEXT , -- JSON stringified form data
created_at TEXT DEFAULT (datetime(' now' ))
);
-- Indexes
CREATE INDEX IF NOT EXISTS idx_letters_status ON letters(status);
8.4 Database Index Map
Table
Index
Kolom
Tujuan
warga
idx_warga_nama
nama
Pencarian warga by nama
warga
idx_warga_status
status
Filter berdasarkan status tinggal
security_reports
idx_security_status
status
Filter laporan pending/resolved
security_reports
idx_security_priority
priority
Sort by prioritas
security_reports
idx_security_date
tanggal_kejadian
Range query tanggal
finance_transactions
idx_finance_tipe
tipe
Filter pemasukan/pengeluaran
finance_transactions
idx_finance_tanggal
tanggal
Range query periode
letters
idx_letters_status
status
Filter status pengajuan surat
8.5 TypeScript Data Interfaces
// Core Data Types (from databaseService.ts)
interface WargaData {
id : number ;
nama : string ;
alamat : string ;
status : string ; // 'Tetap' | 'Kontrak' | 'Kost' | 'Baru'
telepon : string ;
}
interface PengurusData {
id : number ;
nama : string ;
jabatan : string ;
periode : string ;
}
interface StatistikData {
totalWarga : number ;
totalKK : number ;
wargaAktif : number ;
pendatangBaru : number ;
}
interface LetterTemplate {
id : string ;
title : string ;
description : string ;
category : string ; // 'Administrasi' | 'Kependudukan'
files : { docx : string ; pdf : string } ;
requiredFields : string [ ] ;
}
interface Transaction {
id : string ;
tanggal : string ;
keterangan : string ;
kategori : string ;
tipe : 'pemasukan' | 'pengeluaran' ;
jumlah : number ;
}
interface MonthlyReport {
bulan : string ;
tahun : number ;
saldo_awal : number ;
total_pemasukan : number ;
total_pengeluaran : number ;
saldo_akhir : number ;
transaksi : Transaction [ ] ;
}
interface SecurityReportSubmission {
kronologi : string ;
tanggal_kejadian : string ;
waktu_kejadian ?: string ;
lokasi ?: string ;
nama_pelapor : string ;
telepon_pelapor : string ;
jenis_kejadian : string ;
}
interface SecureCredentials {
userId : string ;
role : 'admin' | 'staff' | 'warga' ;
sessionToken : string ;
expiresAt : number ;
}
9. API & Service Layer
9.1 Internal Service API (databaseService.ts)
Method
Return Type
Sumber Data
getAdministrationData(type?)
AdministrationData
SQLite + MockDB
addWarga(data)
{success, message}
SQLite
getLetterTemplates(category?)
LetterTemplate[]
MockDB
getLetterTemplate(id)
LetterTemplate | null
MockDB
submitLetterRequest(id, data)
{success, submissionId}
MockDB
getCurrentBalance()
{saldo, lastUpdate}
MockDB
getMonthlyReports()
MonthlyReport[]
MockDB
getExpenseSummary()
ExpenseSummary
MockDB
getIncidentTypes()
IncidentType[]
Hardcoded
getSecurityStats()
{total, pending, resolved}
SQLite
getRecentSecurityReports()
SecurityReport[]
SQLite
submitSecurityReport(report)
{success, reportId}
SQLite
9.2 AI Backend API (FastAPI Port 8000)
Endpoint
Method
Fungsi
/docs
GET
Swagger documentation
/api/v1/nlp/sentiment
POST
Sentiment analysis
/api/v1/nlp/chat
POST
AI chat
/api/v1/vision/classify
POST
Image classification
/api/v1/predict/financial
POST
Financial prediction
/api/v1/recommend/activities/{id}
GET
Activity recommendations
9.3 Chat API (RAG Backend Port 8001)
Endpoint
Method
Fungsi
/chat
POST
RAG-based chat with Siaga assistant
10. AI & Bot Integration
10.1 AI Architecture
ββββββββββββββββββββββββββββββββββββββ
β AI Service Flow β
ββββββββββββββββββββββββββββββββββββββ€
β β
β Web Chatbot (chatbot.tsx) β
β β β
β ββββ /api/chat (Next.js) β
β β β β
β β ββββ Ollama LLM β
β β (Streaming) β
β β β
β ββββ Mock Fallback β
β (keyword matching) β
β β
β Telegram Bot (telegram-bot.ts) β
β β β
β ββββ Ollama API (Primary) β
β β Model: kimi-k2.5:cloud β
β β β
β ββββ Ollama API (Fallback) β
β β Model: llama3.2:1b β
β β β
β ββββ Menu-based (Offline) β
β β
ββββββββββββββββββββββββββββββββββββββ
10.2 Telegram Bot Commands
Command
Fungsi
/start
Welcome + tampilkan main menu
/help
Daftar perintah tersedia
/register
Registrasi warga baru (β PDF)
/report
Laporan keamanan (β PDF)
/finance
Ringkasan kas RT real-time
/contact
Kontak darurat pengurus
/subscribe
Toggle notifikasi pengumuman
/status
Status sistem bot (uptime, memory, AI status)
/broadcast [msg]
(Admin only) Broadcast ke seluruh subscriber
Free text
AI Chat (Ollama) dengan konteks data RT
10.3 Bot Features
Real-time data β Baca data-store.json setiap query
AI Contextual Chat β System prompt berisi data RT terbaru
PDF Auto-Generation β Surat pengantar, laporan keamanan, registrasi
Broadcast System β Admin push notification ke semua subscriber
Website Monitoring β Ping website setiap 5 menit, alert admin jika down
Chat History β Per-user message history (max 10 messages)
Dual Model β Primary (cloud) + Fallback (local) AI model
11. Testing Strategy
11.1 Test Configuration
// vitest.config.ts
{
test : {
environment : 'jsdom' ,
globals : true ,
include : [ 'src/**/*.test.{ts,tsx}' ]
}
}
11.2 Test Coverage Areas
Area
File Test
Cakupan
Security
security.test.ts (14.6 KB)
XSS sanitization, rate limiting, encryption, masking
Credentials
demo-credentials.test.ts (6.7 KB)
Auth flow, session management
Finance
financial-utils.test.ts (1.5 KB)
Financial calculations
11.3 Test Commands
npm test # Run all tests once
npm run test:watch # Watch mode (auto-rerun)
npm run test:ci # CI/CD mode (verbose output)
12. Deployment Pipeline
12.1 Deployment Targets
Platform
Config
URL Pattern
Cloudflare Pages
wrangler.json
prisma-rt04.pages.dev
Vercel
vercel.json
Auto-assigned .vercel.app
12.2 Build & Deploy Flow
βββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β DEPLOYMENT PIPELINE β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β 1. Code Push β GitHub β
β β β
β 2. CI: GitHub Actions β
β βββ npm ci β
β βββ npm run lint β
β βββ npm run test:ci β
β βββ npm run build β
β β β
β 3. Static Export (output: 'export') β
β β β ./out/ directory β
β β β
β 4a. Cloudflare Pages β
β βββ wrangler pages deploy out β
β --project-name=prisma-rt04 β
β β
β 4b. Vercel (Alternative) β
β βββ Automatic via vercel.json β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββ
12.3 Pre-Deploy Checklist
Ringkasan Prompt Cepat
Gunakan prompt ini saat membangun/memodifikasi PRISMA:
"Kamu sedang mengembangkan PRISMA , platform manajemen RT berbasis Next.js 16 + React 19 + TypeScript + Tailwind CSS v4. Arsitektur menggunakan static export (SSG) dengan client-side SQLite (sql.js). Setiap input user WAJIB melalui sanitizeInput(). Gunakan Radix UI untuk komponen, Framer Motion untuk animasi, dan next-themes untuk dark mode. Database menggunakan 6 tabel: users, warga, pengurus, security_reports, finance_transactions, letters β semua dengan indexes yang terotopimasi. Security library terintegrasi OWASP (XSS prevention, rate limiting, CSRF, encryption, audit log). Telegram bot otonom terintegrasi Ollama AI dengan PDF auto-generation. Deploy ke Cloudflare Pages via static export."
π
Dibuat: 22 Maret 2026 | PRISMA v0.1.0
ποΈ PRISMA β Platform Informasi & Sistem Manajemen RT 04
Structured Project Prompt β Full Lifecycle Documentation
π Daftar Isi
1. Gambaran Umum Proyek
1.1 Identitas Proyek
github.com/ProgrammingDevelopment/PRISMA1.2 Tujuan Proyek
1.3 Tech Stack Summary
2. Arsitektur & Kerangka Sistem
2.1 Arsitektur Diagram
graph TB subgraph Client["π Client Layer"] WEB["Next.js Web App<br/>(Port 3000)"] PWA["PWA / Mobile Browser"] TG["Telegram Bot Client"] end subgraph Presentation["π¨ Presentation (Next.js App Router)"] PAGES["23 Pages/Routes"] COMP["Reusable Components"] THEME["Theme System<br/>Dark/Light Mode"] end subgraph Services["βοΈ Service Layer"] DBSVC["databaseService.ts"] AISVC["ai-service.ts"] SECSVC["security.ts"] HOOKS["security-hooks.ts"] end subgraph Data["ποΈ Data Layer"] SQLITE["sql.js (SQLite)"] MOCK["MockDB (localStorage)"] SUPA["Supabase (Cloud)"] end subgraph AI["π€ AI Layer"] OLLAMA["Ollama LLM Server<br/>(Port 11434)"] FASTAPI["FastAPI Backend<br/>(Port 8000)"] RAG["RAG Chat Backend<br/>(Port 8001)"] end subgraph Bot["π± Bot Layer"] TGBOT["telegram-bot.ts"] PDFGEN["PDFKit Generator"] DSTORE["data-store.json"] end Client --> Presentation Presentation --> Services Services --> Data Services --> AI TG --> Bot Bot --> OLLAMA Bot --> DSTORE Bot --> PDFGEN2.2 Struktur Direktori
2.3 Layer Architecture
src/app/**/*.tsx,src/components/**src/hooks/*,src/lib/security-hooks.tssrc/Services/*src/lib/sqliteDB.ts,src/lib/mockDatabase.tssrc/lib/security.tssrc/lib/ai-service.ts,scripts/telegram-bot.ts3. Desain UI/UX Web
3.1 Design System
3.2 Color Palette & Theming
3.3 Layout Structure
3.4 Halaman/Route Map
//auth/login/auth/register/admin/admin/login/admin/audit/admin/files/admin/infrastruktur/keuangan/laporan/keuangan/iuran/keuangan/pembayaran/keuangan/custom/keuangan/event-budget/keuangan/share/layanan/layanan/administrasi/surat/surat/keamanan/galeri/profile/search/settings/database/telegram-webapp3.5 Komponen Reusable
chatbot.tsxcomponents/chat/pwa-install-prompt.tsxcomponents/theme-provider.tsxcomponents/theme-toggle.tsxcomponents/whatsapp-direct.tsxcomponents/ui/*components/ui/4. Build & Konfigurasi
4.1 Next.js Configuration
4.2 Build Scripts
devnext devbuildnext buildstartnext startlinteslinttestvitest runtest:watchvitesttest:civitest run --reporter=verbosedeploy:cfnpm run build && npx wrangler pages deploy outbotts-node ... scripts/telegram-bot.ts4.3 Environment Variables
5. Development Guidelines
5.1 Coding Standards
@/aliasuseState,useCallback,useEffect)useSecureAuth)clsx()for conditionalssanitizeInput()logSecurityEvent()5.2 Component Development Pattern
5.3 Data Flow Pattern
6. Maintenance & Operasional
6.1 Monitoring Checklist
/statuscommandgetAuditLog()+ Admin panelnpm audit6.2 Backup Strategy
SqliteDB.exportDB()β download.dbfile.gitignore)6.3 Performance Targets
6.4 Scaling Plan
7. Security Framework
7.1 OWASP Top 10 Coverage
admin/staff/warga), session fingerprintingsecurity.tssecurity.tssanitizeInput()β multi-layer XSS/SQL inject strip,dompurify,xsslibsecurity.tspoweredByHeader: false, console suppression in prodnext.config.tssecurity.tsgenerateCSRFToken,validateCSRFToken)security.tslogSecurityEvent(), max 1000 entries)security.ts7.2 Security Module Map
7.3 Bot Security (Telegram)
sanitizeBotInput()β strip<script>, event handlers,javascript:, null bytesADMIN_CHAT_IDcheck for/broadcastcommand.env.botexcluded from gitSIGINT/SIGTERMhandler saves stats before exit7.4 Security Best Practices Prompt
8. Database Schema Design
8.1 Database Tiers
8.2 Entity Relationship Diagram (ERD)
erDiagram USERS { int id PK "AUTO_INCREMENT" text email UK "NOT NULL" text password "hashed" text nama text role "admin | staff | warga" text no_telepon } WARGA { int id PK "AUTO_INCREMENT" text nama "NOT NULL" text alamat text status "Tetap | Kontrak | Kost | Baru" text telepon text created_at "DEFAULT datetime(now)" } PENGURUS { int id PK "AUTO_INCREMENT" text nama "NOT NULL" text jabatan "NOT NULL" text periode text kontak } SECURITY_REPORTS { int id PK "AUTO_INCREMENT" text jenis_kejadian "NOT NULL" text lokasi text tanggal_kejadian text status "Pending | InProgress | Resolved" text priority "Low | Medium | High" text nama_pelapor "NOT NULL" text telepon_pelapor text kronologi text created_at "DEFAULT datetime(now)" } FINANCE_TRANSACTIONS { int id PK "AUTO_INCREMENT" text tanggal "NOT NULL" text keterangan "NOT NULL" text kategori text tipe "CHECK: pemasukan | pengeluaran" int jumlah "NOT NULL DEFAULT 0" text created_at "DEFAULT datetime(now)" } LETTERS { int id PK "AUTO_INCREMENT" text template_id "NOT NULL" text pemohon "NOT NULL" text status "Pending | Approved | Rejected" text data_json "JSON stringified form data" text created_at "DEFAULT datetime(now)" } WARGA ||--o{ SECURITY_REPORTS : "reports" WARGA ||--o{ LETTERS : "requests" WARGA ||--o{ FINANCE_TRANSACTIONS : "pays" USERS ||--|| WARGA : "linked" PENGURUS ||--o{ LETTERS : "approves"8.3 Table Definitions (SQLite DDL)
Table:
usersTable:
wargaTable:
pengurusTable:
security_reportsTable:
finance_transactionsTable:
letters8.4 Database Index Map
wargaidx_warga_namanamawargaidx_warga_statusstatussecurity_reportsidx_security_statusstatussecurity_reportsidx_security_priorityprioritysecurity_reportsidx_security_datetanggal_kejadianfinance_transactionsidx_finance_tipetipefinance_transactionsidx_finance_tanggaltanggallettersidx_letters_statusstatus8.5 TypeScript Data Interfaces
9. API & Service Layer
9.1 Internal Service API (databaseService.ts)
getAdministrationData(type?)AdministrationDataaddWarga(data){success, message}getLetterTemplates(category?)LetterTemplate[]getLetterTemplate(id)LetterTemplate | nullsubmitLetterRequest(id, data){success, submissionId}getCurrentBalance(){saldo, lastUpdate}getMonthlyReports()MonthlyReport[]getExpenseSummary()ExpenseSummarygetIncidentTypes()IncidentType[]getSecurityStats(){total, pending, resolved}getRecentSecurityReports()SecurityReport[]submitSecurityReport(report){success, reportId}9.2 AI Backend API (FastAPI Port 8000)
/docs/api/v1/nlp/sentiment/api/v1/nlp/chat/api/v1/vision/classify/api/v1/predict/financial/api/v1/recommend/activities/{id}9.3 Chat API (RAG Backend Port 8001)
/chat10. AI & Bot Integration
10.1 AI Architecture
10.2 Telegram Bot Commands
/start/help/register/report/finance/contact/subscribe/status/broadcast [msg]10.3 Bot Features
data-store.jsonsetiap query11. Testing Strategy
11.1 Test Configuration
11.2 Test Coverage Areas
security.test.ts(14.6 KB)demo-credentials.test.ts(6.7 KB)financial-utils.test.ts(1.5 KB)11.3 Test Commands
12. Deployment Pipeline
12.1 Deployment Targets
wrangler.jsonprisma-rt04.pages.devvercel.json.vercel.app12.2 Build & Deploy Flow
12.3 Pre-Deploy Checklist
npm test)npm run lint)npm run build)Ringkasan Prompt Cepat
π Dibuat: 22 Maret 2026 | PRISMA v0.1.0