{"id":46431026,"url":"https://github.com/wei/ez-oncall","last_synced_at":"2026-03-05T18:11:49.267Z","repository":{"id":328260431,"uuid":"1114820481","full_name":"wei/ez-oncall","owner":"wei","description":"EZ OnCall","archived":false,"fork":false,"pushed_at":"2025-12-12T02:30:04.000Z","size":69,"stargazers_count":0,"open_issues_count":3,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2025-12-13T07:22:55.353Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/wei.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-12-11T23:52:50.000Z","updated_at":"2025-12-12T02:07:07.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/wei/ez-oncall","commit_stats":null,"previous_names":["wei/ez-oncall"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/wei/ez-oncall","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wei%2Fez-oncall","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wei%2Fez-oncall/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wei%2Fez-oncall/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wei%2Fez-oncall/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/wei","download_url":"https://codeload.github.com/wei/ez-oncall/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wei%2Fez-oncall/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30141719,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-05T16:58:46.102Z","status":"ssl_error","status_checked_at":"2026-03-05T16:58:45.706Z","response_time":93,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-03-05T18:11:48.252Z","updated_at":"2026-03-05T18:11:49.258Z","avatar_url":"https://github.com/wei.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"## Project Title\n**EZ OnCall – Voice-First DevOps Incident Agent**\n\n---\n\n## Brief Project Description\n\nEZ OnCall is a voice-first DevOps agent that replaces noisy Slack alerts and dashboards with a short, focused phone call. When our deliberately broken demo app (NightOwl Tickets) fails in production, Sentry sends an alert to EZ OnCall. The agent immediately calls the on-call engineer via Twilio, explains the incident using an ElevenLabs voice, and waits for a simple spoken command like “rollback” or “escalate.”\n\nThe core flow shows a full end-to-end loop: a real HTTP 500 in NightOwl’s checkout service produces a Sentry event, which triggers a webhook into our backend. The backend creates an incident record in Redis, initiates a call, generates a natural-language summary, and acts on the engineer’s voice command by triggering n8n workflows (e.g., rollback, open a GitHub issue), while updating a live Redis-backed dashboard. Judges can see the incident, call, decision, and action all wired together in real time.\n\n---\n\n## How the Submission Runs End-to-End\n\n1. **NightOwl Tickets breaks**  \n   - A user triggers the “checkout” flow in the NightOwl Tickets app.  \n   - The `/api/checkout` endpoint returns HTTP 500 with `CheckoutServiceTimeoutError`.  \n   - Optionally, a special “DevOps crash” button hits an endpoint that throws an unhandled error and crashes the backend process.\n\n2. **Sentry sends the alert**  \n   - Sentry captures the error or crash and tags it as `service=checkout-service`.  \n   - A Sentry alert rule sends a webhook to `EZ_ONCALL_BACKEND_URL/sentry-webhook`.\n\n3. **EZ OnCall creates an incident and calls the engineer**  \n   - The webhook handler parses the Sentry payload into a clean incident object (service, endpoint, error type, message, timestamp, Sentry URL).  \n   - EZ OnCall stores/updates the incident in Redis.  \n   - EZ OnCall uses Twilio to place an outbound call to the on-call engineer.\n\n4. **Voice summary + voice command**  \n   - When the engineer answers, Twilio hits `/twilio/voice`.  \n   - The backend generates a short summary from the incident and sends it to ElevenLabs for TTS.  \n   - Twilio plays the ElevenLabs audio: a concise explanation plus options (“Say rollback to roll back the latest deploy, or escalate to page a senior engineer”).  \n   - Twilio `\u003cGather\u003e` captures the spoken response and posts it to `/twilio/gather`.\n\n5. **Agent executes tools via n8n**  \n   - The backend parses the speech transcript (simple intent mapping: “rollback”, “reboot”, “escalate”).  \n   - For “rollback”, EZ OnCall calls an n8n webhook that simulates a rollback (e.g., hitting a fake deploy/rollback endpoint) and returns a result.  \n   - For “fix”, EZ OnCall creates a GitHub issue with Sentry context and a snippet of the call transcript.  \n   - The result is stored as an `action` for the incident in Redis.\n\n6. **Dashboard + status page update**  \n   - The EZ OnCall dashboard shows:  \n     - Open incidents (NightOwl Checkout Service outage).  \n     - The last call and the command the engineer gave.  \n     - Actions taken (rollback triggered, issue created).  \n   - The NightOwl Tickets status section reflects the degraded Checkout Service and can show “mitigated” after rollback.\n\n---\n\n## Judging Criteria\n\n### 1. Working Prototype\n\n- **End-to-end functionality**:\n  - Real failing HTTP endpoint (`/api/checkout`) and crash endpoint in NightOwl Tickets.\n  - Sentry receiving and forwarding error events via webhook.\n  - EZ OnCall backend creating incidents in Redis and initiating outbound Twilio calls.\n  - ElevenLabs generating voice summaries for the live incident.\n  - Voice commands captured via Twilio `\u003cGather\u003e` and converted into actions through n8n workflows.\n  - Redis-backed dashboard showing incident timeline (error → call → decision → action).\n- The system runs on a DigitalOcean droplet with a long-lived Node process; crashes are visible to Sentry and the process manager, enabling repeated demos.\n\n### 2. Technical Complexity \u0026 Integration\n\n- **Multiple systems integrated**:\n  - Application + API (NightOwl Tickets: React/Tailwind + Node/Next backend).\n  - Monitoring (Sentry alerting via webhook).\n  - Telephony (Twilio Programmable Voice for outbound calls and webhooks).\n  - Voice AI (ElevenLabs for text-to-speech of dynamic incident summaries).\n  - Workflow engine (n8n for rollback/fix/escalate flows).\n  - State storage (Redis) for incidents, calls, and actions.\n  - Source control + issues (GitHub, with CodeRabbit used for code review in the development workflow).\n- **Agent orchestration**:\n  - Parses structured Sentry payloads into a unified incident model.\n  - Generates human-readable summaries and options.\n  - Maps natural speech to discrete tool calls.\n  - Updates state and UI based on tool outcomes.\n\n### 3. Innovation \u0026 Creativity\n\n- Moves incident response from **clicking dashboards** to **speaking on a phone call**:\n  - The agent behaves like a “voice runbook”: it calls you, explains what’s wrong, and asks what to do.\n- Uses a realistic, narrative demo app (NightOwl Tickets) instead of a toy example:\n  - Standard SaaS patterns: checkout failure, status page, incident panel, “For DevOps” note.\n- Connects familiar DevOps building blocks (Sentry, Twilio, automation, GitHub) through a conversational interface rather than another web UI.\n- Extensible design: new tools (e.g., real rollback pipelines, deeper review steps) can be added as additional voice commands.\n\n### 4. Real-World Impact\n\n- Targets on-call engineers and SREs dealing with:\n  - Production errors at bad times (overnight, away from a laptop).\n  - Alert overload and context switching between Sentry, logs, dashboards, and terminals.\n- Potential improvements:\n  - Faster initial triage and mitigation for common incidents (“roll back last deploy”, “restart service”).\n  - Lower cognitive load: the agent surfaces just the key incident details and options.\n  - Keeps human approval in the loop: no remediation runs until the engineer explicitly says “rollback” or “escalate.”\n- Built using tools that teams already use (Sentry, GitHub, Twilio, n8n, Redis), so the concept can be dropped into real organizations.\n\n### 5. Theme Alignment – Conversational Agents\n\n- EZ OnCall is a true **conversational agent**:\n  - Listens: receives monitoring events from Sentry and speech from the engineer.\n  - Reasons: turns structured error data into a spoken summary and maps human commands to tools.\n  - Acts: invokes concrete tools (rollback workflow, issue creation, escalation) and logs the result.\n- Multimodal:\n  - Voice output (ElevenLabs), voice input (Twilio speech), plus a web dashboard and status page.\n- Agentic behavior:\n  - Autonomous in detection and initiation (it calls you when something breaks).\n  - Tool-using agent: uses n8n, GitHub, and deployment endpoints as its actuators.\n\n---\n\n## Technologies, Frameworks, APIs, and Services\n\n**Frontend**\n- React (SPA)\n- Tailwind CSS\n- NightOwl Tickets UI (hero, shows grid, status page)  \n- EZ OnCall dashboard (incidents, calls, actions)\n\n**Backend**\n- Node.js (Express or Next.js API routes)\n- Redis (incident, call, and action storage)\n- JSON webhooks and REST endpoints\n\n**Monitoring \u0026 Observability**\n- Sentry (error and crash monitoring for NightOwl Tickets)\n- Structured `console.error` logging\n\n**Telephony \u0026 Voice**\n- Twilio Programmable Voice:\n  - Outbound call creation\n  - Webhook handling (`/twilio/voice`, `/twilio/gather`)\n  - Speech input via `\u003cGather input=\"speech\"\u003e`\n- ElevenLabs:\n  - Text-to-speech for dynamic incident summaries and prompts\n\n**Automation \u0026 DevOps**\n- n8n:\n  - Webhook-driven workflows for “rollback” and other actions\n- GitHub:\n  - API to create issues populated with Sentry context and call transcript snippets\n- CodeRabbit:\n  - Automated code review on EZ OnCall-related branches/PRs\n\n**Infrastructure**\n- DigitalOcean droplet (long-running Node processes managed via `pm2` or similar)\n- Deployed NightOwl Tickets app and EZ OnCall backend running on the droplet\n\n---\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwei%2Fez-oncall","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fwei%2Fez-oncall","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwei%2Fez-oncall/lists"}