Back to Projects
demoFull Stackbackendinfra

Uplink — An Outage Agent That Diagnoses, Repairs and Calls Your Provider

Built in one day at the Devin Hackathon. When your internet dies, Uplink diagnoses it on-device, fixes what it can, and calls your provider for you — even while the house is still offline.

2026-10 — 2026-10
Uplink — An Outage Agent That Diagnoses, Repairs and Calls Your Provider

Key Highlights

  • Built in one day at the Devin Hackathon, Hackerhouse @ GT (Oct 24, 2026)
  • Diagnoses the fault on the laptop; a local Llama 3.2 3B explains it in plain English, only during an outage
  • An AI voice agent calls the provider with the evidence and comes back with a ticket, cause, ETA and credit
  • Works with no internet: a Cloudflare watchdog places the call after 20 s of silence, with 0 duplicate calls in rehearsal
  • Devin's commits were ~73% of the code: five parallel build sessions, plus the repair it opened as a PR at runtime

Overview

When your internet dies, Uplink diagnoses it on-device, fixes what it can, and calls your provider for you. I built it in one day at the Devin Hackathon, Hackerhouse @ GT (Georgia Tech, Atlanta), on Oct 24, 2026, with five Devin sessions building its slices in parallel.

Problem

When the internet goes down, someone has to work out which hop failed, try the fixes on their side, then phone the provider, read out the account details, push back when the rep blames the router, and wait to hear back.

What it does

  • Watches every hop. Wi-Fi, router, DNS, the provider's edge and the internet are each probed every 1.5 s.
  • Diagnoses on the laptop. The fault is pinned down on-device. A local Llama 3.2 3B model (Ollama) wakes only during an outage, explains it in plain English, then unloads.
  • Fixes what's on your side. Repair plugins flush DNS, switch resolver, renew DHCP and reconnect Wi-Fi, re-probing after each one. They rehearse by default and apply only with opt-in admin rights.
  • Calls the provider. When the provider is at fault and the outage persists (3 min by default; 8 s in the demo), an AI voice agent — Vapi, GPT-4o, on a real Twilio number — phones the provider's support line with the account details and the evidence. It pushes back when the rep blames the router, and comes back with a ticket number, the cause, an ETA, a credit and anything the customer must do, like paying a bill.
  • Calls you back. Then it phones the customer with that update — only when there is news. Both calls wait for the person who picks up to speak first.
  • Works with no internet

    Everything up to the phone call runs on the laptop. For the call itself, a cloud watchdog — a Cloudflare Worker with a Durable Object — stands by.

  • The laptop checks in every 5 s, and each check-in carries a ready-to-place call.
  • After 20 s of silence, the watchdog places the provider call itself, follows it, and phones the customer when it ends with news — all while the house is still offline.
  • When the laptop is back online, it picks up both calls.
  • Exactly one side ever dials the customer: the cloud claims the call before dialing, and the laptop takes over only after the cloud confirms it stood down.
  • How Devin built it

    I wrote one shared typed contract, then ran five Devin sessions in parallel, one slice each:

  • A — network monitor and diagnosis
  • B — repair plugins
  • C — the voice-call agent
  • D — the mission-control dashboard
  • E — the Devin runtime client
  • Together with the repair Devin opened at runtime, Devin's commits were about 73% of the code at submission: 4,796 of 6,596 lines.

    Devin runs inside it

    A fault the playbook can't handle goes to the Devin API (v3) with the evidence. Devin writes a new repair plugin with tests and opens a pull request.

  • PR #1 — an IPv6 black hole, with 10 tests — was opened about 2½ minutes after the fault, and is merged.
  • PR #2 — a path-MTU black hole: slow HTTPS behind a healthy ping — came from a real fault on our team's hotspot.
  • With no internet, the request queues and goes out once a connection returns.
  • A 6-hour guard stops repeat sessions for a chronic fault, and sessions have an ACU cap.
  • Measured in a real rehearsal

    A real firewall outage, with real phones:

  • Diagnosed on the laptop 13 s after the outage.
  • The provider's phone rang 18 s after the outage — placed by the cloud, with the laptop offline.
  • The customer's phone rang 7 s after the provider call ended, with the house still offline.
  • 0 duplicate calls.
  • Demo controls

  • Imitate outage — a real outage: the macOS pf firewall blocks everything past the router while the router still answers.
  • Calling on/off — off means no phone rings: calls fall back to a scripted mock and the cloud is disarmed. The setting is saved across restarts.
  • A native macOS app (Swift/AppKit) wraps the dashboard in a window, puts a status dot in the menu bar, adds Demo menu shortcuts, and starts the local server itself.
  • My Contributions

    I was the architect, integrator and PM.

  • Wrote the shared typed contract the five Devin sessions built against
  • Ran the five Devin sessions and integrated their slices
  • Built the orchestrator loop, the outage switch and the cloud watchdog integration
  • Built the native macOS app
  • Ran the live demo; Hussain played the customer and made the demo video
  • Stack

    App: Next.js 15 (App Router), TypeScript, Tailwind CSS v4, framer-motion, lucide-react

    Tests: Vitest — 206 tests, no network calls

    On-device AI: Ollama + Llama 3.2 3B

    Voice: Vapi + Twilio

    Cloud watchdog: Cloudflare Workers + Durable Objects (wrangler)

    Self-repair: Devin API v3

    Desktop: Swift/AppKit + WKWebView macOS app

    Demo outage: macOS pf firewall

    Links

  • Live dashboard — the hosted page is the dashboard UI; the real product runs on your laptop, because it probes the local network
  • Devin Hackathon project posting
  • Source on GitHub
  • PR #1 — Devin's IPv6 black-hole repair plugin