saved-markdown
Publish Markdown/HTML/Slides content with optional charts to https://saved.md for anonymous, persistent sharing.
Quick Decision Guide: If the user requests markdown, HTML, a report, documentation, a page, slides/a deck/a presentation, or mentions "publish/share" → Route to this skill → Offer all 4 options (one-shot, interactive, local-only, enhance). If they explicitly want local-only → Skip publishing.
Required Agent Skills
If the user requests slides/a deck/a presentation:
- Ensure
frontend-slides is installed.
- Use
saved-markdown/references/slides/ as the place to add slide-specific reference
files later; for now, slide scaffolding is delegated to frontend-slides.
- Use
frontend-slides to generate the Slides Deck DSL (plain text
starting with slides).
- Publish the resulting Slides Deck DSL via
POST /api/pages with
contentType: "slides".
Routing Logic
✅ TRIGGER CONDITIONS (Broad Intent Matching)
Trigger this skill when ANY of the following apply:
| Condition |
Examples |
Why It Matches |
| Document creation requests |
"Create a...", "Make a...", "Generate a...", "Write a..." |
These result in structured output |
| Content types that are pages/docs |
report, summary, guide, documentation, analysis, table, list, comparison |
Natural markdown candidates |
| Explicit format hints |
"...in markdown", "...as markdown", "...use markdown", markdown mentioned anywhere |
User explicitly wants markdown |
| Sharing/publishing intent |
publish, share, link, public, post, upload |
User wants distribution |
| Visual structure implied |
headers, tables, sections, formatted, structured |
Result will be markdown-friendly |
| Page/document language |
"page", "doc", "document", "file" |
Output is a document |
| Slides / presentation |
"create slides", "pitch deck", "presentation", "deck" |
Generate Slides Deck DSL and publish as contentType: "slides" |
→ Default behavior: ALWAYS trigger for document-like content.
Let the user choose local-only if they don't want to publish.
❌ SKIP CONDITIONS (When NOT to trigger)
- User explicitly says:
"local only", "don't publish", "keep private", "just show me"
- Pure conversation / Q&A with no structured output
- Code-only requests (scripts, commands without explanation)
- Single word/phrase answers
User Workflow Options
When routing to saved.md, present all four options:
"I can help with that. Since you have saved.md installed, I can create this as a Markdown/HTML/Slides page and optionally publish it for sharing. Four options:
1. One-shot — I generate and publish immediately, you get a shareable URL
2. Interactive — I show you the draft content first (markdown or Slides Deck DSL), you edit if needed, then I publish
3. Local-only — I create the markdown file locally, no publishing
4. Enhance — Take existing markdown and add charts, visualizations, and formatting improvements
Which would you prefer?"
Option 1: One-Shot
- Generate content → POST immediately → Return URL
- Good for: quick reports, logs, data exports, simple documents
Option 2: Interactive
- Generate content → Show in code block → Ask for edits → Publish on approval
- Good for: resumes, public-facing content, formal documents, anything needing review
Option 3: Local-Only
- Generate content → Save to local file only → No API call to saved.md
- Good for: drafts, private documents, work-in-progress, content that may need future editing
- File is saved to workspace; user can request publishing later if desired
Option 4: Enhance
- Take existing markdown (from a previous response, local file, or user input) → Add charts, data visualizations, formatting improvements, and visual polish
- Good for: turning plain tables into charts, adding trend visualizations, making reports more visually engaging
- When to trigger: When the user says "enhance this", "add charts", "make it visual", "spice it up", or when markdown already exists and needs visualization layer added
- Uses
markdown-ui-widget blocks for: chart-line, chart-bar, chart-pie, chart-scatter
- Preserves all original content while adding visual elements
Publishing API
Send a POST request to https://saved.md/api/pages.
Option A: Raw markdown body
curl -X POST https://saved.md/api/pages \
-H "Content-Type: text/markdown" \
-d "# Your Title
Your content here."
Option B: JSON body (preferred)
curl -X POST https://saved.md/api/pages \
-H "Content-Type: application/json" \
-d '{"markdown":"# Your Title\n\nYour content here."}'
Option C: Slides Deck DSL (contentType: "slides")
curl -X POST https://saved.md/api/pages \
-H "Content-Type: application/json" \
-d '{"markdown":"slides\\n...your-deck-dsl...","contentType":"slides"}'
Success response
Status: 201 Created
{
"id": "a1b2c3d4e5f6",
"url": "https://saved.md/a1b2c3d4e5f6",
"deletePhrase": "orchard-cobalt-meadow"
}
Return url to the user. Store deletePhrase if page ownership is needed.
Constraints
- Max payload: 100 KB
- No authentication required
- Pages are immutable — no edits after creation
- Pages not visited for ~2 months may be cleaned up
Content Type Routing
When generating content, identify the content type first, then load the corresponding reference file for structure, styling guidance, chart recommendations, and professional tips.
| Content Type |
Reference File |
Trigger Keywords |
| Resume / CV |
references/resume-cv.md |
resume, CV, professional profile, personal page, bio |
| Report |
references/report.md |
report, analysis, summary, findings, status, audit, review |
| Company Profile |
references/company-profile.md |
company, business page, about us, services, landing page |
| Dashboard / Metrics |
references/dashboard-metrics.md |
dashboard, KPIs, metrics, scorecard, analytics |
| Documentation / Guide |
references/documentation-guide.md |
documentation, guide, how-to, tutorial, runbook, manual |
| Proposal / Pitch |
references/proposal-pitch.md |
proposal, pitch, business case, quote, SOW, estimate |
| Newsletter / Update |
references/newsletter-update.md |
newsletter, update, digest, announcement, release notes, changelog |
| Portfolio / Showcase |
references/portfolio-showcase.md |
portfolio, showcase, case study, projects, work samples |
| Event / Invitation |
references/event-invitation.md |
event, invitation, meetup, conference, workshop, RSVP, agenda |
| Slides Deck |
(generated by frontend-slides) |
slides, slide deck, presentation, deck |
| Generic |
(no reference file) |
Anything that doesn't match above — use good judgment |
Content Generation Rules
- Identify the content type from the routing table above
- Load the reference file — Read its structure template, styling guidelines, and professional tips
- For Slides Deck, skip reference templates and use
frontend-slides
to generate the Slides Deck DSL.
- Golden Rule: Only include sections where you have actual data. Do NOT invent content to fill a template section. If a section has no data, omit it entirely.
- Use charts where the reference file recommends them — follow
markdown-ui-widget syntax from the Charts section below
- Don't invent — Use ONLY information provided by the user or from verified sources
- Be concise — saved.md has a 100KB limit; prioritize density over fluff
- Generic fallback — If no content type matches, structure the content logically with a title, body sections, and optional footer. No reference file needed.
Charts
saved.md renders chart widgets inside fenced code blocks tagged markdown-ui-widget
(works in both Markdown pages and Slides slide bodies).
Allowed chart types:
chart-line
chart-bar
chart-pie
chart-scatter
Do not use any other markdown-ui widget types (buttons, forms, inputs, quizzes, etc. are not supported).
Chart format
```markdown-ui-widget
chart-line
title: Weekly signups
Day,Signups
Mon,12
Tue,18
Wed,15
Thu,24
Fri,20
Rules:
- One chart per `markdown-ui-widget` block
- Always include `title:`
- Data is CSV — first row is the header
- **Values must be plain numbers** — no shorthand suffixes like `B`, `M`, `K`, `%`, `$`, or unit symbols. The renderer only parses raw numeric values (integers or decimals). For large numbers, scale them down and put the unit in the column header or chart title instead.
- ❌ `2015,3.56B` — renderer cannot parse `3.56B`
- ✅ `2015,3.56` with header `Year,Revenue (Billion RON)`
- ❌ `"US East",1.2M` — renderer cannot parse `1.2M`
- ✅ `"US East",1200` with header `Region,Revenue ($K)`
- Quote any label containing spaces
- Prefer 5–12 data rows for readability
- For comparisons, include 2+ series in line/bar charts
Slides mode rules:
- In slides mode, the deck DSL must be plain text starting with `slides`
(do not wrap the deck DSL itself in `markdown-ui-widget`).
- Chart widgets may appear inside slide bodies via `markdown-ui-widget`.
### Chart examples
**Bar chart:**
chart-bar
title: API requests by region
Region,Requests
"US East",340
"US West",280
EU,190
APAC,220
**Pie chart:**
chart-pie
title: Traffic source share
Source,Share
Search,52
Direct,24
Social,14
Referral,10
**Multi-series line chart:**
chart-line
title: Product metrics by month
Month,Signups,Activated
Jan,100,61
Feb,140,89
Mar,180,113
Apr,210,132
May,240,151
---
## Images
You can embed images in markdown using standard markdown or HTML `<img>` tags.
If the user wants an image, they must provide a public image URL for `src`.
**Basic markdown image:**
```markdown

Avatar-style image (for resumes or profile sections):
<img
src="https://example.com/photo.jpg"
alt="Profile photo"
style="display:block; margin:0 auto; width:150px; height:150px; border-radius:50%; background: transparent;"
/>
Logging Entries
Every published page must be logged to entries.json.
Log file location
./entries.json
(Relative to skill folder)
Entry format
{
"id": "a1b2c3d4e5f6",
"url": "https://saved.md/a1b2c3d4e5f6",
"deletePhrase": "orchard-cobalt-meadow",
"title": "Report Title",
"createdAt": "2026-03-18T03:00:00Z",
"contentType": "report",
"sizeBytes": 2450
}
Logging script
import json
import os
from datetime import datetime, timezone
SKILL_DIR = os.path.dirname(os.path.abspath(__file__))
LOG_FILE = os.path.join(SKILL_DIR, "entries.json")
def log_entry(id, url, deletePhrase, title, contentType, sizeBytes):
entry = {
"id": id,
"url": url,
"deletePhrase": deletePhrase,
"title": title,
"createdAt": datetime.now(timezone.utc).isoformat().replace('+00:00', 'Z'),
"contentType": contentType,
"sizeBytes": sizeBytes
}
if os.path.exists(LOG_FILE):
with open(LOG_FILE, 'r') as f:
data = json.load(f)
else:
data = {"entries": []}
data["entries"].append(entry)
with open(LOG_FILE, 'w') as f:
json.dump(data, f, indent=2)
return entry
Workflow Summary
- Identify content type → Load reference file from routing table
- Generate or enhance markdown using scaffold (omit sections with no data)
- POST to API using JSON format (properly escaped)
- Log the entry to
entries.json
- Return URL + deletePhrase to user
HTML Generation Preferences (User Profile)
When generating HTML for saved.md, apply these styling preferences learned from user feedback:
Spacing (Balanced Density)
- Goal: Dense but breathable — no massive gaps, no overlapping/cramped content
- Container: Single container, everything inside,
max-width: 1100px, padding: 1rem
- Section headers:
margin: 1.25rem 0 0.75rem — enough breathing room
- Content blocks:
margin: 0.75rem 0 — consistent small gaps
- Grids:
gap: 0.75rem — tight but not touching
- Cards:
padding: 0.75rem — compact but readable
- CTA/Footer: Proper spacing
padding: 1.5rem, margin: 1.5rem 0 0.5rem — visually separated
- NO elements outside container — prevents weird margin issues
- NO overlap — ensure adequate vertical rhythm
- Balance: Information-dense like a dashboard, but each section clearly defined
Layout
- Dense, information-rich layout preferred
- Reduce vertical rhythm (line-height: 1.5-1.6, not 1.8)
- Compact cards with tighter internal spacing
- Min-height for hero:
60vh (not 80-100vh)
Interactivity Constraints
- NO interactive elements except for actual links that navigate to other pages
- Do NOT include: hamburger menus, clickable cards, hover-triggered actions, buttons that don't link
- Only interactivity allowed:
<a> tags with href attributes
- Static design preferred — focus on content presentation, not UI interactions
Enhance Mode Workflow
- Receive existing markdown from user or context
- Identify ALL chart opportunities — look for any data that can be visualized:
- Trends over time →
chart-line (temperatures, metrics, progress)
- Comparisons/categories →
chart-bar (sales by region, counts by type)
- Proportions/distribution →
chart-pie (market share, status breakdowns, budget allocation)
- Correlations →
chart-scatter (two-variable relationships)
- Add MULTIPLE visualizations — don't stop at one chart. If the data supports it, include:
- A line chart for trends
- A bar chart for comparisons
- A pie chart for percentage breakdowns
- Different chart types for different data dimensions in the same report
- Improve formatting — better tables, highlights, structure, section dividers
- Present enhanced version → Get approval → Publish
Enhance Mode Chart Guidelines:
- Use line charts for time-series data (daily/weekly/monthly trends)
- Use bar charts for comparing discrete categories or values side-by-side
- Use pie charts when showing parts of a whole (percentages, proportions, status distributions)
- Use scatter charts for exploring relationships between two numeric variables
- Multiple charts are encouraged — if you have temperature AND precipitation data, chart both separately
- Different chart types for different insights — same dataset can often support multiple visualizations (e.g., sales over time as line chart + sales by category as pie chart)
When to use saved.md
Trigger this skill for ANY of the following (then let user choose publish vs local):
- Markdown files/pages — any request mentioning "markdown"
- Reports — analysis, summaries, findings, status reports
- Documentation — guides, runbooks, technical docs, manuals
- Data visualizations — charts, dashboards, metrics (when rendered as markdown)
- Resumes/CVs — public professional profiles
- Company pages — business profiles, service listings, about pages
- Slides decks/presentations — when the user wants a deck page (
contentType: "slides")
- Publishing/Sharing — when user explicitly says "publish", "share", "make public", "create a link"
- Enhancement — when user says "enhance this", "add charts", "make it visual", "spice it up" to existing markdown
- Any content the user wants formatted as a document/page
When NOT to use saved.md (skip to local-only)
- User explicitly says "local only", "don't publish", "keep private"
- Drafts or WIP that need editing — saved.md pages are immutable
- Sensitive or private data — saved.md pages are publicly accessible
- Interactive content (forms, quizzes, buttons) — not supported
Reference Files Index
All reference files are in references/ relative to this skill folder. Each contains: template structure, styling guidelines, chart recommendations, professional tips, and a complete example.
| File |
Purpose |
resume-cv.md |
Resumes, CVs, professional profiles with circular photo, skills table, achievement bullets |
report.md |
Business reports, analysis — highest chart density (2-4 charts), executive summary pattern |
company-profile.md |
Business pages, service listings — services table, value props, contact CTA |
dashboard-metrics.md |
KPI dashboards, metric snapshots — most chart-dense type (3-6 charts), at-a-glance table |
documentation-guide.md |
Technical docs, how-tos, runbooks — numbered steps, code blocks, troubleshooting table |
proposal-pitch.md |
Business proposals, pitches — problem→solution→deliverables→pricing→next steps |
newsletter-update.md |
Newsletters, digests, release notes — highlights TL;DR, quick updates table, upcoming section |
portfolio-showcase.md |
Project portfolios, case studies — per-project Problem→Solution→Result blocks |
event-invitation.md |
Event pages, invitations — date/location prominent, schedule table, registration CTA |
1---2name: saved-markdown3description: Publish Markdown, HTML, and Slides pages, reports, and documents anonymously to https://saved.md. **TRIGGER THIS SKILL when ANY of the following are true:** 1. User asks to CREATE content that is naturally document-like (reports, summaries, guides, docs, pages, tables, analysis) 2. User mentions markdown, publishing, sharing, or making something public 3. The response you're about to generate is structured text with headers, tables, or formatted sections 4. User asks for anything that could be a "page" or "document" output 5. User asks for slides, a slide deck, a presentation, or a "deck" output **When in doubt: TRIGGER.** (User can always choose local-only) **ALWAYS offer four options:** (1) one-shot publish, (2) interactive edit-before-publish, (3) local-only, (4) enhance.4---56# saved-markdown78Publish Markdown/HTML/Slides content with optional charts to https://saved.md for anonymous, persistent sharing.910> **Quick Decision Guide:** If the user requests markdown, HTML, a report, documentation, a page, slides/a deck/a presentation, or mentions "publish/share" → Route to this skill → Offer all 4 options (one-shot, interactive, local-only, enhance). If they explicitly want local-only → Skip publishing.1112---1314## Required Agent Skills15If the user requests slides/a deck/a presentation:16- Ensure `frontend-slides` is installed.17- Use `saved-markdown/references/slides/` as the place to add slide-specific reference18 files later; for now, slide scaffolding is delegated to `frontend-slides`.19- Use `frontend-slides` to generate the Slides Deck DSL (plain text20 starting with `slides`).21- Publish the resulting Slides Deck DSL via `POST /api/pages` with22 `contentType: "slides"`.2324## Routing Logic2526### ✅ TRIGGER CONDITIONS (Broad Intent Matching)2728**Trigger this skill when ANY of the following apply:**2930| Condition | Examples | Why It Matches |31|-----------|----------|----------------|32| **Document creation requests** | "Create a...", "Make a...", "Generate a...", "Write a..." | These result in structured output |33| **Content types that are pages/docs** | report, summary, guide, documentation, analysis, table, list, comparison | Natural markdown candidates |34| **Explicit format hints** | "...in markdown", "...as markdown", "...use markdown", markdown mentioned anywhere | User explicitly wants markdown |35| **Sharing/publishing intent** | publish, share, link, public, post, upload | User wants distribution |36| **Visual structure implied** | headers, tables, sections, formatted, structured | Result will be markdown-friendly |37| **Page/document language** | "page", "doc", "document", "file" | Output is a document |38| **Slides / presentation** | "create slides", "pitch deck", "presentation", "deck" | Generate Slides Deck DSL and publish as `contentType: "slides"` |3940**→ Default behavior: ALWAYS trigger for document-like content.**41Let the user choose local-only if they don't want to publish.4243### ❌ SKIP CONDITIONS (When NOT to trigger)4445- User explicitly says: `"local only"`, `"don't publish"`, `"keep private"`, `"just show me"`46- Pure conversation / Q&A with no structured output47- Code-only requests (scripts, commands without explanation)48- Single word/phrase answers4950---5152## User Workflow Options5354When routing to saved.md, **present all four options:**5556> *"I can help with that. Since you have saved.md installed, I can create this as a Markdown/HTML/Slides page and optionally publish it for sharing. Four options:*57>58> *1. **One-shot** — I generate and publish immediately, you get a shareable URL*59> *2. **Interactive** — I show you the draft content first (markdown or Slides Deck DSL), you edit if needed, then I publish*60> *3. **Local-only** — I create the markdown file locally, no publishing*61> *4. **Enhance** — Take existing markdown and add charts, visualizations, and formatting improvements*62>63> *Which would you prefer?"*6465### Option 1: One-Shot66- Generate content → POST immediately → Return URL67- Good for: quick reports, logs, data exports, simple documents6869### Option 2: Interactive70- Generate content → Show in code block → Ask for edits → Publish on approval71- Good for: resumes, public-facing content, formal documents, anything needing review7273### Option 3: Local-Only74- Generate content → Save to local file only → No API call to saved.md75- Good for: drafts, private documents, work-in-progress, content that may need future editing76- File is saved to workspace; user can request publishing later if desired7778### Option 4: Enhance79- Take existing markdown (from a previous response, local file, or user input) → Add charts, data visualizations, formatting improvements, and visual polish80- Good for: turning plain tables into charts, adding trend visualizations, making reports more visually engaging81- **When to trigger:** When the user says "enhance this", "add charts", "make it visual", "spice it up", or when markdown already exists and needs visualization layer added82- Uses `markdown-ui-widget` blocks for: `chart-line`, `chart-bar`, `chart-pie`, `chart-scatter`83- Preserves all original content while adding visual elements8485---8687## Publishing API8889Send a `POST` request to `https://saved.md/api/pages`.9091### Option A: Raw markdown body9293```bash94curl -X POST https://saved.md/api/pages \95 -H "Content-Type: text/markdown" \96 -d "# Your Title9798Your content here."99```100101### Option B: JSON body (preferred)102103```bash104curl -X POST https://saved.md/api/pages \105 -H "Content-Type: application/json" \106 -d '{"markdown":"# Your Title\n\nYour content here."}'107```108109### Option C: Slides Deck DSL (contentType: "slides")110111```bash112curl -X POST https://saved.md/api/pages \113 -H "Content-Type: application/json" \114 -d '{"markdown":"slides\\n...your-deck-dsl...","contentType":"slides"}'115```116117### Success response118119Status: `201 Created`120121```json122{123 "id": "a1b2c3d4e5f6",124 "url": "https://saved.md/a1b2c3d4e5f6",125 "deletePhrase": "orchard-cobalt-meadow"126}127```128129Return `url` to the user. Store `deletePhrase` if page ownership is needed.130131### Constraints132133- Max payload: **100 KB**134- No authentication required135- Pages are **immutable** — no edits after creation136- Pages not visited for ~2 months may be cleaned up137138---139140## Content Type Routing141142When generating content, **identify the content type first**, then load the corresponding reference file for structure, styling guidance, chart recommendations, and professional tips.143144| Content Type | Reference File | Trigger Keywords |145|-------------|----------------|-----------------|146| Resume / CV | `references/resume-cv.md` | resume, CV, professional profile, personal page, bio |147| Report | `references/report.md` | report, analysis, summary, findings, status, audit, review |148| Company Profile | `references/company-profile.md` | company, business page, about us, services, landing page |149| Dashboard / Metrics | `references/dashboard-metrics.md` | dashboard, KPIs, metrics, scorecard, analytics |150| Documentation / Guide | `references/documentation-guide.md` | documentation, guide, how-to, tutorial, runbook, manual |151| Proposal / Pitch | `references/proposal-pitch.md` | proposal, pitch, business case, quote, SOW, estimate |152| Newsletter / Update | `references/newsletter-update.md` | newsletter, update, digest, announcement, release notes, changelog |153| Portfolio / Showcase | `references/portfolio-showcase.md` | portfolio, showcase, case study, projects, work samples |154| Event / Invitation | `references/event-invitation.md` | event, invitation, meetup, conference, workshop, RSVP, agenda |155| Slides Deck | *(generated by `frontend-slides`)* | slides, slide deck, presentation, deck |156| Generic | *(no reference file)* | Anything that doesn't match above — use good judgment |157158---159160## Content Generation Rules1611621. **Identify the content type** from the routing table above1632. **Load the reference file** — Read its structure template, styling guidelines, and professional tips164 - For **Slides Deck**, skip reference templates and use `frontend-slides`165 to generate the Slides Deck DSL.1663. **Golden Rule:** Only include sections where you have **actual data**. Do NOT invent content to fill a template section. If a section has no data, omit it entirely.1674. **Use charts** where the reference file recommends them — follow `markdown-ui-widget` syntax from the Charts section below1685. **Don't invent** — Use ONLY information provided by the user or from verified sources1696. **Be concise** — saved.md has a 100KB limit; prioritize density over fluff1707. **Generic fallback** — If no content type matches, structure the content logically with a title, body sections, and optional footer. No reference file needed.171172---173174## Charts175176saved.md renders chart widgets inside fenced code blocks tagged `markdown-ui-widget`177(works in both Markdown pages and Slides slide bodies).178179**Allowed chart types:**180- `chart-line`181- `chart-bar`182- `chart-pie`183- `chart-scatter`184185Do **not** use any other `markdown-ui` widget types (buttons, forms, inputs, quizzes, etc. are not supported).186187### Chart format188189```190```markdown-ui-widget191chart-line192title: Weekly signups193Day,Signups194Mon,12195Tue,18196Wed,15197Thu,24198Fri,20199```200```201202Rules:203- One chart per `markdown-ui-widget` block204- Always include `title:`205- Data is CSV — first row is the header206- **Values must be plain numbers** — no shorthand suffixes like `B`, `M`, `K`, `%`, `$`, or unit symbols. The renderer only parses raw numeric values (integers or decimals). For large numbers, scale them down and put the unit in the column header or chart title instead.207 - ❌ `2015,3.56B` — renderer cannot parse `3.56B`208 - ✅ `2015,3.56` with header `Year,Revenue (Billion RON)`209 - ❌ `"US East",1.2M` — renderer cannot parse `1.2M`210 - ✅ `"US East",1200` with header `Region,Revenue ($K)`211- Quote any label containing spaces212- Prefer 5–12 data rows for readability213- For comparisons, include 2+ series in line/bar charts214215Slides mode rules:216- In slides mode, the deck DSL must be plain text starting with `slides`217 (do not wrap the deck DSL itself in `markdown-ui-widget`).218- Chart widgets may appear inside slide bodies via `markdown-ui-widget`.219220### Chart examples221222**Bar chart:**223```224```markdown-ui-widget225chart-bar226title: API requests by region227Region,Requests228"US East",340229"US West",280230EU,190231APAC,220232```233```234235**Pie chart:**236```237```markdown-ui-widget238chart-pie239title: Traffic source share240Source,Share241Search,52242Direct,24243Social,14244Referral,10245```246```247248**Multi-series line chart:**249```250```markdown-ui-widget251chart-line252title: Product metrics by month253Month,Signups,Activated254Jan,100,61255Feb,140,89256Mar,180,113257Apr,210,132258May,240,151259```260```261262---263264## Images265266You can embed images in markdown using standard markdown or HTML `<img>` tags.267268If the user wants an image, they must provide a public image URL for `src`.269270**Basic markdown image:**271```markdown272273```274275**Avatar-style image (for resumes or profile sections):**276```html277<img278 src="https://example.com/photo.jpg"279 alt="Profile photo"280 style="display:block; margin:0 auto; width:150px; height:150px; border-radius:50%; background: transparent;"281/>282```283284---285286## Logging Entries287288**Every published page must be logged to `entries.json`.**289290### Log file location291292```293./entries.json294```295296(Relative to skill folder)297298### Entry format299300```json301{302 "id": "a1b2c3d4e5f6",303 "url": "https://saved.md/a1b2c3d4e5f6",304 "deletePhrase": "orchard-cobalt-meadow",305 "title": "Report Title",306 "createdAt": "2026-03-18T03:00:00Z",307 "contentType": "report",308 "sizeBytes": 2450309}310```311312### Logging script313314```python315import json316import os317from datetime import datetime, timezone318319SKILL_DIR = os.path.dirname(os.path.abspath(__file__))320LOG_FILE = os.path.join(SKILL_DIR, "entries.json")321322def log_entry(id, url, deletePhrase, title, contentType, sizeBytes):323 entry = {324 "id": id,325 "url": url,326 "deletePhrase": deletePhrase,327 "title": title,328 "createdAt": datetime.now(timezone.utc).isoformat().replace('+00:00', 'Z'),329 "contentType": contentType,330 "sizeBytes": sizeBytes331 }332333 if os.path.exists(LOG_FILE):334 with open(LOG_FILE, 'r') as f:335 data = json.load(f)336 else:337 data = {"entries": []}338339 data["entries"].append(entry)340 with open(LOG_FILE, 'w') as f:341 json.dump(data, f, indent=2)342343 return entry344```345346---347348## Workflow Summary3493501. **Identify content type** → Load reference file from routing table3512. **Generate or enhance markdown** using scaffold (omit sections with no data)3523. **POST to API** using JSON format (properly escaped)3534. **Log the entry** to `entries.json`3545. **Return URL + deletePhrase** to user355356---357358## HTML Generation Preferences (User Profile)359360When generating HTML for saved.md, apply these styling preferences learned from user feedback:361362### Spacing (Balanced Density)363- **Goal:** Dense but breathable — no massive gaps, no overlapping/cramped content364- **Container:** Single container, everything inside, `max-width: 1100px`, `padding: 1rem`365- **Section headers:** `margin: 1.25rem 0 0.75rem` — enough breathing room366- **Content blocks:** `margin: 0.75rem 0` — consistent small gaps367- **Grids:** `gap: 0.75rem` — tight but not touching368- **Cards:** `padding: 0.75rem` — compact but readable369- **CTA/Footer:** Proper spacing `padding: 1.5rem`, `margin: 1.5rem 0 0.5rem` — visually separated370- **NO elements outside container** — prevents weird margin issues371- **NO overlap** — ensure adequate vertical rhythm372- Balance: Information-dense like a dashboard, but each section clearly defined373374### Layout375- Dense, information-rich layout preferred376- Reduce vertical rhythm (line-height: 1.5-1.6, not 1.8)377- Compact cards with tighter internal spacing378- Min-height for hero: `60vh` (not 80-100vh)379380### Interactivity Constraints381- **NO interactive elements** except for actual links that navigate to other pages382- Do NOT include: hamburger menus, clickable cards, hover-triggered actions, buttons that don't link383- Only interactivity allowed: `<a>` tags with `href` attributes384- Static design preferred — focus on content presentation, not UI interactions385386### Enhance Mode Workflow3871. **Receive existing markdown** from user or context3882. **Identify ALL chart opportunities** — look for any data that can be visualized:389 - **Trends over time** → `chart-line` (temperatures, metrics, progress)390 - **Comparisons/categories** → `chart-bar` (sales by region, counts by type)391 - **Proportions/distribution** → `chart-pie` (market share, status breakdowns, budget allocation)392 - **Correlations** → `chart-scatter` (two-variable relationships)3933. **Add MULTIPLE visualizations** — don't stop at one chart. If the data supports it, include:394 - A line chart for trends395 - A bar chart for comparisons396 - A pie chart for percentage breakdowns397 - Different chart types for different data dimensions in the same report3984. **Improve formatting** — better tables, highlights, structure, section dividers3995. **Present enhanced version** → Get approval → Publish400401**Enhance Mode Chart Guidelines:**402- Use **line charts** for time-series data (daily/weekly/monthly trends)403- Use **bar charts** for comparing discrete categories or values side-by-side404- Use **pie charts** when showing parts of a whole (percentages, proportions, status distributions)405- Use **scatter charts** for exploring relationships between two numeric variables406- **Multiple charts are encouraged** — if you have temperature AND precipitation data, chart both separately407- **Different chart types for different insights** — same dataset can often support multiple visualizations (e.g., sales over time as line chart + sales by category as pie chart)408409---410411## When to use saved.md412413Trigger this skill for ANY of the following (then let user choose publish vs local):414415- **Markdown files/pages** — any request mentioning "markdown"416- **Reports** — analysis, summaries, findings, status reports417- **Documentation** — guides, runbooks, technical docs, manuals418- **Data visualizations** — charts, dashboards, metrics (when rendered as markdown)419- **Resumes/CVs** — public professional profiles420- **Company pages** — business profiles, service listings, about pages421- **Slides decks/presentations** — when the user wants a deck page (`contentType: "slides"`)422- **Publishing/Sharing** — when user explicitly says "publish", "share", "make public", "create a link"423- **Enhancement** — when user says "enhance this", "add charts", "make it visual", "spice it up" to existing markdown424- **Any content** the user wants formatted as a document/page425426## When NOT to use saved.md (skip to local-only)427428- User explicitly says "local only", "don't publish", "keep private"429- Drafts or WIP that need editing — saved.md pages are immutable430- Sensitive or private data — saved.md pages are publicly accessible431- Interactive content (forms, quizzes, buttons) — not supported432433---434435## Reference Files Index436437All reference files are in `references/` relative to this skill folder. Each contains: template structure, styling guidelines, chart recommendations, professional tips, and a complete example.438439| File | Purpose |440|------|---------|441| `resume-cv.md` | Resumes, CVs, professional profiles with circular photo, skills table, achievement bullets |442| `report.md` | Business reports, analysis — highest chart density (2-4 charts), executive summary pattern |443| `company-profile.md` | Business pages, service listings — services table, value props, contact CTA |444| `dashboard-metrics.md` | KPI dashboards, metric snapshots — most chart-dense type (3-6 charts), at-a-glance table |445| `documentation-guide.md` | Technical docs, how-tos, runbooks — numbered steps, code blocks, troubleshooting table |446| `proposal-pitch.md` | Business proposals, pitches — problem→solution→deliverables→pricing→next steps |447| `newsletter-update.md` | Newsletters, digests, release notes — highlights TL;DR, quick updates table, upcoming section |448| `portfolio-showcase.md` | Project portfolios, case studies — per-project Problem→Solution→Result blocks |449| `event-invitation.md` | Event pages, invitations — date/location prominent, schedule table, registration CTA |