A fully static web app that lets you explore every AWS EC2 and RDS instance type, understand which workloads each is suited for, compare instances side-by-side, and see live on-demand pricing — all without a backend or AWS credentials.
Live site → GitHub Pages · Data refreshed weekly via GitHub Actions from AWS APIs.
| Feature | Details |
|---|---|
| EC2 families | All families with Best For / Not Ideal For guidance and per-family reasoning |
| RDS families | All DB instance classes with supported engine matrix and pricing |
| Database engines | Deep-dive cards for MySQL, PostgreSQL, Aurora, Oracle, SQL Server, MariaDB, and more |
| Side-by-side comparison | Select up to 4 EC2 or RDS instances, compare specs and costs with best/worst highlighting |
| Live pricing | On-demand Linux, Windows (EC2) and MySQL Single-AZ (RDS) — US East-1 baseline |
| Auto-refresh | GitHub Actions workflow runs every Monday, commits updated data.json |
| Search | Full-text search across instance types, families, categories, and use cases |
| Category filters | General Purpose, Compute Optimized, Memory Optimized, Storage Optimized, Accelerated Computing, HPC |
| Dark + Light theme | Cyberpunk neon dark default, clean light mode, persisted via localStorage |
| Responsive | Works on mobile through ultrawide; 2-column grid collapses to 1-column below 1100px |
| Accessible | ARIA roles/labels on tabs, chips, toggles; prefers-reduced-motion respected |
| Zero dependencies | Vanilla HTML, CSS, JS — no frameworks, no build step, no runtime server |
- Expand any instance family card and click the
+button on any row. - A sticky tray slides up from the bottom showing your selections (up to 4).
- Hit Compare → to open a full-screen modal with a side-by-side spec table.
- Green ↑ = best value for that row. Red = worst value.
- EC2 and RDS instances can be mixed — they render as two separate tables.
- Press
Escapeor click outside the modal to dismiss.
The app loads data.json via fetch() — it must be served over HTTP, not opened as a file:// URL.
# Option 1 — Python (no install needed)
python3 -m http.server 8080
# open http://localhost:8080
# Option 2 — Node
npx serve .For production, push to GitHub and enable Pages under Settings → Pages → Deploy from main.
├── index.html # Main page — nav, hero, tabs, compare tray, compare modal
├── static/
│ ├── css/style.css # Design system — dark/light tokens, all component styles
│ ├── js/app.js # All frontend logic — render, search, filter, compare
│ └── data.json # Instance data (auto-updated by CI every Monday)
├── .github/
│ ├── workflows/
│ │ └── update-data.yml # GitHub Actions — runs weekly, commits updated data.json
│ └── scripts/
│ └── update_data.py # Fetches EC2/RDS types and pricing from AWS APIs via boto3
└── README.md
Instance type suitability is public, well-documented AWS knowledge — published in AWS docs, whitepapers, and re:Invent talks. The reasoning in data.json is baked in as static text, not generated at runtime.
AWS credentials are only needed by the GitHub Actions workflow that writes the weekly data refresh. Visitors never need credentials.
The workflow fetches EC2 instance types, RDS instance classes, and on-demand pricing via boto3, then commits the refreshed data.json back to the repo. It runs every Monday at midnight UTC and can be triggered manually from the Actions tab.
-
Create an IAM role with these managed policies:
AmazonEC2ReadOnlyAccessAmazonRDSReadOnlyAccessAWSPriceListServiceFullAccess
-
Add GitHub as an OIDC provider in your AWS account and set the role trust policy to allow your repo (
repo:<owner>/<repo>:ref:refs/heads/main). See the AWS OIDC guide. -
Add the role ARN to GitHub Secrets →
AWS_ROLE_ARN -
Uncomment the
role-to-assumeline inupdate-data.ymland remove the access key lines.
- Create an IAM user with the same three policies above.
- Generate access keys (IAM → Users → Security credentials → Create access key).
- Add both to GitHub Secrets:
AWS_ACCESS_KEY_IDandAWS_SECRET_ACCESS_KEY.
Actions tab → "Refresh AWS Instance Data" → Run workflow.