Tappy
Inspiration
Journaling has always been a powerful tool for reflection, but it felt frustratingly passive. I'd write about wanting to try that new restaurant, needing to cancel a subscription, or planning to look up job openings, then promptly forget about it all. The thoughts were captured, but nothing ever happened.
I wanted a journal that bridges the gap between thinking and doing. What if your journal could understand your intentions and actually help execute them? Not just another AI chatbot that talks back, but an assistant that quietly gets things done.
What It Does
Tappy is a personal journal where you write naturally about your day, and an AI agent identifies opportunities to help. When you mention wanting to try a new restaurant, Tappy can check availability. When you write about job hunting, it can surface relevant listings. When you vent about forgetting to cancel that gym membership, it can draft the cancellation request.
Example entry:
"Had a rough day at work. Sarah mentioned wanting to try that new Italian place downtown. Oh, and I keep forgetting to cancel that gym membership..."
Tappy detects:
- Restaurant intent → Searches for the restaurant, checks reviews
- Cancellation intent → Drafts a cancellation request for your inbox
All actions appear in your Inbox in real-time, ready for review.
How it Works
- User writes a journal entry in the rich text editor
- Gemini Flash analyzes the text to detect actionable intent
- If action is warranted, Browser Use Cloud executes the appropriate skill
- Results appear in the Inbox via real-time SSE updates
Tech Stack
| Layer | Technology |
|---|---|
| Frontend | Next.js 16, React 19, TypeScript, Tailwind CSS |
| Editor | Editor.js with custom warm terracotta theme |
| Backend | FastAPI (Python), async SQLAlchemy, SQLite |
| AI | Google Gemini 3.0 Flash for intent detection |
| Automation | Browser Use Cloud API for web task execution |
| Real-time | Server-Sent Events (SSE) for live inbox updates |
| Package Mgmt | Bun (frontend), uv (backend) |
Available Skills
- Job Search — Find tech job listings based on your criteria
- Weather — Get forecasts for any location
- News Search — Surface relevant articles
- YouTube Search — Find videos on topics you mention
- HackerNews — Get top posts from HN
- X.com Posting — Draft tweets
- Google Calendar — Create calendar events
- Amazon Cart — Add items to your cart
- Gmail Drafts — Save email drafts
Challenges We Faced
Browser Automation Reliability
Getting Browser Use to reliably execute tasks across different websites was tricky. Each site has its own quirks: dynamic loading, auth flows, rate limits. We built a robust skill system with formatters and error handling to gracefully handle failures and present useful results even when things go sideways.
Real-Time Updates
We wanted the Inbox to feel alive, new items appearing the moment they're created, not on refresh. Implementing Server-Sent Events (SSE) from FastAPI to React required careful state management. We built a custom useSSE hook and React Context to keep everything in sync without race conditions or stale data.
Conservative Intent Detection
The hardest prompt engineering challenge: making the AI act on clear intentions without being overly eager. Nobody wants their journal triggering Amazon purchases from an offhand mention. We tuned the planning prompt to be conservative: only acting when intent is unambiguous and the user would genuinely benefit.
What We Learned
- Browser automation is powerful but fragile: Building resilient skills means expecting failures and designing graceful fallbacks
- Real-time UX matters: The difference between polling and SSE is the difference between a tool and an experience
- AI agents need guardrails: The magic is in knowing when not to act
What's Next
- More integrations: Uber, DoorDash, flight booking, Spotify playlists, and more Browser Use skills
- Mobile app: Native iOS/Android experience for journaling on the go
- Approval workflows: Optional confirmation step before executing high-stakes actions
Built With
- browseruse
- fastapi
- gemini
- nextjs
Log in or sign up for Devpost to join the conversation.