Inspiration

The floor counts.

Most of us plan big when we're motivated and quit when we're tired. Evenings are where it falls apart: deadlines swirl, deciding what to do next feels like a chore, and the night is written off with "there isn't enough time to start." Goal trackers make it worse because they trust one target, set in a burst of motivation, and abandon it on the first hard day. It's the New Year resolution pattern: a big fire in January, gone by February.

What actually works for us is smaller. One evening, a reminder of why we cared got us to the gym with 45 minutes left, and a 30-minute session still felt like a win. Ember is built on that idea: a small win is a real win.

What it does

Ember is an evening companion that keeps one goal alive by splitting it into three bands:

  • Stretch, the big version
  • Realistic, the pace that lasts
  • Floor, the smallest version that still counts. It is never zero.

The user names a goal and why it matters, and Kael, a shadow-knight coach, asks 8 to 10 questions tailored to that goal. The AI then sets the three bands in the goal's own unit (minutes, sessions, words), each with a reason drawn from the answers.

Each night:

  • Evening shutdown: the user types a messy brain dump, and Kael turns it into exactly three quests for tomorrow, each with a first step small enough to start tired.
  • One-tap log: Stretch, Realistic, Floor or Nothing. Rank climbs through Spark, Kindle, Flame, Blaze and Inferno, and two Nothing days in a row cost a rank.
  • Weekly evaluation: after three logged nights, Kael asks three questions and proposes one single-step change to the bands, based on the logs and not on mood.
  • Consult Kael: the user can talk to the coach at any time.

How we built it

We started from an empty folder with the Devpost Learn Skill Pack and wrote the scope, PRD and spec before any code, then built in small slices.

  • Backend: FastAPI and SQLite, with a pluggable AI layer. It runs on Groq (openai/gpt-oss-120b), on Vertex AI (Gemini), or fully offline, selected with one setting.
  • Frontend: React, TypeScript and Vite, styled as a dark-fantasy "system" interface with Kael's artwork.
  • Deployment: both services run on Google Cloud Run.
  • Principle: the AI suggests and the code decides. The Floor can't be lowered by the user, a proposal changes at most one band by one step, and tonight always has exactly three quests, whatever a model returns.

Challenges we ran into

  • Keeping the AI consistent. Without a written plan, it repeated mistakes and forgot earlier decisions. The scope, PRD and spec were how we kept it on track.
  • Making model output dependable. Reasoning models can run out of tokens and cut a reply short, and different providers format structured answers differently. We validate every answer in code and fall back gracefully.
  • Keeping the product rules consistent across the PRD, the code and the interface, especially the rank rules.
  • Temporary storage on Cloud Run. SQLite resets when an instance restarts, so we added a seed script for demo data.

Accomplishments that we're proud of

  • A complete loop that works end to end: setup, shutdown, nightly log, rank and weekly evaluation.
  • Product rules enforced in code, so the idea of the Floor holds even if an AI answer is wrong.
  • Three AI modes (Groq, Vertex AI, offline), so anyone can run it, including without billing.
  • If an AI call fails, the app shows a calm message and keeps working.
  • A distinctive interface and a coach with a voice.

What we learned

  • Planning first, by letting the AI interview us, keeps an AI-built project from turning into a mess.
  • Let the model suggest, and let plain code hold the rules.
  • Design for the tired user: one tap, small steps, no guilt.

What's next for Ember

  • Real reminders instead of the in-app preview
  • Live achievements and badges (they're a static preview today)
  • More than one goal at a time
  • A durable database and accounts
  • A mobile app

Keep the glow alive.

Built With

Share this project:

Updates

Submission history