Jawara Management System
Overview
Jawara Management System is a mobile app built to digitize community administration. Developed for the JAWARA program by Group 6, the system gives administrators tools to manage resident demographics, finances, and announcements.

My Role & Leadership
I was the Team Lead for this project. My main responsibilities included:
- Project Management: Breaking down features into tasks and managing the team workflow.
- Technical Architecture: Designing the system foundation and setting architectural standards.
- Systems Integration: Connecting the Flutter frontend, Laravel backend, and Python machine learning services.
Core Features
The system handles real-world community data with the following features:
- Financial Tracking: Records incomes, dues, and expenses with reporting features.
- Demographic Management: Tracks physical houses, family units, and individual citizen records.
- Biometric Security: An e-KYC feature that verifies user identity by matching a live selfie against their ID card (KTP).
- Community Broadcasting: A hub for administrators to send announcements and collect resident feedback.
The Architecture & “The Bridge”
We needed to integrate a deep learning model for biometric verification but lacked a dedicated GPU server. Our stack used Flutter for the frontend, Laravel for the backend API, and Python (DeepFace) running locally in a Jupyter Notebook for the AI engine.
To connect the Laravel backend to our local Python environment, we set up a tunnel using FastAPI and ngrok.
Here is the script used to establish the persistent bridge directly from the Jupyter Notebook:
tunnel_setup.py
import nest_asyncio
import uvicorn
from pyngrok import ngrok, conf
import os
# Allow async loops within the Jupyter environment
nest_asyncio.apply()
PORT = 5000
STATIC_DOMAIN = "caliphal-dallas-wriggly.ngrok-free.dev"
# Clean up any lingering processes
ngrok.kill()
os.system(f"fuser -k {PORT}/tcp")
# Establish a secure tunnel using a static domain
conf.get_default().auth_token = os.environ.get("NGROK_TOKEN")
public_url = ngrok.connect(PORT, domain=STATIC_DOMAIN)
print(f"API Tunnel established at: {public_url.public_url.replace('http://', 'https://')}")
# Serve the FastAPI application
config = uvicorn.Config("main:app", host="0.0.0.0", port=PORT, log_level="info")
server = uvicorn.Server(config)
await server.serve()After opening the tunnel, we exposed FastAPI endpoints to handle biometric verification and login using the DeepFace library:
api_endpoints.py
from fastapi import FastAPI, File, UploadFile
from deepface import DeepFace
app = FastAPI()
@app.post("/verify")
async def verify_face(ktp: UploadFile = File(...), selfie: UploadFile = File(...)):
# e-KYC: Match uploaded ID Card photo against live selfie
try:
result = DeepFace.verify(
img1_path=ktp.filename,
img2_path=selfie.filename,
model_name="VGG-Face",
detector_backend="opencv",
enforce_detection=False
)
return {"status": "success", "verified": result['verified'], "similarity": result['distance']}
except Exception as e:
return {"status": "error", "message": str(e)}
@app.post("/find-face")
async def find_face(selfie: UploadFile = File(...)):
# Biometric Login: Search selfie against known faces database
try:
dfs = DeepFace.find(
img_path=selfie.filename,
db_path="known_faces",
model_name="VGG-Face",
silent=True
)
if len(dfs) > 0 and not dfs[0].empty:
match = dfs[0].iloc[0]['identity']
return {"status": "found", "match_filename": match}
return {"status": "not_found"}
except Exception as e:
return {"status": "error", "message": str(e)}Database Design
The Laravel backend uses a relational database divided into three domains. The API endpoints are documented with Swagger.

1. Identity & Access
| Table | Description |
|---|---|
| Users | Authentication, roles, and registration states |
| Citizens | Demographic records and biometric data |
2. Resident Management
| Table | Description |
|---|---|
| Houses | Physical addresses mapped to family units |
| Families | Household groupings and property ownership |
| Mutations | Historical tracking of resident relocations |
3. Finance & Operations
| Table | Description |
|---|---|
| Billings | Community dues and payment tracking |
| Transactions | Ledger for incomes and expenses |
| Activities | Management of community events and personnel |
Links & Resources
- Mobile App Repository: jawara_clone_kel-6
- Backend API Repository: jawara_api
- Machine Learning Model: Python Notebook
- API Documentation: Built with Swagger and hosted dynamically via ngrok.