Inspiration
Four days ago, Esube Wondwossen disappeared near Howard University.
She is 22 years old. She is someone's daughter, someone's friend, and someone connected to our university community.
We watched what happened next in real time. Someone who had seen something posted it to an Instagram story that disappeared after 24 hours. Tips appeared across Reddit threads, but nobody was organizing them. Local news covered the story and then moved on. The police bulletin existed, but on a page most people would never find.
The information was everywhere, but it wasn't connected.
A family was searching for their daughter while the information that might help bring her home was scattered across a dozen platforms, buried in posts, or simply disappearing.
We're computer science students. We couldn't search the streets ourselves.
But we could build the thing that was missing.
That is FindMyPal.
Live demo: [(https://findmypal.us/]
What it does
More than 600,000 missing-person reports are filed in the United States every year, and the first 48 hours are often considered the Golden Window. The problem isn't necessarily that nobody sees anything. The problem is that what people see often goes nowhere.
FindMyPal is a real-time community intelligence platform that turns scattered, uncoordinated information into a structured response grid.
The core idea is simple: when someone submits a new piece of information, it shouldn't disappear into a form. It should immediately become useful.
A family or advocate can create a case with a photo, last-seen location, physical description, and timeline. Before the case goes live, FindMyPal automatically checks for duplicates and cross-references the case against NamUs, the National Missing and Unidentified Persons System. This helps surface existing federal records so families aren't duplicating effort across systems that don't communicate with each other.
Once the case is active, FindMyPal generates a shareable URL, a printable flyer with a QR code, and an AI-generated plain-English summary so volunteers can understand the case in seconds. Users can also search active cases using natural language through Gemini. Instead of having to search with exact database fields, someone can type something like:
"Young woman, Baltimore, last week."
and FindMyPal can surface the relevant case.
But the most important part happens when someone submits a tip.
Imagine someone reports:
"I saw her near Penn Station at 3 PM."
That single tip triggers several things at once.
It appears on a live Leaflet map and density heatmap, powered by SpacetimeDB's native real-time subscriptions. The update is pushed to connected clients instantly, with a polling safety net running alongside it for reliability. At the same time, a credibility-scoring layer helps surface stronger tips so useful information doesn't get buried, while the live tip feed and case timeline update automatically.
The tip is also automatically routed to the correct county police department based on jurisdiction. Families don't have to figure out which department to contact or where to send the information.
Then there's the civic intelligence layer.
Our marimo dashboard combines incoming community tips with publicly available civic data, including Baltimore CitiWatch camera locations. It does not provide access to live camera feeds. Instead, it gives investigators a map of where to look.
If a tip places someone near an intersection at 9 PM on Tuesday, the dashboard can show which publicly documented camera locations cover that area. This gives investigators a geographic starting point for determining where relevant footage may exist.
FindMyPal also has Smart Person Lookup for situations where an in-app case doesn't exist yet. A user can enter a name and optionally upload a photo. FindMyPal searches public web and social sources, uses Gemini to extract possible sighting language, maps those mentions, and generates a structured PDF brief. Uploaded photos are session-only and never stored.
Resolved cases move into a Found and Reunited section. Throughout the product, demo cases are clearly labeled, unverified tips are identified, lookup photos remain session-only, and there is no live camera access. These guardrails are part of the product design itself.
How we built it
The frontend is built with React, Vite, and Tailwind CSS.
We designed four primary pages around one question: could this interface mislead a family? That question came before aesthetics. The goal was to make the system fast to scan and understandable even when someone is using it under extreme stress.
The backend uses FastAPI to handle case intake, tip ingestion, duplicate detection, Lookup orchestration, credibility scoring, flyer generation, and jurisdiction-aware police notification routing.
For the real-time layer, we use SpacetimeDB.
We actually migrated to SpacetimeDB in the middle of the hackathon after hitting a ceiling with our original Supabase implementation. The migration required rewriting our schema and related backend logic, but SpacetimeDB gave us native real-time subscriptions with strongly typed relational structure.
Now, when a tip is submitted in one browser, the update can immediately propagate to connected clients. We also run a polling safety net alongside the subscription system for reliability.
Gemini powers three major AI workflows: natural-language search across active cases, extraction of potential sightings from public web results, and AI-generated case summaries.
We also integrated ElevenLabs to convert case briefs into spoken audio with one click, giving users an additional accessibility option.
For civic intelligence, marimo notebooks pull Baltimore CitiWatch open data and layer it against live tip clusters. This is what allows FindMyPal to connect community observations with publicly documented infrastructure in real time.
We also built NamUs integration into case intake so active cases can be cross-referenced against public federal missing-person records automatically.
For the hackathon, we deployed the public demo using Cloudflare Tunnel, with our domain at findmypal.us.
Challenges we ran into
Our hardest technical challenge was the database migration.
We were already building when we realized that our original Supabase architecture wasn't giving us the level of real-time reactivity we wanted. Moving to SpacetimeDB meant rewriting the schema and related backend logic while the hackathon clock was running.
It was one of those decisions that made the short-term situation harder but gave us a much stronger architecture for the final product.
We also had an issue where the deployed site and committed code weren't staying synchronized. We eventually traced the problem to build caching, worked through it as a team, and used Cursor to audit the pipeline until we closed the gap.
But our hardest challenge wasn't technical.
A missing-person platform has to serve two completely different users at the same time.
One could be a frightened family member filing a case at 2 AM.
Another could be an analyst running a web lookup the next morning.
The system has to work for both without overwhelming either one. That meant making constant decisions about information density, hierarchy, wording, and emotional tone.
Accomplishments that we're proud of
We're proud that we got SpacetimeDB live subscriptions working end to end. A tip submitted in one browser can propagate to connected clients instantly.
We're proud of the marimo civic dashboard actually working: live tip data can be layered against public camera infrastructure and update as new tips arrive.
We implemented jurisdiction-aware police routing, so tips can be directed toward the appropriate county department rather than a generic inbox. We also made NamUs federal integration live, allowing active cases to be cross-referenced against national missing-person records automatically.
We built automated tip credibility scoring, giving the system a way to surface potentially stronger submissions as tip volume grows.
We also added face-match assistance as an assistive signal against active case photos, Gemini natural-language search across cases, one-click flyer and QR-code generation, and ElevenLabs audio case briefs for accessibility.
And we're especially proud that the UI stays calm and navigable even though the subject matter is incredibly difficult.
Most importantly, the ethical guardrails aren't an afterthought. Unverified tips, session-only photos, and the lack of live camera access are built into the product itself.
We built FindMyPal because the problem wasn't abstract to us.
It was happening in our own community, this week.
What we learned
Technically, we learned that SpacetimeDB's subscription model changes how you architect real-time features.
Instead of manually managing WebSocket state or relying entirely on polling, the live feed can be driven by the database's subscription model once the schema and reducers are correctly designed.
We also learned that redundancy in a real-time system isn't necessarily a weakness. Running a polling safety net alongside subscriptions gives us another reliability layer.
But our biggest lesson was on the product side:
In a crisis tool, clarity is a feature.
Every design decision had to pass one question first:
Could this mislead a family?
That question came before aesthetics, scope, and even some feature decisions.
It shaped how we organized information, how we labeled uncertain data, and how we designed the overall experience.
We also learned how quickly a team can move when the problem feels real.
What's next for FindMyPal
The next step is making the system more proactive.
We're looking at real-time geofenced alerts that could send SMS or push notifications to volunteers within an active search radius when a high-confidence lead is submitted.
As the number of volunteers and tips grows, we'll also need stronger moderation tools to maintain tip quality and keep useful information visible.
And finally, we'd move from our current hackathon setup to a more durable production deployment on DigitalOcean, giving FindMyPal a more scalable infrastructure foundation.
The goal isn't to replace investigators or law enforcement.
It's to give families, communities, and police one live, structured place where every new piece of information can reach the people who need it most, at the moment it matters most.
Because the Golden Window does not wait.
And neither should the tools we give communities to help close it.
Built With
- apify
- citiwatch
- computervison
- cursor
- elevenlabs
- geminiapi
- godaddy
- grokai
- html
- javascript
- marimonotebook
- newsapi
- openstreetmap
- pillow
- python
- react
- serpapi
- spacetimedb
- sql
- tailwindcss
- typescript
Log in or sign up for Devpost to join the conversation.