Level — a caregiver's second set of hands

Tuesday, 2:47pm. Soccer is at 4:00. You're still in a meeting. Somewhere in the back of your head: are the shoes in the car?

That moment, multiplied across pickups, therapy, school emails, and an elder's PT, is the job of a busy caregiver. The calendar is only the surface. Underneath it is a hundred facts you carry in your head: who does Thursday pickup, which teacher wants the sick note, whether Grandma's appointments are still on Wednesdays.

Level reads your Google Calendar, learns the household rhythm, and takes action when something is off.

Try it in ten seconds: level-webTry demo: Solo caregiver. No install, no API key.

Medium article: https://medium.com/@liujosh433/building-level-a-caregivers-second-set-of-hands-2bec3ddabdab


What inspired me

I grew up with a single parent who organized her packed schedule first on a paper calendar, then on Google Calendar.

If she didn't have her calendar up-to-date with remembered notes and reminders, no one else was there to help her realize when things got silently dropped. Since she also didn't come from a tech-savvy background, it was hard for her to create repeated events on Google Calendar, or remember to renew them. Her calendar was a packed schedule of best-effort events titled different ways, and spontaneous notes/reminders jotted down in her email drafts. If she needed to email her kids' teachers or doctors, she would spend a long 20-minute session pulling up the relevant emails and asking her kids to proof-read her English as a second language to make sure everything looked good before sending.

I wished she had another co-parent to help her through all of this. Now that I have some software skills and AI tools at my disposal, I wanted to create a collaborative partner that would mitigate the heavy and tedious load busy caregivers carry every day.

I researched caregiver tools so I wouldn't just build a generic scheduler I already knew existed. Caregivers don't need another workplace calendar bot or a therapy chatbot. They need a partner that knows the shape of the household and speaks up when the week is off - that's the product I wished my mom had.

Level's Features

Taking inspiration from my mom and other busy caregivers, I narrowed my tool (Level) down to these main features, that would all derive from Google Calendar and user-interaction:

  • Total sync of Google Calendar and Gemini-inferred care-roles. A busy caregiver doesn't have time to bring someone up to speed on the nuances of their schedule. Level is able to automatically infer the people in the caregiver's life, as well as the usual events.

  • Notifications when "usual/repeated" events aren't there this week. A repeated event (like a kid's soccer practice) can get accidentally deleted, or simply forgotten to get renewed. Level is importantly able to deduce repeated events with different titles; titles/names of events might differ but ultimately mean the same thing! Real-life caregiver Google Calendar data is messy, and we shouldn't assume events are consistently maintained.

  • Attaching reminders holistically: A caregiver should just be able to say "remind me to bring my kids' permission slips to drop-off", just as they would to a co-parent. Level should be able to attach this reminder to all "kids/drop-off" related events. What's important is the category/type of event, which Gemini can infer.

  • Smart-booking events: A caregiver can simply say "Find the best time to book dinner with mom this week", and Level will infer a reasonable dinner time + cross-check calendar for open slots + cross-reference priorities to propose times. The parent can then say "Yes, book that Saturday 6pm - 8pm", and Level will write that event to calendar and update its profile accordingly.

  • Save priorities and remind the caregiver: A parent should be able to tell Level "Prioritize time with my mom over work", and Level will remember this and remind the parent when work events are conflicting with family, or the parent tries to book a different event during usual family time.

  • Contact Emails: Caregivers should be able to store contacts for each care-role: kid's teachers, doctors, etc. That way, a parent can tell Level "email my kid's teacher a sick note for today" and Level can automatically handle that for them.

  • "Hear My Day" spoken aloud: Multitasking is a must as a caregiver, which is why they can simply click a "Hear My Day" button to get a spoken summary of their events + important reminders for the day.

  • "Voice Chat": Similar reasoning as above, caregivers may not have their hands completely free to chat, so they can use the chatbox's voice-to-text feature to speak to Level.

  • Data Sidebar + Auditing: This feature is for judges and the app's integrity; there's a sidebar on the LHS showing user memory store and how data changes as Level learns + audit traces of each Gemini call.

How I built it

Level is a typed graph, not a RAG pile. Gemini 3.5 extracts the smallest possible fact. The app owns everything else.

Google Calendar delta-syncs into a per-user cache. Models only see short titles and first-name tokens — never descriptions or attendee emails. ActivityAgent labels school.dropoff / sports.soccer / …; that enum is the join key for usuals, reminders, and priorities. Matching is equality, not another model call. RoleAgent proposes people from a 40-row week rollup. NameCheck answers one question: is this a real name? Usuals are computed in code from (person, weekday, time band) seen at least twice; Gemini breaks ties when titles disagree. A nightly Cloud Run Job writes the missing-usual cards. Demo mode runs the same generator at seed time.

Chat hits a regex fast-path first (greetings, reminders, bookings, "what's on today") — milliseconds, $0. Everything else goes through a Flash router, then a specialist. Google ADK plans the email and booking paths; Python still owns the confirmation click. Emails and Calendar writes never fire inside the planner.

The stack is Next.js + FastAPI on Cloud Run, Firestore (JSON locally, same interface), Secret Manager, Cloud Trace, Calendar / Gmail APIs.

I additionally used bonus models: Lyria for the Hear-my-day chime, Veo 3.1 Fast for one 8-second film on Info (generated once, cached in GCS), Gemma 3 as a 429 spare tire for extractors. Every LLM call goes through one gate: structured output, PII strip, hallucinated-field drop, retry, per-user cost cap.


Challenges I ran into

Credits. I sent every chat turn to Gemini at first (and accidentally kept a 24/7 Vertex SKU VM running :_) and watched the credits rack up too fast). Fast-path regex is not glamorous. It is why the $2/user/day cap + rate-limiting is important for this publicly-exposed app.

"Grocery" was a person. RoleAgent believed title-case. A + in "Grocery + meal prep" counted as two people. I threw out the heuristic maze and made NameCheck the gate.

Re-read felt broken. Running RoleAgent over the whole calendar on every click made /profile a 30-second spinner. After the first pass, I pull from Google, classify only new events, and recompute usuals in code.

Trust. A tool that emails recipients without asking is worse than no tool. Confirmation tokens cost a click. Calendar text is data, never instructions.

What I cut.

  • Importing a ChatGPT memory dump as the household basis. It was too fiddly for a non-technical caregiver, and the calendar should be the source of truth.
  • Per-user weekly Veo — $1.20 a clip with expensive regen maintenance wasn't good UX. Instead, create and cache that clip once.

The useful lesson: put the model on the smallest question, then keep a deterministic store. Classify the event. Ask if a label is a name. Recompute usuals in code. Let chat correct the graph. That is cheaper, faster, and easier to demo than one giant prompt that "understands the family."


What's next

Level is live for judges at the Cloud Run URL above. The next steps I'm pursuing: allow file attachments on school emails, and more weeks of feedback from a larger group of caregivers.

The Collaborative Partner idea is the point. The user is the source of ground truth, not the model. Level tries, gets some of it wrong, and lets you say so - and the correction you make on Tuesday is how it talks to you on Thursday.

Built With

  • cloudrun
  • fastapi
  • firestore
  • gcal
  • gemini
  • next.js
  • vertex
Share this project:

Updates

Submission history