feat(feeds): implement timeline and discover feed system with aggregator docs
## ๐ Major Feature: Complete Feed System Implementation
Implements the complete Timeline and Discover feed architecture for Coves,
following atProto patterns with proper separation of concerns (handlers โ
services โ repositories). This is a foundational feature for the alpha release.
### New Features
**Timeline Feed (User-Specific)**
- `social.coves.feed.getTimeline` XRPC endpoint
- Authenticated user feed showing posts from subscribed communities
- Full architecture: Handler โ Service โ Repository
- Integration tests with cursor pagination (368 lines)
**Discover Feed (Public)**
- `social.coves.feed.getDiscover` XRPC endpoint
- Public feed showing recent posts from all communities
- Optimized for performance with documented indexing strategy
- Comprehensive security tests (273 lines)
**Shared Infrastructure**
- Created `feed_repo_base.go` (340 lines) to eliminate code duplication
- Shared lexicon definitions in `social.coves.feed.defs`
- HMAC-SHA256 signed cursors for pagination integrity
- Consistent error handling across both feeds
### Technical Improvements
**Code Quality**
- Eliminated ~700 lines of duplicate code via shared base repository
* timeline_repo.go: 426 โ 131 lines (-69% duplication)
* discover_repo.go: 383 โ 124 lines (-68% duplication)
- Consistent formatting with gofumpt
- Comprehensive inline documentation
**Security Enhancements**
- HMAC cursor signing prevents pagination tampering
- CURSOR_SECRET environment variable for production deployments
- DID format validation (must start with "did:")
- Rate limiting strategy documented (100 req/min per IP)
- Input validation at handler level
**Performance**
- Database indexes documented for optimal query performance
- Cursor-based pagination for large result sets
- Efficient joins between posts, communities, and users
### Aggregator System Updates
**Documentation**
- Documented critical alpha blocker: aggregator user registration
- Aggregators cannot post until indexed as users in AppView
- Proposed solution: `social.coves.aggregator.register` endpoint
- Quick fix alternative documented for testing
**Code Cleanup**
- Consistent formatting across aggregator codebase
- Improved test readability
- Updated PRD with alpha blockers section
### Files Changed (30 files, +2406/-308 lines)
**New Implementations**
- `internal/api/handlers/timeline/` - Timeline XRPC handler
- `internal/api/handlers/discover/` - Discover XRPC handler
- `internal/core/timeline/` - Timeline business logic
- `internal/core/discover/` - Discover business logic
- `internal/db/postgres/feed_repo_base.go` - Shared repository base
- `internal/db/postgres/timeline_repo.go` - Timeline data access
- `internal/db/postgres/discover_repo.go` - Discover data access
- `internal/atproto/lexicon/social/coves/feed/` - Feed lexicons
- `tests/integration/timeline_test.go` - Timeline integration tests
- `tests/integration/discover_test.go` - Discover integration tests
**Updated**
- `cmd/server/main.go` - Feed service initialization
- `internal/api/routes/` - Timeline and discover routes
- `docs/aggregators/PRD_AGGREGATORS.md` - Alpha blocker docs
- `tests/integration/helpers.go` - Shared test utilities
### Testing
- โ
All 11 integration tests passing
- โ
Timeline feed with authentication
- โ
Discover feed security validation
- โ
Cursor pagination integrity
- โ
Aggregator authorization flows
### Migration Path
To revert this entire feature in the future:
```bash
git revert -m 1 <this-merge-commit-id>
```
๐ค Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>