StampIt!
Update: When logging in with the 4-digit code, please check your spam folder in your email!
Inspiration
Planning a group trip can turn into a spreadsheet full of conflicting schedules, budgets, and wish lists. We wanted to make it easier for a group to go from “we should travel together” to a trip plan that reflects what each person actually wants—not just the loudest voice in the group.
What it does
StampIt! helps a group plan a trip around a shared destination and dates while making room for individual preferences. An organizer creates a trip and shares its four-digit code; each traveler joins with a verified email account and fills out preferences such as budget, pace, food, transportation, and activities.
The organizer can generate an itinerary organized by day and city, with activities, travel between locations, lodging, meals, estimated costs, and notes about how the group’s preferences were balanced. Members can view and edit the saved plan, add stops, or explore an alternative for an activity and choose the track they prefer. Organizers can update trip details and regenerate the itinerary when plans change.
How we built it
We built the travel experience in React and connected it to a TypeScript API running on a Cloudflare Worker. Auth0 email one-time codes provide sign-in. The Worker verifies sessions and trip membership before accessing trip data, preferences, and itineraries stored in private DeepSpace RecordRoom collections.
For itinerary generation, the Worker sends trip details and relevant traveler preferences to Gemini 3.8 Flash with Google Maps grounding, then validates the structured itinerary response. Since generation can take time, it runs in the background; the app polls for completion with a signed, expiring token rather than keeping one HTTP request open. The Gemini API key stays on the server.
Conceptually, the planner produces a plan from shared trip details and the group’s individual preferences:
$$ \text{Itinerary} = f(\text{destination},\ \text{dates},\ \text{trip details},\ \text{traveler preferences}) $$
Challenges we ran into
- Making different preferences work together: A group plan needs to account for both shared interests and individual needs. We modeled preferences per traveler and gave them priority labels so the planner can respect critical needs while balancing more flexible ones.
- Keeping trip data private: The browser should not be able to read or change private trip records directly. We put access behind the Worker, where signed-in identity and trip membership are checked before protected operations.
- Handling slow AI generation reliably: A long-running itinerary request should not depend on one browser connection staying open. We implemented background generation and a polling flow tied to the trip creator and trip.
- Connecting the app to the planner: The UI and planner need to agree on a structured itinerary format. We validate the generated response before saving it so the rest of the app can display and edit a predictable shape.
Accomplishments that we're proud of
We’re proud that StampIt! covers the complete journey from creating and joining a trip to generating and editing a shared itinerary. It combines individual preferences into a plan the group can discuss and change, rather than treating an AI-generated itinerary as a one-size-fits-all answer.
We’re also proud of the care we took around the server boundary: trip and itinerary access is checked by the Worker, and the AI credential is never sent to the browser.
What we learned
We learned that useful group planning starts with collecting preferences in a way that preserves who they belong to and how important they are. We also learned that an AI feature is more than a prompt: it needs a clear data contract, validation, background processing, and a user experience for waiting, revising, and sharing the result.
Building the app also reinforced the importance of checking authorization at the API boundary. Hiding a feature in the interface is not a substitute for verifying a user’s session and membership on the server.
What's next for StampIt!
- Add a shared map view so travelers can understand the geography and travel time between stops.
- Improve collaboration with clearer change history and live updates when a group member edits the itinerary.
- Let groups export or share a polished version of their plan.
- Continue improving itinerary quality with more specific accessibility, timing, and real-world availability information.
Built With
- auth0
- css
- deepspace
- gemini
- godaddy
- html
- javascript
- openmeteo
- python
- react
- typescript


Log in or sign up for Devpost to join the conversation.