Sulthonika M.

Portfolio

0%
SURABAYA, INDONESIA
Back to Projects
Data & AI Application
Data & AI Application•2026•Academic Project

SurabayaSambat

Helping partners read patterns in public city complaints without reviewing every post and comment manually.

SurabayaSambat collects comments from monitored public accounts, identifies possible urban issues, and presents them through a dashboard, charts, maps, and the comments behind each analysis.

My RoleSystem Analyst & AI Integration Developer
Key FocusCivic Issue Monitoring · AI Analysis · Data Pipeline · Geospatial Intelligence
https://surabayasambat.vercel.app
Open Live App
SurabayaSambat Dashboard Overview
Structured Analysis Flow from Public Comments

Turning raw Instagram comments into verified municipal issue signals, charts, geospatial markers, and evidence cards.

01 / Context

The Problem

Public comments can contain useful reports about damaged roads, flooding, waste, public facilities, or municipal services.

Those signals are mixed with ordinary conversation, jokes, account mentions, missing context, and comments that do not describe a problem at all. Reviewing them manually also becomes difficult once the information is spread across many posts and source accounts.

SurabayaSambat was built so monitoring does not have to begin with opening every post and reading its comments one by one.

The challenge was not collecting more comments. It was deciding which comments were useful enough to become part of the analysis.
02 / The Product

What I Built

SurabayaSambat connects data collection, AI analysis, location processing, and analytics in one application. Partners manage the public accounts they want to monitor. The system discovers relevant posts, collects comments, removes duplicates, and preserves the original text before analysis begins.

Issue Analysis

For understanding patterns found in the collected comments across categories, time periods, and urgency tiers.

Data Monitoring

For managing monitored public sources, running comment scraping runs, and inspecting raw comment storage.

AI Analysis

For reviewing original comments directly alongside model extraction, evidence quotes, and fallback status.

03 / Data Flow

From Public Comment to Issue Signal

A collected comment does not immediately become a city issue on the dashboard. The original text is preserved first. Sahabat-AI then helps determine whether the comment contains a municipal problem, its category, urgency, supporting evidence, and any location mentioned in the text. The result still goes through additional checks before it becomes part of the analytics.

Information Transformation Pipeline
01Source AccountsInstagram
02Relevant PostsDiscovered
03Public CommentsRaw Text
04DeduplicationClean Records
05AI AnalysisSahabat-AI
06Evidence ChecksVerified Text
07Location LookupSurabaya BBox
08Dashboard SignalCanonical Data
04 / AI Reliability

Keeping AI Results Connected to the Original Comment

One of the main parts of my work was making sure an AI result could still be checked against the comment it came from. A correctly formatted model response is not automatically treated as a correct analysis. The backend checks whether the evidence actually appears in the original comment. It also handles cases such as negation, unsupported summaries, mismatched categories, locations that were never mentioned, and urgency that goes beyond what the comment supports. Risky or weakly supported results can go through another verification pass. The interface keeps the original comment beside the analysis so partners can inspect why a result appeared instead of receiving an AI label without context.

Evidence Inspection View Model
Traceability Verified
Original Comment SourceID #4829

"Jalan Manyar depan sekolah sering banjir kalau hujan deras, Pemkot mohon dicek solusinya."

Original text preserved unchanged
↓
Verified AI ResultMatch 100%
Category:Public Infrastructure / Drainage
Urgency:Medium
Evidence Quote:"sering banjir kalau hujan deras"
Location Text:Jalan Manyar
A model result is useful only when there is still a clear path back to the source behind it.
05 / Uncertainty

Not Every Comment Needs a Label

Not every comment needs to become a city issue. Jokes, ordinary conversations, statements without enough context, or sentences that explicitly deny a problem can remain classified as non-complaints. Weakly supported outputs can also be marked for review instead of being forced into a category. Fallback results stay separate from primary Sahabat-AI outputs. This matters because the dashboard is meant to help people read patterns. Filling missing information with weak predictions would make those patterns harder to trust.

✓

Issue Signal

Clear municipal complaint with verified supporting evidence text.

✕

Non-Complaint

Jokes, general chatter, mentions, or sentences denying a problem.

?

Needs Review

Weak evidence match or ambiguous phrasing held for human partner check.

⚙

Fallback Result

Secondary heuristic classification kept separate from Sahabat-AI primary outputs.

06 / Geospatial Flow

Mapping Without Inventing Locations

Location processing is separate from AI classification. Sahabat-AI only extracts road names, areas, landmarks, or other places that are actually mentioned in the comment. The geospatial module then looks for a matching location using the Surabaya gazetteer and available geocoding services. Locations that are broad, ambiguous, outside Surabaya, or cannot be resolved remain without precise coordinates. The absence of a reliable location stays visible instead of being replaced with a convenient map point.

Geospatial Resolution Logic & Restraint
Path A: Clear Location Mentioned

"Jalan Gubeng Kertajaya" → Gazette Match → Lat/Lng Bounding Box → Map Pin Rendered

Resolved Map Pin
Path B: Ambiguous or Unmentioned Location

"Tolong diperbaiki min" → No Location Mentioned → Lookup Skips → Preserved without coordinates

Unresolved (No Marker)
07 / Analytics Consistency

One Dataset Across the Dashboard

Summary cards, charts, maps, urgent issues, and tables use the same canonical dataset. Time, category, urgency, and search filters apply to the same underlying records. The system also selects one analysis candidate per comment so repeated analysis does not cause the same comment to be counted several times. This keeps different views of the dashboard consistent with each other.

One Filtered Canonical Dataset
Summary Cards
Category Charts
Incidents Map
Urgent Issues
Data Table
08 / Ownership

My Contribution

My work focused on how raw public comments become information that can still be checked.

01

System Flow

Connected data collection, comment storage, AI analysis, location processing, and analytics into one workflow.

02

AI Integration

Worked on structured Sahabat-AI output and the checks around evidence, category, urgency, and uncertain results.

03

Data Reliability

Preserved original comments, handled deduplication, separated primary and fallback results, and prevented repeated analysis from inflating dashboard counts.

04

Geospatial Flow

Separated location extraction from coordinate resolution so the model does not create map coordinates itself.

05

Product Presentation

Brought the results into dashboards, charts, maps, tables, and evidence views that can be reviewed without understanding the internal pipeline.

09 / Prototype

What I Delivered

The project produced one application connecting source monitoring, comment acquisition, Sahabat-AI analysis, geospatial processing, and analytics. Partners can manage monitored accounts, run data collection, inspect API usage, control AI analysis, review model results, and explore issues by time, category, urgency, and location. The part I consider most important is that each result still has a path back to the comment it came from.

Main Analytics Dashboard
1 / 4
Main Analytics Dashboard

Main Analytics Dashboard

Overview of issue counts, category distribution, urgency rankings, and Surabaya incident map.

10 / Validation

What Is Still Unproven

SurabayaSambat does not prove that the signals detected in public comments equal the number of real incidents in Surabaya. Instagram comments also do not represent the entire city population.

The classification quality has not yet been evaluated against a multi-annotator gold set, so I would not claim accuracy, precision, recall, or F1 as project outcomes. The current runtime is also not a production municipal system and does not yet include all of the authentication, access control, security, and data-governance requirements that a real deployment would need.

Validation Priorities for Future Work
  • • Human-annotated evaluation dataset
  • • Classification quality evaluation
  • • False positives and false negatives
  • • Location resolution quality
  • • Comment source coverage
  • • Bias from public social media data
  • • Production security
  • • Access control
  • • Data governance
11 / Reflection

What I Learned

This project made me pay more attention to the distance between raw data, model output, and the information that finally reaches a user. AI can make a large collection of comments easier to work with, but the output still needs boundaries.

I learned that an analytics system should not only provide an answer. It should also make it possible to see where that answer came from, what remains uncertain, and when the system should avoid making a conclusion.
12 / Tech Stack

Technology

PythonFastAPISQLAlchemySQLiteSahabat-AIOllamaApifyLeafletChart.jsOpenStreetMapNominatim
13 / Key Takeaways

Key Outcomes

01

Less Manual Comment Review

Comments from monitored sources can be collected, deduplicated, and analyzed in one process without entering individual post URLs.

02

AI Results Stay Connected to Evidence

Categories, urgency, and summaries can be checked against the original comments behind the analysis.

03

Uncertain Locations Stay Uncertain

Only sufficiently resolved locations appear as map points. Missing confidence is not replaced with invented coordinates.