Automated CLI tool to generate beautiful hill charts and save them locally. Stop drawing project status by hand!
Hill charts (popularized by Basecamp) visualize project progress across two key phases:
- Left side (0-50%): "Figuring things out" - unknowns, research, planning, decision-making
- Right side (50-100%): "Making it happen" - execution, building, completing
Projects move left-to-right across the hill as they progress from planning to completion.
Each chart displays:
Your Chart Title ← Your custom name
January 20, 2025 ← Auto-generated date
- 📊 Three usage modes: interactive CLI, JSON (for LLMs), and CLI arguments
- 🤖 MCP Server - Use directly in Claude Desktop and other MCP clients
- 🎨 Beautiful D3.js-generated hill charts
- 🖼️ Automatic PNG export to
outputs/folder - 📤 Notion integration - Upload charts directly to Notion pages via MCP
- 🌈 Auto-assigned colors - each point gets a unique color from a vibrant palette
- 📍 Smart label positioning - labels extend away from chart edges for perfect readability
- 📁 Organized filename format:
chart-name-2025-01-20.png - 🔄 Automatic versioning - never overwrites existing files, auto-increments version numbers
- 🤖 LLM-friendly - perfect for automation with Claude Code and other AI tools
No installation required! Run directly with npx:
npx -y philippgerard/hillcharter /path/to/save/chart.pngThis will:
- Download and run the latest version
- Launch the interactive CLI
- Generate and save your chart to the specified path
Hillcharter includes an MCP server that lets you generate and upload hill charts directly from Claude Desktop!
Step 1: Install hillcharter globally
First, install hillcharter globally on your system:
npm install -g github:philippgerard/hillcharterStep 2: Add to your MCP configuration
Add to your .mcp.json or Claude Desktop config:
{
"mcpServers": {
"hillcharter": {
"command": "hillcharter-mcp",
"env": {
"NOTION_API_KEY": "your_notion_api_key_here"
}
}
}
}Note: After updating your MCP config, restart Claude Desktop for the changes to take effect.
Usage in Claude:
Just ask Claude to generate hill charts naturally:
Generate a hill chart for my Sprint 5 with these tasks:
- User Auth at 60%
- Database at 85%
- API at 30%
Or upload to Notion:
Upload the chart to my Notion page abc123def456
The tool supports three modes: interactive, JSON (ideal for LLMs), and CLI arguments.
Run the CLI tool with no arguments to be prompted interactively:
npm run publish-chartPerfect for programmatic use, especially with AI assistants like Claude Code:
node index.js --json '{"project":"Sprint 5 Progress","points":[{"name":"User Authentication","progress":60},{"name":"Database Migration","progress":85},{"name":"API Refactoring","progress":30}]}'JSON Format:
{
"project": "Project Name",
"points": [
{
"name": "Task Name",
"progress": 50
}
]
}project(required): The chart title/namepoints(required): Array of tasks with name and progress (0-100)- Colors are automatically assigned from the palette
- Unlimited points supported
Pass arguments directly on the command line:
node index.js --project "Sprint 5 Progress" \
--point "User Authentication" --progress 60 \
--point "Database Migration" --progress 85 \
--point "API Refactoring" --progress 30Notes for all modes:
- Charts are automatically saved to
outputs/folder - Progress values must be between 0-100
- Colors are automatically assigned
- Files are automatically versioned if duplicates exist
The JSON mode is designed specifically for easy integration with AI assistants and automation tools.
Example for Claude Code or other LLMs:
node index.js --json '{"project":"Q1 2025 Roadmap","points":[{"name":"Authentication System","progress":75},{"name":"Payment Integration","progress":45},{"name":"Mobile App","progress":20},{"name":"Analytics Dashboard","progress":90}]}'Generated output:
- File:
outputs/q1-2025-roadmap-2025-01-20.png - Auto-versioned if file exists
- All points displayed with unique colors
- Ready to share or include in reports
Progress value guide for LLMs:
- 0-25: Early exploration/research phase
- 25-50: Planning and design phase
- 50-75: Active implementation phase
- 75-100: Finishing and completion phase
The tool will prompt you for:
-
Chart name (e.g., "Sprint 5 Progress", "Q1 2025 Roadmap")
- Default: "Hill Chart" (fully editable - just start typing or use arrow keys)
- Date is automatically added below the title on the chart
-
Points to add:
- Name (e.g., "User Authentication", "API Migration", "Mobile App")
- Progress percentage (0-100%)
- Colors are automatically assigned from a diverse palette
- Add as many points as needed
The tool will then:
- Generate a beautiful hill chart
- Save it to
outputs/folder with format:project-name-YYYY-MM-DD.png - Done! Use the image wherever you need
$ npm run publish-chart
📊 Hill Chart Publisher
Hill Chart Guide:
0-50%: Figuring things out (unknowns, research, planning)
50-100%: Making it happen (execution, completion)
✔ Hill chart name: Sprint 5 Progress
Now add points to the chart:
✔ Point name: User Authentication
✔ Current progress: 🚀 50-60% - Starting execution
✔ Add another point? yes
✔ Point name: Database Migration
✔ Current progress: 📋 25-40% - Planning and designing
✔ Add another point? no
🎨 Generating hill chart...
✅ Chart generated successfully
💾 Saving to outputs folder...
✅ Chart saved successfully!
📁 Location: /Users/you/hillcharter/outputs/sprint-5-progress-2025-01-20.png
✨ Done!$ node index.js --json '{"project":"Q1 Roadmap","points":[{"name":"Auth","progress":75},{"name":"API","progress":45}]}'
📊 Generating hill chart for: Q1 Roadmap
📍 Points: 2
🎨 Generating hill chart...
✅ Chart generated successfully
💾 Saving to outputs folder...
✅ Chart saved successfully!
📁 Location: /Users/you/hillcharter/outputs/q1-roadmap-2025-01-20.png
✨ Done!| Progress | Stage | Meaning |
|---|---|---|
| 0-10% | Just starting | Lots of unknowns, initial exploration |
| 10-25% | Exploring | Active research, gathering requirements |
| 25-40% | Planning | Designing solution, making architecture decisions |
| 40-50% | Final decisions | Last unknowns being resolved, ready to build |
| 50-60% | Starting execution | Implementation has begun |
| 60-75% | Building | Active development, features coming together |
| 75-90% | Finishing up | Polish, testing, final touches |
| 90-100% | Nearly complete | Done or nearly done |
Colors are automatically assigned to each point in order:
- 🔴 Red (#FF6B6B)
- 🩵 Teal (#4ECDC4)
- 🔵 Blue (#45B7D1)
- 🧡 Coral (#FFA07A)
- 💚 Mint (#98D8C8)
- 💛 Yellow (#F7DC6F)
- 💜 Purple (#BB8FCE)
If you have more than 7 points, colors will cycle through the palette again. Each point gets a visually distinct color for easy identification.
The tool never overwrites existing files. If you create multiple charts with the same name on the same day, they're automatically versioned:
outputs/
├── sprint-5-2025-01-20.png ← First chart
├── sprint-5-2025-01-20-1.png ← Second chart (same name, same day)
├── sprint-5-2025-01-20-2.png ← Third chart
└── sprint-5-2025-01-20-3.png ← Fourth chart
How it works:
- First save:
sprint-5-2025-01-20.png - File exists? Next save:
sprint-5-2025-01-20-1.png - That exists too? Next save:
sprint-5-2025-01-20-2.png - And so on...
You'll see a message when versioning occurs:
✅ Chart saved successfully!
📁 Location: outputs/sprint-5-2025-01-20-2.png
(Version 2 - previous versions exist)
This lets you:
- Track progress throughout the day
- Compare different iterations
- Never lose previous charts
Edit lib/hill-chart-generator.js to customize:
- Chart dimensions
- Colors and styling
- Font sizes
- Labels and text
Edit index.js to customize the progress choices in the CLI prompts.
Puppeteer needs Chrome/Chromium to generate images. Install it:
npx puppeteer browsers install chromeMake sure your JSON input:
- Has a valid
projectfield (string) - Has a
pointsarray with at least one point - Each point has
name(string) andprogress(number 0-100)
Potential improvements:
- Historical tracking (save previous chart states)
- Export to other formats (SVG, PDF)
- Animated progress transitions
- Comparison view between different chart versions
- Custom color schemes and themes
- Batch processing from CSV/JSON files
MIT
Contributions are welcome! This is an open-source project designed to make hill chart generation easy and accessible for everyone.
Please feel free to:
- Report bugs via GitHub issues
- Suggest new features
- Submit pull requests
When contributing code, please ensure it follows the existing code style and includes appropriate tests.