Files
StarPunk/docs/projectplan/BACKLOG.md
Phil Skentelbery c64feaea23 feat: v1.4.0 Phase 3 - Micropub Media Endpoint
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>
2025-12-10 18:32:21 -07:00

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
  • 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