Skip to content

drewhb/AI-Usage-Dashboard

Repository files navigation

AI Usage Dashboard

Turn your ChatGPT export into a navigable personal-story dashboard. Runs locally on your own machine, your data never leaves your laptop.

Overview — 1,189 conversations across 510 active days

What it does

The dashboard reads your ChatGPT data export and produces four views over your last few years of conversation:

  • Overview — totals, streaks, gaps
  • Rhythms — when, what model, how much, how long
  • Timeline — monthly narratives + era detection
  • Topics — embeddings, UMAP scatter, named clusters

It's not a chat browser. It's a tool for looking at the shape of three years of asking AI questions — what you were working on, learning, wrestling with — and seeing patterns you wouldn't notice scrolling through them one at a time.

Highlights

A monthly narrative anchored to the conversations underneath

Claude Sonnet reads every conversation summary from a given month and writes a paragraph capturing what you were actually working on. Highlight cards link straight to the originals.

Timeline — January 2024, CLO data infrastructure on AWS

Watch the model migration

Stacked-area chart of every assistant message by model family — the gpt-4 era, the gpt-4o ramp, the move to gpt-5 thinking.

Model migration over time

When you actually use it

Hour × day-of-week heatmap surfaces your real rhythm — the late-night research bursts, the consistent morning queries, the weekend gaps.

Hour × day heatmap

Conversation length, voice usage

Length distribution + voice usage

Topic clusters

Every conversation embedded with OpenAI text-embedding-3-small, projected to 2D with UMAP, k-means clustered, and labeled by Claude Sonnet. The axes mean nothing — only distance matters.

Topic clusters with auto-generated labels

Click any cluster to focus the scatter and explore its representative conversations.

Focused cluster: WPF Development Learning

Quickstart

  1. Request your export from ChatGPT: Settings → Data Controls → Export → wait for the email.
  2. Clone this repo:
    git clone https://github.com/YOUR_USERNAME/ai-usage-dashboard
    cd ai-usage-dashboard
  3. Drop the Conversations__*.zip into OpenAI-export/User Online Activity/.
  4. Set up env:
    cp .env.local.example .env.local
    # Edit .env.local — add your Anthropic + OpenAI keys, optional DASHBOARD_PASSWORD
  5. Install + run the pipeline:
    npm install
    npm run ingest                       # ~30s, free
    ANALYZE_LIMIT=20 npm run analyze     # validate prompt quality first
    npm run analyze                      # full run, ~20 min, ~$1–2
    npm run normalize                    # canonical topic buckets
    npm run embed                        # ~3 min, ~$0.05
    npm run narratives                   # ~10 min, ~$2–5
  6. Start the app:
    npm run dev
  7. Open http://localhost:3000.

Cost

Step Cost Provider
ingest $0 local
analyze (1,200 convos) ~$1–2 Anthropic Claude Haiku 4.5
embed (1,200 convos) ~$0.05 OpenAI text-embedding-3-small
narratives (~36 months) ~$2–5 Anthropic Claude Sonnet 4.6
Total ~$5–10 one-time

All LLM responses are cached on disk by content hash, so re-running is free for already-processed conversations.

How it works

A four-stage offline pipeline writes to a local SQLite file, and a Next.js app reads from it. Nothing reaches into the LLM on a page load.

ChatGPT export → ingest → analyze → embed → narratives → SQLite → Next.js
                  30s      20m       3m       10m

See docs/architecture.md for a deeper tour of the pipeline, schema, and design choices.

Tech

Next.js 15 (App Router) · TypeScript · Tailwind · SQLite (better-sqlite3) · Observable Plot · Anthropic SDK · OpenAI SDK · umap-js

Privacy

Your conversations contain a lot. By default the dashboard:

  • Runs only on your machine. No network calls except to Anthropic/OpenAI during the pipeline.
  • Gates access with a single-password middleware when DASHBOARD_PASSWORD is set in .env.local (httpOnly cookie, no session storage).
  • Never commits data. OpenAI-export/ and data/ are both .gitignored.

If you deploy somewhere (Vercel, Fly), set DASHBOARD_PASSWORD to keep the dashboard private.

License

MIT — see LICENSE.

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors