Inspiration
The most urgent message in my day can look exactly like every routine notification surrounding it.
A priority customer escalation might sit beside newsletters. A failed deployment might disappear into a crowded activity feed. Even when an alert reaches the correct device, it still asks me to stop what I am doing, open another app, gather context, and decide what to do.
I wanted a more direct interface for events that genuinely require attention. Instead of adding another notification, Kordy calls the person who can act. It explains what happened, provides the relevant context, and helps complete the response during the conversation.
The idea is simple: when something important happens, the phone call should already understand why it matters.
What it does
Kordy is a no-code event agent for creating call-based workflows in natural language.
I can describe a workflow such as:
When [email protected] sends a priority escalation, call me, summarize it, ask what I want to reply, then send my approved response.
Kordy converts the instruction into a persistent trigger and watches the connected source for matching events. When an event satisfies the trigger, Kordy gathers the relevant evidence and uses CALL-E to place a contextual phone call.
For Gmail workflows, Kordy can summarize the incoming message, ask what I want to say, and prepare a response. It sends the reply only after I explicitly approve it during the call.
The prototype supports Gmail, Vercel, Notion, Google Calendar, GitHub, Stripe, n8n, weather, SEC filings, earthquakes, NASA EONET events, foreign exchange rates, and Indian end-of-day stock data.
How I built it
I built the frontend with Next.js, React, Tailwind CSS, and shadcn/ui. A Hono API handles authentication, integrations, workflow creation, and application data.
PostgreSQL stores users, encrypted provider credentials, compiled triggers, source events, task runs, call reservations, and outcomes. A durable Bun worker processes Gmail Pub/Sub events, signed provider webhooks, polling results, and public data feeds.
I use OpenAI structured outputs to compile natural-language workflow descriptions and ground semantic matches against incoming events. Before invoking a model or creating a call, Kordy applies deterministic conditions such as sender, subject, label, project, event type, location, timing, and thresholds.
When a trigger matches, the worker prepares the context and asks CALL-E to place the call. CALL-E returns a structured result that Kordy records and, when explicitly approved, routes through the Gmail integration as a reply.
Challenges I ran into
The main challenge was making an asynchronous pipeline reliable. An event can begin in Gmail, pass through a webhook, enter the worker, match a trigger, reserve call capacity, and then depend on an external calling provider.
Provider notifications can be duplicated, delayed, or delivered out of order. I addressed this by storing source events and task runs with idempotency controls so repeated notifications do not automatically produce repeated calls.
Natural-language triggers created another challenge. A purely semantic system would be expensive and unpredictable, while a purely rule-based system would miss the user’s intent. I combined deterministic filtering with grounded semantic matching so obvious mismatches are rejected before model evaluation.
Interactive Gmail replies also required a strict safety boundary. Dictating a response is not sufficient authorization to send it, so Kordy requires explicit confirmation before sending any email.
Accomplishments that I’m proud of
I built an end-to-end workflow where I can describe an important event in plain language, connect a real source, receive a contextual phone call, dictate a Gmail response, and approve it before sending.
I am especially proud that the experience is backed by stored evidence and execution state instead of being a one-off scripted demo.
I also created a 64-scenario dry-run suite covering Gmail, Vercel, Notion, GitHub, Stripe, n8n, Calendar, weather, filings, earthquakes, natural events, foreign exchange, and Indian stocks. The tests reach the real call request-building boundary while intercepting transport so they cannot place billable calls.
What I learned
I learned that event-driven agents work better when observation, judgment, and action are separated.
Deterministic checks quickly reject events that clearly do not match. Models are most useful after that filtering step, when they can evaluate the meaning of a smaller and more relevant set of events.
I also learned that conversational actions need stronger confirmation rules than button-based interfaces. A spoken response can be incomplete or ambiguous, so explicit approval and structured call results make downstream actions safer and easier to audit.
Most importantly, I learned that the phone works well as an escalation interface only when the call contains enough context to justify interrupting someone.
What’s next for Kordy
My next step is deploying the API and worker behind a permanent public HTTPS endpoint so Gmail events and CALL-E callbacks do not depend on temporary development tunnels.
I also plan to replace the demo login with production user and organization access controls, add a real Slack connection, route acknowledgements back into team channels, and expand the supported actions.
Longer term, I want Kordy to support richer approval policies, shared escalation paths, and more ways to complete a workflow directly from the call.
Built With
- and
- api
- bun
- cloud
- css
- gmail
- hono
- next.js
- openai
- postgresql
- react
- tailwind
- typescript

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