Skip to content

πŸ›οΈ PRISMA β€” Full Lifecycle Documentation (Project Prompt)Β #7

Description

@ProgrammingDevelopment

πŸ›οΈ 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

  1. Gambaran Umum Proyek
  2. Arsitektur & Kerangka Sistem
  3. Desain UI/UX Web
  4. Build & Konfigurasi
  5. Development Guidelines
  6. Maintenance & Operasional
  7. Security Framework
  8. Database Schema Design
  9. API & Service Layer
  10. AI & Bot Integration
  11. Testing Strategy
  12. 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

  1. Digitalisasi Administrasi β€” Menggantikan proses manual pencatatan warga, surat-menyurat, dan kas RT menjadi digital.
  2. Transparansi Keuangan β€” Membuka akses real-time data keuangan kas RT kepada seluruh warga.
  3. Keamanan Lingkungan β€” Menyediakan sistem pelaporan insiden terintegrasi dengan notifikasi instan.
  4. Pelayanan AI β€” Menghadirkan asisten virtual cerdas (Siaga) via web chatbot dan Telegram bot.
  5. 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 */}
    </div>
  )
}

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

  • Semua test passing (npm test)
  • Lint clean (npm run lint)
  • Build berhasil (npm run build)
  • Environment variables terset di platform
  • Security headers terkonfigurasi
  • PWA Service Worker terbuild
  • Static assets teroptimasi

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions