{"owner":"remoteintech","repo":"remote-jobs","hasSkills":true,"hasMcp":false,"mcpConfig":null,"found":["CLAUDE.md"],"skills":{"CLAUDE.md":"# CLAUDE.md\n\nRepository context for AI agents (and humans) working on the codebase. For end-user contribution instructions, see [`CONTRIBUTING.md`](CONTRIBUTING.md).\n\n## Project Overview\n\nRemote In Tech is a community-maintained directory of remote-friendly tech companies. The site is built with [Eleventy](https://www.11ty.dev/) (v3) and deployed on Netlify.\n\n**Live site:** https://remoteintech.company\n\n## Directory Structure\n\n```\nsrc/\n├── companies/          # Company profiles (Markdown with YAML frontmatter)\n├── blog/               # Blog posts (Markdown)\n├── pages/              # Static pages and dynamic templates (Nunjucks)\n├── common/             # Shared templates (404, redirects, sitemap, feeds)\n├── _layouts/           # Page layouts (base, page, post, company)\n├── _includes/          # Partials, components, and WebC components\n├── _config/            # Eleventy configuration (collections, filters, plugins)\n├── _data/              # Global data files (navigation, meta, companyTags)\n└── assets/             # Static assets (CSS, JS, fonts, images)\n\ndist/                   # Build output (gitignored)\n```\n\n## Build Commands\n\n```bash\nnpm run start           # Development server with hot reload\nnpm run build           # Production build (clean + eleventy + pagefind)\nnpm run build:11ty      # Eleventy build only (faster for testing)\nnpm run clean           # Remove dist and generated files\n```\n\n## Company Profiles\n\nCompanies are Markdown files in `src/companies/` with this frontmatter structure:\n\n```yaml\n---\ntitle: \"Company Name\"\nslug: company-slug                    # URL slug (required); must match the filename\nwebsite: https://example.com          # Main company website URL\ncareers_url: https://example.com/jobs # Optional: careers/jobs page URL\nregion: worldwide                     # worldwide, americas, europe, asia-pacific, americas-europe, other\nremote_policy: fully-remote           # fully-remote, remote-first, remote-friendly, hybrid\ncompany_size: startup                 # tiny, small, medium, large, enterprise\ntechnologies:                         # Array of tech tags\n  - javascript\n  - python\n  - devops\naddedAt: 2024-03-15                   # Date first contributed (managed by maintainers)\nupdatedAt: 2025-06-20                 # Date of last real content change (managed by maintainers)\n---\n```\n\n**URL fields:**\n\n- `website` — Main company URL (used to verify the company, identify brand)\n- `careers_url` — Optional careers/jobs page URL. When present, the \"Apply Now\" button links here; otherwise falls back to `website`\n\nValid technology tags are defined in `src/_data/companyHelpers.js` under `techLabels`. The validation script (`.github/scripts/validate-companies.js`) is the source of truth for required fields, allowed enum values, and required Markdown sections.\n\nTo add a company, see [`CONTRIBUTING.md`](CONTRIBUTING.md).\n\n## Key Configuration Files\n\n- `eleventy.config.js` — Main Eleventy config (imports from src/_config/)\n- `src/_config/collections.js` — Company and blog collections\n- `src/_data/companyHelpers.js` — Tech labels, region labels, featured companies\n- `src/_data/companyTags.js` — Generates browse page tags with counts\n- `src/_data/meta.js` — Site metadata (title, description, analytics)\n- `src/common/_redirects.njk` — Netlify redirects (auto-generates company redirects)\n\n## Coding Conventions\n\n- **Templates:** Nunjucks (.njk) for layouts and pages\n- **Content:** Markdown with YAML frontmatter for companies and blog posts\n- **Styles:** CUBE CSS methodology with Tailwind as a design token processor (not traditional utility classes)\n- **Components:** WebC components in `src/_includes/webc/`\n- **Local CSS:** Use `{%- css \"local\" -%}` blocks for page-specific styles\n- **Design Tokens:** Defined in `src/_data/designTokens/` (colors, spacing, typography)\n\n## Collections\n\nAvailable in templates:\n\n- `collections.companies` — All companies (alphabetically sorted)\n- `collections.featuredCompanies` — Randomly shuffled subset (8 of 12) from curated list\n- `collections.recentCompanies` — Recently added (by addedAt date)\n- `collections.companiesByRegion` — Grouped by region\n- `collections.companiesByTech` — Grouped by technology\n- `collections.allPosts` — Blog posts (reverse chronological)\n\n## Search\n\nSite search is powered by [Pagefind](https://pagefind.app/):\n\n- **Nav search:** Dropdown search in the navigation bar (quick results)\n- **Search page:** `/search/` — Full search results page with pagination\n- Search index is built during `npm run build` via the pagefind post-process step\n\n## Redirects\n\nLegacy URL redirects are auto-generated in `src/common/_redirects.njk`:\n\n- Old company URLs (`/company-slug`) redirect to new format (`/companies/company-slug/`)\n- Blog subdomain redirects from old WordPress site\n\n## Analytics\n\nFathom Analytics (privacy-focused) — only loads in production builds.\n\n- Site ID configured in `src/_data/meta.js`\n- 404 errors tracked via custom event with the attempted URL path\n\n## Advertising\n\nCarbon Ads (ethical, developer-focused) — only loads in production builds.\n\n- Config: `src/_data/meta.js` (`carbonAds` export)\n- Partial: `src/_includes/partials/carbon-ad.njk`\n- CSS: `src/assets/css/global/blocks/carbon-ad.css`\n- Layout: `base.njk` wraps `<main>` + ad `<aside>` in sidebar composition (production only)\n- Cover format with automatic classic fallback\n\n## SEO\n\n### AI Bot Policy\n\n`src/common/robots.njk` generates robots.txt with a dual policy:\n\n- **Allowed:** AI search bots (ChatGPT-User, Claude-User, PerplexityBot, YouBot, Applebot-Extended)\n- **Blocked:** AI training crawlers (GPTBot, CCBot, ClaudeBot, Google-Extended, FacebookBot, anthropic-ai, cohere-ai)\n\n`AGENTS.md` is a symlink to `CLAUDE.md` for broader AI agent compatibility.\n\n### Structured Data (JSON-LD)\n\nSchema.org markup in `src/_includes/schemas/`:\n\n- `WebSite.njk` — Site info with SearchAction for sitelinks search box\n- `BreadcrumbList.njk` — Auto-generated breadcrumb trail from URL path\n- `Organization.njk` — Company profile structured data\n- `BlogPosting.njk` — Blog post structured data\n\nSchemas are included via `src/_includes/head/schema.njk`. Page-specific schemas use the `schema` frontmatter field.\n\n### Meta Descriptions\n\nCompany pages auto-generate meta descriptions from the \"Company blurb\" section via computed data in `src/companies/companies.11tydata.js`. Descriptions are truncated to ~155 characters at sentence boundaries.\n\n### Company Dates\n\nCompany profiles have `addedAt` and `updatedAt` dates stored directly in frontmatter:\n\n- **`addedAt`** — Date when the company was first contributed to the project (traced through git history, including the pre-migration `company-profiles/` path)\n- **`updatedAt`** — Date of the last real content change (excludes bulk migrations and infrastructure commits). Some companies only have `addedAt` if no genuine content update occurred after the initial contribution\n\nThese dates were backfilled from a decade of git history using `git log --follow` to trace files through the October 2025 migration from `company-profiles/` to `src/companies/`. They are now static frontmatter values — no git commands run during build.\n\nThe homepage \"Recently Added\" section uses `addedAt` to show the most recently added companies. Company profile pages display \"Last updated: [date]\" in the footer.\n\n### Social Cards\n\nTwitter/X card meta tags are included in `src/_includes/head/meta-info.njk`:\n\n- `twitter:card` — summary_large_image\n- `twitter:title`, `twitter:description`, `twitter:image`\n\nOpen Graph tags are also present for Facebook/LinkedIn sharing.\n\n## Versioning\n\nThe site uses semantic versioning in `package.json`. The version displays in the footer and links to `/changelog/`.\n\n- **Major version bump**: Reserved for full site eras/redesigns (v1 = flat list, v2 = linked profiles, v3 = original live site, v4 = Eleventy rebuild)\n- **Minor version bump** (e.g. 4.3.0 → 4.4.0): Visible changes — new companies, blog posts, feature additions/removals, data changes visitors can see\n- **Patch version bump** (e.g. 4.4.0 → 4.4.1): Invisible changes — bug fixes, refactoring, documentation, CI/CD, performance improvements\n\n## Deployment\n\n- **Platform:** Netlify (auto-deploys from main branch)\n- **Build command:** `npm run build`\n- **Publish directory:** `dist`\n- **Node version:** 22 (specified in package.json engines)\n\n## Maintenance scripts\n\nAd-hoc maintainer tooling lives in `scripts/`. See `scripts/README.md` for the link-rot detection pipeline (`check-links.sh` + `fix-links.mjs`) used to find dead URLs, parked domains, and stale careers links across all company profiles.\n\n## GitHub Actions\n\n- **CI** (`.github/workflows/ci.yml`): Runs on push/PR to main. Builds the site with Node 22.\n- **Validate Company Profiles** (`.github/workflows/validate-companies.yml`): Runs on PRs that touch company files. Validates frontmatter, enum values, slug/filename match, URL format, and required sections. Posts a PR comment with results and blocks merge on errors.\n- **CodeQL** (`.github/workflows/codeql-analysis.yml`): Security scanning on push/PR and weekly schedule.\n\n## Branch Protection\n\nThe `main` branch has protection rules:\n\n- Requires pull request reviews (1 approval)\n- Requires `build` status check to pass\n- Only repository owner can push directly\n- Force pushes and deletions disabled\n- Admins can bypass when needed\n"},"files":{"CLAUDE.md":"# CLAUDE.md\n\nRepository context for AI agents (and humans) working on the codebase. For end-user contribution instructions, see [`CONTRIBUTING.md`](CONTRIBUTING.md).\n\n## Project Overview\n\nRemote In Tech is a community-maintained directory of remote-friendly tech companies. The site is built with [Eleventy](https://www.11ty.dev/) (v3) and deployed on Netlify.\n\n**Live site:** https://remoteintech.company\n\n## Directory Structure\n\n```\nsrc/\n├── companies/          # Company profiles (Markdown with YAML frontmatter)\n├── blog/               # Blog posts (Markdown)\n├── pages/              # Static pages and dynamic templates (Nunjucks)\n├── common/             # Shared templates (404, redirects, sitemap, feeds)\n├── _layouts/           # Page layouts (base, page, post, company)\n├── _includes/          # Partials, components, and WebC components\n├── _config/            # Eleventy configuration (collections, filters, plugins)\n├── _data/              # Global data files (navigation, meta, companyTags)\n└── assets/             # Static assets (CSS, JS, fonts, images)\n\ndist/                   # Build output (gitignored)\n```\n\n## Build Commands\n\n```bash\nnpm run start           # Development server with hot reload\nnpm run build           # Production build (clean + eleventy + pagefind)\nnpm run build:11ty      # Eleventy build only (faster for testing)\nnpm run clean           # Remove dist and generated files\n```\n\n## Company Profiles\n\nCompanies are Markdown files in `src/companies/` with this frontmatter structure:\n\n```yaml\n---\ntitle: \"Company Name\"\nslug: company-slug                    # URL slug (required); must match the filename\nwebsite: https://example.com          # Main company website URL\ncareers_url: https://example.com/jobs # Optional: careers/jobs page URL\nregion: worldwide                     # worldwide, americas, europe, asia-pacific, americas-europe, other\nremote_policy: fully-remote           # fully-remote, remote-first, remote-friendly, hybrid\ncompany_size: startup                 # tiny, small, medium, large, enterprise\ntechnologies:                         # Array of tech tags\n  - javascript\n  - python\n  - devops\naddedAt: 2024-03-15                   # Date first contributed (managed by maintainers)\nupdatedAt: 2025-06-20                 # Date of last real content change (managed by maintainers)\n---\n```\n\n**URL fields:**\n\n- `website` — Main company URL (used to verify the company, identify brand)\n- `careers_url` — Optional careers/jobs page URL. When present, the \"Apply Now\" button links here; otherwise falls back to `website`\n\nValid technology tags are defined in `src/_data/companyHelpers.js` under `techLabels`. The validation script (`.github/scripts/validate-companies.js`) is the source of truth for required fields, allowed enum values, and required Markdown sections.\n\nTo add a company, see [`CONTRIBUTING.md`](CONTRIBUTING.md).\n\n## Key Configuration Files\n\n- `eleventy.config.js` — Main Eleventy config (imports from src/_config/)\n- `src/_config/collections.js` — Company and blog collections\n- `src/_data/companyHelpers.js` — Tech labels, region labels, featured companies\n- `src/_data/companyTags.js` — Generates browse page tags with counts\n- `src/_data/meta.js` — Site metadata (title, description, analytics)\n- `src/common/_redirects.njk` — Netlify redirects (auto-generates company redirects)\n\n## Coding Conventions\n\n- **Templates:** Nunjucks (.njk) for layouts and pages\n- **Content:** Markdown with YAML frontmatter for companies and blog posts\n- **Styles:** CUBE CSS methodology with Tailwind as a design token processor (not traditional utility classes)\n- **Components:** WebC components in `src/_includes/webc/`\n- **Local CSS:** Use `{%- css \"local\" -%}` blocks for page-specific styles\n- **Design Tokens:** Defined in `src/_data/designTokens/` (colors, spacing, typography)\n\n## Collections\n\nAvailable in templates:\n\n- `collections.companies` — All companies (alphabetically sorted)\n- `collections.featuredCompanies` — Randomly shuffled subset (8 of 12) from curated list\n- `collections.recentCompanies` — Recently added (by addedAt date)\n- `collections.companiesByRegion` — Grouped by region\n- `collections.companiesByTech` — Grouped by technology\n- `collections.allPosts` — Blog posts (reverse chronological)\n\n## Search\n\nSite search is powered by [Pagefind](https://pagefind.app/):\n\n- **Nav search:** Dropdown search in the navigation bar (quick results)\n- **Search page:** `/search/` — Full search results page with pagination\n- Search index is built during `npm run build` via the pagefind post-process step\n\n## Redirects\n\nLegacy URL redirects are auto-generated in `src/common/_redirects.njk`:\n\n- Old company URLs (`/company-slug`) redirect to new format (`/companies/company-slug/`)\n- Blog subdomain redirects from old WordPress site\n\n## Analytics\n\nFathom Analytics (privacy-focused) — only loads in production builds.\n\n- Site ID configured in `src/_data/meta.js`\n- 404 errors tracked via custom event with the attempted URL path\n\n## Advertising\n\nCarbon Ads (ethical, developer-focused) — only loads in production builds.\n\n- Config: `src/_data/meta.js` (`carbonAds` export)\n- Partial: `src/_includes/partials/carbon-ad.njk`\n- CSS: `src/assets/css/global/blocks/carbon-ad.css`\n- Layout: `base.njk` wraps `<main>` + ad `<aside>` in sidebar composition (production only)\n- Cover format with automatic classic fallback\n\n## SEO\n\n### AI Bot Policy\n\n`src/common/robots.njk` generates robots.txt with a dual policy:\n\n- **Allowed:** AI search bots (ChatGPT-User, Claude-User, PerplexityBot, YouBot, Applebot-Extended)\n- **Blocked:** AI training crawlers (GPTBot, CCBot, ClaudeBot, Google-Extended, FacebookBot, anthropic-ai, cohere-ai)\n\n`AGENTS.md` is a symlink to `CLAUDE.md` for broader AI agent compatibility.\n\n### Structured Data (JSON-LD)\n\nSchema.org markup in `src/_includes/schemas/`:\n\n- `WebSite.njk` — Site info with SearchAction for sitelinks search box\n- `BreadcrumbList.njk` — Auto-generated breadcrumb trail from URL path\n- `Organization.njk` — Company profile structured data\n- `BlogPosting.njk` — Blog post structured data\n\nSchemas are included via `src/_includes/head/schema.njk`. Page-specific schemas use the `schema` frontmatter field.\n\n### Meta Descriptions\n\nCompany pages auto-generate meta descriptions from the \"Company blurb\" section via computed data in `src/companies/companies.11tydata.js`. Descriptions are truncated to ~155 characters at sentence boundaries.\n\n### Company Dates\n\nCompany profiles have `addedAt` and `updatedAt` dates stored directly in frontmatter:\n\n- **`addedAt`** — Date when the company was first contributed to the project (traced through git history, including the pre-migration `company-profiles/` path)\n- **`updatedAt`** — Date of the last real content change (excludes bulk migrations and infrastructure commits). Some companies only have `addedAt` if no genuine content update occurred after the initial contribution\n\nThese dates were backfilled from a decade of git history using `git log --follow` to trace files through the October 2025 migration from `company-profiles/` to `src/companies/`. They are now static frontmatter values — no git commands run during build.\n\nThe homepage \"Recently Added\" section uses `addedAt` to show the most recently added companies. Company profile pages display \"Last updated: [date]\" in the footer.\n\n### Social Cards\n\nTwitter/X card meta tags are included in `src/_includes/head/meta-info.njk`:\n\n- `twitter:card` — summary_large_image\n- `twitter:title`, `twitter:description`, `twitter:image`\n\nOpen Graph tags are also present for Facebook/LinkedIn sharing.\n\n## Versioning\n\nThe site uses semantic versioning in `package.json`. The version displays in the footer and links to `/changelog/`.\n\n- **Major version bump**: Reserved for full site eras/redesigns (v1 = flat list, v2 = linked profiles, v3 = original live site, v4 = Eleventy rebuild)\n- **Minor version bump** (e.g. 4.3.0 → 4.4.0): Visible changes — new companies, blog posts, feature additions/removals, data changes visitors can see\n- **Patch version bump** (e.g. 4.4.0 → 4.4.1): Invisible changes — bug fixes, refactoring, documentation, CI/CD, performance improvements\n\n## Deployment\n\n- **Platform:** Netlify (auto-deploys from main branch)\n- **Build command:** `npm run build`\n- **Publish directory:** `dist`\n- **Node version:** 22 (specified in package.json engines)\n\n## Maintenance scripts\n\nAd-hoc maintainer tooling lives in `scripts/`. See `scripts/README.md` for the link-rot detection pipeline (`check-links.sh` + `fix-links.mjs`) used to find dead URLs, parked domains, and stale careers links across all company profiles.\n\n## GitHub Actions\n\n- **CI** (`.github/workflows/ci.yml`): Runs on push/PR to main. Builds the site with Node 22.\n- **Validate Company Profiles** (`.github/workflows/validate-companies.yml`): Runs on PRs that touch company files. Validates frontmatter, enum values, slug/filename match, URL format, and required sections. Posts a PR comment with results and blocks merge on errors.\n- **CodeQL** (`.github/workflows/codeql-analysis.yml`): Security scanning on push/PR and weekly schedule.\n\n## Branch Protection\n\nThe `main` branch has protection rules:\n\n- Requires pull request reviews (1 approval)\n- Requires `build` status check to pass\n- Only repository owner can push directly\n- Force pushes and deletions disabled\n- Admins can bypass when needed\n"},"items":[{"name":"CLAUDE.md","path":"CLAUDE.md","title":"CLAUDE.md","content":"# CLAUDE.md\n\nRepository context for AI agents (and humans) working on the codebase. For end-user contribution instructions, see [`CONTRIBUTING.md`](CONTRIBUTING.md).\n\n## Project Overview\n\nRemote In Tech is a community-maintained directory of remote-friendly tech companies. The site is built with [Eleventy](https://www.11ty.dev/) (v3) and deployed on Netlify.\n\n**Live site:** https://remoteintech.company\n\n## Directory Structure\n\n```\nsrc/\n├── companies/          # Company profiles (Markdown with YAML frontmatter)\n├── blog/               # Blog posts (Markdown)\n├── pages/              # Static pages and dynamic templates (Nunjucks)\n├── common/             # Shared templates (404, redirects, sitemap, feeds)\n├── _layouts/           # Page layouts (base, page, post, company)\n├── _includes/          # Partials, components, and WebC components\n├── _config/            # Eleventy configuration (collections, filters, plugins)\n├── _data/              # Global data files (navigation, meta, companyTags)\n└── assets/             # Static assets (CSS, JS, fonts, images)\n\ndist/                   # Build output (gitignored)\n```\n\n## Build Commands\n\n```bash\nnpm run start           # Development server with hot reload\nnpm run build           # Production build (clean + eleventy + pagefind)\nnpm run build:11ty      # Eleventy build only (faster for testing)\nnpm run clean           # Remove dist and generated files\n```\n\n## Company Profiles\n\nCompanies are Markdown files in `src/companies/` with this frontmatter structure:\n\n```yaml\n---\ntitle: \"Company Name\"\nslug: company-slug                    # URL slug (required); must match the filename\nwebsite: https://example.com          # Main company website URL\ncareers_url: https://example.com/jobs # Optional: careers/jobs page URL\nregion: worldwide                     # worldwide, americas, europe, asia-pacific, americas-europe, other\nremote_policy: fully-remote           # fully-remote, remote-first, remote-friendly, hybrid\ncompany_size: startup                 # tiny, small, medium, large, enterprise\ntechnologies:                         # Array of tech tags\n  - javascript\n  - python\n  - devops\naddedAt: 2024-03-15                   # Date first contributed (managed by maintainers)\nupdatedAt: 2025-06-20                 # Date of last real content change (managed by maintainers)\n---\n```\n\n**URL fields:**\n\n- `website` — Main company URL (used to verify the company, identify brand)\n- `careers_url` — Optional careers/jobs page URL. When present, the \"Apply Now\" button links here; otherwise falls back to `website`\n\nValid technology tags are defined in `src/_data/companyHelpers.js` under `techLabels`. The validation script (`.github/scripts/validate-companies.js`) is the source of truth for required fields, allowed enum values, and required Markdown sections.\n\nTo add a company, see [`CONTRIBUTING.md`](CONTRIBUTING.md).\n\n## Key Configuration Files\n\n- `eleventy.config.js` — Main Eleventy config (imports from src/_config/)\n- `src/_config/collections.js` — Company and blog collections\n- `src/_data/companyHelpers.js` — Tech labels, region labels, featured companies\n- `src/_data/companyTags.js` — Generates browse page tags with counts\n- `src/_data/meta.js` — Site metadata (title, description, analytics)\n- `src/common/_redirects.njk` — Netlify redirects (auto-generates company redirects)\n\n## Coding Conventions\n\n- **Templates:** Nunjucks (.njk) for layouts and pages\n- **Content:** Markdown with YAML frontmatter for companies and blog posts\n- **Styles:** CUBE CSS methodology with Tailwind as a design token processor (not traditional utility classes)\n- **Components:** WebC components in `src/_includes/webc/`\n- **Local CSS:** Use `{%- css \"local\" -%}` blocks for page-specific styles\n- **Design Tokens:** Defined in `src/_data/designTokens/` (colors, spacing, typography)\n\n## Collections\n\nAvailable in templates:\n\n- `collections.companies` — All companies (alphabetically sorted)\n- `collections.featuredCompanies` — Randomly shuffled subset (8 of 12) from curated list\n- `collections.recentCompanies` — Recently added (by addedAt date)\n- `collections.companiesByRegion` — Grouped by region\n- `collections.companiesByTech` — Grouped by technology\n- `collections.allPosts` — Blog posts (reverse chronological)\n\n## Search\n\nSite search is powered by [Pagefind](https://pagefind.app/):\n\n- **Nav search:** Dropdown search in the navigation bar (quick results)\n- **Search page:** `/search/` — Full search results page with pagination\n- Search index is built during `npm run build` via the pagefind post-process step\n\n## Redirects\n\nLegacy URL redirects are auto-generated in `src/common/_redirects.njk`:\n\n- Old company URLs (`/company-slug`) redirect to new format (`/companies/company-slug/`)\n- Blog subdomain redirects from old WordPress site\n\n## Analytics\n\nFathom Analytics (privacy-focused) — only loads in production builds.\n\n- Site ID configured in `src/_data/meta.js`\n- 404 errors tracked via custom event with the attempted URL path\n\n## Advertising\n\nCarbon Ads (ethical, developer-focused) — only loads in production builds.\n\n- Config: `src/_data/meta.js` (`carbonAds` export)\n- Partial: `src/_includes/partials/carbon-ad.njk`\n- CSS: `src/assets/css/global/blocks/carbon-ad.css`\n- Layout: `base.njk` wraps `<main>` + ad `<aside>` in sidebar composition (production only)\n- Cover format with automatic classic fallback\n\n## SEO\n\n### AI Bot Policy\n\n`src/common/robots.njk` generates robots.txt with a dual policy:\n\n- **Allowed:** AI search bots (ChatGPT-User, Claude-User, PerplexityBot, YouBot, Applebot-Extended)\n- **Blocked:** AI training crawlers (GPTBot, CCBot, ClaudeBot, Google-Extended, FacebookBot, anthropic-ai, cohere-ai)\n\n`AGENTS.md` is a symlink to `CLAUDE.md` for broader AI agent compatibility.\n\n### Structured Data (JSON-LD)\n\nSchema.org markup in `src/_includes/schemas/`:\n\n- `WebSite.njk` — Site info with SearchAction for sitelinks search box\n- `BreadcrumbList.njk` — Auto-generated breadcrumb trail from URL path\n- `Organization.njk` — Company profile structured data\n- `BlogPosting.njk` — Blog post structured data\n\nSchemas are included via `src/_includes/head/schema.njk`. Page-specific schemas use the `schema` frontmatter field.\n\n### Meta Descriptions\n\nCompany pages auto-generate meta descriptions from the \"Company blurb\" section via computed data in `src/companies/companies.11tydata.js`. Descriptions are truncated to ~155 characters at sentence boundaries.\n\n### Company Dates\n\nCompany profiles have `addedAt` and `updatedAt` dates stored directly in frontmatter:\n\n- **`addedAt`** — Date when the company was first contributed to the project (traced through git history, including the pre-migration `company-profiles/` path)\n- **`updatedAt`** — Date of the last real content change (excludes bulk migrations and infrastructure commits). Some companies only have `addedAt` if no genuine content update occurred after the initial contribution\n\nThese dates were backfilled from a decade of git history using `git log --follow` to trace files through the October 2025 migration from `company-profiles/` to `src/companies/`. They are now static frontmatter values — no git commands run during build.\n\nThe homepage \"Recently Added\" section uses `addedAt` to show the most recently added companies. Company profile pages display \"Last updated: [date]\" in the footer.\n\n### Social Cards\n\nTwitter/X card meta tags are included in `src/_includes/head/meta-info.njk`:\n\n- `twitter:card` — summary_large_image\n- `twitter:title`, `twitter:description`, `twitter:image`\n\nOpen Graph tags are also present for Facebook/LinkedIn sharing.\n\n## Versioning\n\nThe site uses semantic versioning in `package.json`. The version displays in the footer and links to `/changelog/`.\n\n- **Major version bump**: Reserved for full site eras/redesigns (v1 = flat list, v2 = linked profiles, v3 = original live site, v4 = Eleventy rebuild)\n- **Minor version bump** (e.g. 4.3.0 → 4.4.0): Visible changes — new companies, blog posts, feature additions/removals, data changes visitors can see\n- **Patch version bump** (e.g. 4.4.0 → 4.4.1): Invisible changes — bug fixes, refactoring, documentation, CI/CD, performance improvements\n\n## Deployment\n\n- **Platform:** Netlify (auto-deploys from main branch)\n- **Build command:** `npm run build`\n- **Publish directory:** `dist`\n- **Node version:** 22 (specified in package.json engines)\n\n## Maintenance scripts\n\nAd-hoc maintainer tooling lives in `scripts/`. See `scripts/README.md` for the link-rot detection pipeline (`check-links.sh` + `fix-links.mjs`) used to find dead URLs, parked domains, and stale careers links across all company profiles.\n\n## GitHub Actions\n\n- **CI** (`.github/workflows/ci.yml`): Runs on push/PR to main. Builds the site with Node 22.\n- **Validate Company Profiles** (`.github/workflows/validate-companies.yml`): Runs on PRs that touch company files. Validates frontmatter, enum values, slug/filename match, URL format, and required sections. Posts a PR comment with results and blocks merge on errors.\n- **CodeQL** (`.github/workflows/codeql-analysis.yml`): Security scanning on push/PR and weekly schedule.\n\n## Branch Protection\n\nThe `main` branch has protection rules:\n\n- Requires pull request reviews (1 approval)\n- Requires `build` status check to pass\n- Only repository owner can push directly\n- Force pushes and deletions disabled\n- Admins can bypass when needed\n","category":"root","tokens":2349}]}