Files
StarPunk/docs/projectplan/v1/quick-reference.md
2025-11-18 19:21:31 -07:00

340 lines
8.9 KiB
Markdown

# StarPunk V1 Quick Reference
## Implementation Order (Dependency-Based)
This is the strict dependency order for implementing StarPunk V1. Each item depends on all items above it.
### Layer 1: Foundation (No Dependencies)
1. `starpunk/utils.py` - Utility functions
2. `starpunk/models.py` - Data models
3. `templates/` - All HTML templates (can be done in parallel)
4. `static/css/style.css` - Styling (can be done in parallel)
### Layer 2: Core Features (Depends on Layer 1)
5. `starpunk/notes.py` - Notes CRUD operations (depends on utils, models)
6. `starpunk/auth.py` - Authentication (depends on models)
### Layer 3: Web Interface (Depends on Layers 1-2)
7. `starpunk/routes/public.py` - Public routes (depends on notes)
8. `starpunk/routes/admin.py` - Admin routes (depends on auth, notes)
### Layer 4: Additional Features (Depends on Layers 1-2)
9. `starpunk/feed.py` - RSS feed generation (depends on notes)
10. `starpunk/micropub.py` - Micropub endpoint (depends on auth, notes)
### Layer 5: API Routes (Depends on Layers 1-4)
11. `starpunk/routes/api.py` - REST API (optional, depends on auth, notes)
### Layer 6: Testing (Depends on All Above)
12. Unit tests for each module
13. Integration tests
14. Standards validation
15. Security testing
### Layer 7: Documentation (Depends on Complete Implementation)
16. User documentation
17. Deployment guide
18. API documentation
---
## Module Dependencies
```
database.py (already complete)
config.py (already complete)
utils.py → models.py
↓ ↓
↓ notes.py ← auth.py
↓ ↓ ↓
↓ feed.py micropub.py
↓ ↓ ↓
└─→ routes/public.py
routes/admin.py (also depends on auth.py)
routes/api.py (optional)
```
---
## Critical Path Items
These features MUST be implemented for a functional V1:
### Tier 1: Absolutely Required
- [ ] `utils.py` - Can't create notes without slug generation
- [ ] `models.py` - Everything uses these data structures
- [ ] `notes.py` - Core functionality
- [ ] `auth.py` - Required for admin access
- [ ] `routes/admin.py` - Required to create notes via web
- [ ] `routes/public.py` - Required to view notes
### Tier 2: Required for IndieWeb Compliance
- [ ] `feed.py` - RSS is required per specs
- [ ] `micropub.py` - Micropub is required per specs
- [ ] Microformats in templates - Required per specs
### Tier 3: Nice to Have
- [ ] `routes/api.py` - Bonus JSON API (not required)
- [ ] `static/js/preview.js` - Enhancement only
- [ ] Media uploads - Can defer to V2
---
## File Checklist
### Python Modules (9 files)
- [x] `starpunk/__init__.py` (complete)
- [x] `starpunk/config.py` (complete)
- [x] `starpunk/database.py` (complete)
- [ ] `starpunk/utils.py` (implement in Phase 1)
- [ ] `starpunk/models.py` (implement in Phase 1)
- [ ] `starpunk/notes.py` (implement in Phase 2)
- [ ] `starpunk/auth.py` (implement in Phase 3)
- [ ] `starpunk/feed.py` (implement in Phase 5)
- [ ] `starpunk/micropub.py` (implement in Phase 6)
### Route Blueprints (3 files)
- [ ] `starpunk/routes/__init__.py` (create in Phase 4)
- [ ] `starpunk/routes/public.py` (implement in Phase 4)
- [ ] `starpunk/routes/admin.py` (implement in Phase 4)
- [ ] `starpunk/routes/api.py` (optional, Phase 7)
### Templates (9 files)
- [ ] `templates/base.html`
- [ ] `templates/index.html`
- [ ] `templates/note.html`
- [ ] `templates/admin/base.html`
- [ ] `templates/admin/login.html`
- [ ] `templates/admin/dashboard.html`
- [ ] `templates/admin/new.html`
- [ ] `templates/admin/edit.html`
- [ ] `templates/feed.xml`
### Static Files (2 files)
- [ ] `static/css/style.css` (required)
- [ ] `static/js/preview.js` (optional)
### Test Files (9 files)
- [x] `tests/__init__.py` (complete)
- [x] `tests/conftest.py` (complete)
- [ ] `tests/test_utils.py`
- [ ] `tests/test_models.py`
- [ ] `tests/test_notes.py`
- [ ] `tests/test_auth.py`
- [ ] `tests/test_feed.py`
- [ ] `tests/test_micropub.py`
- [ ] `tests/test_integration.py`
### Documentation Files
- [ ] Update `README.md` (Phase 9)
- [ ] `docs/architecture/deployment.md` (Phase 9)
- [ ] `docs/user-guide.md` (Phase 9)
- [ ] `docs/api.md` (Phase 9)
- [ ] `CONTRIBUTING.md` (Phase 9)
**Total Files to Create**: ~35 files
---
## Test Coverage Requirements
### Unit Tests (>90% coverage)
- `test_utils.py``utils.py`
- `test_models.py``models.py`
- `test_notes.py``notes.py`
- `test_auth.py``auth.py`
- `test_feed.py``feed.py`
- `test_micropub.py``micropub.py`
### Integration Tests (major flows)
- Login → Create Note → View Note → Edit → Delete
- Micropub → Publish → View on Site
- RSS Feed Updates
### Standards Validation (manual/automated)
- W3C HTML Validator
- W3C Feed Validator
- IndieWebify.me (Microformats)
- Micropub.rocks (Micropub compliance)
### Security Testing
- CSRF protection
- SQL injection prevention
- XSS prevention
- Path traversal prevention
- Authentication/authorization
---
## Configuration Checklist
### Required .env Variables
```bash
# CRITICAL - Must set these
SESSION_SECRET=<generate with: python3 -c "import secrets; print(secrets.token_hex(32))">
ADMIN_ME=https://your-website.com
# Important
SITE_URL=http://localhost:5000
SITE_NAME=My StarPunk Site
SITE_AUTHOR=Your Name
# Optional (have defaults)
SITE_DESCRIPTION=
SESSION_LIFETIME=30
INDIELOGIN_URL=https://indielogin.com
DATA_PATH=./data
NOTES_PATH=./data/notes
DATABASE_PATH=./data/starpunk.db
FLASK_ENV=development
FLASK_DEBUG=1
LOG_LEVEL=INFO
```
---
## Common Development Commands
```bash
# Activate virtual environment
source /home/phil/Projects/starpunk/.venv/bin/activate
# Run development server
flask --app app.py run --debug
# Run tests
pytest
# Run tests with coverage
pytest --cov=starpunk --cov-report=html
# Format code
black starpunk/ tests/
# Lint code
flake8 starpunk/ tests/
# Type check
mypy starpunk/
# Install dependencies
uv pip install -r requirements.txt
# Install dev dependencies
uv pip install -r requirements-dev.txt
# Create database
python -c "from starpunk.database import init_db; init_db()"
# Run specific test file
pytest tests/test_notes.py
# Run specific test
pytest tests/test_notes.py::test_create_note
# Check test coverage
pytest --cov=starpunk --cov-report=term-missing
```
---
## Key Design Decisions Reference
Quick lookup for architectural decisions:
| Decision | ADR | Key Choice |
|----------|-----|------------|
| Web Framework | ADR-001 | Flask (minimal, no magic) |
| Dependencies | ADR-002 | 6 packages only (Flask, markdown, feedgen, httpx, python-dotenv, pytest) |
| Frontend | ADR-003 | Server-side rendering, minimal JS |
| Storage | ADR-004 | Hybrid: Files for content, DB for metadata |
| Authentication | ADR-005 | IndieLogin.com (delegated OAuth) |
| Virtual Env | ADR-006 | uv package manager, Python 3.11+ |
---
## Success Criteria
### V1 is complete when:
- [ ] Can create notes via web interface
- [ ] Can authenticate with IndieLogin.com
- [ ] Can view published notes on public site
- [ ] Can publish via Micropub client
- [ ] RSS feed is valid and updates
- [ ] All tests pass (>80% coverage)
- [ ] All validators pass (HTML, RSS, Microformats, Micropub)
- [ ] Documentation is complete
- [ ] Deployable to production
### Performance Targets
- [ ] API responses < 100ms
- [ ] Page renders < 200ms
- [ ] RSS generation < 300ms
- [ ] Memory usage < 100MB
### Quality Targets
- [ ] Test coverage > 80%
- [ ] No security vulnerabilities
- [ ] Valid HTML5
- [ ] Valid RSS 2.0
- [ ] Valid Microformats2
- [ ] Micropub spec compliant
---
## Troubleshooting Common Issues
### Database locked errors
- Close all database connections
- Check if another process has lock
- Restart Flask app
### IndieLogin fails
- Check ADMIN_ME is set correctly
- Verify internet connection to indielogin.com
- Check state token hasn't expired (5 min limit)
### File not found errors
- Check DATA_PATH exists
- Check file permissions (need write access)
- Check year/month directories created
### Import errors
- Ensure virtual environment activated
- Run `uv pip install -r requirements.txt`
- Check PYTHONPATH if needed
### Tests fail
- Check database initialized
- Check test fixtures in conftest.py
- Ensure test isolation (no shared state)
---
## Quick Links
### Documentation
- [Full Implementation Plan](implementation-plan.md)
- [Architecture Overview](/home/phil/Projects/starpunk/docs/architecture/overview.md)
- [Technology Stack](/home/phil/Projects/starpunk/docs/architecture/technology-stack.md)
### External Specs
- [Micropub Spec](https://micropub.spec.indieweb.org/)
- [IndieAuth Spec](https://indieauth.spec.indieweb.org/)
- [Microformats2](http://microformats.org/wiki/microformats2)
- [RSS 2.0 Spec](https://www.rssboard.org/rss-specification)
### Tools
- [W3C HTML Validator](https://validator.w3.org/)
- [W3C Feed Validator](https://validator.w3.org/feed/)
- [IndieWebify.me](https://indiewebify.me/)
- [Micropub.rocks](https://micropub.rocks/)
- [Quill (Micropub Client)](https://quill.p3k.io/)
---
**Last Updated**: 2025-11-18