The open source platform-as-a-service for AWS. An alternative to AWS Amplify, Heroku, Render, and Vercel that's serverless and costs $0 to run on your infrastructure.
This is a Turborepo monorepo with the following structure:
apps/console— Nuxt full-stack UI applicationservices— AWS CDK infrastructure (Provider, Runner, Ping services)supabase/functions— Serverless functions using Denopackages/types— Shared TypeScript types for CDK stacks:- CDK-SPA — S3 + CloudFront hosting
- CDK-Functions — Lambda + API Gateway
- CDK-WebService — ECS Fargate + API Gateway
- Provider — Lambda endpoint for connecting AWS accounts to Thunder
- Runner — AWS CodeBuild configuration system for CDK stack deployments
- Ping — Event listener for AWS account pipeline execution events
- Supabase account and database
- AWS account
- GitHub account with a GitHub App configured
- 📖 Release Guide — How to create releases, deploy to production/sandbox, and manage changesets
- ⚙️ Configuration Guide — Setup GitHub secrets, AWS credentials, and Supabase tokens
# Install dependencies
bun install
# Development
bun run dev # Start all workspaces in dev mode
bun run build # Build all workspaces
bun run test # Run tests
bun run lint # Lint all workspaces
# Release management
bun changeset add # Create a changeset for a new release
bun changeset status # View pending changesetsDeploy individual components to sandbox environment:
# Console
cd apps/console && bun run deploy:sandbox
# Services
cd services && bun run deploy:sandbox:provider
cd services && bun run deploy:sandbox:runner
cd services && bun run deploy:sandbox:ping
# Supabase functions
npx supabase functions deploy notification-webhook --project-ref $SANDBOX_SUPABASE_PROJECT_ID
npx supabase functions deploy github-webhook
npx supabase functions deploy polar-webhook --no-verify-jwtProduction releases are automatic when changesets are pushed to master:
- Create a changeset:
bun changeset add - Commit and push:
git commit -m "feat: description" && git push origin master - GitHub Actions automatically: versions packages → deploys services → deploys functions → deploys console
For full details, see the Release Guide.
To deploy Runner in a separate AWS account:
cdk deploy -c environment=sandbox -c consoleAccountId=111122223333Then set environment variables in your Console deployment:
RUNNER_ASSUME_ROLE_ARN=arn:aws:iam::222233334444:role/RunnerCrossAccountRole-sandbox
RUNNER_REGION=us-east-1
RUNNER_SERVICE=https://sqs.us-east-1.amazonaws.com/222233334444/RunnerQueue-sandbox.fifo