BucketList — Vibe with Zymix | Challenge 3: Coordination Helper
Team: Jeff, Praya, Tana Track: Vibe with Zymix — Challenge 3: Coordination Helper GitHub: https://github.com/wenjaee/seablings
Inspiration
Forty messages in the group chat and still no decision made. This is one of the most universal pain points in Gen Z social life, and it is exactly the problem Challenge 3 asks us to solve.
87% of saved content is never revisited. People save places with the intent to go, but they rarely end up going — primarily because coordinating with friends is difficult. Gen Z group chats are overflowing with TikTok and Instagram links, food videos, and activity ideas accompanied by messages like "we should go here." These ideas quickly disappear in the fast-moving feed. When the group finally attempts to make plans, nobody remembers the best options, individual preferences are scattered, and the chat stalls before any decision is reached.
We saw Zymix as the perfect platform to solve this. Its social graph and group chat infrastructure are already where friends spend their time. The missing piece was an AI layer that could capture their shared social inspiration and turn it into a concrete, agreed-upon plan — without the group ever leaving the chat.
What it does
BucketList is an AI planning layer built on top of Zymix that converts what friends watch and share on TikTok and Instagram into visitable bucket-list ideas, then helps the group quickly choose a plan — eliminating the endless, undecided group chat. It is a direct answer to Challenge 3: use AI to simplify group decision-making and reduce the friction of getting people together.
Capture. Users share a TikTok or Instagram post directly to BucketList using a native iOS share extension. The AI extracts visitable places or activities from the video content and enriches them with location, price tier, opening hours, and source links using Perplexity.
Bucket List. Extracted places are saved into a personal bucket list, organised by category (Café, Restaurant, Bar, Activity, Culture, Shopping). Inspiration is never lost and is always ready to feed the group planner.
@planner Agent. In a Zymix group chat, anyone types @planner to invoke the bot. It privately asks each member three questions: availability, budget, and vetoes (e.g. "No Seafood", "Halal only"). No one sees each other's answers.
AI Recommendations. The bot aggregates all constraints — overlapping availability cross-referenced with place opening hours, combined budget range, and a union of vetoes — and scores the group's pooled bucket-list items. It surfaces the top three recommendation cards with specific reasons why each fits the group.
Confirmed Plan. Members vote on the top three cards. The winner is announced with a celebration pop-up, and a confirmed plan card appears in the chat with a specific proposed time and a pre-filled Google Calendar deep link.
Try yourself! Use the tester account with 4444 as the pin to test the feature yourself.
How we built it
Planning and Process
We planned backwards. Given the 24-hour timeframe, we started by setting hard milestones and working backwards to understand what had to be true at each stage for the demo to succeed. Before writing a single line of code, we spent time with Zymix itself — understanding the gaps in the current product, identifying where the social graph was strong, and mapping where group coordination broke down. This gave us the confidence to commit to Challenge 3 as our primary direction.
The three of us ideated together in the problem space, discussed concepts, and synthesised until we converged on the core idea: turn passive social sharing into active group planning, natively inside Zymix. Once scope was agreed, we used Manus and Notion to translate that idea into a structured plan — PRDs, a sprint board, a decision log, and a process log — before dividing into lanes.
Role division:
| Person | Role |
|---|---|
| Jeff | BE engineer — backend implementation, AI pipeline, Supabase, planner agent |
| Praya | FE engineer — frontend components, API integration, demo reliability |
| Tana | UI/UX designer and illustrator — Figma designs, category sticker illustrations (produced in Fotor), marketing material, visual direction |
Technical Architecture
The product is a Next.js mobile web app built to emulate the Zymix experience, backed by Supabase and a multi-provider AI pipeline.
| Component | Stack / Provider |
|---|---|
| Frontend | Next.js, Zymix-style chat UI, real-time/polling fallback |
| Backend | Next.js API routes (captures, bucket items, messages, planner sessions) |
| Database | Supabase (users, ingestion tasks, bucket items, embeddings, planner sessions) |
| Social Metadata | EnsembleData (TikTok and Instagram post info) |
| AI Extraction | Gemini gemini-2.5-flash (place extraction from video, captions, inline base64 media) |
| Enrichment | Perplexity sonar-pro (canonical name, address, price, opening hours, source citations) |
| Embeddings | Gemini gemini-embedding-001 (768-dimension vectors for recommendation scoring) |
| Planner Aggregation | Gemini with deterministic fallback (availability synthesis, budget range, veto filtering) |
| iOS Share Extension | Native SwiftUI spike — reads shared URL/text, classifies TikTok/Instagram, posts to /api/captures |
Challenges we ran into
Asynchronous AI processing. The ingestion pipeline chains EnsembleData, Gemini extraction, Perplexity enrichment, and embedding generation. Getting the native share to return quickly with a "processing" state while the heavy lifting happened in the background required careful async queue design — without the complexity of a full task runner.
Rich media handling. Extracting places from TikTok videos required downloading the video server-side and sending it to Gemini as inline base64 media. Large videos and multi-image Instagram posts required graceful fallbacks to caption and text extraction when media exceeded inline caps.
Aggregation logic. Synthesising diverse group constraints — combining different availability windows with specific place opening hours to propose a concrete meeting time like "Saturday 12:00" — required iterating on LLM prompts and building deterministic fallbacks to ensure the planner always produced a usable output.
Demo reliability across devices. Running the demo across a native iOS capture device and multiple web-based personas required robust seed data and fixture fallbacks so the core story could be told even if a live API call was slow.
Accomplishments that we're proud of
We are most proud of closing the full loop: a TikTok or Instagram post shared on a phone becomes an enriched, structured bucket-list item in seconds. Perplexity automatically fills in the gaps — canonical name, exact address, price tier, opening hours — from a video the user simply watched and shared. That transformation, from passive social content to actionable personal data, is the foundation everything else is built on.
The @planner agent genuinely solves the coordination problem. It does not ask the group to agree in public; it collects each person's constraints privately, does the hard aggregation work invisibly, and presents a shortlist drawn from places the group actually wants to go. The result is a confirmed plan with a calendar entry, produced without a single argument in the chat.
We are also proud of how we approached design. Tana's iterative design process — working with Fotor's AI tools to generate and refine the UI while keeping human judgment at the centre of every decision — produced a Zymix-native visual language that felt considered rather than hacked together in a weekend. The nine category sticker illustrations on the bucket list landing page (Café, Restaurant, Bar, Activity, Culture, Shopping, and more) were each created in Fotor, giving the product a distinct, polished identity. Fotor was also used to produce the marketing material for BucketList, ensuring the visual story from social inspiration to confirmed plan was communicated consistently across the submission.
What we learned
The most important thing we learned is that planning is everything. Before we wrote any code, we invested in structure: detailed PRDs for the Bucket List feature and the Planner Bot, a sprint board with clear ownership, and a decision log that captured every significant choice and its rationale. Using Manus and the Notion MCP together meant that both our human team members and our AI agents were working from the same source of truth at all times.
That shared context made lane integration remarkably smooth. Because Jeff, Praya, and Tana each had a clearly scoped PRD and agreed data contracts, the frontend and backend could be built in parallel and snapped together without rework. The same was true for our AI agents — when the plan is detailed enough, the agent can execute its lane independently and the integration just works.
We also learned that structured LLM outputs are non-negotiable in a production-style pipeline. Enforcing strict JSON schemas for extraction, enrichment, and planner aggregation was what allowed us to wire AI outputs directly into our database and UI components without brittle post-processing.
What's next for BucketList
Beyond the hackathon, we want to leverage the embeddings we are already generating to power semantic search across the bucket list and improve recommendation scoring with vector similarity. We plan to move from our web emulator to a true native integration within the Zymix ecosystem, using their actual chat and social graph APIs. Real distance and travel time calculations between group members' locations and proposed venues will make the planner recommendations significantly more precise. Finally, we plan to add proactive reminders — automated nudges for limited-run events or pop-ups in a user's bucket list before they expire, so the "saved but never visited" problem is solved not just at the planning stage but throughout the entire journey.
Built With
- ensembledata-api
- fotor
- gemini-2.5-flash
- gemini-embedding-001
- github
- manus
- next.js
- notion
- perplexity-sonar-pro
- postgresql
- supabase
- swiftui
- tailwindcss
- typescript
- vercel
Log in or sign up for Devpost to join the conversation.