← Bryan Lee02 / 05

Rally

02 / 05 · Live · Since Aug 2026

Plan a night out with one link.

Friends open the link, vote on dates and places, and see what’s winning. Nobody signs up.

Open Rally →
Made for
One friend group
My role
Idea, design, and code
Built with
Next.js, Supabase, OpenRouter
Status
Live · Open it
Making a plan in Rally
Friends voting on dates
The confirmed plan with calendar buttons
Make a plan, vote on it, and confirm it.The vote and invite screens are redrawn with made-up names.
The storyAug 2026

Every group chat has the same thread. Someone says "we should get dinner," and the plan dies somewhere between which Saturday and which place.

Rally turns that thread into one link. The host picks a few dates on a calendar, or just types them out, and adds a place or two. Friends open the link, type a name, and vote. Nobody signs up for anything.

I built it for my own friend group. The first version took one day, 29 commits on August 28, 2026, and I’ve been tuning it on my phone ever since.

The idea
The poll is the invite. One page collects the votes, then turns into the plan.
What makes it good05 ideas
01

One link, no accounts

The host fills in one form and gets a link. Friends open it, type their name, and vote. You can sign in if you want, but all it adds is a home page for your plans.

The host’s link carries a random 32-character key, and the page wipes that key from the address bar. So whatever link a friend copies from the page is safe to pass around.

The one-page form for a new plan
02

Say the dates in words

Type "every Saturday to Monday in October and November" and an AI turns it into one option per weekend. The calendar jumps to the new dates and tells you how many it added.

Typing one sentence beats tapping 18 boxes. If the AI is down, the box says so, and you can still tap the dates in by hand.

Typing the dates as a sentence
A weekend drawn as one band on the calendar
03

See where everyone stands

Every date is a row with a thin bar and a count, like "3 yes · 1 maybe." The top row gets a Leading pill, or Tied when two share the lead. Anyone can leave a note on an option, like "I can drive."

A vote shows up in every other open tab in under two seconds. The space for the Leading pill is always there, so a row doesn’t jump under your thumb right after you vote.

Votes on three dates, one leading
04

Repeat every week

Pick one Saturday to Monday, and the calendar offers to repeat it. One tap fills in the rest, and the button tells you exactly what it’ll do: "Add 8 Sat–Mon ranges."

Typing out dates is the most boring part of planning. This gets it done in two taps.

The repeat helper
Eight weekends added at once
05

Confirm, and it becomes the invite

The host taps Confirm on one date and one place. The top of the page turns into a dark Confirmed card with the date, the place, and two calendar buttons.

Nobody has to send a follow-up message. Times are wall-clock times, so 7 PM means 7 PM for everyone, and a day with no time becomes a true all-day event.

The confirmed plan
The look06 colors
  • Ink#0f172b
  • Page#f8fafc
  • Line#e2e8f0
  • Yes#009767
  • Maybe#f99c00
  • Leading#d0fae5

No web fonts. Rally uses your phone’s own system font, so there’s nothing to download and it looks like part of the phone.

The Confirmed card is the only dark thing in the app. Everything else stays light, so the green and amber votes stand out.

Try itA working demo · made-up data

Tap the dates that work, then pick a place.

The leader changes as you vote.

RallyTap to vote
The small stuff06 details
  • The calendar holds still

    The month grid is always six rows, so the page doesn’t shift when a month only needs five.

  • Instant taps

    Votes, confirms, and notes show up on screen in under 10 ms, before the server even replies.

  • Ties stay ties

    If two dates share the top score, both say Tied. The app won’t pick a winner for you.

  • Guest votes carry over

    Vote as "Alex" with no account, sign in later as Alex, and your votes come with you.

  • Less motion if you want it

    The vote pills slide, but only for fun. If your phone is set to reduce motion, the app skips the slide and shows plain buttons.

  • No zooming on iPhone

    Inputs use 16 px text so iPhones don’t zoom in, tap targets are 44 px, and alerts drop from the top where the keyboard can’t cover them.

Under the hoodNext.js, Supabase, OpenRouter
  • Next.js 16 and React 19 on Vercel, with Postgres on Supabase. Three tables: plans, people, and notes.
  • Every write goes through the server. The browser can listen for live updates, but it can’t read or write a row on its own.
  • There are no accounts by default. A person is a name on a plan, and the host is whoever holds the plan’s secret key.
  • Live updates are a tiny "something changed" ping. Every open tab hears it and fetches fresh votes, with a 60-second check as a backup.
  • The date sentence goes to an AI model with a strict answer format, and the app throws out past dates and duplicates.
  • I skipped the date-picker library. The calendar, the repeat helper, and the add-to-calendar files run on about 280 lines of date code with 27 tests.
Started
Aug 2026
Commits
47
Tests
39
Lines of code
4,909