Inspiration
Most people have blanked on someone's name halfway through a handshake, or met a contact again and forgotten what they promised last time. Bee already records and transcribes those in-person conversations, but it keeps that memory for you to look up later. It doesn't bring it back to you while the person is standing in front of you.
The same gap affects people with face-blindness (prosopagnosia), memory difficulties or social anxiety. For them, being reminded in the moment is the help that matters.
What it does:
SideKick listens to your live conversations through Bee on your Apple Watch. Within seconds it shows a card on your wrist:
- Who: name, role, organization
- How you know them: where you met
- Last time: when you last spoke and what about
- Open loops: promises you owe them, or they owe you
- Don't forget / avoid: things to bring up and topics to steer around
When it isn't sure who the person is, it asks you to confirm with one tap and learns from your answer. After the conversation it drafts a follow-up. Once you approve it, the follow-up is written back into Bee as a todo, so the loop closes inside Bee.
How I built it:
- Bee (
@beeai/cliNode library):- one live SSE stream each for
new-conversation,new-utteranceandupdate-conversation - neural search over past conversations
- facts search
conversations.getfor the last conversation with someonetodos.listfor open promisestodos.createto write the follow-up back
- one live SSE stream each for
- Amazon Bedrock (Nova Pro, Converse API): identifies the person from what's being said, writes the card, pulls out two-sided promises and drafts the follow-up.
- Backend: Node.js and TypeScript, with SQLite (
node:sqlite) for people, learned clues about them, and follow-ups.
Challenges I ran into:
- No speaker labels from Apple Watch: live utterances don't say who is speaking, so SideKick works out the person from what is said (greetings, introductions, topics) rather than from the voice.
- Utterances arrive out of order: "Hi Riya" sometimes arrived after later sentences. I re-sort each conversation as utterances come in.
- Speech-to-text spelling: the same name came through as both "Riya" and "Ria" in one conversation, so near-identical names are treated as one person.
Accomplishments that I'm proud of
- It works end to end on live Bee data: a real conversation produces a card on the wrist, and a follow-up todo appears in the Bee app.
- Bee is used in both directions: SideKick reads the live stream, search, facts and conversations, and writes todos back.
- It handles Bee's real Apple Watch data even without speaker labels.
- The name card appears almost instantly, and the full context follows a few seconds later.
- A real native watch app designed for a quick glance, not a phone screen squeezed onto a watch.
What I learned
- On the wrist, less is more. One glance should answer "who is this?" and "what do I owe them?"
- Live speech data is messy: out of order, unlabeled and spelled inconsistently. Designing for that from the start made SideKick much more reliable.
- Recording real Bee events and replaying them made both testing and the demo dependable.
What's next for SideKick
- Use speaker labels or a stable per-person voice ID from Bee, if Bee makes them available, to make recognition more accurate.
- A SideKick MCP server with tools like
who_is,open_loopsandprep_for_meeting, so AI assistants (Alexa+, desktop agents) can answer questions like "What do I owe Riya?" or "Brief me before my 3pm". - Start Bee recording from SideKick so there's a single app to open.
- A briefing card before scheduled meetings, not just during them.
- An accessibility mode for people with face-blindness or memory loss, with longer-lasting cards and gentler reminders.
Built With
- amazon-bedrock
- amazon-ec2
- amazon-linux
- amazon-nova
- amazon-web-services
- apple-watch
- aws-iam
- bee
- bee-cli
- caddy
- node.js
- ntfy
- sqlite
- swift
- swiftui
- systemd
- typescript
- watchos
- xcode
- xcodegen
Log in or sign up for Devpost to join the conversation.