feat: complete 001-web-interface implementation
Implement full web interface for Bluesky Personal Archive Tool with:
Phase 1-2: Setup & Foundation
- Go module initialization with all dependencies
- SQLite database with FTS5 full-text search
- Configuration loading and session management
Phase 3: Authentication & Landing (US1)
- OAuth 2.0 with DPoP via bskyoauth
- Session management with 7-day expiration
- Landing page with login/dashboard routing
- Authentication middleware
Phase 4: Archive Management (US2)
- Background worker with rate limiting
- AT Protocol integration for post fetching
- Media download with SHA-256 content-addressable storage
- Archive operations with progress tracking
- Browse interface with search and pagination
- Support for viewing posts from all users in archive
Phase 5: About Page (US3)
- About page with project information
- Dynamic version from git tags (no ldflags needed)
- Navigation partial with consistent header
- Author links (GitHub, Bluesky)
Phase 6: Polish & Testing
- Error pages (401, 404, 500) with proper templates
- HTMX redirect support for expired sessions
- Minimal JavaScript for confirmations
- Storage layer tests (5 tests, all passing)
- 404 NotFound handler with session context
Additional Features:
- QuoteCount tracking for posts (schema v2 migration)
- Incremental database migrations system
- Reply parent links (internal/external routing)
- AT URI direct search support
- Image validation for media display
- Profile handle display for multi-user posts
Technical Stack:
- Go 1.21+ with chi router
- SQLite with WAL mode and FTS5
- HTMX for dynamic interactions
- Pico CSS with dark theme
- bskyoauth for OAuth + DPoP
- indigo SDK for AT Protocol
All MVP tasks complete. CSRF protection and additional tests
deferred for future release.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>