feat(tags): Add tag archive route and admin interface integration

Implement Phase 3 of v1.3.0 tags feature per microformats-tags-design.md:

Routes (starpunk/routes/public.py):
- Add /tag/<tag> archive route with normalization and 404 handling
- Pre-load tags in index route for all notes
- Pre-load tags in note route for individual notes

Admin (starpunk/routes/admin.py):
- Parse comma-separated tag input in create route
- Parse tag input in update route
- Pre-load tags when displaying edit form
- Empty tag field removes all tags

Templates:
- Add tag input field to templates/admin/edit.html
- Add tag input field to templates/admin/new.html
- Use Jinja2 map filter to display existing tags

Implementation details:
- Tag URL parameter normalized to lowercase before lookup
- Tags pre-loaded using object.__setattr__ pattern (like media)
- parse_tag_input() handles trim, dedupe, normalization
- All existing tests pass (micropub categories, admin routes)

Per architect design:
- No pagination on tag archives (acceptable for v1.3.0)
- No autocomplete in admin (out of scope)
- Follows existing media loading patterns

Generated with Claude Code

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
2025-12-10 11:42:16 -07:00
parent 377027e79a
commit 372064b116
41 changed files with 2573 additions and 10573 deletions

View File

@@ -0,0 +1,97 @@
# StarPunk Backlog
**Last Updated**: 2025-12-10
## 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
### Strict Microformats2 Compliance
- Complete h-entry properties (p-name, p-summary, p-author)
- Author h-card implementation
- h-feed wrapper for index pages
- Full IndieWeb parser compatibility
- Microformats2 validation suite
- See: ADR-040
### Enhanced Feed Media Support
- 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
### Tag/Category System
- Database schema for tags
- Tag-based filtering
- Tag clouds
- Category RSS/ATOM/JSON feeds
- p-category microformats2 support
---
## Medium
### 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