All projects
Web App
Built — not yet launched

EverybodysPet — Animal Welfare Platform with Rescue Dispatch

EverybodysPet is an animal-welfare platform: a lifelong record for every animal, a rescue case engine that dispatches the nearest NGO, clinic or volunteer, a clinic desk, adoption and fostering, and a pet-services marketplace. We designed and built the web platform; it is not launched yet.

For EverybodysPetOct 2026
  • Web app for every role (owners, guardians, NGOs, clinics, providers, volunteers, adopters)
  • Public site and welfare map
  • Superadmin console
  • Two Node.js backends on one database
Case EP-2806 offered to the NGO with Accept and Decline buttons, dispatch status, custody, payer and timeline.

Overview

EverybodysPet gives every animal, owned, street or wild, a record that outlives the people around it, and gives anyone who finds an animal in trouble a way to report it and see who answers. CountryDevs designed and built the platform: a Next.js web app with screens for each group that shows up for animals (owners, street-animal guardians, NGOs, clinics, volunteers, walkers and other providers, adopters and fosters), a public site with a welfare map, a superadmin console, and two Node.js backends on one MongoDB database.

A report becomes a case. The case engine finds responders whose coverage matches the species, the situation and the place, offers the case to them in rounds, widens the search when nobody accepts, and tells the reporter at every step. Around it sit the clinic's front desk and signed medical records, street-animal colonies with counted sterilisation and rabies coverage, adoption and fostering with e-signed agreements, a marketplace for walkers, sitters, groomers, trainers and clinics, and a wallet that keeps the platform's commission in an append-only ledger.

On 17 October 2026 the platform is built and verified on our machines but not deployed. The phone apps have not been started, no payment gateway is connected (bookings settle in cash for now), and the maps run on OpenStreetMap until a Google Maps key is in place. The numbers on this page come from the project's trackers and checkers.

How a report finds a responder: the case engine and dispatch

Every emergency, rescue, cruelty report, wildlife call, surrender, civic complaint and lost or found pet is one Case, with one state machine and one timeline. It gets a code such as EP-2806 and a public link the reporter can follow without signing in.

Who gets asked

Responders publish their coverage: the area, the case types, situations and species groups they take, and whether they are on duty. Candidates come from one MongoDB $geoNear query with every eligibility filter inside the pipeline, so the nearest eligible responders come back first. A volunteer is asked only while on duty and in good standing with an NGO; a free agent only about low-risk cases, such as an injured or trapped animal.

The defaults

Step Default
Offers per round 3, each open for 60 seconds
Search rings 3 km, then 8 km, then 15 km
Widen when nobody accepts after 5 minutes
Alert the country's fallback responders after 15 minutes
Mark unanswered and send the reporter the helpline after 30 minutes
Nudge an accepted responder who has gone quiet after 20 minutes
Flag custody nobody confirmed after 2 hours

An owner's SOS skips the rounds and alerts every clinic, ambulance and NGO within 25 km at once. Lost and found reports never dispatch: they alert nearby guardians and NGOs and run the matching instead.

Getting the details right

Accepting is compare-and-set, so when two responders tap Accept together one wins and the other gets a 409. The timers run in one place only, the phone backend, every 10 seconds, behind a superadmin switch that pauses them. The probe that drove the clock found a 24-hour clinic 17 km away that was never alerted at the fallback step, because the query still filtered it by its own 12 km radius. Fallbacks now answer country-wide.

Two backends, one database and a checker that refuses drift

The brief called for two backends, one for the web and one for the phone apps, on a single MongoDB database. That is easy to start and easy to break: if the phone backend's Booking model drifts from the web backend's, each side writes records the other misreads.

Copies, policed by a tool

We chose byte-identical copies over a shared package. Each backend keeps its own models/ folder, and tools/model-sync compares the two trees byte for byte (sha256), then writes every schema into a generated reference. Before it reports, it plants a one-byte change in a temporary copy and refuses to say green unless it caught it. The engines are shared the same way: the case engine, colonies, clinic, bookings, wallet, adoption and the rest live as identical files in both backends, checked by tools/constant-drift.

One owner per timer

The web backend answers requests and schedules nothing. The phone backend owns every timer: the dispatch tick every 10 seconds, booking requests expiring each minute, the hourly welfare-map rebuild and colony recount, and the daily sweeps for document expiry, wallet reconciliation and account erasure. With one owner per job, no job runs twice.

What the checker missed

On 17 October 2026 we found that the drift checker compared only a hand-kept list of 50 files. Twenty-two shared files were never checked, and two had already drifted, harmlessly, because nothing on the phone side called the missing code yet. Every check had read green. The checker now compares every file present in both backends, and an intentional own copy has to say why in its first lines. Run again on 17 October, the two checkers reported 62 model files and 84 shared files identical.

Markets: a country is a record, not code

EverybodysPet is meant to work anywhere. The rule is that anything that moves no money, such as records, reports, rescues, the feed and messaging, is open worldwide, while anything that moves money opens country by country and stays closed until it is set up.

What a Market holds

A Market is a database record with its currency and decimal places, languages, and switches for each money feature: payments, payouts, subscriptions, ads, marketplace, donations and teleconsults. It also holds the helplines a reporter is given when nobody answers, legal references for street-animal caretakers, disaster authorities, the cities on the welfare map, and the documents each kind of organisation must submit for verification. Two are seeded, India and Portugal, both in draft.

Money settings per Market

The platform's commission on bookings defaults to 20%, and a Market may override it. The cash cap, the share of the platform's money a provider may hold in cash before dropping out of search, exists only per Market and in its own currency: ₹10,000 for India and a €150 seed value for Portugal. A Market with no cap shows "No cash cap" rather than a false "Cash cap reached", and a money request in a country with no Market record is refused.

Keeping it out of the code

A sweep found seven places where code had chosen a currency for itself, such as a fallback to "INR". All seven now read the Market. A later pass removed the Asia/Kolkata default from clinics and providers: every venue now needs its own IANA timezone, taken from the device or the person, never assumed. tools/market-literals fails on a quoted currency code, a hard-coded country comparison, a currency symbol or a quoted timezone anywhere outside the seed files, and it ran clean over 1,002 files on 17 October 2026.

The challenge

Animal welfare runs on people who rarely share a system. A passer-by who finds an injured dog does not know which NGO covers that street. Volunteers coordinate in phone groups, the clinic keeps its own records, and a feeder who has looked after a colony for years has no proof of which animals are sterilised or vaccinated. When nobody answers a report, nobody hears about it.

The product had to serve all of these people without forcing one organisation into another's tool. It also had to be careful with money: anything that moves no money, such as records, reports, rescues and the feed, should work in any country from day one, while anything that moves money opens only in a country whose currency, payment rails and rules are set up. And the brief called for separate backends for the web and the phone apps on one database, so the two codebases could never be allowed to disagree about what a record means.

The solution

We wrote the product plan first, 44 documents covering every role, how the roles connect, the case engine, money and countries, and then built it in slices. Each slice was verified by an API probe and a scripted browser walk before the next began. Every rescue, cruelty report, lost pet and civic complaint is one Case object with one state machine; dispatch, escalation timers and the public timeline all hang off it. Each kind of organisation runs its own desk, and they meet through the case in front of them.

The web backend answers requests; the phone backend owns every timer and ticks dispatch every 10 seconds. Both hold byte-identical models and shared services, and a self-testing checker run before commits flags a single changed byte. Countries are records, not code: a Market carries its currency, languages, helplines, legal references, cities and verification documents, money features stay closed until a Market switches them on, and a second checker keeps currency codes out of the source.

The impact

What exists on 17 October 2026: a web app with 166 page routes across the public site, every role's screens and the superadmin console; a web backend with the case engine, clinic, colonies, bookings, wallet, adoption, fostering, messaging, notifications, moderation, verification and an audit log; and a phone backend that runs dispatch, booking expiry, the hourly map rebuild and the daily sweeps. The latest full regression ran 1,899 checks across 83 suites with none failing, and the model checker reports all 62 model files identical in both backends.

There are no users and no production deployment yet. Still to come: the two phone apps, online payments and payouts, Google Maps, live sockets (messages poll for now), the Fetch assistant, donations and per-case appeals. The people, organisations and animals in the screenshots are fictional personas from the project's own seed scripts.

Features

What we built into EverybodysPet

One lifelong record per animal

Vaccines, weight, microchip, a timeline that separates clinic-signed entries from owner entries, every guardian and what each may see, and what is due next. The health vault flags due and overdue vaccines and shows exactly who the record is shared with.

Report an animal, follow the case

A report becomes a case with a code such as EP-2790 and a shareable public timeline that shows who is responding and what happened. Exact locations for wildlife, phone numbers and clinical details never appear on it.

Case engine with dispatch

Offers go to the nearest eligible responders in rounds of three, each open for 60 seconds, widening from 3 to 8 to 15 km with escalation timers behind them. An NGO's command screen gathers its open cases, SLA status, volunteers on duty and shelter residents.

Street-animal colonies

Guardians track sterilisation and rabies coverage animal by animal, feeding spots and logs, a caretaker roster, supplies, drive requests and disputes, with the serving NGO attached. The phone backend recounts coverage every hour.

Clinic desk and signed encounters

The front desk runs the day's appointments in the clinic's own timezone. A vet records vitals, findings, diagnosis and treatment in a draft that becomes an immutable entry on the animal's record once a licensed vet signs it.

Pet-services marketplace

Owners find verified walkers, sitters, groomers, trainers and clinics by distance, see a priced menu and book. A provider has 20 minutes to accept a request, and an accepted booking gives the provider time-boxed access to the animal's facts.

Provider wallet on a ledger

Every completed booking settles the platform's commission, 20% by default, into an append-only ledger. A provider holding more of the platform's cash than the country's cap drops out of search until a settle-up is recorded.

Adoption and fostering

A shelter resident can be listed only once a vet has signed its vaccination. Applications move through screening, meet, home check and agreement, and the last e-signature transfers the animal and produces the agreement PDF. NGOs run foster placements the same way.

Welfare map and disaster mode

A coarse public map per city shows colonies, open cases and verified clinics and NGOs without locating any home or person. The ops desk can declare a disaster for an area and a period, which widens dispatch and puts temporary shelters on the map.

Verification, moderation and audit

Organisations and vets are verified against each country's document list before they appear. Moderation decisions cite a policy, an appeal goes to a different admin, and an append-only audit log records every administrative and system action.

By the numbers
1,899
Checks in the full regression run, none failing (83 suites)
62
Model files kept byte-identical in both backends
166
Page routes in the web app
44
Product and engineering plan documents written before code
Screens

What EverybodysPet looks like

EverybodysPet home page with the headline 'Every animal has a voice.' and counters for animals, open cases and verified organisations.
The public site opens on the platform's promise and live counts of animals on record, open cases and verified organisations, with one-tap routes to report, adopt or open the welfare map.
Public case page EP-2790 for an injured dog named Brownie with a timeline from report to treatment and a list of responders.
Every report gets a shareable link with a public timeline and the responders, while exact locations, phone numbers and medical details stay hidden.
Welfare map of Bengaluru with colony, case and clinic markers inside a dashed city circle and layer filter chips.
A city-level welfare map shows colonies, open cases and verified clinics and NGOs, deliberately coarse so no home or person can be located.
Animal record for a dog named Biscuit with vaccine, weight, microchip and next-due cards, a care timeline and a list of guardians.
Each animal has one lifelong record: vaccines, weight and microchip at a glance, a timeline of signed and owner entries, every guardian and grant, and what is due next.
Health vault vaccine table with due, given and overdue statuses beside allergy, blood type, medication and sharing panels.
The health vault separates clinic-signed entries from owner entries, flags due and overdue vaccines, and shows exactly who the record is shared with.
Mill Lane colony page with sterilised and vaccinated counts, an animal table, feeding spots and caretakers.
Caretakers of street-animal colonies track sterilisation and rabies coverage per animal, feeding spots, co-caretakers and open disputes, with an NGO serving the colony.
Clinic Today screen with four appointments, check-in and encounter buttons, an in-treatment case card and daily counters.
The clinic's front desk runs the day's queue by time, patient, owner, reason and vet, alongside unsigned drafts, cases in treatment and the emergency-dispatch switch.
Encounter form for a dog with temperature, heart rate, weight, findings, diagnosis code and treatment, plus Sign entry and case panels.
A vet records vitals, findings, diagnosis and treatment in an encounter draft that becomes immutable once signed, linked to the rescue case and its payer.
Provider profile for a dog walker with verification and review stats, written reviews, weekly hours and services with Book buttons.
Owners find verified walkers, sitters, groomers, trainers and clinics nearby; a provider's page shows verification, completed bookings, reviews, hours and bookable services.
Booking page for a 45-minute walk with provider, time, price, in-person payment and a time-limited access grant.
A confirmed booking records provider, time, place and the price snapshot, and grants the walker time-boxed access to the animal's walking facts.
Provider earnings page with balance, monthly earnings and cash-held cards and a statement of commissions and a settle-up.
Providers see a ledger of commissions on cash bookings and desk settle-ups, their balance, monthly earnings and the cash-held cap.
Adoption listings for two shelter dogs and an applications table with stage filters.
Shelter residents are listed for adoption only once a vet has signed their vaccination, and applications move through screening, meet, home check and agreement.
Fosters page with the foster network, an active placement and a supplies request awaiting approval.
The foster desk tracks the NGO's foster network, active placements under signed agreements, and supply or vet-bill requests from fosters.
Project details
Tech stack
Next.jsReactTypeScriptRedux ToolkitNode.jsExpressMongoDBMongooseLeafletOpenStreetMapPDFKitNodemailer
Timeline & team
Oct 2026
FAQ

Questions about this project

How does EverybodysPet decide which NGO or clinic gets a rescue case?

Responders publish their coverage: area, case types, situations, species groups and whether they are on duty. The case engine offers the case to the nearest three eligible responders for 60 seconds at a time, widens from 3 to 8 to 15 km if nobody accepts, alerts the country's fallback responders after 15 minutes and marks the case unanswered after 30, telling the reporter at each step.

Can EverybodysPet be used outside India?

Records, reports, rescues, the feed and messaging are built to work in any country. Money features open per country from a Market record that holds the currency, money switches, helplines and verification documents; India and Portugal are seeded as draft Markets, and a checker keeps currency codes and timezones out of the code.

Why does EverybodysPet run two backends on one database?

The brief called for a web backend and a phone backend on one MongoDB database. The web backend answers requests, the phone backend runs every timer (dispatch every 10 seconds, booking expiry, map rebuilds, daily sweeps), and both keep byte-identical models that a self-testing checker compares before commits.

Is EverybodysPet live?

Not yet. As of 17 October 2026 the web platform is built and verified on our machines but not deployed. The phone apps have not been started, and online payments and Google Maps are not connected.

More work

Other things we shipped

All projects
Storafleet fleet overview with storage totals, trend line, transfers list and per-provider footprint barsFeatured
Saasfor Storafleet

Storafleet — Multi-Cloud Storage Control Plane

Storafleet is CountryDevs' own SaaS control plane for object storage. Teams connect buckets they already own on 50+ providers, including AWS S3, Cloudflare R2, Backblaze B2, Wasabi and MinIO, then browse, migrate, search, secure and cost-check them from one console.

Next.js 15ReactRedux ToolkitNode.js+11
50+Storage providers in the connection roster
Case study
Pakka Logistics home page hero on desktopFeatured
Mobile Appfor Pakka Logistics

Pakka Logistics — Porter-Style Delivery Platform

Pakka Logistics is a Porter-style delivery platform for India. We built all of it: Android apps for customers and drivers, a business portal, an operations console and the website. The web platform is live; the Android apps are being prepared for Google Play.

React NativeTypeScriptRedux ToolkitNode.js+12
96.3%API routes exercised by a probe before launch (260 of 270)
Case study
Superadmin stories grid with photo storiesFeatured
Mobile Appfor Slic Solutions Private Limited

LetSlic — Social Media App with Group Chat, Stories and Premium

LetSlic, listed on Google Play as Slic, is a social app for photo posts, 24-hour stories and real-time chat with group moderation. We built it for Slic Solutions Private Limited: the React Native app, two Node.js APIs, the superadmin console and the website, plus Premium and ads.

React NativeTypeScriptReduxNode.js+13
13Months from first commit to handover (Jun 2025 – Jul 2026)
Case study
Got a project?

Let's build the
next one together

Tell us what you're trying to ship. We'll come back with a scope, a timeline, and a fixed price — usually within 48 hours.

Not ready for a full build? Start with a fixed-price Discovery Sprint, or get a code audit of an app someone else built.