06 / 15 PROJECT

Every project

Neighbourly

A map of who needs help and who is nearby, built out from a hackathon entry into a live SvelteKit and Flask app.

Open itRead the source

The Neighbourly landing page, captured while signed in. The nav carries the loop: new request, browse, account.
1st
hackSheffield 9, best repo
Jan 2026
completed
Live
at neighbourly.jacksmith.me

What it does

Someone who needs help posts a request: groceries, an errand, companionship. The request carries a location. Volunteers nearby open a map, see the pins, and pick one. From there the two of them talk in a real-time chat inside the app. That is the whole loop, and the decisions below exist to keep it short.

From hackathon to app

It started at hackSheffield 9 in November 2024, where our four-person team took first place for Best GitHub Repo, an award for project structure, documentation and developer experience. Neighbourly is what that entry became once it had to survive being deployed: a SvelteKit 5 front end, a Flask and SQLAlchemy API, and PostgreSQL on Neon, completed in January 2026.

People know their address, and a map wants coordinates.

Pins and addresses

People know their address, and a map wants coordinates. The two are bound together in both directions here: dropping or dragging the pin rewrites the address field, and typing an address moves the pin. Neither one is the master copy. It sounds like a small thing until a request goes up with the wrong location on it, and the map is the only way anyone finds it.

Logged in across two domains

The front end and the API are separate deployments on separate domains, across Vercel and Fly.io, which turns login into the awkward part. Auth0 handles the identity, but the session has to survive a cross-domain hop over HTTPS behind reverse proxies, and it has to be readable by whichever server instance answers next. Sessions are therefore kept in PostgreSQL rather than in memory.

What it does

  1. Interactive map showing nearby help requests with Google Maps API integration
  2. Real-time chat between requesters and helpers
  3. Two-way map-address interaction: pin updates address field, typing address repositions pin
  4. Secure authentication with Auth0 across separate frontend/backend domains
  5. PostgreSQL-backed sessions for multi-instance server support
  6. Mobile-responsive design
  7. Cross-domain authentication handling with HTTPS behind reverse proxies
  8. Evolution from HackSheffield 9 hackathon (1st place GitHub competition)

Built with

  • SvelteKit 5
  • TailwindCSS
  • Google Maps API
  • Python
  • Flask
  • SQLAlchemy
  • PostgreSQL
  • Neon
  • Auth0
  • Vercel
  • Fly.io
  • Real-time Chat