Static Sites on Velocity

Ship static sites with
zero ops overhead

Push to main and Velocity handles the rest — S3, CloudFront, Route 53, and TLS, fully automated.

See the pipeline → View config
< 60s
Avg deploy time
Global
CloudFront CDN
Zero
Infra to manage
TLS
Auto-provisioned

Everything you need, nothing you don't

Velocity provisions and manages all infrastructure. You write HTML, CSS, and JS. We handle the rest.

☁️

S3 + CloudFront

Files are synced to S3 and distributed globally via CloudFront on every push. Cache invalidation happens automatically.

🔒

TLS & Custom Domains

ACM certificates are provisioned and renewed automatically. Route 53 DNS is wired up with no manual steps.

Build Flexibility

Ship raw HTML or run a full build pipeline — Next.js, Vite, Astro, Hugo. Set build.command in service.yaml and point output_dir at your dist folder.

🌍

Multi-environment

Promote from sandbox to staging to production with a single config entry. Each environment gets its own S3 bucket and distribution.

🔐

OIDC Auth

GitHub Actions authenticates to AWS via OIDC — no long-lived credentials stored anywhere. Deploy roles are scoped per-app.

📊

Deployment Tracking

Every push creates a deployment record in the platform. Status, SHA, and run URLs are captured so you always know what's live.

Push to deploy

Every push to main runs this pipeline automatically.

💻
git push
Trigger on main
🔑
OIDC Auth
No secrets stored
🔨
Build
npm run build
🪣
S3 Sync
--delete flag
LIVE
🌐
CloudFront
Cache invalidated

One file to rule it all

The entire deployment contract lives in .github/golfnow/service.yaml. Velocity reads it on every deploy.

.github/golfnow/service.yaml
# Service identity service: name: tn-static-pub team: golf-okta-velocity-test platform: s3 kind: static # Build — leave command as "true" for raw HTML build: command: "true" output_dir: "." node_version: "20" # Environments environments: sandbox: {}

What Velocity sets up for you