pages
Publish dynamic web pages for dashboards, trackers, or any data viewable in a browser.
Skill by eddmann
Install
Works with Claude Code, Claude apps, Codex, Cursor, Gemini CLI, GitHub Copilot, VS Code, OpenCode, Goose, Windsurf. Read the repository before you give any tool access to your data.
npx agentmarket install skill/eddmann-pages
Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.
Get the weekly diff
The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.
About
Use cases: backend, data
Reviews
Write a reviewNo reviews yet. Installed it? Reviews come from verified installers only. How reviews work
Permissions
What this skill can do and what it asks for, from its SKILL.md. Checked Oct 25, 2026.
- Tools
- No tools found
- Secrets
- None asked for
- Install scripts
- None found
- Runs as
- Python package
Network hosts it talks to 1
codeload.github.com· found in install command
Files it touches
~/.claude/skills/pages
What's inside
- Skill name
pages- Description
- Publish dynamic web pages for dashboards, trackers, or any data viewable in a browser. Server-side Python runs on every request.
- License
- MIT
- Instructions
- 67 lines in SKILL.md · view on GitHub
Before installing
- Ships executable scripts
Files (11)
- SKILL.md
- .gitkeep · pages/
- server.py · scripts/
- icon-192.svg · static/
- icon-512.svg · static/
- icon.svg · static/
- manifest.json · static/
- sw.js · static/
- base.html · templates/
- error.html · templates/
- home.html · templates/
SKILL.md (first lines)
# Pages
Drop a `.py` file in `pages/` with a `render(request)` function and it's live as a web page. Any Python logic — DB queries, API calls, file reads — runs server-side on every request. The server wraps your HTML in a shared dark mode layout with auto-discovered navigation.
Available at `http://jeeves:8080` over Tailscale.
## Creating Pages
Create, edit, and delete `.py` files in `workspace/skills/pages/pages/`. Changes are live on next request — no publish step, no restart.
```python
# pages/status.py
TITLE = "Status" # display name (default: slug titlecased)
ICON = "📊" # emoji for nav/home (default: 📄)
PINNED = True # show in bottom tab bar (default: False)
POSITION = 1 # tab sort order, lower = left (default: 99)
def render(request):
"""Return an HTML string. Can be sync or async."""
from datetime import datetime
now = datetime.now().strftime("%H:%M")
return f'<h1 class="text-2xl font-bold">Status</h1><p>Last checked: {now}</p>'
```
### Rules
- `render(request)` is **required** — receives a FastAPI `Request`, returns HTML
- `Path(__file__)` gives the module's location for relative DB/file paths
- Files starting with `_` are skipped (use for shared helpers)
- Errors show a styled traceback page, not a raw 500
- Use `request.query_params` for URL parameters (e.g. `?date=2026-01-01`)
### Sub-routes
Use a directory with `__init__.py` for nested pages:
```
pages/
├── status.py # /status
└── items/ # /items, /items/new, /items/42
├── __init__.py # /items (index) + fallback for /items/{id}
└── new.py # /items/new (exact match)
```
The `__init__.py` handles the index and any unmatched sub-paths via `request.path_params.get("subpath", "")`.
## Server
Page changes are live immediately. Only restart if `server.py` itself changes:
```bash
# Start
nohup uv run workspace/skills/pages/scripts/server.py > /tmp/jeeves-pages.log 2>&1 &
# Restart
pkill -f 'skills/pages/scripts/server.py'; nohup uv run workspace/skills/pages/scripts/server.py > /tmp/jeeves-pages.log 2>&1 &
```
## Styling
Tailwind CSS is available via CDN. Custom theme colours:
`bg` (#1a1a2e), `card` (#16213e), `border` (#2a2a4a), `accent` (#e94560), `muted` (#8a8a9a)
Use as Tailwind classes: `bg-card`, `border-border`, `text-accent`, `text-muted`, etc.From eddmann/jeeves, MIT.
More from eddmann/jeeves
- 0.448score
lists
eddmann
General-purpose lists — shopping, questions for appointments, packing lists, etc.
SkillDFreshness: D★ 2Claude Code +9 - 0.448score
twitter
eddmann
Fetch X/Twitter timeline and bookmarks.
SkillDFreshness: D★ 2Claude Code +9 - 0.448score
summarise
eddmann
Extract and summarise content from URLs, YouTube videos, podcasts, and files.
SkillDFreshness: D★ 2Claude Code +9 - 0.448score
zettelkasten
eddmann
Personal knowledge base using the Zettelkasten method.
SkillDFreshness: D★ 2Claude Code +9 - 0.448score
reminders
eddmann
Manage reminders — one-off and recurring.
SkillDFreshness: D★ 2Claude Code +9 - 0.443score
garmin
eddmann
Query Garmin Connect health and fitness data including activities, sleep, heart rate, HRV, stress, and body battery.
SkillDFreshness: D★ 2Claude Code +9 - 0.443score
plex
eddmann
Query Plex Media Server for movies, TV shows, music, and playback history.
SkillDFreshness: D★ 2Claude Code +9 - 0.443score
strava
eddmann
Query Strava fitness data including activities, stats, and athlete info.
SkillDFreshness: D★ 2Claude Code +9 - 0.442score
skill-creator
eddmann
Create or update skills.
SkillDFreshness: D★ 2Claude Code +9 - 0.440score
playwright
eddmann
Render web pages with JavaScript using Playwright for sites that need browser rendering or have issues with simple HTTP fetching.
SkillDFreshness: D★ 2Claude Code +9 - 0.414score
github
eddmann
Interact with GitHub using the `gh` CLI.
SkillDFreshness: D★ 2Claude Code +9
Signals
- Stars
- 2
- Forks
- 1
- Open issues
- 0
- Last commit (this folder)
- Mar 1, 2026 (8 months ago)
From GitHub (fetched Oct 24, 2026).
Details
- License
- MIT
- Repository
- github.com/eddmann/jeeves
- First seen
- Oct 24, 2026
- Last checked
- Oct 24, 2026
- Source
- GitHubgithub-graphql
More from eddmann
- 0.556score
review
eddmann
Use when reviewing local code against repository conventions and coding guidelines.
SkillBFreshness: B★ 2Claude Code +9 - 0.556score
db
eddmann
Use when inspecting schemas, querying data or making authorized database changes.
SkillBFreshness: B★ 2Claude Code +9 - 0.553score
public-release
eddmann
Use when auditing a repository before making it public.
SkillBFreshness: B★ 2Claude Code +9 - 0.551score
commit
eddmann
Use when committing task changes using Conventional Commits.
SkillBFreshness: B★ 2Claude Code +9 - 0.551score
generate-readme
eddmann
Use when creating or updating a project's README from its actual capabilities and usage.
SkillBFreshness: B★ 2Claude Code +9 - 0.551score
context7
eddmann
Use when looking up library or framework documentation and version-specific API examples.
SkillBFreshness: B★ 2Claude Code +9
Cite this page
pages skill. Agent Mart. https://agentmart.dev/skills/eddmann-pages (last updated 2026-10-24)