← Work

Community Platform

PetWatch

A community platform for reporting missing pets, submitting sightings, and visualising reports on an interactive map — helping owners and neighbours coordinate the search.

PythonFlaskSQLiteLeaflet.js
PetWatch — interactive map showing missing pet reports and sightings

Interactive map view — missing reports and sightings visualised with location pins.

Overview

PetWatch is a full-stack web application that allows users to report missing pets, submit sightings, and visualise both on an interactive map. The goal is to help communities coordinate the search rather than leaving owners reliant on social media posts and paper flyers.

Users can create a missing report, mark it as resolved when their pet is found, or submit a sighting of someone else's animal directly from the map.

  • Report missing pets with location and description.
  • Submit sightings of other users' reported animals.
  • Visualise all reports on an interactive Leaflet map.
  • Mark pets as found to close active reports.
PetWatch — map view with report pins

Map view — missing reports and sightings plotted with location pins.

PetWatch — all sightings feed

All sightings — community-submitted sightings browsable in a list.

The Problem

When a pet goes missing, owners are limited to posting on social media and putting up flyers around the neighbourhood. There's no dedicated tool for coordinating community sightings or understanding where a pet was last seen relative to home.

The result is a fragmented, slow-moving search process at a stressful moment. A shared, visual tool changes the dynamic entirely — a sighting submitted in minutes can redirect the entire search.

Design Decisions

The map is the centrepiece — not an afterthought. Sightings and reports are plotted as pins so the search area is immediately visible. Report types are differentiated visually to distinguish active missing reports from confirmed sightings and resolved cases.

Authentication is required to submit reports to keep the data reliable and traceable. Anonymous submissions would create noise that undermines the platform's usefulness during a real search.

Implementation

Python and Flask handle the backend with full CRUD operations for pet reports, sightings, and user accounts. SQLite provides lightweight storage appropriate for the project scale. Flask-Login manages session authentication throughout.

Leaflet.js renders the interactive map on the frontend with markers clustered when zoomed out to prevent visual noise when multiple reports are located near each other.

Frontend

Jinja2 · Leaflet.js

Server-rendered templates with an interactive map for report visualisation.

Backend

Python · Flask

Full CRUD for reports and sightings, session auth, and geolocation storage.

Database

SQLite

Users, pet reports, sighting records, and status transitions.

Mapping

Leaflet.js

Interactive map with clustered markers differentiated by report type.

PetWatch — report a sighting form

Report sighting — form for submitting a community sighting.

PetWatch — manage my sightings

Manage sightings — user's submitted sightings with edit and delete actions.

What I Learned

  • Map-based interfaces require careful UX decisions. Too many unprioritised markers create visual noise that obscures the actual information — clustering and type differentiation are essential.
  • Community features depend heavily on reducing friction. An extra step in the auth flow or report submission directly reduces the number of sightings that get submitted.
  • SQLite is a pragmatic choice for a project at this scale — it removes deployment complexity without limiting the functionality the project actually requires.