Updated docs/projectplan/v1/implementation-plan.md to accurately track current implementation status and clearly document unimplemented features. Changes: - Updated current version from 0.4.0 to 0.9.5 - Updated progress summary: Phases 1-5 complete (70% overall) - Added "CRITICAL: Unimplemented Features" section with clear status - Micropub endpoint: NOT IMPLEMENTED (critical V1 blocker) - Notes CRUD API: NOT IMPLEMENTED (optional, deferred to V2) - RSS feed: IMPLEMENTED (v0.6.0, needs verification) - IndieAuth token endpoint: NOT IMPLEMENTED (for Micropub) - Microformats validation: PARTIAL (markup exists, not validated) - Updated summary checklist to reflect actual implementation: - Admin web interface: COMPLETE (v0.5.2) - Public web interface: COMPLETE (v0.5.0) - RSS feed: COMPLETE (v0.6.0) - Authentication: COMPLETE (v0.8.0 with PKCE) - Test coverage: 87% overall - Standards compliance: PARTIAL - Updated timeline with realistic path to V1: - Completed: ~35 hours (Phases 1-5) - Remaining: ~15-25 hours (Micropub + validation) - Path to V1: Micropub (12h), validation (4h), docs (3h), release (2h) - Updated quality gates to reflect v0.9.5 achievements: - Test coverage: 87% (exceeds 80% target) - Manual testing: Complete (IndieLogin working) - Production deployment: Complete (container + CI/CD) - Security tests: Complete (PKCE, token hashing) This update ensures the implementation plan accurately reflects the significant progress made from v0.4.0 to v0.9.5 while clearly documenting what remains for V1 release. Related: Architect validation report identified discrepancies between documented V1 scope and actual v0.9.5 implementation.
StarPunk
A minimal, self-hosted IndieWeb CMS for publishing notes with RSS syndication.
Current Version: 0.1.0 (development)
Versioning
StarPunk follows Semantic Versioning 2.0.0:
- Version format:
MAJOR.MINOR.PATCH - Current:
0.1.0(pre-release development) - First stable release will be
1.0.0
Version Information:
- Check version:
python -c "from starpunk import __version__; print(__version__)" - See changes: CHANGELOG.md
- Versioning strategy: docs/standards/versioning-strategy.md
Philosophy
"Every line of code must justify its existence. When in doubt, leave it out."
StarPunk is designed for a single user who wants to:
- Publish short notes to their personal website
- Own their content (notes stored as portable markdown files)
- Syndicate via RSS
- Support IndieWeb standards (Micropub, IndieAuth)
- Run on minimal resources
Features
- File-based storage: Notes are markdown files, owned by you
- IndieAuth authentication: Use your own website as identity
- Micropub support: Publish from any Micropub client
- RSS feed: Automatic syndication
- No database lock-in: SQLite for metadata, files for content
- Self-hostable: Run on your own server
- Minimal dependencies: 6 core dependencies, no build tools
Requirements
- Python 3.11 or higher
- 500MB disk space
- Linux, macOS, or Windows with WSL2
Quick Start
# Clone repository
git clone https://github.com/YOUR_USERNAME/starpunk.git
cd starpunk
# Install uv (package manager)
curl -LsSf https://astral.sh/uv/install.sh | sh
# Create virtual environment
uv venv .venv --python 3.11
# Install dependencies
uv pip install -r requirements.txt
# Configure
cp .env.example .env
# Edit .env and set ADMIN_ME and SESSION_SECRET
# Initialize database
mkdir -p data/notes
.venv/bin/python -c "from starpunk.database import init_db; init_db()"
# Run development server
.venv/bin/flask --app app.py run --debug
# Visit http://localhost:5000
Configuration
All configuration is in the .env file. Required settings:
ADMIN_ME- Your IndieWeb identity URL (e.g., https://yoursite.com)SESSION_SECRET- Random secret key (generate withpython3 -c "import secrets; print(secrets.token_hex(32))")SITE_URL- Public URL of your site
See .env.example for all options.
Project Structure
starpunk/
├── app.py # Application entry point
├── starpunk/ # Application code
├── data/ # Your notes and database (gitignored)
│ ├── notes/ # Markdown files
│ └── starpunk.db # SQLite database
├── static/ # CSS and JavaScript
├── templates/ # HTML templates
└── tests/ # Test suite
Usage
Publishing Notes
Via Web Interface:
- Navigate to
/admin - Login with your IndieWeb identity
- Create notes in markdown
Via Micropub Client:
- Configure client with your site URL
- Authenticate via IndieAuth
- Publish from any Micropub-compatible app
Backing Up Your Data
Your notes are stored as plain markdown files in data/notes/. Back up this directory:
# Simple backup
tar -czf backup.tar.gz data/
# Or use rsync
rsync -av data/ /backup/starpunk/
Development
See docs/standards/development-setup.md for detailed setup.
# Install dev dependencies
uv pip install -r requirements-dev.txt
# Run tests
.venv/bin/pytest
# Format code
.venv/bin/black starpunk/ tests/
# Lint
.venv/bin/flake8 starpunk/ tests/
Architecture
StarPunk uses a hybrid storage approach:
- Notes content: Markdown files (portable, human-readable)
- Metadata: SQLite database (fast queries)
This gives you both portability AND performance.
See docs/architecture/ for complete documentation.
IndieWeb Compliance
StarPunk implements:
- Micropub - Publishing API
- IndieAuth - Authentication
- Microformats2 - Semantic HTML markup
- RSS 2.0 - Feed syndication
Deployment
Production Setup
# Install gunicorn
uv pip install gunicorn
# Run with gunicorn
.venv/bin/gunicorn -w 4 -b 127.0.0.1:8000 app:app
# Configure nginx/Caddy for HTTPS
# Set up systemd for process management
# Enable regular backups of data/ directory
See docs/architecture/deployment.md for details.
License
MIT License - see LICENSE file
Credits
Built with:
- Flask - Web framework
- python-markdown - Markdown processing
- feedgen - RSS generation
- httpx - HTTP client
- IndieLogin - Authentication service
Contributing
This is a personal project optimized for single-user use. If you want additional features, consider forking!
Support
- Documentation: docs/
- Issues: GitHub Issues
- IndieWeb: indieweb.org