Comprehensively updated docs/architecture/overview.md to document the actual v0.9.5 implementation instead of aspirational V1 features. Major Changes: 1. Executive Summary - Added version tag (v0.9.5) and status (Pre-V1 Release) - Updated tech stack: Python 3.11, uv, Gunicorn, Gitea Actions - Added deployment context (container-based, CI/CD) 2. Route Documentation - Public routes: Documented actual routes (/, /note/<slug>, /feed.xml, /health) - Admin routes: Updated from /admin/* to /auth/* (v0.9.2 change) - Added development routes (/dev/login) - Clearly marked implemented vs. planned routes 3. API Layer Reality Check - Notes API: Marked as NOT IMPLEMENTED (optional, deferred to V2) - Micropub endpoint: Marked as NOT IMPLEMENTED (critical V1 blocker) - RSS feed: Marked as IMPLEMENTED with full feature list (v0.6.0) 4. Authentication Flow Updates - Documented PKCE implementation (v0.8.0) - Updated IndieLogin flow to use /authorize endpoint (v0.9.4) - Added trailing slash normalization (v0.9.1) - Documented session token hashing (SHA-256) - Updated cookie name (starpunk_session, v0.5.1) - Corrected code verification endpoint usage 5. Database Schema - Added schema_migrations table (v0.9.0) - Added code_verifier to auth_state (v0.8.0) - Documented automatic migration system - Added session metadata fields (user_agent, ip_address) - Updated indexes for performance 6. Container Deployment (NEW) - Multi-stage Containerfile documentation - Gunicorn WSGI server configuration - Health check endpoint - CI/CD pipeline (Gitea Actions) - Volume persistence strategy 7. Implementation Status Section (NEW) - Comprehensive list of implemented features (v0.3.0-v0.9.5) - Clear documentation of unimplemented features - Micropub marked as critical V1 blocker - Standards validation status (partial) 8. Success Metrics - Updated with actual achievements - 70% complete toward V1 - Container deployment working - Automated migrations implemented Security documentation now accurately reflects PKCE implementation, session token hashing, and correct IndieLogin.com API usage. All route tables, data flow diagrams, and examples updated to match v0.9.5 codebase reality. Related: Architect validation report identified need to update architecture docs to reflect actual implementation vs. planned features.
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