{"owner":"vantage-sh","repo":"ec2instances.info","hasSkills":true,"hasMcp":false,"mcpConfig":null,"found":["CLAUDE.md"],"skills":{"CLAUDE.md":"# CLAUDE.md\n\nThis file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.\n\n## Project Overview\n\nEC2Instances.info is a cloud instance comparison website supporting AWS (EC2, RDS, ElastiCache, Redshift, OpenSearch), Azure VMs, and GCP instances. The project consists of:\n\n- **next/**: Next.js 16 frontend (React 19, Tailwind CSS 4, TypeScript)\n- **scraper/**: Go-based data scraper for AWS, Azure, and GCP APIs\n- **imagegen/**: Go-based OG image generator (outputs to `www/`)\n- **www/**: Static output data (instances.json, OG images, compressed variants)\n\n## Common Commands\n\n### Frontend Development (run from `next/` directory)\n\n```bash\nnvm use                    # Use correct Node version (.nvmrc specifies v22)\nnpm ci                     # Install dependencies\nnpm run init               # Compress data (required before first dev run)\nnpm run dev                # Start dev server with Turbopack\nnpm run check-types        # TypeScript type checking\nnpm run test               # Run Vitest tests\nnpm run build              # Full build (init + llms + next build)\n```\n\n### Formatting (run from root)\n\n```bash\nmake format                # Run gofmt and prettier via Docker\n```\n\n### Data Fetching\n\n```bash\n# Quick way (if not touching scraper or imagegen):\ncurl -L https://instances.vantagestaging.sh/www_pre_build.tar.gz | tar -xzf -\n\n# Full scrape (requires AWS, Azure, GCP credentials):\n./fetch_data.sh\n\n# Generate OG images (requires NEXT_PUBLIC_URL; run from root):\nmake generate-images\n```\n\n### Full Release Build\n\nDon't do this generally unless explicitly asked.\n\n```bash\nmake all                   # fetch-data + generate-images + compress-www + next build\n```\n\n## Architecture\n\n### Frontend Structure (next/)\n\n- **app/**: Next.js App Router pages\n    - `aws/ec2/[slug]/`, `aws/rds/[slug]/`, etc. - Instance detail pages\n    - `azure/`, `gcp/` - Cloud provider listing pages\n- **components/**: React components (Radix UI, shadcn/ui patterns)\n- **utils/**: Shared utilities and data processing\n- **llms/**: LLM-generated content for SEO\n- **imageGen/**: Font and icon assets used by the Go imagegen tool\n\n### Data Flow\n\n1. Go scraper fetches from AWS/Azure/GCP APIs → writes JSON to `www/`\n2. EC2 launch dates (`date_introduced`) are enriched from [instancetyp.es/timeline.json](https://instancetyp.es/timeline.json) during each scrape\n3. Go imagegen reads JSON from `www/`, generates OG images → writes PNGs to `www/`\n4. `npm run init` compresses JSON data with LZMA\n5. Frontend loads compressed data client-side via `@/utils/data/`\n\n### Scraper Structure (scraper/)\n\n- **aws/**, **azure/**, **gcp/**: Provider-specific scrapers\n- **utils/**: Shared scraper utilities\n- Requires environment variables: `AWS_ACCESS_KEY_ID`, `AWS_SECRET_ACCESS_KEY`, `AZURE_TENANT_ID`, `AZURE_CLIENT_ID`, `AZURE_CLIENT_SECRET`, `AZURE_SUBSCRIPTION_ID`, `GCP_PROJECT_ID`, `GCP_CLIENT_EMAIL`, `GCP_PRIVATE_KEY`\n- When running the scraper, the cwd is important. Run within the root.\n\n## Testing Guidelines\n\n- Use **Vitest** (never Jest)\n- Tests go in same folder as source, suffixed `.test.ts`\n- Component tests use `@/utils/testing/componentTests` helper which handles describe/test blocks automatically\n- Never use `describe` or `test` directly in component tests - use the test table pattern\n- Use `vi.mock()` at module root instead of `Object.defineProperty`\n- Don't use `@testing-library/jest-dom` or `screen` - use `component.container`\n- Prefer `.ts` over `.tsx` for tests\n- No snapshot tests - use assertions\n\n## Git Workflow\n\n- PRs target `develop` (staging)\n- `main` is production\n- Run `make format` before PRs\n"},"files":{"CLAUDE.md":"# CLAUDE.md\n\nThis file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.\n\n## Project Overview\n\nEC2Instances.info is a cloud instance comparison website supporting AWS (EC2, RDS, ElastiCache, Redshift, OpenSearch), Azure VMs, and GCP instances. The project consists of:\n\n- **next/**: Next.js 16 frontend (React 19, Tailwind CSS 4, TypeScript)\n- **scraper/**: Go-based data scraper for AWS, Azure, and GCP APIs\n- **imagegen/**: Go-based OG image generator (outputs to `www/`)\n- **www/**: Static output data (instances.json, OG images, compressed variants)\n\n## Common Commands\n\n### Frontend Development (run from `next/` directory)\n\n```bash\nnvm use                    # Use correct Node version (.nvmrc specifies v22)\nnpm ci                     # Install dependencies\nnpm run init               # Compress data (required before first dev run)\nnpm run dev                # Start dev server with Turbopack\nnpm run check-types        # TypeScript type checking\nnpm run test               # Run Vitest tests\nnpm run build              # Full build (init + llms + next build)\n```\n\n### Formatting (run from root)\n\n```bash\nmake format                # Run gofmt and prettier via Docker\n```\n\n### Data Fetching\n\n```bash\n# Quick way (if not touching scraper or imagegen):\ncurl -L https://instances.vantagestaging.sh/www_pre_build.tar.gz | tar -xzf -\n\n# Full scrape (requires AWS, Azure, GCP credentials):\n./fetch_data.sh\n\n# Generate OG images (requires NEXT_PUBLIC_URL; run from root):\nmake generate-images\n```\n\n### Full Release Build\n\nDon't do this generally unless explicitly asked.\n\n```bash\nmake all                   # fetch-data + generate-images + compress-www + next build\n```\n\n## Architecture\n\n### Frontend Structure (next/)\n\n- **app/**: Next.js App Router pages\n    - `aws/ec2/[slug]/`, `aws/rds/[slug]/`, etc. - Instance detail pages\n    - `azure/`, `gcp/` - Cloud provider listing pages\n- **components/**: React components (Radix UI, shadcn/ui patterns)\n- **utils/**: Shared utilities and data processing\n- **llms/**: LLM-generated content for SEO\n- **imageGen/**: Font and icon assets used by the Go imagegen tool\n\n### Data Flow\n\n1. Go scraper fetches from AWS/Azure/GCP APIs → writes JSON to `www/`\n2. EC2 launch dates (`date_introduced`) are enriched from [instancetyp.es/timeline.json](https://instancetyp.es/timeline.json) during each scrape\n3. Go imagegen reads JSON from `www/`, generates OG images → writes PNGs to `www/`\n4. `npm run init` compresses JSON data with LZMA\n5. Frontend loads compressed data client-side via `@/utils/data/`\n\n### Scraper Structure (scraper/)\n\n- **aws/**, **azure/**, **gcp/**: Provider-specific scrapers\n- **utils/**: Shared scraper utilities\n- Requires environment variables: `AWS_ACCESS_KEY_ID`, `AWS_SECRET_ACCESS_KEY`, `AZURE_TENANT_ID`, `AZURE_CLIENT_ID`, `AZURE_CLIENT_SECRET`, `AZURE_SUBSCRIPTION_ID`, `GCP_PROJECT_ID`, `GCP_CLIENT_EMAIL`, `GCP_PRIVATE_KEY`\n- When running the scraper, the cwd is important. Run within the root.\n\n## Testing Guidelines\n\n- Use **Vitest** (never Jest)\n- Tests go in same folder as source, suffixed `.test.ts`\n- Component tests use `@/utils/testing/componentTests` helper which handles describe/test blocks automatically\n- Never use `describe` or `test` directly in component tests - use the test table pattern\n- Use `vi.mock()` at module root instead of `Object.defineProperty`\n- Don't use `@testing-library/jest-dom` or `screen` - use `component.container`\n- Prefer `.ts` over `.tsx` for tests\n- No snapshot tests - use assertions\n\n## Git Workflow\n\n- PRs target `develop` (staging)\n- `main` is production\n- Run `make format` before PRs\n"},"items":[{"name":"CLAUDE.md","path":"CLAUDE.md","title":"CLAUDE.md","content":"# CLAUDE.md\n\nThis file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.\n\n## Project Overview\n\nEC2Instances.info is a cloud instance comparison website supporting AWS (EC2, RDS, ElastiCache, Redshift, OpenSearch), Azure VMs, and GCP instances. The project consists of:\n\n- **next/**: Next.js 16 frontend (React 19, Tailwind CSS 4, TypeScript)\n- **scraper/**: Go-based data scraper for AWS, Azure, and GCP APIs\n- **imagegen/**: Go-based OG image generator (outputs to `www/`)\n- **www/**: Static output data (instances.json, OG images, compressed variants)\n\n## Common Commands\n\n### Frontend Development (run from `next/` directory)\n\n```bash\nnvm use                    # Use correct Node version (.nvmrc specifies v22)\nnpm ci                     # Install dependencies\nnpm run init               # Compress data (required before first dev run)\nnpm run dev                # Start dev server with Turbopack\nnpm run check-types        # TypeScript type checking\nnpm run test               # Run Vitest tests\nnpm run build              # Full build (init + llms + next build)\n```\n\n### Formatting (run from root)\n\n```bash\nmake format                # Run gofmt and prettier via Docker\n```\n\n### Data Fetching\n\n```bash\n# Quick way (if not touching scraper or imagegen):\ncurl -L https://instances.vantagestaging.sh/www_pre_build.tar.gz | tar -xzf -\n\n# Full scrape (requires AWS, Azure, GCP credentials):\n./fetch_data.sh\n\n# Generate OG images (requires NEXT_PUBLIC_URL; run from root):\nmake generate-images\n```\n\n### Full Release Build\n\nDon't do this generally unless explicitly asked.\n\n```bash\nmake all                   # fetch-data + generate-images + compress-www + next build\n```\n\n## Architecture\n\n### Frontend Structure (next/)\n\n- **app/**: Next.js App Router pages\n    - `aws/ec2/[slug]/`, `aws/rds/[slug]/`, etc. - Instance detail pages\n    - `azure/`, `gcp/` - Cloud provider listing pages\n- **components/**: React components (Radix UI, shadcn/ui patterns)\n- **utils/**: Shared utilities and data processing\n- **llms/**: LLM-generated content for SEO\n- **imageGen/**: Font and icon assets used by the Go imagegen tool\n\n### Data Flow\n\n1. Go scraper fetches from AWS/Azure/GCP APIs → writes JSON to `www/`\n2. EC2 launch dates (`date_introduced`) are enriched from [instancetyp.es/timeline.json](https://instancetyp.es/timeline.json) during each scrape\n3. Go imagegen reads JSON from `www/`, generates OG images → writes PNGs to `www/`\n4. `npm run init` compresses JSON data with LZMA\n5. Frontend loads compressed data client-side via `@/utils/data/`\n\n### Scraper Structure (scraper/)\n\n- **aws/**, **azure/**, **gcp/**: Provider-specific scrapers\n- **utils/**: Shared scraper utilities\n- Requires environment variables: `AWS_ACCESS_KEY_ID`, `AWS_SECRET_ACCESS_KEY`, `AZURE_TENANT_ID`, `AZURE_CLIENT_ID`, `AZURE_CLIENT_SECRET`, `AZURE_SUBSCRIPTION_ID`, `GCP_PROJECT_ID`, `GCP_CLIENT_EMAIL`, `GCP_PRIVATE_KEY`\n- When running the scraper, the cwd is important. Run within the root.\n\n## Testing Guidelines\n\n- Use **Vitest** (never Jest)\n- Tests go in same folder as source, suffixed `.test.ts`\n- Component tests use `@/utils/testing/componentTests` helper which handles describe/test blocks automatically\n- Never use `describe` or `test` directly in component tests - use the test table pattern\n- Use `vi.mock()` at module root instead of `Object.defineProperty`\n- Don't use `@testing-library/jest-dom` or `screen` - use `component.container`\n- Prefer `.ts` over `.tsx` for tests\n- No snapshot tests - use assertions\n\n## Git Workflow\n\n- PRs target `develop` (staging)\n- `main` is production\n- Run `make format` before PRs\n","category":"root","tokens":914}]}