<- back to projects

SiniCerita

aplikasi mobile untuk kesehatan mental yang memungkinkan pengguna bercerita dan curhat dengan persona AI. Setiap sesi percakapan dianalisis untuk mengukur perubahan emosional pengguna, dan skor kesehatan mental (Health Points) di-track secara berkelanjutan.

Role

Full-stack Developer

Timeline

2026

Status

Published

documentations

screenshoot


📖 Tentang

SiniCerita adalah aplikasi mobile untuk kesehatan mental yang memungkinkan pengguna bercerita dan curhat dengan persona AI. Setiap sesi percakapan dianalisis untuk mengukur perubahan emosional pengguna, dan skor kesehatan mental (Health Points) di-track secara berkelanjutan.

✨ Fitur Utama

  • 🤖 Chat dengan Persona AI — Pilih persona dengan kepribadian berbeda untuk diajak ngobrol
  • 📊 Skor Kesehatan Mental — Tracking poin kesehatan mental (0–100) berdasarkan analisis percakapan
  • 🔐 Autentikasi Lengkap — Register, login, forgot password dengan OTP
  • 👤 Profil Pengguna — Edit profil dan upload avatar
  • Rating Persona — Beri rating (upvote/downvote) pada persona favorit
  • 📝 Riwayat Sesi — Lihat semua sesi aktif dan yang sudah selesai
  • 🛡️ Admin Panel — Dashboard admin untuk kelola persona dan user

📱 Screenshots


🏗️ Arsitektur & Tech Stack

LayerTeknologi
FrameworkFlutter 3.x
State ManagementProvider (ChangeNotifier)
HTTP ClientDio + JWT Interceptor
NavigationGoRouter
Token StorageFlutter Secure Storage
BackendExpress 5 REST API
AI EngineGoogle Gemini
DatabasePostgreSQL + Prisma ORM

Struktur Project

lib/
├── core/
│   ├── api/          # Dio client, endpoints, response wrapper
│   ├── errors/       # Exception handling
│   ├── storage/      # Secure token storage
│   └── utils/        # Validators & helpers
├── models/           # Data models (User, Persona, Session, Message)
├── providers/        # Business logic (Auth, Persona, Session)
├── screens/          # UI pages (Auth, Home, Chat, Profile, Admin)
└── widgets/          # Reusable components

🚀 Getting Started

Prerequisites

Instalasi

  1. Clone repository

    git clone https://github.com/your-username/sinicerita.git
    cd sinicerita
    
  2. Install dependencies

    flutter pub get
    
  3. Jalankan backend server

    Pastikan backend Express berjalan di port 5000. Lihat folder dokumentasi-backend/ untuk setup.

  4. Run aplikasi

    flutter run
    

Konfigurasi Network

PlatformBase URL
Android Emulatorhttp://10.0.2.2:5000
iOS Simulatorhttp://localhost:5000
Physical Devicehttp://<IP-LAN>:5000

📦 Dependencies

PackageKegunaan
dioHTTP client
flutter_secure_storagePenyimpanan token terenkripsi
providerState management
go_routerRouting & navigation
cached_network_imageCaching gambar
shimmerLoading skeleton
image_pickerUpload avatar
pin_code_fieldsInput OTP 6 digit
intlFormat tanggal
equatableValue equality

🔐 Fitur Keamanan

  • JWT access token (15 menit) + refresh token (7 hari) dengan single-use rotation
  • Token disimpan di encrypted storage (bukan SharedPreferences)
  • Auto-refresh token saat expired
  • Rate limiting pada endpoint autentikasi (10 req / 15 menit)
  • Password minimum 8 karakter
  • OTP 6 digit untuk reset password

🎨 Design

  • Theme: Dark mode dengan aksen ungu/lavender
  • Font: Inter (Variable)
  • Loading State: Shimmer skeleton placeholder
  • Bahasa UI: Bahasa Indonesia

👥 Role Pengguna

RoleAkses
UserChat dengan persona, lihat riwayat, kelola profil
AdminSemua fitur user + kelola persona, lihat daftar user, dashboard admin

📄 Dokumentasi


🤝 Contributing

  1. Fork repository ini
  2. Buat branch fitur (git checkout -b feature/fitur-baru)
  3. Commit perubahan (git commit -m 'Tambah fitur baru')
  4. Push ke branch (git push origin feature/fitur-baru)
  5. Buat Pull Request

📝 License

Project ini dibuat untuk keperluan edukasi dan pengembangan.