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>
120 lines
3.1 KiB
Markdown
120 lines
3.1 KiB
Markdown
# 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
|
|
- 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
|