$npx -y skills add readwiseio/readwise-skills --skill now-reading-pageGenerate a personal "Now Reading" webpage from your Reader library
| 1 | You are generating a beautiful standalone HTML page showing what the user is currently reading and has recently read. The output is a single HTML file they can open in a browser or host on their personal site. |
| 2 | |
| 3 | ## Readwise Access |
| 4 | |
| 5 | Check if Readwise MCP tools are available (e.g. `mcp__readwise__reader_list_documents`). If they are, use them throughout (and pass this context to the subagent). If not, use the equivalent `readwise` CLI commands instead (e.g. `readwise list`, `readwise read <id>`). The instructions below reference MCP tool names — translate to CLI equivalents as needed. |
| 6 | |
| 7 | ## Process |
| 8 | |
| 9 | Launch a **Task subagent** to fetch all the data and generate the HTML file. The subagent should: |
| 10 | |
| 11 | ### 1. Fetch Data |
| 12 | |
| 13 | Run ALL of these in parallel: |
| 14 | |
| 15 | - **Shortlist:** `mcp__readwise__reader_list_documents` with `location="shortlist"`, `limit=50`, `response_fields=["title", "author", "category", "reading_progress", "first_opened_at", "last_opened_at", "image", "url", "site_name", "word_count", "saved_at"]` |
| 16 | - **Later:** `mcp__readwise__reader_list_documents` with `location="later"`, `limit=50`, `response_fields=["title", "author", "category", "reading_progress", "first_opened_at", "last_opened_at", "image", "url", "site_name", "word_count", "saved_at"]` |
| 17 | - **Inbox:** `mcp__readwise__reader_list_documents` with `location="new"`, `limit=50`, `response_fields=["title", "author", "category", "reading_progress", "first_opened_at", "last_opened_at", "image", "url", "site_name", "word_count", "saved_at"]` |
| 18 | - **Archive page 1:** `mcp__readwise__reader_list_documents` with `location="archive"`, `limit=50`, `response_fields=["title", "author", "category", "reading_progress", "last_opened_at", "image", "url", "site_name", "saved_at", "word_count"]` |
| 19 | |
| 20 | ### 2. Paginate Archive Deeply |
| 21 | |
| 22 | After the first archive fetch, use `nextPageCursor` to keep fetching more pages (limit=50 each). Fetch at least 6 more pages (~350 total docs) so the heatmap covers 6 months of reading activity. Keep paginating until the oldest `last_opened_at` is 6+ months ago OR pages are exhausted. |
| 23 | |
| 24 | ### 3. Categorize |
| 25 | |
| 26 | From the fetched data, build two lists: |
| 27 | |
| 28 | - **Currently Reading:** Items from shortlist, later, or inbox where `reading_progress` is between 0.05 and 0.99 (started but not finished). Sort by `last_opened_at` descending. |
| 29 | - **Recently Read:** Items from archive where `reading_progress` > 0.9 (actually finished). Sort by `last_opened_at` descending. Group by month. Show as many months as the data covers. |
| 30 | |
| 31 | Also collect ALL `last_opened_at` dates from archive items with `reading_progress > 0.9` for the heatmap. |
| 32 | |
| 33 | **There is no "Up Next" section.** Only show things the user is reading or has read. |
| 34 | |
| 35 | ### 4. Generate HTML |
| 36 | |
| 37 | Create a `now-reading/` directory in the current working directory (if it doesn't exist) and write the HTML file to `now-reading/index.html`. |
| 38 | |
| 39 | **Design direction:** Warm, sepia-toned, editorial. Think personal reading log, not media dashboard. |
| 40 | |
| 41 | **Fonts:** Google Fonts — Newsreader (serif, for headings) + DM Sans (sans, for body). Include via `<link>` tag. |
| 42 | |
| 43 | **Color palette (CSS variables):** |
| 44 | ``` |
| 45 | --bg: #f6f1eb (warm parchment background) |
| 46 | --surface: #ede6dc (card/heatmap empty cell background) |
| 47 | --surface-hover: #e4dbd0 |
| 48 | --border: #d9d0c4 |
| 49 | --text: #4a4239 (main body text) |
| 50 | --text-muted: #8a7e72 |
| 51 | --text-dim: #b0a597 |
| 52 | --heading: #2c251e |
| 53 | --accent: #a0724a (warm brown — progress bars, active states) |
| 54 | --accent-dim: rgba(160, 114, 74, 0.12) |
| 55 | ``` |
| 56 | |
| 57 | **Layout:** Max-width 760px, centered. Responsive. |
| 58 | |
| 59 | **Sections in order:** |
| 60 | |
| 61 | 1. **Header:** "What I'm reading" in Newsreader, light weight, large. Subtitle: "Powered by Readwise Reader" with accent-colored link. |
| 62 | |
| 63 | 2. **Currently Reading** — section label in small caps. Gallery of cards using CSS grid (`repeat(auto-fill, minmax(160px, 1fr))`) so they fill the container. Each card: |
| 64 | - `aspect-ratio: 3/2`, rounded corners, hover lift effect |
| 65 | - Cover image if available (`image` field). Gradient placeholder if not (hash title → hue). |
| 66 | - Dark gradient overlay at bottom with white title + author |
| 67 | - Progress bar at card bottom: 5px tall track (dark semi-transparent) with accent-colored fill |
| 68 | - Cards link to the Reader URL |
| 69 | |
| 70 | 3. **Reading Activity** — GitHub-style heatmap filling full container width. Use CSS flex with `flex: 1` on weeks and cells so it stretches. Warm amber color scale (`rgba(160, 114, 74, 0.2/0.4/0.65/1.0)`). Month labels above, day-of-week labels (Mon/Wed/Fri) on left. Show 6 months. |
| 71 | |
| 72 | 4. **Recently Read** — Category filter pills (All, Articles, Books, Tweets, RSS, Email) with JS toggle. Then entries grouped by month (e.g., "FEBRUARY 2026" in small caps). Each entry as a row: |
| 73 | - Date on left (tabular nums, muted) |
| 74 | - Category emoji (📄 article, 📚 book, 🐦 tweet, 📰 rss, ✉️ email, 🎬 video, 🎙 podcast, 📑 pdf) |
| 75 | - Title (linked, medium weight) + author/source (dim, smal |