The project

VizMail is a desktop email client built with MAUI .NET 10. The initial goal was straightforward: a local mail client that reads the inbox, displays threads, manages labels. The goal that emerged along the way was more interesting: expose everything via an HTTP API so that AI agents can read and process emails without going through a browser.

Without an API, an agent is blind: it can't read incoming mail, archive, reply, or trigger any action. With a clean API, an agent can do all of that programmatically — and an app like Lain can orchestrate these flows without human intervention.

Stack

  • UI: MAUI .NET 10 (native Windows desktop)
  • Database: SQLite via EF Core (messages, threads, labels, sync state)
  • Email protocols: IMAP (MailKit) + Outlook via Microsoft Graph API
  • HTTP API: .NET HttpListener embedded in the MAUI process, documented via a Markdown skill served by the API itself
  • Tests: xUnit, 659 tests covering services, handlers, and API endpoints

Features

38 features shipped, organized across eight domains:

Reading and navigation

  • Unified inbox with pagination and sorting
  • Thread view (grouped conversations) with bulk actions
  • Full-text search with relevance scoring and combinable filters
  • Real-time navigation context (/api/context)
  • Similar email detection (recurring pattern identification)

Message management

  • Mark read/unread — individual and bulk (up to 500)
  • Archive and permanently delete — individual and bulk
  • Custom labels: add, remove, global rename, global delete
  • Attachments: list, download, automatic backfill
  • Star, mark important, mark priority — individual and bulk
  • Snooze with automatic wake-up — individual and bulk
  • Agent tracking (processed/unprocessed) — individual and bulk

Compose and send

  • Compose a new email (multi-account)
  • Reply to an email (simple reply and reply-all)
  • Forward an email
  • Compose drafts: save and send later
  • Reply drafts: save, send, AI generation (individual and bulk)
  • Sent folder with search and filters

Semantic bubbles

  • Bubble creation and management (CRUD)
  • AI-powered automatic email classification into bubbles
  • Manual bubble override — per email, per thread, bulk
  • Incremental or forced reclassification with real-time progress

Unsubscribe and cleanup

  • Newsletter unsubscription (follows unsubscribe link) — individual and bulk
  • Exchange bogus email cleanup

Analytics and statistics

  • Global statistics (total, unread, starred, top senders, by domain)
  • Email activity timeline (day or week granularity)
  • Contact book derived from received emails
  • Sender aggregation

HTTP API for AI agents

  • Full REST endpoints covering all operations
  • Local token authentication (no external OAuth to configure)
  • Markdown documentation auto-served by the API (/api/skill), always in sync
  • Structured JSON responses designed to be consumed by an agent without fragile parsing
  • Health and sync diagnostics (/api/health, /api/imap_debug)

Synchronization

  • Incremental IMAP sync (IDLE + polling fallback)
  • Outlook sync via Microsoft Graph (delta queries)
  • Conflict handling and offline local state
  • Blocking manual sync and non-blocking trigger
  • Multi-account support (filter by account, send from account)

Development method

VizMail was built entirely through agent-driven development with KittyClaw as the orchestrator. Each feature was a ticket assigned to a programmer agent. The agent wrote the code, a qa-tester agent verified it, a committer agent pushed it. No code was written by hand.

This approach delivered 38 features with 659 tests and 0 regressions — with no cascade debugging days, because every change was tested before being committed.

The full retrospective on building the HTTP API is available in How I Built the VizMail API with AI Agents.

Results

Metric Value
Features shipped 38
Automated tests 659
Regressions 0
Status In active use ✓

What this demonstrates

VizMail isn't a "learn MAUI" project. It's proof that agent-driven development works on a complex business domain (mail, synchronization, network protocols) with strong quality constraints (0 regressions, 659 tests). The HTTP API wasn't in the original spec — it emerged because the tooling (KittyClaw + agents) made adding it frictionless. Semantic bubbles, AI-assisted drafting, and analytics followed the same path.