Skip to main content

academic-website-builder

Build a clean, modern, CV-driven academic website for a researcher, professor, postdoc, or grad student. Generates three distinct design mock-ups (minimal dark, light academic, bold modern) from a CV, lets the person preview all three and modify any of them, then has them pick one — producing a self-contained site that is genuinely easy to keep updated (edit one data file, or drop in a new CV, and re-run one build command). Use this whenever someone wants to create, build, design, generate, refresh, or deploy an academic or faculty website, a researcher/scholar personal homepage, a "website from my CV/resume", a professor or lab landing page, or wants to update a site previously built with this skill. Trigger even when they don't say "skill" — e.g. "make me a personal academic site", "turn my CV into a website", "I need a faculty page", "update my academic website with my new papers".

Jump to install

Source facts

Repository
thinkingwithagents/thinkingwithagents.github.io
Last source activity
June 15, 2026 at 13:25
Detected SKILL.md language
English
Stars
3
Forks
0

Install options

The review-first prompt is selected by default. You can switch to a direct command or download a local copy.

Review the source files

Read SKILL.md and any companion files shown by SkillsMP before deciding whether to install.

File Explorer
12 files

Showing SKILL.md

SKILL.md
Source instructions · Read-only preview
name
academic-website-builder
description
Build a clean, modern, CV-driven academic website for a researcher, professor, postdoc, or grad student. Generates three distinct design mock-ups (minimal dark, light academic, bold modern) from a CV, lets the person preview all three and modify any of them, then has them pick one — producing a self-contained site that is genuinely easy to keep updated (edit one data file, or drop in a new CV, and re-run one build command). Use this whenever someone wants to create, build, design, generate, refresh, or deploy an academic or faculty website, a researcher/scholar personal homepage, a "website from my CV/resume", a professor or lab landing page, or wants to update a site previously built with this skill. Trigger even when they don't say "skill" — e.g. "make me a personal academic site", "turn my CV into a website", "I need a faculty page", "update my academic website with my new papers".
# Academic Website Builder Most academics have no time and no interest in fighting with web tooling. This skill turns a CV into a polished personal website and — crucially — leaves behind something they can keep current themselves by editing **one plain data file** (or dropping in a fresh CV) and running **one command**. No frameworks, no build pipeline to learn, no servers required. ## What it produces A self-contained site folder the person owns and can deploy anywhere: ``` <site>/ cv-data.json <- the single source of truth (everything on the site lives here) build.py <- run `python build.py` to (re)generate the site; no dependencies templates/ <- the three theme templates (edit these to change a design) CV/ <- the source CV (PDF), linked as a download index.html <- the LIVE site: the chosen theme (this is what you deploy) preview.html <- a chooser page showing all three themes side by side site-minimal-dark.html site-light-academic.html site-bold-modern.html README.md <- plain-language "how to update & deploy" for the academic ``` The three themes are real, distinct visual identities, not recolors of one template: - **minimal-dark** — twilight charcoal + iris accent; research as a typed "ledger". Restrained, design-forward. - **light-academic** — cool paper + pine green, literary serif, card-based. Scholarly, à la Chetty. - **bold-modern** — full-width bands, oversized display type, a press "ticker". High-impact, public-facing. ## The core idea (why updates are easy) `build.py` reads `cv-data.json` and renders **all three themes** plus the chooser. The academic never edits HTML to change content. Adding a paper = adding one object to a JSON list; fixing a title = editing one string; switching the whole design = changing `"theme"`. Then `python build.py` rebuilds in a second. A whole-CV refresh means re-extracting the new CV into `cv-data.json` (Claude does this) and rebuilding. **Always generate all three themes and let the person choose at the end** — seeing the real options beside their own content is far more useful than picking a theme up front. Let them request changes to any one. ## Workflow ### 1 — Gather inputs (keep it short; academics are busy) - Locate the CV (PDF/DOCX) in the working directory or ask for the path. Read it. - Ask the small set of intake questions in `references/intake.md` (profile links, public email, bio depth, photo, deploy target). Do **not** ask which theme up front — all three get built. - If they mention an existing website, offer to fetch it (WebFetch) and merge contact details/links. ### 2 — Extract the CV into `cv-data.json` - Read `references/cv-data-schema.md` for the field-by-field shape, and `assets/cv-data.example.json` for a complete worked example (a fictional but realistic economist's CV — use it as the pattern, not the content). - Extract faithfully: exact titles, venues, coauthors, years; classify each publication into one of `under_revision`, `peer_reviewed`, `working_paper`, `in_progress`, `policy_report`; flag 3–4 as `featured`; capture press notes as `badge`/`tag`. Draft the bio (see `references/intake.md`); apply the `avoid-ai-writing` skill so it doesn't read as AI prose. - Show the person the key extracted facts (name, title, counts, featured picks, bio) and let them correct before building. LLM extraction is reliable but not perfect — a quick human confirm is worth it. ### 3 — Scaffold the site folder Copy the engine and templates next to the new `cv-data.json` so the site is portable and self-contained: ``` # from the chosen <site> folder cp "<skill>/scripts/build.py" build.py mkdir -p templates && cp "<skill>/assets/templates/"*.html templates/ mkdir -p CV && cp "<the CV>" CV/ # match site.cv_file in cv-data.json cp "<skill>/assets/README.template.md" README.md ``` Write the extracted `cv-data.json` into `<site>/cv-data.json`. ### 4 — Build all three and review Run `python build.py`. Open `preview.html` to show all three themes side by side (the chooser embeds live previews). Walk through each. If a preview tool is available, screenshot each for a quick visual check. ### 5 — Let them modify any theme - **Content** (any theme): edit `cv-data.json`, rebuild. This covers ~90% of requests. - **Design** of a specific theme: edit `templates/<theme>.html` (colors live in the `:root` CSS variables near the top; layout is plain HTML). Keep the template's `{{tokens}}` intact — see the engine note below. - Treat the three themes as strong starting points, not constraints. For substantive redesigns, apply the `frontend-design` skill's principles and make deliberate choices for *this* person rather than templated defaults. ### 6 — Choose the live theme Set `"theme"` in `cv-data.json` to their pick (or pass `--theme`), rebuild. `index.html` is now their site. ### 7 — Deploy Walk them through `references/deployment.md` (GitHub Pages is the recommended free default; Netlify / Cloudflare Pages are easy alternatives; reuse an existing domain if they have one). ### 8 — Updating later (the promise of this skill) Point them to `README.md` and `references/updating.md`. Two paths: (a) edit `cv-data.json` + `python build.py`; (b) hand Claude a new CV → re-extract into `cv-data.json` (preserving `site`, `links`, `photo`) → rebuild. Switching theme, adding a photo (`site.photo`), and adding profile links are all one-line edits. ## How the templates work (template engine) `build.py` includes a tiny, dependency-free template engine. Templates use: `{{ field }}` (HTML-escaped value), `{{{ field }}}` (raw), `{{#each list}}…{{/each}}`, `{{#if key}}…{{/if}}`, `{{#unless key}}…{{/unless}}`. It supports **one level of `{{#each}}` and no nested `{{#if}}`** — keep conditionals flat (precompute combined values in `build.py`'s `prepare_context` if you need a conditional inside a conditional). CSS/JS use single braces and never collide with `{{ }}`. The fields available to templates are exactly what `prepare_context` builds; read it before adding a new token. ## Reference files - `references/intake.md` — the intake questions, bio-drafting guidance, profile-link and deploy options. - `references/cv-data-schema.md` — every `cv-data.json` field, with the publication `type` taxonomy. - `references/deployment.md` — GitHub Pages / Netlify / Cloudflare Pages, custom domains, analytics. - `references/updating.md` — the edit-and-rebuild loop, theme switching, photos, links, new-CV refresh. - `assets/cv-data.example.json` — a full, worked example (use as the extraction pattern). - `assets/README.template.md` — plain-language guide that ships inside the generated site. - `scripts/build.py` — the build engine; read `prepare_context` to see all template fields.
View on GitHub