---
name: minmax
description: Write or update the user's page on minmax.page from their CV, resume, LinkedIn export or any notes about their work. Use when the user asks to create, fill, update or fix their minmax page or profile.
---

# minmax.page

minmax.page gives each person one minimal page: minimum fluff, maximum content. You read whatever the
user has (a PDF or Word CV, a LinkedIn export, a personal site, notes) and write it into their page in
minmax.page's format. The user reviews and publishes it themselves.

**Base URL:** the origin you fetched this file from (normally `https://minmax.page`). Below it's `$BASE`.

## 1. Token

Every call needs the user's token (`mnml_` followed by 48 hex characters). It's usually in the message
that sent you here, or in the `MINMAX_TOKEN` environment variable. If you have neither, ask the user to
create one: sign in at `$BASE/-/account/`, then **Connect your AI**. Treat it like a password: don't
print it back, and don't write it into files in their projects.

## 2. Read their current page and the schema

```bash
curl -sS "$BASE/api/profile" -H "Authorization: Bearer $TOKEN"
curl -sS "$BASE/schema.json"
```

`GET /api/profile` returns `{ url, handle, status, data, public_contacts }`. `data` is the latest version of the page; it's `{}`
for a new page. Read the whole schema: its `description` fields are the writing rules, and they're
strict on purpose.

## 3. Write the profile

- **Sources:** read every file the user points you at, in full. Any format is fine. Ask for a CV if they
  haven't given you one, and don't make one up.
- **Keep their facts.** Never invent employers, dates, numbers or skills. Tighten wording; don't add
  claims. If something required is missing (location, say), ask instead of guessing.
- **Updating an existing page:** start from the current `data`. Keep what's still right, and keep their
  own edits unless the new source clearly replaces them. Keep each existing contact's text exactly as it
  is: which contacts are shared (`public_contacts`) is matched on that text, so a reworded contact goes
  back to unshared.
- **House style:** short plain lines, most recent first, no buzzwords, no adjectives about themselves,
  and dates like `Mar 2022 – Present`.

## 4. Save

`PUT` replaces the whole page content, so always send the complete profile:

```bash
curl -sS -X PUT "$BASE/api/profile" -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" --data-binary @profile.json
```

- **422:** `errors` lists each problem by field, e.g. `experience[2].date: doesn't match the format`.
  Nothing was saved. Fix the profile and send it again.
- **401:** the token is wrong or was revoked. Ask for a new one.
- **200:** `{ url, status, next }`.

Write `profile.json` to a temporary path, not into the user's project, and delete it afterwards.

## 5. Hand back to the user

Tell them what you put on the page in a few lines, and what you left out and why. Then send them to
`url` to review it. On their page they can:

- edit anything inline;
- tick which contacts to share (never public: they go in their PDF and to people whose request to
  connect they accept);
- **Preview**, then **Publish**. A draft isn't public until they publish it; you can't publish for them.
  On a live page your save is the latest version: visitors keep seeing the published one until they publish
  the changes, or discard them.

## Keep this skill (Claude Code)

To use it again later without the link:

```bash
mkdir -p ~/.claude/skills/minmax && curl -sS -o ~/.claude/skills/minmax/SKILL.md https://minmax.page/skill.md
```

and set `MINMAX_TOKEN` in your environment instead of pasting the token each time.
