Files
hanzo.ai/lib/data/connectors.ts
zooqueenandHanzo Dev 3f10c5bb8c the bot page names the tools it works with
Two hundred marks, drawn white on the dark surface so they read as one set
rather than two hundred competing brand colours, grouped by the bands the
catalogue already carries: index decides both the order and the category, so
the two cannot drift apart.

The wall is its own section rather than a ProductLanding prop, because the kit
already composes that way — BotLanding renders ProductLanding then the footer —
and a prop would have made the kit import a component that imports the kit.

Marks come from Simple Icons and belong to their owners. The section says so in
place rather than in a footnote elsewhere: they state what Hanzo connects to,
and claim no partnership or endorsement.

Co-authored-by: Hanzo Dev <[email protected]>
2026-08-24 22:34:32 -07:00

45 lines
1.5 KiB
TypeScript

/**
* The tools Hanzo connects to, and the marks that name them.
*
* `index` carries the ordering AND the grouping, so the two cannot disagree: a
* band of ten is one category, the first hundred are business tools and the
* second hundred developer tools.
*
* connectors.json is derived from the logo set's manifest and is the record —
* a name, its mark under /public/connectors, and where the mark came from.
*
* The marks belong to their owners. They are drawn here to say what Hanzo
* connects to; they do not claim a relationship with, or endorsement by, any of
* them.
*/
import connectors from './connectors.json'
export type ConnectorGroup = 'Business' | 'Developer'
export interface Connector {
/** 1-200. Position in the catalogue, and the band that decides its category. */
index: number
name: string
slug: string
group: ConnectorGroup
category: string
/** Path under /public — a white mark, drawn for a dark surface. */
file: string
source: string
sourceUrl: string
}
export const CONNECTORS = connectors as Connector[]
/** The catalogue's categories in order, each with the tools that fall in it. */
export function categories(group?: ConnectorGroup): { category: string; items: Connector[] }[] {
const out = new Map<string, Connector[]>()
for (const c of CONNECTORS) {
if (group && c.group !== group) continue
const items = out.get(c.category) ?? []
items.push(c)
out.set(c.category, items)
}
return [...out].map(([category, items]) => ({ category, items }))
}