@@ -747,7 +747,8 @@ const RAW_TOPICS: RawTopicSeed[] = [
747747 slug : "launchdarkly" ,
748748 title : "LaunchDarkly" ,
749749 category : "vendors" ,
750- tagline : "Enterprise Feature Management, Progressive Rollouts & Kill Switches" ,
750+ tagline :
751+ "Enterprise Feature Management, Progressive Rollouts & Kill Switches" ,
751752 keywords : [ "launchdarkly" , "feature flags" ] ,
752753 diagramSteps : [
753754 "Flag Targeting Rules" ,
@@ -1143,7 +1144,8 @@ const RAW_TOPICS: RawTopicSeed[] = [
11431144 slug : "vite" ,
11441145 title : "Vite" ,
11451146 category : "frameworks" ,
1146- tagline : "Instant ESM Dev Server, Rollup/Rolldown Bundling & Environment API" ,
1147+ tagline :
1148+ "Instant ESM Dev Server, Rollup/Rolldown Bundling & Environment API" ,
11471149 keywords : [ "vite" , "vitejs" , "rolldown" ] ,
11481150 diagramSteps : [
11491151 "Native Browser ESM" ,
@@ -1283,7 +1285,8 @@ const RAW_TOPICS: RawTopicSeed[] = [
12831285 slug : "bun" ,
12841286 title : "Bun" ,
12851287 category : "languages" ,
1286- tagline : "All-in-One JavaScript Runtime, Bundler, Test Runner & Package Manager" ,
1288+ tagline :
1289+ "All-in-One JavaScript Runtime, Bundler, Test Runner & Package Manager" ,
12871290 keywords : [ "bun" , "bun.sh" ] ,
12881291 diagramSteps : [
12891292 "bun install & bun test" ,
@@ -1345,7 +1348,8 @@ const RAW_TOPICS: RawTopicSeed[] = [
13451348 title : "Go" ,
13461349 category : "languages" ,
13471350 aliases : [ "golang" ] ,
1348- tagline : "Goroutines, Channels, Cloud-Native CLI Tools & High-Throughput Services" ,
1351+ tagline :
1352+ "Goroutines, Channels, Cloud-Native CLI Tools & High-Throughput Services" ,
13491353 keywords : [ "golang" , "go routines" ] ,
13501354 diagramSteps : [
13511355 "Goroutines & Channels" ,
@@ -1392,7 +1396,8 @@ const RAW_TOPICS: RawTopicSeed[] = [
13921396 slug : "zod" ,
13931397 title : "Zod" ,
13941398 category : "languages" ,
1395- tagline : "TypeScript-First Schema Validation, z.infer & Runtime Boundary Safety" ,
1399+ tagline :
1400+ "TypeScript-First Schema Validation, z.infer & Runtime Boundary Safety" ,
13961401 keywords : [ "zod" , "zvalidator" , "z.object" , "z.infer" ] ,
13971402 diagramSteps : [
13981403 "Untrusted JSON Input" ,
@@ -1413,7 +1418,8 @@ const RAW_TOPICS: RawTopicSeed[] = [
14131418 category : "data" ,
14141419 featured : true ,
14151420 aliases : [ "cloudflare-d1" ] ,
1416- tagline : "Serverless Edge SQLite, Read Replication & Zero-Cold-Start Queries" ,
1421+ tagline :
1422+ "Serverless Edge SQLite, Read Replication & Zero-Cold-Start Queries" ,
14171423 keywords : [ "cloudflare d1" , "env.db" , "d1 database" ] ,
14181424 diagramSteps : [
14191425 "Drizzle SQL Migrations" ,
@@ -1428,7 +1434,8 @@ const RAW_TOPICS: RawTopicSeed[] = [
14281434 slug : "durable-objects" ,
14291435 title : "Durable Objects" ,
14301436 category : "data" ,
1431- tagline : "Single-Threaded Edge Actors, Embedded SQLite & WebSocket Hibernation" ,
1437+ tagline :
1438+ "Single-Threaded Edge Actors, Embedded SQLite & WebSocket Hibernation" ,
14321439 keywords : [ "durable objects" , "ctx.storage.sql" , "websocket hibernation" ] ,
14331440 diagramSteps : [
14341441 "Unique Actor ID" ,
@@ -1460,7 +1467,8 @@ const RAW_TOPICS: RawTopicSeed[] = [
14601467 slug : "prisma" ,
14611468 title : "Prisma" ,
14621469 category : "data" ,
1463- tagline : "Declarative Data Modeling, Prisma Migrate & Type-Safe Database Client" ,
1470+ tagline :
1471+ "Declarative Data Modeling, Prisma Migrate & Type-Safe Database Client" ,
14641472 keywords : [ "prisma" , "schema.prisma" ] ,
14651473 diagramSteps : [
14661474 "schema.prisma" ,
@@ -1476,7 +1484,8 @@ const RAW_TOPICS: RawTopicSeed[] = [
14761484 title : "PostgreSQL" ,
14771485 category : "data" ,
14781486 aliases : [ "postgres" ] ,
1479- tagline : "ACID Relational Database, JSONB, pgvector & Indexing Architecture" ,
1487+ tagline :
1488+ "ACID Relational Database, JSONB, pgvector & Indexing Architecture" ,
14801489 keywords : [ "postgres" , "postgresql" , "jsonb" , "pgvector" ] ,
14811490 diagramSteps : [
14821491 "Relational + JSONB" ,
@@ -1584,7 +1593,8 @@ const RAW_TOPICS: RawTopicSeed[] = [
15841593 title : "Better-Auth" ,
15851594 category : "data" ,
15861595 featured : true ,
1587- tagline : "TypeScript-Native Authentication, OAuth 2.1, Passkeys & D1 Sessions" ,
1596+ tagline :
1597+ "TypeScript-Native Authentication, OAuth 2.1, Passkeys & D1 Sessions" ,
15881598 keywords : [ "better-auth" , "better auth" ] ,
15891599 diagramSteps : [
15901600 "OAuth / Passkey Login" ,
@@ -1599,7 +1609,8 @@ const RAW_TOPICS: RawTopicSeed[] = [
15991609 slug : "clerk" ,
16001610 title : "Clerk" ,
16011611 category : "data" ,
1602- tagline : "Drop-In Authentication UI, Multi-Tenant Organizations & Session JWTs" ,
1612+ tagline :
1613+ "Drop-In Authentication UI, Multi-Tenant Organizations & Session JWTs" ,
16031614 keywords : [ "clerk" , "clerk.com" , "clerk.dev" ] ,
16041615 diagramSteps : [
16051616 "<SignIn /> Component" ,
@@ -1630,7 +1641,8 @@ const RAW_TOPICS: RawTopicSeed[] = [
16301641 title : "AuthZed" ,
16311642 category : "data" ,
16321643 aliases : [ "spicedb" ] ,
1633- tagline : "Google Zanzibar Relationship-Based Access Control (ReBAC) & SpiceDB" ,
1644+ tagline :
1645+ "Google Zanzibar Relationship-Based Access Control (ReBAC) & SpiceDB" ,
16341646 keywords : [ "authzed" , "spicedb" , "zanzibar" , "rebac" ] ,
16351647 diagramSteps : [
16361648 "Permission Schema" ,
@@ -1645,7 +1657,8 @@ const RAW_TOPICS: RawTopicSeed[] = [
16451657 slug : "cms" ,
16461658 title : "Headless CMS" ,
16471659 category : "data" ,
1648- tagline : "Structured Content Modeling, Visual Editing & Omnichannel Delivery" ,
1660+ tagline :
1661+ "Structured Content Modeling, Visual Editing & Omnichannel Delivery" ,
16491662 keywords : [ "headless cms" , "cms" , "content modeling" ] ,
16501663 diagramSteps : [
16511664 "Structured Content Types" ,
@@ -1680,7 +1693,8 @@ const RAW_TOPICS: RawTopicSeed[] = [
16801693 title : "AI & Agents" ,
16811694 category : "ai" ,
16821695 featured : true ,
1683- tagline : "Autonomous AI Agents, Tool Calling, Structured Outputs & Eval Loops" ,
1696+ tagline :
1697+ "Autonomous AI Agents, Tool Calling, Structured Outputs & Eval Loops" ,
16841698 description :
16851699 "Architect production AI coding agents, Model Context Protocol (MCP) servers, WebMCP tools, and Answer Engine Optimization (AEO)." ,
16861700 badge : "🤖 AI & Agentic Web Hub" ,
@@ -1749,7 +1763,8 @@ const RAW_TOPICS: RawTopicSeed[] = [
17491763 slug : "webmcp" ,
17501764 title : "WebMCP" ,
17511765 category : "ai" ,
1752- tagline : "navigator.modelContext Browser Tool Registration for In-Page AI Agents" ,
1766+ tagline :
1767+ "navigator.modelContext Browser Tool Registration for In-Page AI Agents" ,
17531768 keywords : [ "webmcp" , "navigator.modelcontext" ] ,
17541769 diagramSteps : [
17551770 "navigator.modelContext" ,
@@ -1779,7 +1794,8 @@ const RAW_TOPICS: RawTopicSeed[] = [
17791794 slug : "webgpu" ,
17801795 title : "WebGPU" ,
17811796 category : "ai" ,
1782- tagline : "Next-Gen Browser GPU Compute Shaders, WGSL & Local LLM Acceleration" ,
1797+ tagline :
1798+ "Next-Gen Browser GPU Compute Shaders, WGSL & Local LLM Acceleration" ,
17831799 keywords : [ "webgpu" , "wgsl" , "compute shaders" ] ,
17841800 diagramSteps : [
17851801 "navigator.gpu Adapter" ,
@@ -1826,7 +1842,8 @@ const RAW_TOPICS: RawTopicSeed[] = [
18261842 title : "Google Gemini" ,
18271843 category : "ai" ,
18281844 aliases : [ "google-gemini" ] ,
1829- tagline : "Multimodal Context Windows, Google Antigravity & Agentic Workflows" ,
1845+ tagline :
1846+ "Multimodal Context Windows, Google Antigravity & Agentic Workflows" ,
18301847 keywords : [ "gemini" , "google gemini" , "antigravity" ] ,
18311848 diagramSteps : [
18321849 "Multimodal Input" ,
@@ -1856,7 +1873,8 @@ const RAW_TOPICS: RawTopicSeed[] = [
18561873 slug : "chrome-built-in-ai" ,
18571874 title : "Chrome Built-in AI" ,
18581875 category : "ai" ,
1859- tagline : "W3C Web Machine Learning Prompt, Summarizer, Writer & Translator APIs" ,
1876+ tagline :
1877+ "W3C Web Machine Learning Prompt, Summarizer, Writer & Translator APIs" ,
18601878 keywords : [ "chrome built-in ai" , "chrome-built-in-ai" , "prompt api" ] ,
18611879 diagramSteps : [
18621880 "Feature Detection Gate" ,
@@ -1887,7 +1905,12 @@ const RAW_TOPICS: RawTopicSeed[] = [
18871905 title : "RAG" ,
18881906 category : "ai" ,
18891907 tagline : "Hybrid Semantic + Keyword Search, Vector Embeddings & Reranking" ,
1890- keywords : [ "rag" , "retrieval augmented generation" , "vector database" , "embeddings" ] ,
1908+ keywords : [
1909+ "rag" ,
1910+ "retrieval augmented generation" ,
1911+ "vector database" ,
1912+ "embeddings" ,
1913+ ] ,
18911914 diagramSteps : [
18921915 "Chunking + Embeddings" ,
18931916 "Vector + BM25 Index" ,
@@ -1921,7 +1944,8 @@ const RAW_TOPICS: RawTopicSeed[] = [
19211944 title : "GitHub" ,
19221945 category : "devops" ,
19231946 featured : true ,
1924- tagline : "GitHub Actions CI/CD, Pull Request Workflows, Copilot & Open Source" ,
1947+ tagline :
1948+ "GitHub Actions CI/CD, Pull Request Workflows, Copilot & Open Source" ,
19251949 keywords : [ "github" , "github actions" , "github copilot" , "pull request" ] ,
19261950 diagramSteps : [
19271951 "Pull Request Branch" ,
@@ -1952,7 +1976,8 @@ const RAW_TOPICS: RawTopicSeed[] = [
19521976 slug : "playwright" ,
19531977 title : "Playwright" ,
19541978 category : "devops" ,
1955- tagline : "Deterministic End-to-End Browser Testing, Trace Viewer & Network Mocks" ,
1979+ tagline :
1980+ "Deterministic End-to-End Browser Testing, Trace Viewer & Network Mocks" ,
19561981 keywords : [ "playwright" , "e2e testing" ] ,
19571982 diagramSteps : [
19581983 "getByRole() Locators" ,
@@ -1968,7 +1993,8 @@ const RAW_TOPICS: RawTopicSeed[] = [
19681993 title : "Testing" ,
19691994 category : "devops" ,
19701995 aliases : [ "vitest" , "tdd" ] ,
1971- tagline : "Test-Driven Development (TDD), Vitest, Dependency Injection & CI Gates" ,
1996+ tagline :
1997+ "Test-Driven Development (TDD), Vitest, Dependency Injection & CI Gates" ,
19721998 keywords : [ "testing" , "vitest" , "jest" , "tdd" , "unit testing" ] ,
19731999 diagramSteps : [
19742000 "Red: Failing Spec" ,
@@ -2008,7 +2034,8 @@ const RAW_TOPICS: RawTopicSeed[] = [
20082034 slug : "serverless" ,
20092035 title : "Serverless" ,
20102036 category : "devops" ,
2011- tagline : "Edge Functions, Scale-to-Zero Compute & Event-Driven Architectures" ,
2037+ tagline :
2038+ "Edge Functions, Scale-to-Zero Compute & Event-Driven Architectures" ,
20122039 keywords : [ "serverless" , "jamstack" , "edge functions" ] ,
20132040 diagramSteps : [
20142041 "Incoming HTTP / Event" ,
@@ -2039,7 +2066,8 @@ const RAW_TOPICS: RawTopicSeed[] = [
20392066 title : "Accessibility" ,
20402067 category : "devops" ,
20412068 aliases : [ "accessibility" , "wcag" ] ,
2042- tagline : "WCAG 2.2 AA, Semantic ARIA, Keyboard Focus Rings & Screen Readers" ,
2069+ tagline :
2070+ "WCAG 2.2 AA, Semantic ARIA, Keyboard Focus Rings & Screen Readers" ,
20432071 keywords : [ "accessibility" , "a11y" , "wcag" , "aria" , "screen reader" ] ,
20442072 diagramSteps : [
20452073 "Semantic HTML Elements" ,
@@ -2055,8 +2083,15 @@ const RAW_TOPICS: RawTopicSeed[] = [
20552083 title : "Design" ,
20562084 category : "devops" ,
20572085 aliases : [ "design-systems" , "figma" ] ,
2058- tagline : "W3C Design Tokens, Dual-Theme UI Systems, Figma & Component Libraries" ,
2059- keywords : [ "design system" , "design systems" , "figma" , "ui/ux" , "design tokens" ] ,
2086+ tagline :
2087+ "W3C Design Tokens, Dual-Theme UI Systems, Figma & Component Libraries" ,
2088+ keywords : [
2089+ "design system" ,
2090+ "design systems" ,
2091+ "figma" ,
2092+ "ui/ux" ,
2093+ "design tokens" ,
2094+ ] ,
20602095 diagramSteps : [
20612096 "W3C tokens.json" ,
20622097 "Semantic Light/Dark Tokens" ,
@@ -2070,7 +2105,8 @@ const RAW_TOPICS: RawTopicSeed[] = [
20702105 slug : "architecture" ,
20712106 title : "Architecture" ,
20722107 category : "devops" ,
2073- tagline : "Distributed Systems, Trade-Off Matrices & Visual Architecture Diagrams" ,
2108+ tagline :
2109+ "Distributed Systems, Trade-Off Matrices & Visual Architecture Diagrams" ,
20742110 keywords : [ "architecture" , "system design" , "distributed systems" ] ,
20752111 diagramSteps : [
20762112 " SLA & Cost Constraints" ,
@@ -2085,8 +2121,15 @@ const RAW_TOPICS: RawTopicSeed[] = [
20852121 slug : "career" ,
20862122 title : "Career" ,
20872123 category : "devops" ,
2088- tagline : "Engineering Portfolios, System Design Interviews, DevRel & Leadership" ,
2089- keywords : [ "career" , "devrel" , "developer relations" , "getting hired" , "interviews" ] ,
2124+ tagline :
2125+ "Engineering Portfolios, System Design Interviews, DevRel & Leadership" ,
2126+ keywords : [
2127+ "career" ,
2128+ "devrel" ,
2129+ "developer relations" ,
2130+ "getting hired" ,
2131+ "interviews" ,
2132+ ] ,
20902133 diagramSteps : [
20912134 "Shipped Production App" ,
20922135 "Live URL + E2E + Auth" ,
@@ -2101,7 +2144,8 @@ const RAW_TOPICS: RawTopicSeed[] = [
21012144 title : "WebDev" ,
21022145 category : "devops" ,
21032146 aliases : [ "web-dev" , "web dev" ] ,
2104- tagline : "Full-Stack Web Engineering, Core Web Vitals & Modern Browser APIs" ,
2147+ tagline :
2148+ "Full-Stack Web Engineering, Core Web Vitals & Modern Browser APIs" ,
21052149 keywords : [ "webdev" , "web development" , "full-stack" , "core web vitals" ] ,
21062150 diagramSteps : [
21072151 "Semantic HTML & CSS" ,
@@ -2132,7 +2176,8 @@ const RAW_TOPICS: RawTopicSeed[] = [
21322176 slug : "ffmpeg" ,
21332177 title : "FFmpeg" ,
21342178 category : "devops" ,
2135- tagline : "Hardware-Accelerated Video Encoding, Filtergraphs & Audio Mastering" ,
2179+ tagline :
2180+ "Hardware-Accelerated Video Encoding, Filtergraphs & Audio Mastering" ,
21362181 keywords : [ "ffmpeg" , "nvenc" , "libx264" ] ,
21372182 diagramSteps : [
21382183 "Raw Video + WAV Stems" ,
@@ -2209,7 +2254,8 @@ const RAW_TOPICS: RawTopicSeed[] = [
22092254 title : "Mental Health" ,
22102255 category : "devops" ,
22112256 aliases : [ "mental health" ] ,
2212- tagline : "Sustainable Engineering Pace, Preventing Burnout & Developer Wellness" ,
2257+ tagline :
2258+ "Sustainable Engineering Pace, Preventing Burnout & Developer Wellness" ,
22132259 keywords : [ "mental health" , "burnout" , "work-life balance" ] ,
22142260 diagramSteps : [
22152261 "Healthy Boundaries" ,
@@ -2340,7 +2386,9 @@ for (const t of TOPICS) {
23402386export function getTopicBySlug (
23412387 slugOrLabel : string | null | undefined ,
23422388) : TopicDefinition | undefined {
2343- if ( ! slugOrLabel ) return undefined ;
2389+ if ( ! slugOrLabel ) {
2390+ return undefined ;
2391+ }
23442392 const normalized = slugOrLabel . trim ( ) . toLowerCase ( ) ;
23452393 if ( TOPICS_BY_SLUG [ normalized ] ) {
23462394 return TOPICS_BY_SLUG [ normalized ] ;
@@ -2364,8 +2412,7 @@ export function itemMatchesTopic(
23642412) : boolean {
23652413 if ( Array . isArray ( tags ) && tags . length > 0 ) {
23662414 for ( const t of tags ) {
2367- const resolved =
2368- getTopicBySlug ( t ?. value ) || getTopicBySlug ( t ?. label ) ;
2415+ const resolved = getTopicBySlug ( t ?. value ) || getTopicBySlug ( t ?. label ) ;
23692416 if ( resolved ?. slug === topic . slug ) {
23702417 return true ;
23712418 }
@@ -2384,8 +2431,7 @@ export function matchTopicsForText(
23842431
23852432 if ( Array . isArray ( tags ) ) {
23862433 for ( const t of tags ) {
2387- const resolved =
2388- getTopicBySlug ( t ?. value ) || getTopicBySlug ( t ?. label ) ;
2434+ const resolved = getTopicBySlug ( t ?. value ) || getTopicBySlug ( t ?. label ) ;
23892435 if ( resolved && ! matched . has ( resolved . slug ) ) {
23902436 matched . set ( resolved . slug , resolved ) ;
23912437 }
@@ -2398,7 +2444,9 @@ export function matchTopicsForText(
23982444 const inferredBrands : TopicDefinition [ ] = [ ] ;
23992445 const inferredConcepts : TopicDefinition [ ] = [ ] ;
24002446 for ( const topic of TOPICS ) {
2401- if ( matched . has ( topic . slug ) ) continue ;
2447+ if ( matched . has ( topic . slug ) ) {
2448+ continue ;
2449+ }
24022450 if ( topic . keywordRegexes . some ( ( re ) => re . test ( hay ) ) ) {
24032451 if ( topic . kind === "brand" ) {
24042452 inferredBrands . push ( topic ) ;
0 commit comments