Next Door · Case Study
Thanks for Visiting
Reach out

Overview
The short version · ~12 min read
You know every face on your floor. Do you know one name?
The problem was never distance. The apps built for streets turned them into public feeds with ads in them, so the real conversation moved to a group chat nobody can search and everybody mutes.
My solution was one calm place for one building, over 4 key decisions that each cost something. The outcome is 3 surfaces of a single web app, chat, events and a marketplace, sharing one member list and one login. The output is running as a demo anyone can walk into, inside free tiers, with the code there to fork.
- 3 surfaces
- chat, events and a marketplace, sharing one member list and one login
- 30 tables
- the schema behind live messages, RSVPs, listings and their histories
- Guest or Google
- walk in with no account at all, or sign in and keep a profile


One Web App, Every Device
01The outcome
Three things happen on a street: people talk, people organise, and people pass things along. Build them as three apps and nobody installs the second one, so they are three surfaces of one web app instead, sharing a member list, a login and a set of notifications. There is nothing to install at any size, which is the only reason a neighbour who joined from a text message ever opens it twice.
Move around in it
Willow Court
powered by Next Door
Today
Priya
14:02
14:04 · Read
Sam
14:09
Chat. The ground floor. One thread for the whole building, with pinned messages, reactions and read receipts. On a wide screen the member list comes in beside it rather than over it.
Every screen, every size
The same three surfaces, laid out for the thing in your hand and the thing on your desk.




Phone first, because a neighbour reads this standing in a lift. One column, thumb-reachable, the composer pinned to the bottom.
4 key decisions
02The solution
Every one of these traded something away to keep one promise: that a neighbour can get in without an account, and the street's messages stay in a database the street owns.
How many apps a street needs
Not taken
3 apps, one per job
Shipped
3 surfaces of 1 web app
How I got there
Three things happen on a street: people talk, people organise, people pass things along. Build them as three apps and nobody installs the second one.
What it cost
- User
- No push. A parcel at the door is a notification or it is nothing.
- Technical
- 54 components carrying 3 surfaces, so a change lands in 3 places at once.
- Business
- Nothing to install, which is the only reason someone opens it twice.
What it costs to walk in
Not taken
Sign up before you see anything
Shipped
Guest, or Google
How I got there
The person this is built for joined from a text message from a neighbour. A sign-up form is the point at which that person closes the tab.
What it cost
- User
- A guest keeps nothing. Close the tab and the profile was never there.
- Technical
- 2 identity paths through every route and every permission check.
- Business
- Guests leave no profile, so there is no member list to grow.
Who holds the messages
Not taken
One hosted service for every street
Shipped
You run your own copy
How I got there
An app whose whole argument is that your messages should not live inside somebody else's platform cannot then be somebody else's platform.
What it cost
- User
- Standing one up means Supabase, OAuth credentials and 3 cron jobs.
- Technical
- Every choice has to stay inside a free tier or the instruction is not real.
- Business
- There is no hosted product here, so there is nothing to charge for.
What the browser is allowed to ask
Not taken
The client reads the database directly
Shipped
84 routes, 1 per read and write
How I got there
Anything the browser can query directly is a privacy promise I would be asking a street to take on trust. A route is the same promise written where it can be checked.
What it cost
- User
- Nothing visible, and that is the whole point of it.
- Technical
- 84 routes to maintain, and a feature is a route before it is a screen.
- Business
- The claim is enforced in code rather than made in copy.
One System, Two Modes
03Light and dark
A neighbourhood app gets opened last thing at night as often as it does at lunch. Dark mode as an afterthought means inverting a palette and hoping, so both modes were drawn together: two grounds, one identity, and a primary that changes value between them because no single green is readable on both.
Light mode
Pine carries the primary on white: type, icons, active states, the deep end of every gradient. Mint measures about 1.3 to 1 against this background, so it never holds a word here, only the bright end of a fill.
Dark mode
The two change places. Pine falls to about 2 to 1 on this ground, so mint takes the primary and pine becomes the depth under it. Same pair, same gradient, one value swapped, which is the whole of what supporting two modes costs when both were drawn at once.
Typography
Outfit
ABCDEFGHIJKLMNOPQRSTUVWXYZ
abcdefghijklmnopqrstuvwxyz
0123456789
The product's face, and the only one inside the app. A geometric sans with enough warmth to read as a neighbour rather than a utility, at every size from a timestamp to a screen title.
Icons & Cards
The two colour bands above are a claim. This is where it can be checked: one switch, the same fourteen icons and the same two cards, redrawn on the other ground with only the primary changing value.
Summer courtyard barbecue
Created by Priya, Flat 4B
The card is an invitation. The action is Join, and the rows say when, where and how full.
Borrow a drill for an hour
2h agoPutting up a shelf this evening and mine has finally given up. Happy to return it the same night, and I will bring biscuits.
Somebody else's request, not a listing. No price anywhere, and the action is I can help.

From Locked In to a Chain I Own
04Flow
Every link in that chain is one I can pull out. The database, the host, the mail, the editor: each is a piece doing one job, and each has a replacement I could move to in an afternoon without touching the other six.
The first version of Next Door was generated on a vibe coding platform, and running it meant staying there. Rebuilding it across tools I picked myself is what turned a product I rented into one I own.
Where It Stands
05The output
It runs. It is a demo rather than a launch: anyone can walk in as a guest, the sample data resets on a schedule, and no street is living on it yet. What is finished is the hard part, which is the whole product working end to end for one neighbourhood.
- Surfaces
- 3
- Tables
- 30
- API routes
- 84
- Components
- 54
- Commits
- 75
- Running cost
- Free tier
Chat, events and a marketplace, on one member list.
Messages, reactions, reads, RSVPs, listings and their histories.
Every read and write goes through one, never straight to the client.
Built once and reused across all three surfaces.
First to latest, 7 April to 17 June 2026.
Vercel, Supabase and Google Cloud, within their free limits.
What is next
It's your time to build your community
This was my first project built with AI, and it was meant for everyone. go ahead and test the product, and if you like it, fork the project on GitHub for free.
One app, all screens


Guest access. No account, no email.
Try it
Great products happen when the right people meet.
Let's work together