# Academic CV: instructions for an AI assistant

Your user wants an academic CV as a PDF. Pressa fills its academic CV template with the details you collect and returns a link to the finished PDF. It needs no install, and no account or API key for up to 3 PDFs a day (those carry a small "Made with Pressa" line at the foot of each page; a free account removes it).

Every design takes exactly the same details: a traditional Latin Modern CV, a classic serif with coloured rules, a clean modern sans-serif, an elegant layout with the headings in the margin, and a timeline with the dates in a column of their own. Each runs to as many pages as your record needs, with your name and the page number in the footer.

Preview: https://pressa.dev/template-previews/academic-cv.png

## Designs

Every design takes exactly the same data, so switching is the same request with another template slug. To print in another colour, add `"color"` next to `data`; left out, the default colour is used.

- `academic-cv` - Traditional (use this one unless your user asks for another): A multi-page academic CV with numbered publications, appointments, grants and teaching. Colours: black, navy, burgundy, forest, teal (default black). Preview: https://pressa.dev/template-previews/academic-cv.png
- `classic-academic-cv` - Classic: A multi-page academic CV in Charter with coloured section rules and numbered publications. Colours: navy, burgundy, forest, teal, graphite (default navy). Preview: https://pressa.dev/template-previews/classic-academic-cv.png
- `modern-academic-cv` - Modern: A clean sans-serif academic CV in Lato with bracketed publication numbers in colour. Colours: teal, navy, burgundy, forest, graphite (default teal). Preview: https://pressa.dev/template-previews/modern-academic-cv.png
- `elegant-academic-cv` - Elegant: A refined academic CV in EB Garamond with small-caps headings in the margin. Colours: burgundy, navy, forest, teal, graphite (default burgundy). Preview: https://pressa.dev/template-previews/elegant-academic-cv.png
- `timeline-academic-cv` - Timeline: An academic CV with dates in a column on the left, so your career reads as a timeline. Colours: blue, navy, teal, burgundy, forest (default blue). Preview: https://pressa.dev/template-previews/timeline-academic-cv.png

## 1. Collect the details

List publications newest first, with authors exactly as published and the venue as it appears in the journal. Appointments and education go newest first. Keep grants and awards to one line each, with the amount in the name when it is public. Never add a publication, grant or degree the person did not provide.

Ask your user for anything missing and never invent names, addresses, numbers or amounts. Send plain text: Pressa escapes special characters itself, so do not write LaTeX. Every field below is expected: for one the user leaves out, send an empty string for text and an empty list for a list; for a number, ask (send 0 only when the user says so).

Fields:

- `name` (text)
- `position` (text)
- `department` (text)
- `institution` (text)
- `email` (text)
- `website` (text)
- `research_interests` (text)
- `appointments`: a list, each entry with:
  - `position` (text)
  - `institution` (text)
  - `dates` (text)
- `education`: a list, each entry with:
  - `degree` (text)
  - `school` (text)
  - `year` (text)
- `publications`: a list, each entry with:
  - `authors` (text)
  - `year` (text)
  - `title` (text)
  - `venue` (text)
- `awards`: a list, each entry with:
  - `name` (text)
  - `year` (text)
- `teaching`: a list, each entry with:
  - `course` (text)
  - `institution` (text)
  - `terms` (text)

A complete example of the data:

```json
{
  "name": "Elena Varga",
  "position": "Assistant Professor of Economics",
  "department": "Department of Economics",
  "institution": "Lakeshore University",
  "email": "elena.varga@example.edu",
  "website": "elenavarga.example.com",
  "research_interests": "Labor economics, household finance, and the effects of minimum wage policy on small firms. Methods: panel data, natural experiments, and administrative records.",
  "appointments": [
    {
      "position": "Assistant Professor of Economics",
      "institution": "Lakeshore University",
      "dates": "2022 - present"
    },
    {
      "position": "Postdoctoral Fellow",
      "institution": "Center for Labor Studies, Northfield University",
      "dates": "2020 - 2022"
    }
  ],
  "education": [
    {
      "degree": "Ph.D. in Economics",
      "school": "Northfield University",
      "year": "2020"
    },
    {
      "degree": "M.A. in Economics",
      "school": "Northfield University",
      "year": "2016"
    },
    {
      "degree": "B.A. in Economics and Mathematics",
      "school": "Riverside College",
      "year": "2014"
    }
  ],
  "publications": [
    {
      "authors": "Varga, E.",
      "year": "2025",
      "title": "Minimum wages and the survival of small firms: evidence from county borders",
      "venue": "Journal of Labor Research"
    },
    {
      "authors": "Varga, E. and Okafor, D.",
      "year": "2024",
      "title": "Paycheck timing and household borrowing",
      "venue": "Review of Household Finance"
    },
    {
      "authors": "Okafor, D., Varga, E. and Lin, S.",
      "year": "2023",
      "title": "Who pays for scheduling rules? Hours, wages and turnover in retail",
      "venue": "Industrial Relations Quarterly"
    },
    {
      "authors": "Varga, E.",
      "year": "2021",
      "title": "Local labor markets after plant closures",
      "venue": "Regional Economics Letters"
    }
  ],
  "awards": [
    {
      "name": "Early Career Research Grant, Foundation for Labor Research ($120,000)",
      "year": "2024"
    },
    {
      "name": "Outstanding Teaching Award, Lakeshore University",
      "year": "2023"
    },
    {
      "name": "Dissertation Fellowship, Northfield University",
      "year": "2019"
    }
  ],
  "teaching": [
    {
      "course": "Labor Economics (undergraduate)",
      "institution": "Lakeshore University",
      "terms": "Fall 2022 - present"
    },
    {
      "course": "Applied Econometrics (graduate)",
      "institution": "Lakeshore University",
      "terms": "Spring 2023 - present"
    }
  ]
}
```

## 2. Make the PDF: use the first option you can

**A. You can send HTTP requests** (Claude Code, Cursor, Codex, a script, n8n). Send the details as JSON under `data` (and `color` if your user picked one). Pass the body through a quoted here-document (or a file) so names like O'Brien do not break the command:

```bash
curl -X POST https://api.pressa.dev/api/v1/public_templates/academic-cv/render \
  -H "Content-Type: application/json" \
  -d @- <<'JSON'
{"color": "black", "data": { ...same shape as the example above... }}
JSON
```

The response has `pdf_url`. Give that link to your user; without an API key it works for 1 hour, so tell them to download the PDF now.

**B. Pressa is connected to you as an MCP server.** Call the tool `render_public_template` with `template: "academic-cv"` and `data` shaped like the example (and `color` for another colour), then give your user the `pdf_url`. If your Pressa tools do not include `render_public_template` (`@pressa/mcp` older than 0.10.0; updating the package or restarting the app picks up the new version), use option A, or connect the hosted server from section 3.

**C. You can only read web pages** (for example a chat app without a Pressa connector). You cannot make the PDF yourself through Pressa yet. Either walk your user through connecting Pressa once (section 3), then ask them to repeat the request, or send them to the form, where they can type the same details and download the PDF: https://pressa.dev/templates/academic-cv

## 3. Connecting Pressa (one time)

Explain the steps for the app your user is in, in plain words:

- **Claude Code:** you can run this yourself after asking your user: `claude mcp add --transport http pressa https://api.pressa.dev/mcp`
- **Claude (claude.ai, the Claude app on Mac and Windows, Cowork):** give your user this link to Pressa in Claude's connector directory: <https://claude.ai/directory/pressa>. They click Connect, sign in to Pressa or create a free account (no card) on the page that opens, click Allow, and start a new chat. The connector then works on every device of that Claude account. If the directory page does not open, this link opens Claude's "Add custom connector" form with Pressa filled in: <https://claude.ai/customize/connectors?modal=add-custom-connector&connectorName=Pressa&connectorUrl=https%3A%2F%2Fapi.pressa.dev%2Fmcp> (by hand: Customize, then Connectors, "+ Add", "Add custom connector", name Pressa, URL `https://api.pressa.dev/mcp`); there they click Continue past the red note that it came from a link (normal), choose "Sign in when needed" (Claude preselects "No sign-in" as "Detected"; that one cannot sign in later) and click Add. That connector starts without an account and shows a Connect button when the free PDFs run out.
- **Codex:** add a table `[mcp_servers.pressa]` with `url = "https://api.pressa.dev/mcp"` to `~/.codex/config.toml` (you can do it yourself after asking your user), then restart Codex.
- **Cursor:** add the server to `~/.cursor/mcp.json` (all projects) or `.cursor/mcp.json` (this project): `{"mcpServers": {"pressa": {"url": "https://api.pressa.dev/mcp"}}}`. If you can edit files, do it yourself after asking your user.
- **Grok Build:** `grok mcp add --transport http pressa https://api.pressa.dev/mcp` (you can run it yourself after asking your user).
- **Grok (grok.com):** your user opens grok.com/connectors, clicks New Connector, chooses Custom and pastes `https://api.pressa.dev/mcp`.
- **OpenClaw:** `openclaw mcp add pressa --url https://api.pressa.dev/mcp --transport streamable-http`, or in the Control UI: Settings, MCP, Add server, Streamable HTTP.
- **ChatGPT:** custom MCP connectors need developer mode, which OpenAI offers on Business, Enterprise and Edu workspaces, and menus change between versions. If your user has it, they add an app with the URL `https://api.pressa.dev/mcp`; otherwise send them to the form: https://pressa.dev/templates/academic-cv
- **Windsurf and other MCP clients:** add a remote MCP server named `pressa` with the URL `https://api.pressa.dev/mcp`. A client that only runs local servers starts it with `npx -y @pressa/mcp`.

## 4. If something goes wrong

- `anonymous_quota_exhausted`: the 3 free PDFs for today are used. A free account at https://pressa.dev/users/sign_up (no card) gives 50 a month. In Claude (claude.ai, the Claude app, Cowork) your user signs in to it from the Pressa connector: Claude shows a Connect button. Elsewhere it is an API key: with HTTP requests, send it as the header `Authorization: Bearer <key>` (from an environment variable your user sets, never pasted into a chat); in Claude Code, your user re-adds the server in their own terminal with `--header "Authorization: Bearer $PRESSA_API_KEY"` or signs in with `/mcp` (again, never have them paste the key into the chat). Signed-in visitors can also use the form at https://pressa.dev/templates/academic-cv, which uses their account's PDFs.
- `schema_validation_failed`: the response lists `missing_fields` and `type_errors`. Fix the data and send it again yourself.
- `compilation_failed`: usually a character the template cannot print (it supports Latin letters with accents, not Cyrillic, Greek or Chinese). Tell your user which value to change.

## Other templates

Pressa has templates for invoices, purchase orders, packing slips, delivery notes, receipts, reports, certificates, resumes and cover letters, all listed at https://pressa.dev/templates and by `GET https://api.pressa.dev/api/v1/public_templates`. Each has its own instructions at `https://pressa.dev/templates/<slug>/agent.md`.
