45
specs/features/001-landing-page.md
Normal file
45
specs/features/001-landing-page.md
Normal file
@@ -0,0 +1,45 @@
|
||||
# Spec 001: Landing Page and Marketing Site
|
||||
|
||||
## Status: Phase 2 (Implementation)
|
||||
|
||||
## Behavioral Contract
|
||||
|
||||
### Routes
|
||||
- `GET /` returns the landing page with HTTP 200
|
||||
- `GET /pricing` returns the pricing page with HTTP 200
|
||||
- `GET /static/*` serves static files from the `static/` directory
|
||||
- All pages use the shared base template layout
|
||||
- Unknown routes return HTTP 404
|
||||
|
||||
### Landing Page Content
|
||||
- Hero section with tagline and CTA buttons
|
||||
- Code example showing a forest.cue manifest
|
||||
- Feature grid highlighting: registry, deployments, managed services, type safety, teams, pricing
|
||||
- Final CTA section
|
||||
|
||||
### Pricing Page Content
|
||||
- Displays 4 tiers: Free ($0), Developer ($10/mo), Team ($25/user/mo), Enterprise (Custom)
|
||||
- Usage-based add-on pricing table
|
||||
- Accurate pricing data matching specs/PITCH.md
|
||||
|
||||
### Non-Functional Requirements
|
||||
- Pages render server-side (no client-side JS required for content)
|
||||
- Response time < 10ms for template rendering
|
||||
- Valid HTML5 output
|
||||
- Responsive layout (mobile + desktop)
|
||||
|
||||
## Edge Cases
|
||||
- Template file missing -> 500 with error logged
|
||||
- Static file not found -> 404
|
||||
- Malformed path -> handled by axum routing (no panic)
|
||||
|
||||
## Purity Boundary
|
||||
- Template rendering is effectful (file I/O) -> lives in forage-server
|
||||
- No pure core logic needed for static pages
|
||||
- Template engine initialized once at startup
|
||||
|
||||
## Verification
|
||||
- Integration test: GET / returns 200 with expected content
|
||||
- Integration test: GET /pricing returns 200 with expected content
|
||||
- Integration test: GET /nonexistent returns 404
|
||||
- Compile check: `cargo check` passes
|
||||
Reference in New Issue
Block a user