Inspiration
When trying to plan a hangout, every group chat runs into the same issues. The time changes, someone suggests a different place, and replies about who’s coming or who needs a ride get buried in the conversation.
We built Rally to centralize those details into one shared, up-to-date plan. We wanted friends to keep chatting naturally while giving everyone one place to check what’s happening, respond, and see what’s changed.
What it does
Rally is an iMessage assistant for the organizer, paired with a shared plan page for friends.
The organizer texts Rally a plan and gets a link to forward into the group chat. Friends open it, choose their name, and tap I’m in, Maybe, or Can’t. They can also offer a ride, request one, or suggest a change without downloading an app or creating an account.
Rally brings decisions back to the organizer through Messages. The shared page keeps everyone updated, and when enough people say yes, the plan locks in.
How we built it
We built the backend with TypeScript, Node.js, and Hono, and integrated Photon Spectrum to connect the organizer’s conversation to iMessage.
The shared plan page uses server-sent events to update responses and plan details without refreshing. We used Playwright to generate plan images for messages and link previews, and a public tunnel to make our local server accessible from real phones.
The project includes a keyword-based analyzer and an optional Anthropic Claude API integration for turning messages and screenshots into structured planning actions. Weather uses labeled demo data by default, with an Apple WeatherKit integration.
Challenges we ran into
Our original idea put Rally directly inside the group chat as a mini app. When it came time to deploy, we realized that the Photon plan we had access to (Pro) only supported one-to-one messaging and not group chats or apps. So, we had to rework the experience: the organizer talks privately with Rally, and friends respond through a shared link that stays constantly updated. This kept the user journey mostly the same except for having to first appoint an organizer.
Accomplishments that we're proud of
We’re proud of building something we would personally use. Rally came from the frustration of organizing hangouts in our own group chats, so turning that experience into a working project felt especially rewarding.
We also talked to more than 16 people about the idea who said they would use it. Hearing that others shared the same frustrations gave us confidence that we were solving a problem beyond our own friend group, as well as validated our problem.
What we learned
Check what a platform actually allows before you design around it. We planned Rally as a group chat mini app first, and only found out at deploy time that our Photon plan couldn't support it. Next time we'll confirm API limits and plan tiers on day one. Working around that limit also taught us something about the product. Once we moved Rally into a private chat with the organizer and gave everyone else a shared link, all the plan details had to live on the server. That made the plan page the single source of truth. Server-sent events keep it current on every phone without a refresh, so the page holds up even when the group chat gets messy.
What's next for Rally
Our first step is to bring Rally back to the original idea: living inside the group chat. Instead of the organizer forwarding a link, Rally would join the thread as a member. It would read the conversation as it happens, pick up when someone suggests a new time or place, and post an interactive plan card that everyone can tap to RSVP, offer a ride, or vote on changes without leaving Messages.
We already designed and built this version. The only thing blocking it was cost. Group chats, mini apps inside the thread, contact cards, and a dedicated phone number are only available on Photon's Business plan, which costs $250 per line per month. That was too much for a hackathon team, so we used the free Pro plan provided, which only supports one-to-one messaging.
Beyond that, we want to implement new features to send reminders before the hangout and nudge people who haven't replied and match riders with drivers automatically based on who offered seats and who asked for a ride.
Built With
- photon
Log in or sign up for Devpost to join the conversation.