Inspiration
Crime response speed in Indonesia isn't limited by a lack of information, citizen reports, CCTV footage, and police records already exist. It's limited by how fragmented that information is. Before any unit can be dispatched, an operator has to manually cross-reference multiple disconnected sources, verify what's real, and judge severity, all under time pressure. We wanted to build something that closes that gap: not another reporting app, but an intelligence layer that helps operators see, verify, and act faster, while keeping a human firmly in control of every dispatch decision.
What it does
Matakota is an AI Intelligence Layer for crime response, built around two complementary AI systems and a human-in-the-loop operator workflow.
On the proactive side, our Space-Time Risk Score Predictor (STRSP) learns from historical crime data to predict where and when risk is elevated, rendered as a live risk heatmap operators can act on before an incident is even reported.
On the reactive side, incoming reports are automatically correlated and de-duplicated, assigned a severity level, and summarized by AI into a concise incident brief. Every incident starts as an unverified candidate, never a confirmed fact, until an operator reviews it. From there, the operator can pull up the nearest available personnel, dispatch them with an auto-generated Dispatch Card, and track the incident through its full lifecycle from report to resolution.
We also built and trained a lightweight CCTV crime detection model (DINOv2-based) to demonstrate how a computer-vision signal would feed into the same pipeline as just another candidate event awaiting verification, never an automatic accusation.
How we built it
The frontend and backend logic live in a single Next.js + tRPC monorepo (Turborepo), backed by PostgreSQL via Prisma, with the interactive risk heatmap rendered using Mapbox GL + Deck.gl.
The AI system is served independently through a FastAPI service. STRSP was trained on real Chicago Crimes open data (2021–present) using a pseudo-labeling severity scheme, spatial grid aggregation with neighbor smoothing, and cyclical time encoding. We trained four rolling models on weekly cutoffs and evaluated each with a strict walk-forward protocol against a grid-only baseline, with drift detection and a versioned model registry between checkpoints, a continual-learning setup adapted from an earlier MLOps project one of our members had built. The production model is served through two endpoints: a precomputed batch endpoint for the heatmap, and a real-time endpoint for point queries.
The CCTV detector uses a frozen DINOv2-small backbone, with a lightweight trained classification head, evaluated on a held-out video split with real accuracy and F1 metrics, not just visually convincing output.
Challenges we ran into
Our biggest early challenge was scope: our first design tried to fold in live CCTV streaming and body-worn camera input as fully implemented features. We realized partway through that this risked spreading our AI effort across three heavy pillars at once. We made the deliberate call to cut real-time CCTV integration and BWC input down to documented future work, and instead invest that time into making our risk model genuinely rigorous, with real historical data, proper train/validation splits at the video level to avoid leakage, and a walk-forward evaluation that couldn't be gamed by data we controlled ourselves. We also had to reconcile a geographic mismatch: our risk model trained on Chicago's open crime data while our product is framed around Indonesian policing, a limitation we chose to disclose honestly rather than hide.
Accomplishments that we're proud of
We're proud that our AI isn't just illustrative, it's backed by real, reproducible numbers. Our risk prediction models were evaluated with a proper walk-forward protocol and consistently outperformed a grid-only baseline, with an automated drift check and quality gate between retraining checkpoints. Our CCTV detector was trained and validated on genuinely unseen video, not hand-picked examples. And throughout the system, verification stays with a human operator by design, reflected in the data model itself, not just in our pitch.
What we learned
We learned that the most valuable thing an AI feature can offer in public safety isn't automation, it's trustworthy acceleration. A model that's slightly less flashy but genuinely evaluated, with clear uncertainty and a human checkpoint, is worth more than a system that looks fully autonomous but can't explain itself. We also learned the discipline of scoping honestly under a hard deadline: recognizing which parts of an ambitious idea are core to the story, and which are better labeled as future work than built shallowly under time pressure.
What's next for Matakota
Our immediate next steps are integrating real-time CCTV inference at the edge (rather than offline replay), incorporating body-worn camera location and footage as a live input source, and expanding our risk model's training data to Indonesian crime datasets to close the geographic gap with our current Chicago-trained model. Longer term, we want to explore trend/escalation prediction to flag emerging hotspots before they peak, and pilot the platform with an actual command center to validate the workflow against real operator behavior.
Built With
- dinov2
- fastapi
- gl
- javascript
- mapbox
- next.js
- postgresql
- prisma
- pytorch
- trpc
- typescript
- xgboost
Log in or sign up for Devpost to join the conversation.