DHLM

A single-user, Gemini-powered workspace that answers from a living Markdown knowledge base plus approved Gmail, Calendar, and Drive data, cites its sources, and requires confirmation before anything is written or sent.

Private system · public case-study site

My role

Designed and built the workspace, source router, integrations, memory-review workflow, career workspace, and the public case study.

A routing hub connecting mail, calendar, document, and lock nodes.

The problem

The context I need is split across email, calendar, files, and project notes. Pulling it together by hand interrupts the work, and a general assistant cannot be trusted to read and act across those sources without clear boundaries.

My contribution

I designed and built DHLM end to end: the routing layer that decides which sources a question needs, the Google integrations and security model, the human-approved memory workflow, the career workspace, and the public case-study site with synthetic previews.

What I built

A deterministic router decides which sources each question needs before any model call. Generic questions are answered directly, project questions retrieve personal context, and live Google data is fetched in parallel only when the question requires it. Answers stream with knowledge-base and live-data citations side by side.

Nothing becomes permanent memory automatically: DHLM proposes updates with evidence and confidence, and changes are validated, versioned, and synced only after approval.

  • Ranked retrieval with an explicit precedence order: current priorities, recent changes, active projects, then profile.
  • Single-account Google sign-in with PKCE, read-only scopes by default, and an encrypted refresh-token cookie.
  • Single-use, five-minute confirmations before any Gmail draft or Calendar event is created.
  • A career workspace for job discovery, deterministic fit scoring, truthful resume tailoring, and application tracking.

How it works

Routing happens before the model is called, so the model only ever sees the sources a question actually needs.

  1. Question
  2. Deterministic source router
  3. Knowledge base · Gmail · Calendar · Drive
  4. Gemini answer with citations
  5. Review: memory proposals and confirmed actions
Interface

Next.js, React, TypeScript, and Tailwind CSS, with a separate public case study that uses synthetic data.

Intelligence

Gemini, with a fast default model and a deeper model only on request and within a daily budget.

Sources

A Markdown knowledge base, optionally synced to Gemini File Search by content hash, plus approved Google Workspace APIs.

Safety

Zod-validated contracts, separated sign-in and connection grants, and confirmed write actions.

DHLM case-study homepage with a synthetic calendar question and a cited answer.
The public case study uses a synthetic preview: a calendar question answered with its source marked read-only.

Key decisions

Fetch only what the question needs.

Routing rules run before the model, which keeps unrelated personal data out of every prompt and keeps responses fast.

Separate sign-in, access, and action.

Signing in, granting a data connection, and performing a write are distinct steps, and writes require a fresh confirmation.

Use synthetic data in public.

The public case study demonstrates routing, citations, and review with synthetic previews instead of real inbox or calendar content.

Outcomes & evidence

DHLM runs as my private workspace, and the public case study at dhlm.davishiggins.com shows how routing, citations, human review, and the career workspace fit together without exposing a real account.

Scope & limits

DHLM is a private, single-user system. The public site is a case study, not a working inbox assistant, and it does not send email on its own. This portfolio's assistant cannot access DHLM or any of Davis's accounts.

What I learned

Connecting information is only useful when source selection, citations, and action boundaries stay understandable.

Built with

Next.jsReactTypeScriptGemini APIGmail APIGoogle Calendar APIGoogle Drive APISupabaseZodTailwind CSSVitestPlaywrightGSAPLenisVercel

More projects

All projects