Inspiration
Life admin—scheduling, reminders, organizing—often feels overwhelming. I struggle to keep track of appointments, forget to post parcels and juggle work and personal calendars. I wanted an assistant that feels like a helpful teammate: you talk naturally, and it handles the details. Amazon Nova’s reasoning and tool use made it possible to build that kind of agent.
What I Learned
- Bedrock Converse API — How to use tool use (function calling) with Nova 2 Lite, including multi-turn tool loops and structured tool results
- iCloud CalDAV — How to integrate with Apple Calendar via CalDAV (tsdav) so reminders sync to iPhone with notifications
- Multi-agent design — How to frame a single model as coordinating multiple “agents” (Scheduler vs Organizer) through prompts and tool routing
- Proactive AI — How to make an agent proactive (e.g., fetching today’s schedule when the user says “what’s up?”) instead of only reacting to commands
How I Built It
Navi is a Next.js 14 app that talks to Amazon Nova 2 Lite through the Bedrock Converse API. The flow is:
- Chat UI — User sends a message; the API forwards it to Bedrock with a system prompt and tool config
- Tool use loop — Nova decides when to call tools (
create_reminder,get_today_schedule,list_upcoming_events,list_reminders). The server runs the tools (e.g., CalDAV for Apple Calendar) and sends results back to Nova - Apple Calendar — Reminders are created as iCloud events with VALARM for iPhone notifications. Calendar reads use
fetchCalendarObjectswith a time range to show today’s or upcoming events - Accessibility — ARIA labels, roles, and keyboard support so the chat works well with screen readers
The system prompt describes Navi as coordinating a Scheduler Agent and Organizer Agent, so Nova routes requests to the right tools.
Challenges
- Converse API format — The Converse message format differs from simple chat; handling tool-use blocks and tool-result messages required careful mapping
- iCal parsing — Reading events from CalDAV meant parsing iCal (VEVENT, DTSTART, DTEND) and handling different date formats
- Proactive behavior — Getting Nova to call
get_today_scheduleon greetings like “what’s up?” needed clear tool descriptions and prompt instructions
Built With
- amazon-bedrock
- amazon-nova-2-lite
- aws-sdk
- next-js
- node.js
- react
- typescript


Log in or sign up for Devpost to join the conversation.