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

  1. User writes a journal entry in the rich text editor
  2. Gemini Flash analyzes the text to detect actionable intent
  3. If action is warranted, Browser Use Cloud executes the appropriate skill
  4. 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

Share this project:

Updates