Configuration
App Settings
Edit config/app-config.ts for all core settings:
export const APP_NAME = "Your Startup"; export const DOMAIN = "https://yourdomain.com"; export const AWS_REGION = "eu-west-1"; // Email addresses (update these!) export const EMAIL_CONFIG = { supportEmail: 'support@yourdomain.com', billingEmail: 'billing@yourdomain.com', noreplyEmail: 'noreply@yourdomain.com', };
Note: FastAWS automatically uses the correct environment file based on your deployment command:
npm run deploy:dev→ uses.env.devnpm run deploy:prod→ uses.env.prod
You can keep both files in your project simultaneously.
Pricing Plans
Edit your pricing in config/app-config.ts:
const STRIPE_PRICE_IDS = { dev: { SUBSCRIPTION_PLAN_1: "price_your_monthly_id", ONE_TIME_PAYMENT_1: "price_your_lifetime_id", }, prod: { SUBSCRIPTION_PLAN_1: "price_live_monthly_id", ONE_TIME_PAYMENT_1: "price_live_lifetime_id", } };
That's it! The pricing page automatically updates from these IDs.
Email Setup (Optional)
Email is completely optional. Your app works without any email configuration - user signup, authentication, and payments all function normally. When email is not configured, emails are silently skipped (logged to console in dev).
When Email is Configured
FastAWS sends these transactional emails automatically:
- Welcome Email - When a user signs up
- Payment Success - After successful payment
- Payment Failed - When a payment fails
- Subscription Created - When user starts a subscription
- Subscription Cancelled - When user cancels
- Trial Ending - When trial period is about to end
Setting Up Email
Update your email addresses in config/app-config.ts:
export const EMAIL_CONFIG = { supportEmail: 'support@yourdomain.com', billingEmail: 'billing@yourdomain.com', noreplyEmail: 'noreply@yourdomain.com', };
Then choose a provider:
Option 1: AWS SES (Cheapest - $0.10/1000 emails)
- Go to SES Console in your deployment region
- Click "Verified identities" → "Create identity"
- Choose "Domain" and enter your domain (e.g.,
yourdomain.com) - Add the DNS records SES provides to your domain registrar
- Wait for verification (usually 24-72 hours)
- Important: Request production access (Account Dashboard → "Request production access") - otherwise you can only send to verified emails
That's it! FastAWS uses SES by default, no additional configuration needed.
Option 2: Resend (Easiest)
- Sign up at resend.com
- Verify your domain in Resend dashboard
- Get your API key
- Add to AWS SSM:
aws ssm put-parameter --name "/fastaws/email/resend/api-key-dev" --value "re_xxx" --type "SecureString" aws ssm put-parameter --name "/fastaws/email/resend/api-key-prod" --value "re_xxx" --type "SecureString"
- Set environment variable in
backend/cdk-stack.tsfor your Lambda functions:
EMAIL_PROVIDER: 'resend',
Option 3: Mailgun
Similar to Resend - add API key to SSM and set EMAIL_PROVIDER: 'mailgun'
Testing Emails Locally
In development, emails are logged to console by default. To test actual email sending locally:
- Set up SES sandbox (verify your own email as recipient)
- Or use Resend (has generous free tier)
Styling
FastAWS uses Tailwind CSS v4 + shadcn/ui.
Quick customization:
- Colors: Edit CSS variables in
frontend/app/globals.css - Components: See shadcn/ui docs
- Favicon: Replace
frontend/app/favicon.ico
That's all you need to customize!
Data Modelling
FastAWS uses a single-table DynamoDB design. You can modify this to fit your needs easily using AI.
How to change your data model:
- Open your AI coding assistant.
- Paste the following prompt:
"I want to modify the DynamoDB schema for my project. I am building a [DESCRIBE YOUR APP, e.g., social media site with posts and photos]. Please design a single-table schema that supports (e.g.):
- [Users creation/profiles]
- [Creating text posts]
- [Uploading photos]
- [Commenting on posts]
Tell me the access patterns (PK/SK structures) and what GSI (Global Secondary Indexes) are needed, and then make the necessary changes across the following files to allow the necessary CRUD operations: 'backend/cdk-stack.ts' and new files in 'backend/lambdas/'."