Remove the module "xxx" { source = "./module" } indirection layer
from all 66 service stacks. Resources are now defined directly in
each stack's main.tf instead of through a wrapper module.
- Merge module/main.tf contents into stack main.tf
- Apply variable replacements (var.tier -> local.tiers.X, renamed vars)
- Fix shared module paths (one fewer ../ at each level)
- Move extra files/dirs (factory/, chart_values, subdirs) to stack root
- Update state files to strip module.<name>. prefix
- Update CLAUDE.md to reflect flat structure
Verified: terragrunt plan shows 0 add, 0 destroy across all stacks.
3.4 KiB
3.4 KiB
Technology Stack
Analysis Date: 2026-02-17
Languages
Primary:
- Go 1.24.1 - Backend application and main server logic
Secondary:
- HTML/CSS/JavaScript - Frontend UI
Runtime
Environment:
- Go runtime (compiled binary)
Container Runtime:
- Docker/Alpine Linux (3.20) - Production deployment target
- Multi-stage Dockerfile with golang:1.23-alpine builder
Package Manager:
- Go modules (go.mod/go.sum)
Frameworks
Core:
- Standard Go
net/http- HTTP server and routing- Native http.ServeMux for route handling (Go 1.22+ pattern routing)
- Native http.FileServer for static file serving
- Native http.Handler interface for middleware
Authentication:
- github.com/go-webauthn/webauthn v0.15.0 - WebAuthn/FIDO2 authentication
- Handles registration and login ceremonies
- Supports multiple credential types
Frontend:
- HTML5 - Markup
- CSS - Styling (Pico CSS framework for minimal styling)
- Vanilla JavaScript - Client-side interactivity (no framework detected)
Key Dependencies
Critical:
- github.com/go-webauthn/webauthn v0.15.0 - Passwordless authentication via WebAuthn
- Includes transitive dependencies:
- github.com/go-webauthn/x v0.1.26 - WebAuthn extension support
- github.com/golang-jwt/jwt/v5 v5.3.0 - JWT token handling
- github.com/google/go-tpm v0.9.6 - TPM support for credentials
- github.com/fxamacker/cbor/v2 v2.9.0 - CBOR encoding/decoding
- github.com/go-viper/mapstructure/v2 v2.4.0 - Configuration mapping
- github.com/google/uuid v1.6.0 - UUID generation
- golang.org/x/crypto v0.43.0 - Cryptographic primitives
- golang.org/x/sys v0.37.0 - System-level primitives
- Includes transitive dependencies:
Infrastructure:
- None detected (no external databases, queues, or third-party services in go.mod)
- File-based storage only
Configuration
Environment Variables:
LISTEN_ADDR- Server listen address (default::8080)DATA_DIR- Data storage directory (default:/data)SCRAPE_INTERVAL- Reddit scraper interval (default: 15 minutes)ADMIN_USERNAME- Admin account username (optional)SESSION_TTL- Session expiration time (default: 720 hours)PROXY_TIMEOUT- HTTP proxy request timeout (default: 10 seconds)WEBAUTHN_RPID- WebAuthn relying party ID (default:localhost)WEBAUTHN_ORIGIN- WebAuthn origin URL (default:http://localhost:8080)WEBAUTHN_DISPLAY_NAME- WebAuthn display name (default:F1 Stream)
Build:
Dockerfile- Multi-stage Docker build- Builder stage: golang:1.23-alpine with CGO_ENABLED=0
- Runtime stage: alpine:3.20 with ca-certificates
- Exposes port 8080
Platform Requirements
Development:
- Go 1.24.1 or compatible
- Unix-like shell (bash/zsh) for build scripts
- Optional: Docker for containerized development
Production:
- Kubernetes cluster (Terraform module structure suggests K8s deployment)
- Persistent volume for
/datadirectory - Port 8080 exposed for HTTP traffic
- ca-certificates for HTTPS proxying
Storage
Data Persistence:
- File-based JSON storage in
DATA_DIR - Files:
streams.json,users.json,sessions.json,scraped.json - Atomic writes using temp-file-then-rename pattern (
writeJSONfunction ininternal/store/store.go)
External Data Sources
Reddit API:
- URL:
https://www.reddit.com/r/motorsportsstreams2/new.json?limit=25 - No authentication required (public subreddit)
- Used for scraping F1 stream links
Stack analysis: 2026-02-17