We should go there sometime.on Saturday.
Your group chat has a restaurant link that got a fire emoji and vanished under 200 messages. Keena is the app I designed and built so couples and friend groups save those places in one list, rate them together, and actually go.
- Tap Save to Keena on a place in the chat
What opened while you were away
Pick when you last opened Keena, and the feed marks what opened since. Save any you like.
New in Perth
The whole group rates the shortlist
Each person scores the places, and Keena sorts the list by the group's average. Alex and Sam's scores arrive while you rate, the way they sync in the app.
Rate all five: tap a star, or swipe right for 5 and left for 1
Rate a place and it appears here, sorted by the group's average score.
Plan a day out from places you saved
First, Keena filters your saved places down to the ones nearby and open at the right time. Only then does the AI put them in order, so it can't suggest anywhere you haven't saved.
Pick a day out, then swap a stop. The other stops stay put.
"I don't mind, when works for you?"
The organiser proposes a few days, everyone ticks the slots that work, and Keena finds the one that suits the most people.
YouAlexSam
Tap the times you're free, then close the poll.
176 places in my own list
Screens from my own Keena: the list, the map and the new openings feed.
Live ratings in private groups
When Alex rates a place, it should show up on your phone straight away. Supabase's standard live updates couldn't deliver it without loosening the rules that keep each group's places private, so I built a different route that leaves those rules alone.
- Built with
- Next.js 16, React 19 and TypeScript. Supabase: Postgres with Row Level Security, and Realtime broadcast. Google Places API and MapLibre GL. Claude, OpenAI and Gemini. Vercel Cron. Playwright and Vitest.
- Size
- 130+ Postgres migrations and 160+ test files.
Lessons from building it
- 01
I built for two people, then rebuilt for groups
Version one assumed exactly two people. Moving to groups of any size changed the data model, the security rules and the copy. Designing sharing first would have saved a rewrite.
- 02
The planner improved when the AI decided less
It got reliable once code made the hard decisions (area, opening hours, type) and the model only ordered and explained what was left.
- 03
A draft stage touched half the app
Adding a draft stage for plans sounded small. Then I had to make reminders, busy dates and invites skip every draft.
I build business systems the same way: the rules sit in one place, and the automation only acts inside limits you set. Tell me about yours →