A research-website hub from the New Future of Work team at Microsoft Research. Each post is a deep dive into how AI is reshaping how we work — from millions of Copilot conversations to controlled studies of how mindsets shape AI adoption.
The site is a static React SPA deployed to GitHub Pages.
- Vite 8 + React 19 + TypeScript 6
- Tailwind CSS v4 (
@theme inlinedesign tokens, oklch palette, light/dark) - react-router-dom 7 (SPA, client-side routing)
- Recharts (data viz), lucide-react (icons)
- MDX 3 for prose-heavy posts (
@mdx-js/rollup+@mdx-js/react) - Self-hosted variable fonts: Fraunces, Inter, JetBrains Mono via
@fontsource-variable/*
npm install
npm run dev # http://localhost:5173/copilot-reader/
npm run build # tsc -b && vite build → dist/
npm run preview # serve the production build locallyNode version: requires Node 20.19+ (Vite 8 / rolldown). On Node 20.18 the rolldown native binding fails to install as an optional dep — upgrade first.
copilot_reader/
├── .github/workflows/deploy.yml # GH Pages CI
├── public/
│ ├── favicon.svg
│ └── 404.html # SPA-on-GH-Pages redirect shim
├── src/
│ ├── main.tsx # entry: fonts + globals + <App>
│ ├── App.tsx # router + shell wiring
│ ├── styles/
│ │ ├── globals.css # design tokens (the brand source of truth)
│ │ └── editorial.css # editorial typography utilities
│ ├── components/
│ │ ├── shell/ # SiteHeader, MicrosoftFooter
│ │ ├── post/ # PostFrame, MDXComponents
│ │ └── viz/ # Reveal, ChartFrame (shared post primitives)
│ ├── content/
│ │ ├── types.ts # PostMeta interface
│ │ ├── posts.ts # auto-discovery registry — DO NOT EDIT to add posts
│ │ └── posts/
│ │ ├── _template/ # copy-paste starter for new posts
│ │ └── five-million-conversations/ # Vol. 1: Counts et al. 2025
│ ├── pages/
│ │ ├── HomePage.tsx # post index
│ │ ├── PostPage.tsx # generic post wrapper (lazy-loads body)
│ │ └── NotFoundPage.tsx
│ └── lib/
│ ├── posts.ts # listPosts / getPost / listSlugs
│ └── utils.ts # cn() helper
└── vite.config.ts # base /copilot-reader/, MDX plugin, @ alias
See CONTRIBUTING.md for the full recipe in both authoring modes (MDX in-repo / zip-import) and the file-by-file migration procedure for finished React-app zips from Lovable.dev / v0.dev / similar tools.
The short version:
- Copy
src/content/posts/_template/tosrc/content/posts/<your-slug>/ - Edit
meta.tsand eitherpost.mdx(prose) orpost.tsx(custom React) - Commit. The site auto-discovers it.
No edits to routes, the homepage, or any registry file are required.
The full design system lives in src/styles/globals.css. All colors are oklch.
Available tokens:
- Editorial palette:
bg-paper,bg-paper-warm,text-ink,text-ink-soft,text-ink-muted,border-rule,bg-highlight - Six analytic accents:
bg-accent-1(terracotta) throughbg-accent-6(slate-blue) - Recharts colors:
var(--color-chart-1)throughvar(--color-chart-5) - Editorial typography classes:
editorial-h1/-h2/-h3,editorial-lede,editorial-body,eyebrow,pull-quote,drop-cap,marker-highlight,hairline,reveal
Every post declares a kind: PostKind in its meta.ts. The tag is shown as a
small eyebrow chip on the homepage card and post header, and signals what
kind of read the piece is.
| Tag | Used for |
|---|---|
SIX KEY FINDINGS |
Numbered structural framing — N discrete findings, each with a short summary and (optional) click-to-reveal depth |
FIELD EXPERIMENT |
Narrative deep-dive of an empirical experiment with treatment/control |
DATA STORY |
Narrative analysis of platform telemetry without an experiment |
BRIEFING |
Short, single-finding piece |
Adding a new tag requires editing the PostKind union in
src/content/types.ts AND updating this table — a deliberate editorial
decision, not a free-form metadata field.
GitHub Actions auto-deploys to GitHub Pages on every push to main.
Site URL: https://microsoft.github.io/copilot-reader/
MIT — see LICENSE. Copyright (c) Microsoft Corporation.