Deployment Checklist
Step-by-step guide to get sharifdyson.com live, connect goalsthebook.com as a redirect, deploy AWS infrastructure, and hand off to the dev team for the Next.js backend.
Why this setup works: People searching "the goals book" or "goals book sharif dyson" may try goalsthebook.com directly. The redirect catches them and sends them to your real site. You only maintain one codebase — at sharifdyson.com.
Do this first. Genspark hosting gives you an instant public URL (e.g., yourproject.genspark.site) before your custom domain is connected. Share this URL with the dev team right away — they can start reviewing the site immediately.
Goals2026!SD — confirm Supabase Connected (green), all tables load, charts appear, and the View Site button works.Do Phase 3 (S3 + CloudFront) before this step — you need your CloudFront distribution domain name (looks like d1abc123xyz.cloudfront.net) before you can update DNS here.
ns-1234.awsdns-56.com
ns-789.awsdns-01.net
ns-2048.awsdns-23.org
ns-512.awsdns-45.co.uk
DNS propagation takes 15 minutes to 48 hours. Usually under 2 hours.
Name: (empty = root domain)
Type: A — Alias
Route traffic to: Alias to CloudFront distribution → select your distribution
Two options: Option A (Easiest) — Use Lightsail's built-in redirect feature. Option B — Create an S3 static website redirect bucket. Both work perfectly. Option A is faster.
Option A — Lightsail Redirect (Easiest)
Option B — S3 Redirect Bucket (Recommended)
goalsthebook.com → Region: us-east-1 → uncheck "Block all public access" → Create.sharifdyson.com → Protocol: https → Save.# automatically redirect to https://sharifdyson.com
Subdomain: @ (root)
Resolves to: S3 bucket website endpoint (e.g.,
goalsthebook.com.s3-website-us-east-1.amazonaws.com)Or migrate DNS to Route 53 and use an Alias record.
sharifdyson.com → Region: us-east-1 → Uncheck Block all public access → Create Bucket.index.html → Error document: index.html → Save."Version": "2012-10-17",
"Statement": [{
"Sid": "PublicReadGetObject",
"Effect": "Allow",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::sharifdyson.com/*"
}]
}
aws configure # enter your Access Key ID, Secret, region: us-east-1
# Sync all files to S3 (run from your project folder)
aws s3 sync . s3://sharifdyson.com \
--exclude ".git/*" \
--exclude "node_modules/*" \
--delete
http://sharifdyson.com.s3-website-us-east-1.amazonaws.com) — open in browser to verify site loads before CloudFront.ACM SSL certificates for CloudFront must be requested in us-east-1 regardless of where your S3 bucket is. This is a common gotcha — make sure you're in the N. Virginia region when requesting the cert.
sharifdyson.com · www.sharifdyson.com · goalsthebook.com · www.goalsthebook.com→ DNS validation → Request. Then click "Create records in Route 53" to auto-validate.
Origin domain: select your S3 static website endpoint (NOT the S3 bucket ARN)
Viewer protocol policy: Redirect HTTP to HTTPS
Alternate domain names (CNAMEs):
sharifdyson.com, www.sharifdyson.comCustom SSL certificate: select your ACM cert
Default root object:
index.html→ Create distribution
d1abc123xyz.cloudfront.net — you'll use this for the Route 53 alias records in Phase 2A./index.html → HTTP response code: 200. Repeat for 404. This makes client-side routing work correctly.Pre-requisite: You need AWS CLI configured with admin permissions, and Node.js 18+ installed locally. The deploy script is in lambda/deploy.sh — download it from the Downloads page.
lambda/ folder.AWSLambdaBasicExecutionRoleAmazonSESFullAccessAmazonRDSFullAccess (for future DB)Name it:
goals-lambda-execution-role
npm install
chmod +x deploy.sh
./deploy.sh
POST /contact → contact-form LambdaPOST /order → process-payment LambdaPOST /order/confirm → order-confirmation LambdaPOST /broadcast → broadcast-email LambdaEnable CORS → allow origin:
https://sharifdyson.comDeploy → copy the API endpoint URL.
contact.html and order.html with your actual API Gateway URL. Dev team will do this properly during Next.js migration.SES Sandbox Limitation: By default, SES is in Sandbox mode — you can only send to verified email addresses. You MUST request production access before sending to real customers. This takes 1–3 business days for AWS approval.
[email protected] → Create. Check your inbox for verification email and click the link.[email protected] — this is the From address for broadcast emails.sharifdyson.com. SES will show DKIM DNS records to add in Route 53. Once verified, any email @sharifdyson.com can be used as a sender.Your handoff package is complete. Share these 3 URLs with the dev team — they have everything they need to build the full production backend.
| Resource | URL | Contents |
|---|---|---|
| Dev Handoff Guide | /devhandoff.html |
Stack, API routes, Prisma schema, sprint plan, env vars |
| Downloads | /download.html |
All 10 Lambda + infrastructure files with download buttons |
| AWS Guide | /aws-deployment-guide.html |
Full AWS architecture, CloudFormation YAML, deployment steps |
| Admin Dashboard | /admin.html · pw: Goals2026!SD |
Live data, orders, customers, subscribers, broadcast |
https://sharifdyson.com/download.html — contains all downloadable files and the full handoff package. This is their starting point.Do NOT share the site publicly until all red/critical items are checked. These protect your customers, your data, and your reputation.
Goals2026!SD. Already updated in admin.html, uploaded to S3, and CloudFront cache invalidated. ✅/admin.html with a WAF rule that only allows your IP range. Or simply rename admin.html to something unpredictable like staff-cx9k2m.html.sitemap.xml (5 public pages). Add sharifdyson.com to Google Search Console. Submit the sitemap. Google will start indexing within 24–48 hours.og-home.jpg, og-book.jpg, og-author.jpg, og-order.jpg. See /images/image-upload-guide.html for exact specs and upload instructions.http://goalsthebook.com and http://www.goalsthebook.com — both should redirect to https://sharifdyson.com with a 301 permanent redirect.| Item | Value | Notes |
|---|---|---|
| Primary domain | sharifdyson.com | Network Solutions → Route 53 → CloudFront → S3 |
| Redirect domain | goalsthebook.com | Lightsail → redirects to sharifdyson.com |
| Admin URL | /admin.html | Change password before launch! |
| Admin password | Goals2026!SD | ✅ Updated — already in S3 |
| AWS Region | us-east-1 | N. Virginia — required for ACM + CloudFront |
| S3 bucket name | sharifdyson.com | Must match domain exactly |
| SES sender (orders) | [email protected] | Must be verified in SES |
| SES sender (broadcast) | [email protected] | Must be verified in SES |
| CloudFront domain | (assigned after creation) | Looks like d1abc123.cloudfront.net |
Estimated Monthly AWS Costs (Low Traffic)
| Service | Est. Cost/Month | Notes |
|---|---|---|
| S3 Storage (site files) | ~$0.02 | <1 GB static files |
| CloudFront | ~$1–5 | First 1TB/month free tier applies |
| Route 53 Hosted Zone | $0.50 | Per hosted zone/month |
| Lambda (4 functions) | ~$0 | 1M requests/month free tier |
| API Gateway | ~$0 | 1M calls/month free tier |
| SES Email | ~$0 | 62K emails/month free from EC2; $0.10/1000 otherwise |
| RDS PostgreSQL | ~$15–25 | db.t3.micro, only needed for Next.js backend |
| Total (static site only) | ~$2–7 | Before Next.js backend |