Implement W3C Micropub media endpoint for external client uploads.
Changes:
- Add POST /micropub/media endpoint in routes/micropub.py
- Accept multipart/form-data with 'file' field
- Require bearer token with 'create' scope
- Return 201 Created with Location header
- Validate, optimize, and generate variants via save_media()
- Update q=config response to advertise media-endpoint
- Include media-endpoint URL in config response
- Add 'photo' post-type to supported types
- Add photo property support to Micropub create
- extract_photos() function to parse photo property
- Handles both simple URL strings and structured objects with alt text
- _attach_photos_to_note() function to attach photos by URL
- Only attach photos from our server (by URL match)
- External URLs logged but ignored (no download)
- Maximum 4 photos per note (per ADR-057)
- SITE_URL normalization pattern
- Use .rstrip('/') for consistent URL comparison
- Applied in media endpoint and photo attachment
Per design document: docs/design/v1.4.0/media-implementation-design.md
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
3.1 KiB
3.1 KiB
StarPunk Backlog
Last Updated: 2025-12-10
Recently Completed
v1.3.0 - Microformats2 Compliance and Tags (Complete)
- Tag/Category system with database schema
- p-category microformats2 markup
- h-feed required properties (name, author, url)
- Author h-card with photo and bio
- u-photo placement outside e-content
- mf2py validation test suite
Priority Levels
- Critical - Items that break existing functionality
- High - Important features or fixes
- Medium - Planned features
- Low - Nice-to-have, deferred indefinitely
Critical
No critical items
High
Enhanced Feed Media Support (Scheduled: v1.4.0)
- Multiple image sizes/thumbnails (150px, 320px, 640px, 1280px)
- Full Media RSS implementation (media:group, all attributes)
- Enhanced JSON Feed attachments
- ATOM enclosure links for all media
- See: ADR-059
POSSE
- Native syndication to social networks
- Supported networks:
- First iteration:
- Mastodon (and compatible services)
- Bluesky
- Second iteration
- TBD
- First iteration:
- Solution should include a configuration UI for setup
Medium
Default slug change
- The default slug should be a date time stamp
- YYYYMMDDHHMMSS
- Edge case, if the slug would somehow be a duplicate append a "-x" e.g. -1
Tag Enhancements (v1.3.0 Follow-up)
- Tag pagination on archive pages (when note count exceeds threshold)
- Tag autocomplete in admin interface
- Tag-filtered feeds (e.g.,
/feed.rss?tag=python,/tags/python/feed.rss) - Fix: Empty tag field in admin should remove all tags (currently may leave unchanged)
Tag-Filtered Feeds
- Filter feeds by tag (e.g.,
/feed.rss?tag=python) - Dedicated tag feed URLs (e.g.,
/tags/python/feed.rss) - Support all three formats (RSS, Atom, JSON Feed)
- Cache management for filtered feeds
Webmentions
- Receive endpoint
- Send on publish
- Display received mentions
- Moderation interface
Reply Contexts
- In-reply-to support
- Like/repost posts
- Bookmark posts
Media Uploads Enhancements
- File management interface
- Thumbnail generation
- CDN integration (optional)
Photo Posts
- Instagram-like photo notes
- Gallery views
- EXIF data preservation
Audio/Podcast Support
- Podcast RSS with iTunes namespace
- Audio duration extraction
- Episode metadata support
- Apple/Google podcast compatibility
- See: ADR-059
Video Support
- Video upload handling
- Poster image generation
- Video in Media RSS feeds
- HTML5 video embedding
Low
Flaky Migration Race Condition Tests
- Improve
test_migration_race_condition.py::TestGraduatedLogging::test_debug_level_for_early_retries - Test expects DEBUG retry messages but passes when migration succeeds without retries
- May need to mock or force retry conditions for reliable testing
Deferred Indefinitely
- Static Site Generation - Conflicts with dynamic Micropub
- Multi-language UI - Low priority for single-user system
- Advanced Analytics - Privacy concerns, use external tools
- Comments System - Use Webmentions instead
- WYSIWYG Editor - Markdown is sufficient
- Mobile App - Web interface is mobile-friendly