Inspiration: I live alone, far from my family, and my days are swallowed by classes, meetings and deadlines. By night there’s nobody to tell about it, and the small promises I said out loud (“I’ll call Mom back”, “I need to book the dentist”) are gone by morning. I wanted something I could just talk to at the end of the day that would listen like a diary and quietly remember what I said I’d do.
What it does: Hearth is an end-of-day voice diary for Alexa+. You talk freely, and it acknowledges what you said in a sentence or two, with no advice, no therapy and no crisis-support scripts. It also pulls anything you promised or need to do out of ordinary speech, with due dates resolved from phrases like “tomorrow” or “by Friday”, into a to-do list. Later you can ask “What’s due tomorrow?” or “What’s the most important thing right now?” (it explains why, for example “because it’s 5 days overdue”), or say “I just called my sister” and it crosses off the matching item by meaning. It also notices patterns across days, as observations only.
How I built it: A self-hosted MCP server (official Python SDK 2.3.0, Streamable HTTP, protocol 2026-07-28) exposes six tools: log_journal_entry, get_commitments, prioritize_today, complete_commitment, add_commitment and get_reflection. Amazon Bedrock (Converse API, Claude Haiku 4.5) extracts commitments, tags mood and themes, and writes acknowledgements and reflections under strict “acknowledge, never advise” instructions. Prioritisation is deterministic and explains itself, storage is SQLite, and an offline fallback keeps everything working without AWS. Because I don’t have a device, the repo includes an Alexa+ simulator web app. It uses Bedrock tool-use to choose a tool from the server’s live schemas, calls the real MCP server as an MCP client, and shows every tool call.
Challenges I ran into: A zero Bedrock quota. A new AWS account returned throttling errors for every model until I requested a quota increase, and the error never said why. The model was bad at dates. It sometimes mapped “by Friday” to Saturday, so now the model only returns my exact words (“by Friday”) and code works out the date. Messy real speech. Browser dictation dropped words, and the simulator’s microphone picked up Alexa’s own reply. I fixed it with a fresh recognition session per turn. Wrong tool choices. A rant containing promises was once routed to “add one item”, and “I talked to my sister” wasn’t recognised as finishing a call. I added guards and tests for each case. Accomplishments that I’m proud of An end-to-end flow that works from natural speech to the right dates, the right priority and the right item crossed off. 19 tests, including one that boots the server and drives it over Streamable HTTP with a real MCP client. A clear product boundary: it acknowledges, remembers and notices, and never advises. I built and shipped the whole thing inside the hackathon window, and I’m the kind of person it was made for.
What I learned: Use the model for language and code for facts: dates, matching and ranking are more reliable in code, and the model is better at warmth. I also learned to test with messy, spoken phrasing instead of tidy sentences, and that guardrails should be enforced in code as well as in prompts.
What’s next for Hearth: Register it as a real Alexa+ add-on (I haven’t done that step yet) and add account linking. Proactive nudges, such as an evening prompt and a ping when something goes overdue. Local-first or encrypted storage, since a diary is personal. Support for more than one user, and a gentler weekly pattern summary.
Built With
- alexa
- alexa-plus
- amazon-bedrock
- amazon-web-services
- boto3
- claude
- docker
- html
- javascript
- mcp
- model-context-protocol
- pydantic
- python
- sqlite
- starlette
- uvicorn
- web-speech-api
Log in or sign up for Devpost to join the conversation.