DoorNest โ a project by Ahsan Mahmood
A cross-platform Flutter app that matches roommates by lifestyle, then helps them split rent, rotate chores, and live well together.
Most roommate products solve the introduction and stop.
That is the easy half. Two people meet. They get on well enough over coffee and they sign something. Then they discover that one of them gets up at six and the other goes to bed at two, that cleanliness meant different things to each of them, and that nobody agreed in advance who buys the washing-up liquid.
DoorNest is built around the second half.
Matching comes first, and it is ranked rather than ordered by whoever appeared most recently. A lifestyle quiz scores people on sleep, cleanliness, budget and schedule, which are the four things that actually generate friction between housemates. It is not a subtle insight. It is simply the thing swipe-ordered products do not do, because ranking is harder than listing.
Then the product carries on past the match, which is the unusual part.
Rent and expenses split between people. Chores rotate on a schedule that moves rather than a rota somebody drew once. House rules are voted on as a group, so the arrangement is a constitution rather than one person's preferences enforced by mood. There is a shared list, a calendar and chat.
Trust is handled structurally. Nobody is simply asked to be careful.
Identity verification exists. Past housemates can leave reviews, and vouching lets somebody stake their own credibility on another person, which is a stronger signal than a rating because it costs the person giving it something real.
Contact details stay hidden until they need not be. Anonymous reporting is there for when something goes wrong. Those exist because the product puts strangers into a shared home, which is a category of risk that a rating out of five does not cover.
Underneath it is Flutter with a Supabase backend, and a schema defined across twenty-five migrations.
Twenty-five is a lot. It is a fair proxy for how much of this is data modelling rather than screens. Roommate matching looks like a matching problem and turns out to be a household problem, with expenses, rotas, votes, reviews and roles all referencing each other.
One decision matters most.
Every domain has both a live implementation and a mock one behind the same interface, so the entire application runs with zero credentials configured. Development never stalls waiting for an account, and the seam where a real service arrives is designed deliberately rather than cut later under time pressure. Most projects discover that seam during an integration and regret where it landed.
There is a second consequence of the mock layer that is easy to miss.
A product that runs without credentials can be demonstrated to somebody before any account exists, which means the design gets tested against real reactions early rather than after the integrations are paid for. That ordering is unusual and it is the right way round.
What it cost is the wiring.
Live authentication, push, maps and payments are all still to be connected to anything real, and neither the web address nor a store listing is confirmed anywhere on the record. The record says so, and this page repeats it rather than describing a built application as a running one.
Credential-gated is a precise description, and it is more useful to a reader than calling the whole thing in progress. One says which part is missing. The other says only that something is.
What it does, and what that costs to build
- Lifestyle-based roommate matching via a personality quiz
- Rent and expense splitting between housemates
- Rotating chore schedules and a shared calendar
- House-rules constitution with group voting
- ID verification, vouching, and anonymous reporting
- Reviews from past roommates with hidden contact details
- Role dashboards for owners, brokers, verifiers, and admins
- In-app chat, notifications, and a joint shopping list
Built with
- Flutter
- Dart
- Riverpod
- go_router
- freezed
- Supabase
- PostgreSQL
- FlexColorScheme
- dartz
- Material 3
- google_sign_in
- Sentry
Worth knowing
- roommates
- shared-living
- flutter
- supabase
- rent-splitting
- co-living
- cross-platform
- proptech
What state is DoorNest in?
Early, and credential-gated, which the record states plainly. The application is built and the schema behind it is defined across twenty-five migrations, but live authentication, push, maps and payments are not yet wired, and neither the web address nor any store listing is confirmed live. So the shape is real and the connections to the outside world are not. That is a specific kind of unfinished and it is worth naming precisely rather than calling it in progress.
How does the matching work?
A lifestyle quiz ranks people by sleep pattern, cleanliness, budget and schedule rather than by who appeared first. That ordering is the whole argument: the reason shared living goes wrong is rarely that two people disliked each other on sight, it is that one of them gets up at six and the other goes to bed at two. Ranking on the things that actually cause friction is cheap to do and almost nobody does it.
What happens after two people match?
That is the part most matching products skip. Rent and expenses get split, chores rotate on a schedule, house rules are voted on as a group, and there is a shared shopping list and a calendar. Matching is a single moment; living together is every week afterwards. A product that stops at the introduction has solved the easy end of the problem and handed the difficult one to a group chat and a shared spreadsheet nobody updates.
How can the whole app run with no credentials?
Every domain has two implementations, one live and one mock, behind the same repository interface. The application asks for a repository and gets whichever is configured, so the entire product runs end to end with nothing provisioned. That is unusually disciplined and it pays twice: development does not stall waiting for an account, and the seam where a real service plugs in is designed rather than discovered later under pressure.
Does DoorNest work on iPhone?
There is no iOS release. It is built in Flutter targeting Android, iOS and web from one codebase, so the code exists for that platform, but no store listing is confirmed on either and there is no Apple Developer account here. Nothing I build has shipped to the App Store. The distinction matters on this entry more than most: a cross-platform framework means the build is possible, not that anything has been published.
https://aoneahsan.com/projects/com.aoneahsan.doornest