id: task-100.2 title: Create HTTP server module status: Done assignee: [] created_date: '2025-06-22' updated_date: '2025-07-05' labels: [] dependencies:
- task-100.1 parent_task_id: task-100
Description
Implement Bun HTTP server that serves API and static files. This server will be embedded in the CLI executable and serve both the React frontend and API endpoints.
Implementation Details
Server Architecture
The server module will use Bun's native Bun.serve() API to create a high-performance HTTP server. It will handle:
- Static File Serving: Serve the bundled React app from memory
- API Routes: RESTful endpoints for task operations
- Single Origin: Serve both frontend and API from the same localhost origin
Server Module Requirements
Core Functionality:
- Create a
BacklogServerclass insrc/server/index.ts - Accept configuration options: port, host, development mode
- Integrate with existing Core class for task operations
- Provide start/stop lifecycle methods
Request Routing:
- Handle API routes under
/api/*prefix - Serve static files for all other routes
- Support health check endpoint for monitoring
Port Management:
- Start with user-specified port
- Automatically find alternative port if requested port is busy
- Try up to 10 sequential ports before failing
- Notify caller of actual port used
Static Asset Requirements
Production Asset Serving:
- Serve HTML, CSS, and JS files from memory (embedded in executable)
- Handle proper MIME types for different file extensions
- Implement appropriate caching headers for performance
- Support SPA routing (serve index.html for non-API routes)
Port Failover Requirements
Behavior:
- Start with user-specified port (e.g., 3000)
- Try sequential ports (3001, 3002, etc.) if original port is busy
- Attempt up to 10 ports before failing
- Notify caller of actual port used
- Show clear messaging when port differs from requested
Error Handling Requirements
- Return proper HTTP status codes for different scenarios
- Provide clear JSON error responses with helpful messages
- Handle file system errors gracefully
- Validate and sanitize all incoming requests
- Implement clear error messaging for port conflicts
Acceptance Criteria
- [x] Server module created at src/server/index.ts
- [x] Server can be started on configurable port
- [x] Port failover automatically finds available port if requested port is busy
- [x] User is notified of actual port when different from requested port
- [x] Serves static files from memory
- [x] Handles both API routes and static files from single origin
- [x] Basic health check endpoint works
- [x] Graceful error handling when no ports are available