48 lines
2.0 KiB
Markdown
48 lines
2.0 KiB
Markdown
## Purpose
|
|
|
|
Canonical specification for containerized-deployment requirements synced from OpenSpec change deltas.
|
|
|
|
## Requirements
|
|
|
|
### Requirement: Containerized deployment
|
|
The system SHALL run entirely within Docker containers with all dependencies included.
|
|
|
|
#### Scenario: Single container build
|
|
- **WHEN** building the Docker image
|
|
- **THEN** the Dockerfile SHALL include Python runtime, Node.js (for Tailwind if needed), and all application code
|
|
- **AND** expose port 8000 for web traffic
|
|
|
|
#### Scenario: Environment configuration
|
|
- **WHEN** running the container
|
|
- **THEN** the system SHALL read PERPLEXITY_API_KEY from environment variables
|
|
- **AND** fail to start if the key is missing or invalid
|
|
- **AND** support optional configuration for retention days (default: 30)
|
|
- **AND** support optional IMAGE_QUALITY for image compression (default: 85)
|
|
- **AND** support optional OPENROUTER_API_KEY for fallback LLM provider
|
|
- **AND** support optional UMAMI_SCRIPT_URL and UMAMI_WEBSITE_ID for analytics
|
|
|
|
#### Scenario: Data persistence
|
|
- **WHEN** the container restarts
|
|
- **THEN** the SQLite database SHALL persist via Docker volume mount
|
|
- **AND** news data SHALL remain intact across restarts
|
|
|
|
### Requirement: Responsive single-page design
|
|
The system SHALL provide a stunning, responsive one-page website with ClawFort branding.
|
|
|
|
#### Scenario: Brand consistency
|
|
- **WHEN** viewing the website
|
|
- **THEN** the design SHALL feature ClawFort branding (logo, colors, typography)
|
|
- **AND** maintain visual consistency across all sections
|
|
|
|
#### Scenario: Responsive layout
|
|
- **WHEN** viewing on mobile, tablet, or desktop
|
|
- **THEN** the layout SHALL adapt appropriately
|
|
- **AND** the hero block SHALL resize proportionally
|
|
- **AND** the news feed SHALL use appropriate column layouts
|
|
|
|
#### Scenario: Performance
|
|
- **WHEN** loading the page
|
|
- **THEN** initial page load SHALL complete within 2 seconds
|
|
- **AND** images SHALL lazy load outside viewport
|
|
- **AND** JavaScript bundle SHALL be under 100KB gzipped
|