🚀 → akams.fyi = Search aka.ms links!
This repository hosts the source for akams.fyi, a crowd-sourced directory of Microsoft's aka.ms links.
Use akams.fyi/add — no GitHub account required. The form checks the link resolves and shows you where it goes before you submit.
Submissions are published in an hourly batch, so allow a little time for a new link to appear.
If you'd rather use GitHub, the Add a new aka.ms link template feeds into the same queue.
Best for editing existing links, deleting links, or adding many at once.
Each link is one .json file in website/config:
- The filename is the aka.ms short name —
aka.ms/intune→intune.json. - Use lowercase.
- A
/in the link becomes~—aka.ms/ad/ca→ad~ca.json.
Fields:
| Field | Meaning |
|---|---|
link |
The short name, without the aka.ms/ prefix. |
title |
Human-written title. Use when the destination's own title isn't meaningful, or the page is not public. Takes precedence over autoCrawledTitle. |
keywords |
Comma-separated search aliases. Useful for former product names. |
category |
Product family, used for grouping and the icon. See CATEGORIES in akaLink.mjs for the list; add an icon at website/public/img to give a category its own glyph. |
autoCrawledTitle † |
Destination page title. |
url † |
Final destination URL. |
dateAdded |
ISO 8601 timestamp, used for "recently added" and sorting. |
status † |
Set to dead when aka.ms stops resolving the link. Dead records stay in the repo but are hidden from the site. |
† Maintained automatically by the daily crawl (refresh-links.yaml); you don't need to fill these in.
Open a new bug, or use the "Report a problem with this link" link at the bottom of any link page.
Astro static site, deployed to Cloudflare Pages. website/config is the source of truth — there is no database.
visitor → /add → POST /api/submit (Pages Function)
├─ validates + confirms aka.ms resolves
└─ files a labelled GitHub issue
↓
hourly: drain-issues.mjs → ONE commit per batch → one Pages build
Submissions are batched rather than committed individually because every commit triggers a Pages build, and the free plan allows 500 a month.
| Path | Purpose |
|---|---|
website/config/ |
The link records. Source of truth. |
website/src/lib/akaLink.mjs |
Validation and normalization. Shared by the browser, the Function and the workflows — one implementation, so the tiers can't disagree. |
website/src/lib/links.mjs |
Build-time loader. Vite-only (import.meta.glob). |
website/functions/api/submit.js |
The no-signin submission endpoint. |
build/scripts/drain-issues.mjs |
Turns open submission issues into one commit. |
build/scripts/refresh-links.mjs |
Daily re-crawl of destinations and titles. |
build/scripts/backfill-dates.mjs |
One-off; already run. |
cd website
npm ci
npm run dev # http://localhost:4321
npm run build # → dist/
npx wrangler pages dev dist # includes /api/submit