DEV Community

Vineet Negi
Vineet Negi

Posted on

I built an app to help myself end the day without spiraling. Day 4 of 30. 🌿

11:47 PM. Again.

I was lying in bed, staring at the ceiling, running the day on loop.

The meeting I should’ve pushed back on. The message I left on read. The three tabs of “I’ll think about this later” that quietly piled up.

I’ve tried the things. Journaling apps that felt like homework. Meditation timers that felt like a second job. Notion templates with seventeen sections I abandoned by day three.

What I actually wanted was something that took 60 seconds, left me with a small, quiet gift, and then got out of the way.

So on Day 1 of the MeDo hackathon, I decided to just build the thing.

The result is Evengood. It’s live here: https://app-b3tuv7opfegx.appmedo.com/

This is the story of the four days it took to go from “60-second voice note” to “a week that remembers you.” Including the three disasters that almost made me ship nothing.


What Evengood actually does

One screen. A soft lavender-to-peach gradient. One prompt:

How was today?

You tap once. You talk for up to 60 seconds — or type instead if you’re somewhere quiet.

Then Evengood does four small things:

  1. It holds space for a few seconds (now with a gentle “writing your tomorrow…” line, more on that in a minute).
  2. It plays back a calming Tomorrow prompt in a soft TTS voice — not advice, not a to-do, just one small thing to notice tomorrow. Things like “Notice the way the steam rises and curls from a warm cup.”
  3. It paints you a watercolor keepsake of the feeling behind your day using the Kling image plugin.
  4. It drops a dot into a 7-day streak ribbon, so you come back tomorrow.

No login. No account. Nothing saved to a server. Just your browser, your 60 seconds, and one tiny thing to notice tomorrow.


The stack (and why each piece)

Piece What it does Why I picked it
MeDo Full-stack scaffolding, routing, deploy I didn’t want to spend day 1 on Vite config
Speech-to-Text plugin Turns the 60-sec voice note into text Whisper-grade, no API key juggling
LLM (2 calls) One for the Tomorrow prompt, one for the theme word Split keeps each call small + retries cheap
Text-to-Speech plugin Plays the Tomorrow prompt back in a soft voice The voice is the whole feel of the app
Kling image plugin Watercolor keepsake card Softer than DALL·E, fits the palette
Tailwind + Playfair Display + Inter The visual calm Serifs make reflection feel like reflection
localStorage Keeps reflections + keepsakes, keyed by ISO date No DB, no account — your week lives in your browser

Total backend code I wrote myself: zero lines. MeDo’s agent wired the plugin calls and I focused on the feel.


Three disasters

Disaster 1: The silent 15 seconds

Day 2, first real user test. I handed my phone to a friend, she talked for 45 seconds about her day, tapped submit…

and the screen went silent. A soft spinner. Ten seconds. Twelve seconds. Fifteen seconds.

She looked up and said: “Did it break?”

It hadn’t. The TTS + watercolor were cooking in the background. But in a reflection app, silence reads as “we lost your thoughts.” That’s the exact opposite of what I was trying to build.

đź’ˇ Lesson: in a calm app, every second of silence has to feel intentional. Silence without a cue reads as a bug, not peace.

Fix (shipped Day 4): During the wait, the screen now says “writing your tomorrow…” in soft Playfair italic, with “(usually about 10 seconds)” underneath at 60% opacity. Same wait. Completely different feeling.

Disaster 2: The keepsake that spoke Mandarin

Day 3. Everything was working. I was happy.

Then a fellow hackathon builder flagged a bug: the LLM was occasionally slipping Chinese characters into the keepsake text for English input.

The model I’m using has a multilingual base. Every few calls, it would decide today was a Mandarin day.

💡 Lesson: multilingual models don’t need you to ask for another language — they just vibe into one. You have to actively clamp the output.

Fix (shipped Day 4): A strict English-only system instruction + a CJK-unicode validator that re-generates the response once if any non-Latin script is detected. Logs the retry to the console so I can see how often it happens.

Disaster 3: The streak that lied

The 7-day streak ribbon under YOUR WEEK was gorgeous. Seven little dots. One pulsing for today.

And it did absolutely nothing.

Tap a past dot? Nothing. Hover? Nothing. It was pure decoration. Which, in an app whose entire emotional promise is “the week is building you something,” felt like a lie.

💡 Lesson: if you’re going to visualize continuity, the visualization has to be a door, not a sticker.

Fix (shipped Day 4): Tap any filled dot → the reflection text from that day slides in on top, the Keepsake Card (tomorrow prompt + watercolor) below, little back arrow to return. Every reflection is persisted in localStorage keyed by ISO date, so the week actually accumulates. The streak finally does what it was pretending to do.


What I learned about building small things

A journaling app is mostly feel. The LLM does 5% of the work. The other 95% is:

  • The soft gradient.
  • The serif on the prompt.
  • The breathing animation on the spinner.
  • The fact that nothing is saved to a server.
  • The one small thing to notice tomorrow, instead of a list of things to fix.

I could have spent Day 4 adding “emotional trends” charts, or a share-as-long-image export, or an AI coach tab. All impressive. None of it would’ve fixed the three things that actually made the app feel broken.

đź’ˇ The best Day-4 features are usually the ones that make Day 1 finally feel finished.


Try it (60 seconds, no account)

👉 https://app-b3tuv7opfegx.appmedo.com/

Talk or type for a minute about your day. You’ll get back one small thing to notice tomorrow, a watercolor of the feeling behind it, and a dot on your week.

If it leaves you slightly calmer than it found you, I’ve done my job.

And if you’re also building something small for the MeDo hackathon — drop your link in the comments, I’ll genuinely try it. The builders on this one are absurdly good.

🌿

Built with MeDo. Day 4 of 30.

Top comments (0)