Inspiration

ADHD can make starting a task harder than the task itself. Most to-do apps make that worse by showing a big list and expecting you to organize it yourself. We wanted something that reduces the first bit of friction: give one goal, get one clear next step, and keep the flow simple enough that it still works when your energy is low.

What it does

TinyTasks helps users turn a goal into a short, actionable plan. The web app generates a first step and a small set of follow-up steps instead of a giant checklist. WhatsApp lets users interact with the same plan away from their laptop: PLAN [goal] creates a plan, STUCK gives a smaller next move, and DONE records progress. The web app reflects those updates so the task stays in sync across both surfaces.

How we built it

Frontend: React, TypeScript, Vite, Tailwind, deployed on Vercel. Backend: FastAPI deployed on Railway, with MongoDB Atlas for persistence. Planning and nudges: Gemini for plan generation, re-entry prompts, and plan adjustments. WhatsApp: Twilio webhooks for inbound/outbound messaging. Sync: a lightweight Mongo-backed event feed that the frontend polls instead of using WebSockets. Reminders: Fetch.ai uAgents triggering scheduled reminder callbacks.

Challenges we ran into

The hardest part was keeping WhatsApp and the web app truly in sync. We had to link guest users across email, phone number, and saved plan IDs without adding full auth. We also ran into duplicate plan creation when WhatsApp commands and follow-up actions created multiple versions of the same task, so we reworked the flow to keep one canonical active plan per thread. Another issue was stale or vague WhatsApp context: short replies like “keep going” could drift into unrelated territory, so we tightened the command flow and grounded continuation replies in the linked saved plan. We also dealt with Twilio sandbox constraints, retry behavior, signature validation, and the usual Railway/Vercel CORS issues.

Accomplishments that we're proud of

We got the core cross-surface experience working: create a plan on the web, continue it over WhatsApp, and keep the same task state tied together. The onboarding flow now creates a persistent guest user without requiring auth, which made plan linkage much more reliable. We also ended up with a cleaner WhatsApp lifecycle than we started with: plan creation, reminders, nudges, and completion now map to the same saved plan instead of feeling like separate demos taped together.

What we learned

For this kind of product, state management matters as much as UI. A simple-looking chat interface becomes messy fast if plans, reminders, and session state are not all pointing at the same source of truth. We also learned that vague free-form chat is risky in a task app; explicit commands and grounded replies are often more useful than trying to make every message conversational. And for hackathon speed, polling plus a small event layer was much easier to make reliable than a more complex real-time setup.

What's next for TinyTasks

Personalized reminders based on user-defined focus windows Voice input so users can speak their tasks instead of typing Progress tracking and streaks to build positive momentum over time Multi-device sync and a mobile-first PWA experience Deeper Fetch.ai agent integration for proactive, context-aware coaching throughout the day

Built With

Share this project:

Updates