Inspiration

Errands and small tasks live in too many places, a text to yourself, a sticky note, a mental list you re-run every morning. We wanted a single place you could just talk to: dump everything on your plate in plain language, and have it get organized, dated, and synced to your actual calendar without you touching a form.

What it does

Errand Concierge is a chat-based agent that parses errands out of whatever you type, tracks their status (pending, done, cancelled), lets you reschedule or complete things with natural phrases like "push the dentist to Friday," and syncs everything to Google Calendar automatically, creating, updating, and deleting events as your errands change. A Trash tab keeps a timestamped log of anything you delete, and the sidebar lets you manage errands directly without going through chat at all.

How we built it

The agent runs on the Strands Agents SDK, calling AWS Bedrock through a custom OpenAI-compatible endpoint (Bedrock Mantle) with the openai.gpt-oss-120b model, since our AWS account's classic Bedrock runtime access was blocked. Five tools: add, list, reschedule, complete, cancel are exposed to the agent, backed by a FastAPI server and flat JSON file storage. Google Calendar sync runs as a set of plain helper functions called inside those tools, using a single-user OAuth token stored locally. The frontend is hand-built vanilla HTML/CSS/JS with no framework.

The backend deploys to Railway and the frontend to Vercel, connected over a plain REST API with CORS enabled between them.

Challenges we ran into

Three real bugs shaped a lot of the build. First, the agent kept miscalculating actual calendar dates itself instead of trusting the date parser, fixed by having it pass relative phrases like "next friday" straight through to the tools untouched, rather than ever converting them to an explicit date on its own. Second, since the sidebar can change errands without going through the agent at all, the agent had to be explicitly told to always re-fetch the live errand list rather than trust its own conversation memory, which also caused a subtler bug where it would refuse to re-add an errand it remembered adding earlier, even after that errand had since been deleted through the sidebar.

Deployment surfaced its own set of problems: a missing requirements.txt caused the first Railway deploy to crash outright, a circular import between our Calendar helper files caused a second crash, and a batch of environment variables that had accidentally been set to their own variable names instead of real secret values caused Google OAuth and Bedrock calls to fail silently with confusing errors. On the frontend side, our static assets were referenced under a /static/ path that only existed locally through our own backend's file-serving setup, Vercel needed an explicit rewrite rule to match. We also caught a real security issue along the way: a hardcoded API key sitting in a test script got flagged by GitHub's push protection before it ever reached a public repo, which we treated as compromised and rotated immediately, along with resetting our git history to make sure it wasn't recoverable from an earlier commit.

Accomplishments that we're proud of

Getting real, working Google Calendar sync in place, not just a to-do list that looks like it syncs, but actual event creation, updates on reschedule, and deletion on cancel, all triggered silently from natural chat. We're also proud of how the agent handles ambiguity around dates and stale state, two problems that are easy to get subtly wrong in an agent-driven app and that we caught and fixed through real testing rather than assuming they'd work. And catching a real exposed secret before it went public, then properly cleaning git history instead of just patching over it, felt like the right instinct under time pressure rather than the easy shortcut.

What we learned

Real deployment friction, mismatched local vs. hosted file paths, environment variables that silently hold the wrong value, git history that outlives a "fix", cost far more time than the actual agent logic did. Treating any exposed secret as compromised immediately, rather than assuming it's fine because "it's just a demo," turned out to matter in practice, not just in theory.

What's next for Errand-Concierge

Multi-user support is the clear next step, real accounts and per-user Calendar connections instead of the single shared token the demo uses now. Beyond that: a real database instead of flat JSON files so data survives redeploys, configurable timezones instead of the hardcoded one we shipped with, and smarter due-date handling for recurring errands like weekly bills or monthly appointments.

Built With

Share this project:

Updates

Submission history