Inspiration
In the Philippines, animal rescue still often lives in Facebook posts, group chats, and phone calls. That fragmentation creates duplicate reports, delayed response, animals sent to shelters without capacity or the right medical capabilities, and cases that disappear after pickup.
We are BS Computer Science (Data Science) students building for AnimalHack 2026’s track on supporting animal shelters, rescues, and foster programs. We wanted one auditable path from a street report to a cleared, adoptable animal - not another static listing site.
What ResCutes is
ResCutes is Philippine animal rescue coordination: from street report to rescue, care, vet, and adoption. Mobile for the field; web for operations.
- Mobile PWA (
/mobile) for citizens and rescuers: report with photo/location, track cases, accept assignments, browse adoption - Web dashboard for shelter staff, veterinarians, and admins: verify/dispatch, urgency, shelter routing, medical clearance, adoption review
One Next.js codebase, Neon PostgreSQL, and Neon Auth. Five demo roles so judges can operate the full path live.
What we learned
Building ResCutes as four BS CS (Data Science) students forced lessons you only get when the product has to work end-to-end for judges, not just compile.
Field and ops are different jobs. Citizens and rescuers need a phone flow (photo, pin, accept assignment). Staff and vets need tables, dispatch, medical queues, and shelter capacity. We kept one codebase and one database, but we learned the hard way that “one UI for everyone” fails - and that hiding menu items is not authorization. Staff/vet access to the citizen mobile app had to be gated on the server.
Triage only matters if a human can defend it. Early on we talked about “smart priority.” What actually shipped is rule-based urgency: injury, environmental danger, vulnerability, and time waiting after verification, each with plain-language reasons. Same for shelter routing - capacity, capability, species, distance, workload - with warnings like “no free space” or “missing emergency surgery.” In a real shelter argument, “the model said so” loses; “traffic + severe injury = 71 High” can be discussed.
Demo data is part of the product. Our local tests and the live Neon demo shared a connection string. Workflow tests once wiped cases and animals; the live site suddenly looked empty and case modals failed. We had to stop full-table deletes, scope cleanup to test fixtures, and re-seed. For a hackathon, a broken demo is a broken project.
Small UX bugs kill trust. Nested buttons on case cards caused hydration errors. Empty animal names used to save as generated IDs. Staff create-case broke production when phone became required but wasn’t passed. Narrow medical tabs and map legend clipping made ops screens feel unfinished. None of that is glamorous - all of it is what makes a rescue tool feel real or fake.
Four people only work if the pipeline is shared. We coordinated on one GitHub repo (main / develop), one Vercel deploy, and one seeded role matrix (citizen → admin). The win was not perfect specialization; it was agreeing on the path - report → verify → assign → secure → handoff → medical → adoption - and refusing to ship half of it.
How we built it
We shipped a working MVP, not a slide deck:
- Next.js 15 App Router, React 19, TypeScript, Tailwind CSS
- Neon Auth + Neon PostgreSQL (Drizzle)
- Mapbox GL for field cases and a Philippines shelter directory
- Explainable urgency (
src/lib/urgency/scoring.ts) and shelter routing (src/lib/routing/shelter-routing.ts) - Vitest + Playwright, deployed on Vercel (Singapore /
sin1for PH latency)
Primary case path: report_submitted → verified → rescuer_assigned → animal_secured → shelter_handoff → completed, then medical clearance into adoption/foster.
We intentionally skipped “AI vision for injuries” for the hackathon. We did not have labeled Philippine street-animal data or time to calibrate trust. Transparent rules that staff can override with a reason fit the scope better.
Challenges we faced
Two products in one weekend mindset
Mobile report/map and web ops both had to feel intentional. Merging them into one Next.js app saved time, but every feature had to answer: does this belong on a phone in traffic, or on a shelter desk?Making priority and shelter choice trustworthy without ML theater
We argued about black-box scores vs explainable factors. We chose factors and weights we could show in the UI (e.g. severe injury 28 + traffic 25 + nursing 18 → High). Shelter recommendations that silently ignore capacity would recreate the real-world failure mode we set out to fix.Keeping the live demo alive while we developed
Shared Neon + aggressive test resets emptied production-looking data. Create routes and type errors failed Vercel builds. We spent real hours re-seeding, fixing deploy breaks, and hardening test cleanup so “Try Demo Access” stayed usable for AnimalHack judges.QA reality check as a four-person team
An external re-audit went from a rough baseline to 90/100 after we fixed create flows, name validation, verify/dispatch visibility, staff/vet mobile gating, reporter Call/Email, and narrow layouts. Residual polish (tiny-phone medical/map UI) is still honest backlog - we would rather say that than claim 100% finished.Coordination without drowning in process
Four students, one repo, conflicting “quick fixes.” We leaned on a clear role matrix, demo accounts, and a single happy path for the presentation so anyone on the team can demo without guessing.
Try it (demo accounts)
Live: https://rescutes.vercel.app/
Password for all demo users: demo1234
| Role | |
|---|---|
| Citizen | [email protected] |
| Rescuer | [email protected] |
| Shelter staff | [email protected] |
| Veterinarian | [email protected] |
| Administrator | [email protected] |
Walkthrough for judges: citizen report on mobile → staff verify/dispatch on web → open urgency + shelter match on a case → medical clearance → adoption.
Team
Yuan Andrei Mariano · Mark Adrian Bautista · Raphael Edrian Tan · Ivan Muñoz Untalan
Built With
- animal
- css
- drizzle
- mapbox
- neon
- next.js
- playwright
- postgresql
- pwa
- react
- shelter
- tailwind
- typescript
- vercel
- vitest
- welfare
- zod


Log in or sign up for Devpost to join the conversation.