Inspiration
The world has become overwhelmingly screen-first. For most of us, that's invisible; we tap, scroll, and swipe without a second thought. But for elderly people and people who are blind or visually impaired, that same world is often simply inaccessible. Commodities the rest of us take for granted, like checking a bill, reading a notice, or staying on top of an inbox, become real barriers.
Email is where almost everything important lives now. Physical mail is rare; email is universal. But for elderly and blind users, an inbox is still a screen full of small text, menus, and things to navigate, and that makes even the most basic, essential information hard to reach.
That's why I built Gimme Updates: a platform that makes email accessible again, not by simplifying the screen, but by removing it entirely. Using CALL-E's calling agent, Gimme Updates reads your important emails to you over a simple phone call. No app, no interface, no screen to read. Just a call, the way people have always communicated.
What it does
Gimme Updates calls you once a day and reads your important emails aloud, one at a time, in plain language: no jargon, no screen, no scrolling. It goes through your inbox in priority order (bills and loan reminders before promotional junk) and, after each email, asks what you want to do about it: nothing, a reminder later, or a follow-up.
If you ask for a reminder, Gimme Updates remembers and calls you back at the right time to remind you, without you having to set anything up yourself. The whole interaction happens through natural conversation, powered by CALL-E: you just talk, the way you'd talk to a person reading you your mail.
How I built it
The app is a Next.js (App Router) project with a Drizzle ORM and SQLite data layer tracking users, classified emails, scheduled reminders, and call logs. Incoming emails are classified by an LLM (via OpenRouter) into category, urgency, a plain-language summary, and a due date, so the most important things surface first.
The core of the product is a single CALL-E task: a structured, adaptive phone call that reads through the day's prioritized emails, waits for the person's spoken response after each one, and returns a structured JSON result of which decisions were made, what to remind about, and when. A scheduled job (via cron) checks for due reminders and daily call times, and places follow-up CALL-E calls automatically when they come due, closing the loop from "email arrives" to "person is called back to be reminded," entirely hands-free.
For this hackathon build, the inbox is a seeded set of sample emails rather than a live Gmail connection, so the demo is reliable to run and try, but the classification and CALL-E integration work identically against a real inbox.
Challenges I ran into
- CALL-E's
result_schemavalidator rejects nullable union types (["string", "null"]), a JSON Schema pattern that's valid but unsupported here, which I only discovered mid-call. I reworked the schema to use optional fields instead of null unions. - Getting the digest call to feel natural rather than robotic took real iteration on the task prompt, especially around correctly calculating relative dates ("remind me in 2 days") into actual ISO dates without hallucinating years.
- I initially built against real Gmail OAuth, but hit an unrelated account suspension mid-build. Rather than lose more time, I made the deliberate call to swap to a seeded mock inbox, which let me focus my remaining time on making the actual CALL-E conversation genuinely good.
What I learned
That the phone call itself, not the surrounding app, is the actual product here. Every improvement that mattered most (task phrasing, pacing, how it waits for a response) happened inside the CALL-E task text, not the UI around it.
What's next for Gimme Updates
Real Gmail integration (read-only, consent-based) to replace the seeded inbox. A live "follow-up" call type that contacts the sender or company directly when a user asks. And a caregiver-facing view, so a family member can set up the daily call for someone else and see what's been handled.
Built With
- call-e
- drizzle-orm
- next.js
- openrouter
- sqlite
- tailwindcss
- typescript
- vercel
Log in or sign up for Devpost to join the conversation.