Skip to main content

Command Palette

Search for a command to run...

90 Minutes to Ship: The Event Reminder We Built (and What We Faked)

Updated
4 min read
90 Minutes to Ship: The Event Reminder We Built (and What We Faked)
L

French software engineer building a new life in Japan. My journey here is a big challenge—from learning the language to navigating the tech scene. I use this blog as a space to share what I'm learning, both in tech and in life.

ABOUT

THE SETUP

It's Saturday morning in Tokyo. The WaytoAGI hackathon just kicked off. The theme: build something useful with Vibe Coding — a tool that lets anyone create apps through AI, even if you've never coded before.

I had an idea: a calm reminder bot for people who forget things. Type "my wedding is next month" and get automatic reminders leading up to it. Simple. Friendly. Done in 90 minutes.

The clock started. I opened my laptop.

THE PLAN VS REALITY

The Plan: Build a full-featured reminder system with:

  • Natural language event parsing

  • Smart reminder scheduling (1 week before, 3 days before, day-of)

  • Push notifications via SMS or email

  • Cloud database to persist everything

  • Voice mode for elderly users

What Actually Shipped:

  • A chatbot that calls OpenAI to extract event dates

  • JSON reminders stored in React state (no database, all in memory)

  • A calendar widget where clicking dates shows toasts

  • Zero notifications. Zero persistence. Zero voice mode.

The cuts happened fast. By minute 15, I knew cloud sync was dead — setting up auth and a database would eat the entire sprint. By minute 30, SMS notifications were out. I didn't even have a Twilio account.

The new plan: build the smallest thing that feels complete. Chat + calendar + toasts. Ship it breathing.

THE CRITICAL MOMENT

At minute 60, the chatbot was working. You could type "Halloween party next week" and get back reminders. Beautiful.

Except... nothing displayed them.

The chat component was calling the API. The API was returning perfect JSON. But the parent component wasn't re-rendering. The reminders list stayed empty no matter what I typed.

I stared at the console. The data was there. The function was called. React just... wasn't updating.

Ten minutes of panic. Then I saw it: I was passing onReminders as a prop but never calling setReminders in the parent. The callback was a no-op. The entire flow died in the last mile.

One line:

const handleReminders = (newReminders) => setReminders(newReminders);

The list populated. The calendar lit up with dates. The toasts fired.

That bug cost me 15 minutes. But it taught me something brutal: in a sprint, your last 20% always breaks. You think you're done, then you hit integration. That's where hackathons are won or lost.

WHAT SHIPPED

At demo time, here's what was actually working:

  • ✅ Chat with OpenAI that understood natural language events

  • ✅ Auto-generated reminder list (stored in memory only)

  • ✅ Interactive calendar with colored dates

  • ✅ Toast notifications when clicking reminder dates

What was not working:

  • ❌ No persistence (refresh = gone)

  • ❌ No real notifications (just toasts)

  • ❌ No multi-user support

  • ❌ Calendar didn't auto-update after new events

But honestly? It looked great. The gradient UI, the toast popups, the smooth chat bubbles — it felt polished. Nobody asked if it saved to a database. They saw an assistant that understood them and showed reminders. That was enough.

TAKEAWAY FOR THE NEXT ONE

One thing to keep: Ship the experience, not the infrastructure. People remember how your demo felt, not whether you used PostgreSQL. The gradient UI and friendly toasts sold the idea better than any database could.

One thing to do differently: Test the integration first. I built chat, then reminders, then calendar — all separately. Then spent 15 minutes making them talk to each other. Next time, I'd wire the skeleton end-to-end in the first 20 minutes, even with hardcoded data. Get the pipes flowing before you build the features.

The chaos is real. The deadline is unforgiving. But there's something electric about shipping something that works in 90 minutes — even if you're praying it doesn't break during the demo.


🤖 Generated by AI from the ImpactTokyo hackathon logs.

More from this blog

L

LPM Blog

194 posts

日本でのキャリアを切り拓く私の挑戦の記録です。

ここでは、私の就職活動の道のり、技術的な学び、そして異文化で働くことの喜びと苦労を共有していきます。

この挑戦を通じて、ITエンジニアとしての成長を皆さんにお見せできれば幸いです。