/** * The `companies:` frontmatter vocabulary, shared by its writer * (`apps/cli/sync.ts`, from the local DuckDB company-frequency database), its * schema (`blume.config.ts`) and its two readers: the company table under a * problem page's badge row (`components/ProblemBadges.astro`) and the * Companies section of the Appendix (`pages/appendix.astro`), where each * company's card — anchored at `companyHref()` — lists the problems it asked. * Plain data, no Astro imports: sync imports this file under Bun. */ /** The database's recency windows, most recent first; they nest, so a company is filed under the first it appears in. */ export const RECENCY = ["Thirty Days", "Three Months", "Six Months"] as const; export type Recency = (typeof RECENCY)[number]; /** Read under an "Asked within" heading (the company table) or as a row chip (the Appendix card). */ export const RECENCY_LABEL: Record = { "Thirty Days": "30 days", "Three Months": "3 months", "Six Months": "6 months", }; export interface Company { name: string; /** The most recent window the company asked the problem in. */ period: Recency; /** 5–100, relative within the company and window: 100 is its most-asked problem there. */ frequency: number; } /** The company's card on the Appendix; `company-` keeps it clear of the tag cards' `#` ids. */ export function companyHref(name: string): string { return `/appendix#company-${name .toLowerCase() .replace(/[^a-z0-9]+/g, "-") .replace(/^-|-$/g, "")}`; }