{"id":48671522,"url":"https://github.com/thunder-so/thunder","last_synced_at":"2026-04-10T12:31:03.313Z","repository":{"id":343830323,"uuid":"1173555432","full_name":"thunder-so/thunder","owner":"thunder-so","description":"AWS CDK stacks to deploy apps like a pro","archived":false,"fork":false,"pushed_at":"2026-04-03T12:47:28.000Z","size":273,"stargazers_count":1,"open_issues_count":0,"forks_count":2,"subscribers_count":0,"default_branch":"master","last_synced_at":"2026-04-06T11:33:05.095Z","etag":null,"topics":["aws","aws-cloudfront","aws-ec2","aws-ecs-fargate","aws-lambda","aws-s3","aws-s3-cloudfront"],"latest_commit_sha":null,"homepage":"https://www.thunder.so","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/thunder-so.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-03-05T13:54:03.000Z","updated_at":"2026-04-05T23:28:30.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/thunder-so/thunder","commit_stats":null,"previous_names":["thunder-so/thunder"],"tags_count":4,"template":false,"template_full_name":null,"purl":"pkg:github/thunder-so/thunder","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thunder-so%2Fthunder","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thunder-so%2Fthunder/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thunder-so%2Fthunder/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thunder-so%2Fthunder/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/thunder-so","download_url":"https://codeload.github.com/thunder-so/thunder/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thunder-so%2Fthunder/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31642618,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-10T07:40:12.752Z","status":"ssl_error","status_checked_at":"2026-04-10T07:40:11.664Z","response_time":98,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["aws","aws-cloudfront","aws-ec2","aws-ecs-fargate","aws-lambda","aws-s3","aws-s3-cloudfront"],"created_at":"2026-04-10T12:31:02.701Z","updated_at":"2026-04-10T12:31:03.299Z","avatar_url":"https://github.com/thunder-so.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# thunder\n\n\u003cp\u003e\n    \u003ca href=\"https://www.npmjs.com/package/@thunder-so/thunder\"\u003e\u003cimg alt=\"Version\" src=\"https://img.shields.io/npm/v/@thunder-so/thunder.svg\" /\u003e\u003c/a\u003e\n    \u003ca href=\"https://www.npmjs.com/package/@thunder-so/thunder\"\u003e\u003cimg alt=\"License\" src=\"https://img.shields.io/npm/l/@thunder-so/thunder.svg\" /\u003e\u003c/a\u003e\n\u003c/p\u003e\n\nBuild full-stack apps on your own AWS.\n\nThunder is a CDK library and CLI for deploying modern web applications on AWS. One library to rule them all: [Static SPAs](#static), [Lambda Functions](#lambda), [Containers on Fargate](#fargate) and [EC2](#ec2), and [Serverless Full-stack Frameworks](#serverless-frameworks).\n\n## Table of Contents\n\n- [Features](#features)\n- [Supported Frameworks \u0026 Patterns](#supported-frameworks--patterns)\n- [Quick Start](#quick-start)\n- [Stacks](#stacks)\n  - [Static](#static) - S3 + CloudFront + Route53\n  - [Lambda](#lambda) - API Gateway + Lambda\n  - [Fargate](#fargate) - ECS Fargate + ALB + CloudFront\n  - [EC2](#ec2) - EC2 + Docker + Elastic IP\n  - [Serverless Frameworks](#serverless-frameworks) - Full-stack meta-frameworks with Lambda + S3 + CloudFront\n  - [Template](#template) - Coolify-style templates\n- [CLI Commands](#cli-commands)\n- [Documentation](#documentation)\n- [License](#license)\n\n## Features\n\n- **Constructs:** One-line deployment for `Static`, `Lambda`, `Fargate`, `EC2`, `Serverless`, and framework-specific constructs.\n- **Thunder CLI (`th`):** Context-aware CLI for initializing, deploying, and managing your infrastructure.\n- **VPC Link Pattern:** Easily connect your compute resources to a shared VPC.\n- **High-Performance Serving:** Pre-configured [CloudFront](https://aws.amazon.com/cloudfront/) distributions with OAC, security headers, and edge optimizations.\n- **Built-in CI/CD:** Optional [AWS CodePipeline](https://aws.amazon.com/codepipeline/) integration with GitHub support.\n\n## Supported Frameworks \u0026 Patterns\n\n- **Static:** Vite (React, Vue, Svelte, Solid), Next.js (SSG), Astro (SSG), Gatsby.\n- **Serverless:** Node.js Lambda, Bun, Container-based Lambda.\n- **Containers:** [ECS Fargate](https://aws.amazon.com/fargate/) with ALB, Docker on [EC2](https://aws.amazon.com/ec2/) with Elastic IP.\n- **Full-stack SSR:** [Nuxt](https://nuxt.com/), [Astro](https://astro.build/), [TanStack Start](https://tanstack.com/start), [SvelteKit](https://kit.svelte.dev/), [Solid Start](https://start.solidjs.com/), [AnalogJS](https://analogjs.org/).\n\n## Quick Start\n\n### 1. Install\n\n```bash\nbun add @thunder-so/thunder --development\n```\n\n### 2. Initialize\n\n```bash\nnpx th init\n```\n\n### 3. Configure\n\nCreate a stack file (e.g., `stack/dev.ts`):\n\n```typescript\nimport { Cdk, Static, type StaticProps } from \"@thunder-so/thunder\";\n\nconst myApp: StaticProps = {\n  env: {\n    account: \"123456789012\",\n    region: \"us-east-1\",\n  },\n  application: \"myapp\",\n  service: \"web\",\n  environment: \"prod\",\n\n  rootDir: \".\",\n  outputDir: \"dist\",\n};\n\nnew Static(\n  new Cdk.App(),\n  `${myApp.application}-${myApp.service}-${myApp.environment}-stack`,\n  myApp,\n);\n```\n\n### 4. Deploy\n\n```bash\nnpx cdk deploy --app \"npx tsx stack/dev.ts\" --profile default\n```\n\n## Stacks\n\n### Static\n\nDeploy static websites to [S3](https://aws.amazon.com/s3/) with [CloudFront](https://aws.amazon.com/cloudfront/) CDN and [Route53](https://aws.amazon.com/route53/) DNS.\n\n**Best for:** Static sites, SPAs, JAMstack applications\n\n**AWS Resources:**\n\n- [S3 Bucket](https://aws.amazon.com/s3/) - Static file hosting\n- [CloudFront Distribution](https://aws.amazon.com/cloudfront/) - Global CDN with caching\n- [Route53](https://aws.amazon.com/route53/) - DNS management (optional)\n- [ACM Certificate](https://aws.amazon.com/certificate-manager/) - SSL/TLS certificates (optional)\n- [Lambda@Edge](https://aws.amazon.com/lambda/edge/) - Request/response manipulation (optional)\n\n**Example:**\n\n```typescript\nimport { Cdk, Static, type StaticProps } from \"@thunder-so/thunder\";\n\nconst config: StaticProps = {\n  env: { account: \"123456789012\", region: \"us-east-1\" },\n  application: \"myapp\",\n  service: \"web\",\n  environment: \"prod\",\n  rootDir: \".\",\n  outputDir: \"dist\",\n\n  // Optional: Custom domain\n  domain: \"example.com\",\n  globalCertificateArn: \"arn:aws:acm:us-east-1:...\",\n  hostedZoneId: \"Z123456789\",\n\n  // Optional: Lambda@Edge for redirects/headers/rewrites\n  redirects: [{ source: \"/old\", destination: \"/\" }],\n  rewrites: [{ source: \"/old\", destination: \"/new\" }],\n  headers: [{ path: \"/*\", name: \"X-Custom-Header\", value: \"value\" }],\n};\n\nnew Static(new Cdk.App(), \"myapp-web-prod-stack\", config);\n```\n\n---\n\n### Lambda\n\nDeploy serverless functions with [API Gateway](https://aws.amazon.com/api-gateway/) and optional [Lambda Function URL](https://docs.aws.amazon.com/lambda/latest/dg/lambda-urls.html).\n\n**Best for:** Serverless APIs, microservices, event-driven applications\n\n**AWS Resources:**\n\n- [Lambda Function](https://aws.amazon.com/lambda/) - Compute layer\n- [API Gateway](https://aws.amazon.com/api-gateway/) - HTTP API with custom domain support\n- [CloudWatch Logs](https://aws.amazon.com/cloudwatch/) - Logging and monitoring\n- [Secrets Manager](https://aws.amazon.com/secrets-manager/) - Secure secret injection (optional)\n\n**Example:**\n\n```typescript\nimport { Cdk, Lambda, type LambdaProps } from \"@thunder-so/thunder\";\n\nconst config: LambdaProps = {\n  env: { account: \"123456789012\", region: \"us-east-1\" },\n  application: \"myapp\",\n  service: \"api\",\n  environment: \"prod\",\n  rootDir: \".\",\n\n  functionProps: {\n    runtime: Cdk.aws_lambda.Runtime.NODEJS_22_X,\n    architecture: Cdk.aws_lambda.Architecture.ARM_64,\n    codeDir: \"src\",\n    handler: \"index.handler\",\n    memorySize: 512,\n    timeout: 30,\n    url: true, // Enable function URL\n    keepWarm: true, // Prevent cold starts\n    variables: [{ NODE_ENV: \"production\" }],\n    secrets: [{ key: \"DATABASE_URL\", resource: \"arn:aws:secretsmanager:...\" }],\n  },\n\n  // Optional: Custom domain\n  domain: \"api.example.com\",\n  regionalCertificateArn: \"arn:aws:acm:us-east-1:...\",\n  hostedZoneId: \"Z123456789\",\n};\n\nnew Lambda(new Cdk.App(), \"myapp-api-prod-stack\", config);\n```\n\n---\n\n### Fargate\n\nDeploy containerized applications on [ECS Fargate](https://aws.amazon.com/fargate/) with Application Load Balancer and [CloudFront](https://aws.amazon.com/cloudfront/).\n\n**Best for:** Containerized web applications, microservices, long-running processes\n\n**AWS Resources:**\n\n- [ECS Cluster](https://aws.amazon.com/ecs/) - Container orchestration\n- [Fargate Task](https://aws.amazon.com/fargate/) - Serverless containers\n- [Application Load Balancer](https://aws.amazon.com/elasticloadbalancing/) - Traffic distribution\n- [ECR Repository](https://aws.amazon.com/ecr/) - Container registry (via CodePipeline)\n- [CloudWatch Logs](https://aws.amazon.com/cloudwatch/) - Container logging\n\n**Example:**\n\n```typescript\nimport { Cdk, Fargate, type FargateProps } from \"@thunder-so/thunder\";\n\nconst config: FargateProps = {\n  env: { account: \"123456789012\", region: \"us-east-1\" },\n  application: \"myapp\",\n  service: \"api\",\n  environment: \"prod\",\n  rootDir: \".\",\n\n  serviceProps: {\n    architecture: Cdk.aws_ecs.CpuArchitecture.ARM64,\n    desiredCount: 2,\n    cpu: 512, // 0.5 vCPU\n    memorySize: 1024, // 1 GB\n    port: 3000,\n    healthCheckPath: \"/health\",\n    variables: [{ NODE_ENV: \"production\" }],\n    dockerFile: \"Dockerfile\",\n  },\n\n  // Optional: Custom domain\n  domain: \"api.example.com\",\n  globalCertificateArn: \"arn:aws:acm:us-east-1:...\",\n  hostedZoneId: \"Z123456789\",\n};\n\nnew Fargate(new Cdk.App(), \"myapp-api-prod-stack\", config);\n```\n\n---\n\n### EC2\n\nDeploy Docker containers on [EC2](https://aws.amazon.com/ec2/) instances with Elastic IP for simple, cost-effective hosting.\n\n**Best for:** Single-instance applications, development environments, simple Docker deployments\n\n**AWS Resources:**\n\n- [EC2 Instance](https://aws.amazon.com/ec2/) - Virtual server\n- [Elastic IP](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/elastic-ip-addresses-eip.html) - Static public IP\n- [VPC](https://aws.amazon.com/vpc/) - Network isolation\n- [Security Group](https://docs.aws.amazon.com/vpc/latest/userguide/security-groups.html) - Firewall rules\n- [Route53](https://aws.amazon.com/route53/) - DNS records (optional)\n\n**Example:**\n\n```typescript\nimport { Cdk, Ec2, type Ec2Props } from \"@thunder-so/thunder\";\n\nconst config: Ec2Props = {\n  env: { account: \"123456789012\", region: \"us-east-1\" },\n  application: \"myapp\",\n  service: \"api\",\n  environment: \"prod\",\n  rootDir: \".\",\n\n  serviceProps: {\n    instanceType: \"t3.micro\",\n    port: 3000,\n    authorizedKeys: [\"ssh-rsa AAAAB3... user@example.com\"],\n    dockerFile: \"Dockerfile\",\n    variables: [{ NODE_ENV: \"production\" }],\n  },\n\n  // Optional: Custom domain with SSL\n  domain: \"api.example.com\",\n  hostedZoneId: \"Z123456789\",\n  acmeEmail: \"admin@example.com\", // For Let's Encrypt\n};\n\nnew Ec2(new Cdk.App(), \"myapp-api-prod-stack\", config);\n```\n\n---\n\n### Serverless Frameworks\n\nDeploy modern meta-frameworks as serverless applications with unified infrastructure - Lambda for server-side rendering and S3 for static assets, all behind CloudFront.\n\n**Best for:** Full-stack applications with server-side rendering, API routes, and static asset optimization\n\n**Supported Frameworks:** Nuxt, Astro, TanStack Start, SvelteKit, Solid Start, AnalogJS, or any Vite/Nitro-based framework using the generic `Serverless` construct.\n\n**AWS Resources:**\n\n- [Lambda Function](https://aws.amazon.com/lambda/) - SSR server with container support\n- [S3 Bucket](https://aws.amazon.com/s3/) - Static assets with OAC\n- [CloudFront Distribution](https://aws.amazon.com/cloudfront/) - Global CDN with custom domain\n- [API Gateway](https://aws.amazon.com/api-gateway/) - HTTP API for server functions\n- [Route53](https://aws.amazon.com/route53/) - DNS management (optional)\n- [ACM](https://aws.amazon.com/certificate-manager/) - SSL certificates (optional)\n\n**Supported Frameworks:**\n\n- [TanStack Start](https://tanstack.com/start) - Type-safe full-stack React framework\n- [Nuxt](https://nuxt.com/) - Vue-based full-stack framework\n- [Astro](https://astro.build/) - Content-focused web framework with islands architecture\n- [SvelteKit](https://kit.svelte.dev/) - Svelte-based full-stack framework\n- [Solid Start](https://start.solidjs.com/) - SolidJS full-stack framework\n- [AnalogJS](https://analogjs.org/) - Angular-based full-stack framework\n\n#### TanStack Start\n\n**Example:**\n\n```typescript\nimport {\n  Cdk,\n  TanStackStart,\n  type TanStackStartProps,\n} from \"@thunder-so/thunder\";\n\nconst config: TanStackStartProps = {\n  env: { account: \"123456789012\", region: \"us-east-1\" },\n  application: \"myapp\",\n  service: \"web\",\n  environment: \"prod\",\n  rootDir: \".\",\n\n  serverProps: {\n    runtime: Cdk.aws_lambda.Runtime.NODEJS_22_X,\n    architecture: Cdk.aws_lambda.Architecture.ARM_64,\n    memorySize: 1792,\n    timeout: 10,\n    keepWarm: true,\n    variables: [{ NODE_ENV: \"production\" }],\n  },\n\n  // Optional: Custom domain\n  domain: \"myapp.com\",\n  globalCertificateArn: \"arn:aws:acm:us-east-1:...\",\n  hostedZoneId: \"Z123456789\",\n};\n\nnew TanStackStart(new Cdk.App(), \"myapp-web-prod-stack\", config);\n```\n\n#### Nuxt\n\n**Example:**\n\n```typescript\nimport { Cdk, Nuxt, type NuxtProps } from \"@thunder-so/thunder\";\n\nconst config: NuxtProps = {\n  env: { account: \"123456789012\", region: \"us-east-1\" },\n  application: \"myapp\",\n  service: \"web\",\n  environment: \"prod\",\n  rootDir: \".\",\n\n  serverProps: {\n    runtime: Cdk.aws_lambda.Runtime.NODEJS_22_X,\n    architecture: Cdk.aws_lambda.Architecture.ARM_64,\n    memorySize: 1792,\n    timeout: 10,\n    keepWarm: true,\n    streaming: true,\n    variables: [{ NODE_ENV: \"production\" }],\n    secrets: [{ key: \"DATABASE_URL\", resource: \"arn:aws:secretsmanager:...\" }],\n  },\n\n  // Optional: Custom domain\n  domain: \"myapp.com\",\n  globalCertificateArn: \"arn:aws:acm:us-east-1:...\",\n  hostedZoneId: \"Z123456789\",\n};\n\nnew Nuxt(new Cdk.App(), \"myapp-web-prod-stack\", config);\n```\n\n#### Astro\n\n**Example:**\n\n```typescript\nimport { Cdk, Astro, type AstroProps } from \"@thunder-so/thunder\";\n\nconst config: AstroProps = {\n  env: { account: \"123456789012\", region: \"us-east-1\" },\n  application: \"myapp\",\n  service: \"web\",\n  environment: \"prod\",\n  rootDir: \".\",\n\n  serverProps: {\n    runtime: Cdk.aws_lambda.Runtime.NODEJS_22_X,\n    architecture: Cdk.aws_lambda.Architecture.ARM_64,\n    memorySize: 1024,\n    timeout: 10,\n    keepWarm: true,\n    variables: [{ NODE_ENV: \"production\" }],\n  },\n\n  // Optional: Custom domain\n  domain: \"myapp.com\",\n  globalCertificateArn: \"arn:aws:acm:us-east-1:...\",\n  hostedZoneId: \"Z123456789\",\n};\n\nnew Astro(new Cdk.App(), \"myapp-web-prod-stack\", config);\n```\n\n#### SvelteKit\n\n**Example:**\n\n```typescript\nimport { Cdk, SvelteKit, type SvelteKitProps } from \"@thunder-so/thunder\";\n\nconst config: SvelteKitProps = {\n  env: { account: \"123456789012\", region: \"us-east-1\" },\n  application: \"myapp\",\n  service: \"web\",\n  environment: \"prod\",\n  rootDir: \".\",\n\n  serverProps: {\n    runtime: Cdk.aws_lambda.Runtime.NODEJS_22_X,\n    architecture: Cdk.aws_lambda.Architecture.ARM_64,\n    memorySize: 1024,\n    timeout: 10,\n    keepWarm: true,\n    variables: [{ NODE_ENV: \"production\" }],\n  },\n\n  // Optional: Custom domain\n  domain: \"myapp.com\",\n  globalCertificateArn: \"arn:aws:acm:us-east-1:...\",\n  hostedZoneId: \"Z123456789\",\n};\n\nnew SvelteKit(new Cdk.App(), \"myapp-web-prod-stack\", config);\n```\n\n#### Solid Start\n\n**Example:**\n\n```typescript\nimport { Cdk, SolidStart, type SolidStartProps } from \"@thunder-so/thunder\";\n\nconst config: SolidStartProps = {\n  env: { account: \"123456789012\", region: \"us-east-1\" },\n  application: \"myapp\",\n  service: \"web\",\n  environment: \"prod\",\n  rootDir: \".\",\n\n  serverProps: {\n    runtime: Cdk.aws_lambda.Runtime.NODEJS_22_X,\n    architecture: Cdk.aws_lambda.Architecture.ARM_64,\n    memorySize: 1024,\n    timeout: 10,\n    keepWarm: true,\n    variables: [{ NODE_ENV: \"production\" }],\n  },\n\n  // Optional: Custom domain\n  domain: \"myapp.com\",\n  globalCertificateArn: \"arn:aws:acm:us-east-1:...\",\n  hostedZoneId: \"Z123456789\",\n};\n\nnew SolidStart(new Cdk.App(), \"myapp-web-prod-stack\", config);\n```\n\n#### AnalogJS\n\n**Example:**\n\n```typescript\nimport { Cdk, AnalogJS, type AnalogJSProps } from \"@thunder-so/thunder\";\n\nconst config: AnalogJSProps = {\n  env: { account: \"123456789012\", region: \"us-east-1\" },\n  application: \"myapp\",\n  service: \"web\",\n  environment: \"prod\",\n  rootDir: \".\",\n\n  serverProps: {\n    runtime: Cdk.aws_lambda.Runtime.NODEJS_22_X,\n    architecture: Cdk.aws_lambda.Architecture.ARM_64,\n    memorySize: 1024,\n    timeout: 10,\n    keepWarm: true,\n    variables: [{ NODE_ENV: \"production\" }],\n  },\n\n  // Optional: Custom domain\n  domain: \"myapp.com\",\n  globalCertificateArn: \"arn:aws:acm:us-east-1:...\",\n  hostedZoneId: \"Z123456789\",\n};\n\nnew AnalogJS(new Cdk.App(), \"myapp-web-prod-stack\", config);\n```\n\n---\n\n### Template\n\nDeploy [Coolify](https://coolify.io/)-style templates on EC2. Automatically fetches and hydrates Docker Compose templates from the [Coolify templates repository](https://github.com/coollabsio/coolify).\n\n**Best for:** Self-hosted applications, databases, dev tools (e.g., n8n, WordPress, databases)\n\n**AWS Resources:** Same as [EC2](#ec2)\n\n**Example:**\n\n```typescript\nimport {\n  Cdk,\n  Template,\n  type TemplateProps,\n  fetchTemplate,\n  hydrateTemplate,\n} from \"@thunder-so/thunder\";\nimport { InstanceType, InstanceClass, InstanceSize } from \"aws-cdk-lib/aws-ec2\";\n\nasync function main() {\n  // Fetch template from Coolify repository\n  const { parsed: parsedTemplate, port } = await fetchTemplate(\"n8n\");\n\n  // Hydrate template with variables\n  const hydrateResult = hydrateTemplate(parsedTemplate, {\n    domain: \"n8n.example.com\",\n    fallbackPort: port,\n  });\n\n  const config: TemplateProps = {\n    env: { account: \"123456789012\", region: \"us-east-1\" },\n    application: \"myapp\",\n    service: \"n8n\",\n    environment: \"prod\",\n\n    templateSlug: \"n8n\",\n    instanceType: InstanceType.of(InstanceClass.T3, InstanceSize.MICRO),\n    authorizedKeys: [\"ssh-rsa AAAAB3... user@example.com\"],\n    hydrateResult,\n\n    // Optional: Custom domain with SSL\n    domain: \"n8n.example.com\",\n    hostedZoneId: \"Z123456789\",\n    acmeEmail: \"admin@example.com\",\n  };\n\n  new Template(new Cdk.App(), \"myapp-n8n-prod-stack\", config);\n}\n\nmain();\n```\n\n**Available Templates:** See the [Coolify templates repository](https://github.com/coollabsio/coolify/tree/v4.x/templates/compose) for available templates.\n\n---\n\n## CLI Commands\n\n| Command      | Description                       |\n| :----------- | :-------------------------------- |\n| `th init`    | Scaffold a new project or service |\n| `th deploy`  | Deploy stacks to AWS              |\n| `th destroy` | Remove resources from AWS         |\n\n## Documentation\n\nFor detailed documentation on each construct and advanced configurations, see the [Wiki](https://github.com/thunder-so/thunder/wiki).\n\n### Static\n\n| Guide                                                       | Description                                             |\n| :---------------------------------------------------------- | :------------------------------------------------------ |\n| [static-basic.md](./docs/static-basic.md)                   | Deploy a static site or SPA to S3 + CloudFront          |\n| [static-edge-functions.md](./docs/static-edge-functions.md) | Redirects, rewrites, and custom headers via Lambda@Edge |\n| [static-full.md](./docs/static-full.md)                     | Full `StaticProps` configuration reference              |\n\n### Lambda\n\n| Guide                                               | Description                                       |\n| :-------------------------------------------------- | :------------------------------------------------ |\n| [lambda-basic.md](./docs/lambda-basic.md)           | Deploy a serverless API with Lambda + API Gateway |\n| [lambda-containers.md](./docs/lambda-containers.md) | Container images and Bun runtime                  |\n| [lambda-full.md](./docs/lambda-full.md)             | Full `LambdaProps` configuration reference        |\n\n### Fargate\n\n| Guide                                             | Description                                   |\n| :------------------------------------------------ | :-------------------------------------------- |\n| [fargate-basic.md](./docs/fargate-basic.md)       | Deploy a containerized service on ECS Fargate |\n| [fargate-nixpacks.md](./docs/fargate-nixpacks.md) | Auto-generate Dockerfiles with Nixpacks       |\n| [fargate-full.md](./docs/fargate-full.md)         | Full `FargateProps` configuration reference   |\n\n### Serverless (Full-Stack Frameworks)\n\n| Guide                                 | Description                                |\n| :------------------------------------ | :----------------------------------------- |\n| [serverless.md](./docs/serverless.md) | Deploy full-stack meta-frameworks with SSR |\n\n### Framework Guides\n\n**Static Deployment:**\n\n- [Next.js Static](./docs/frameworks/nextjs-static.md)\n- [Astro Static](./docs/frameworks/astro-static.md)\n\n**Serverless (Lambda + S3 + CloudFront):**\n\n- [Nuxt](./docs/frameworks/nuxt-serverless.md)\n- [Astro SSR](./docs/frameworks/astro-serverless.md)\n- [TanStack Start](./docs/frameworks/tanstack-start-serverless.md)\n- [SvelteKit](./docs/frameworks/sveltekit-serverless.md)\n- [Solid Start](./docs/frameworks/solidstart-serverless.md)\n- [AnalogJS](./docs/frameworks/analogjs-serverless.md)\n\n**Fargate (Containers):**\n\n- [Next.js with Dockerfile](./docs/frameworks/nextjs-fargate-dockerfile.md)\n- [Next.js with Nixpacks](./docs/frameworks/nextjs-fargate-nixpacks.md)\n- [Astro](./docs/frameworks/astro-fargate.md)\n- [Nuxt](./docs/frameworks/nuxt-fargate.md)\n- [TanStack Start](./docs/frameworks/tanstack-start-fargate.md)\n- [SvelteKit](./docs/frameworks/sveltekit-fargate.md)\n- [Solid Start](./docs/frameworks/solidstart-fargate.md)\n- [AnalogJS](./docs/frameworks/analogjs-fargate.md)\n\n## License\n\nApache-2.0\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fthunder-so%2Fthunder","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fthunder-so%2Fthunder","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fthunder-so%2Fthunder/lists"}