Skip to content

design: adopt outshift-style design tokens, fonts, and key page restyle#4

Open
dhve wants to merge 4 commits into
projnanda:mainfrom
dhve:design/outshift-style
Open

design: adopt outshift-style design tokens, fonts, and key page restyle#4
dhve wants to merge 4 commits into
projnanda:mainfrom
dhve:design/outshift-style

Conversation

@dhve

@dhve dhve commented Jun 20, 2026

Copy link
Copy Markdown

Summary

Pixel-faithful clone of ai-catalog.outshift.io applied to the host39 frontend, populated with the real public agent cards served by this repo's own API.

Four commits:

  1. design(host39) - swap warm-cream tokens for outshift's palette in globals.css, load Inter via next/font/google, drop serif-italic display. Sweep Header / Footer / PageShell, marketing /, /login, /dashboard, and both card-wizard pages. The load-bearing Business vs Personal semantic split (originally indigo/violet) is remapped to primary blue vs accent teal, plus a microcaps text label on the IdentityBadge for colorblind safety.
  2. refactor - rename tokens to outshift's exact names. Update component class strings to outshift's idiom. Old names kept as aliases.
  3. feat(home): clone - rewrite / as a clone of outshift's Explore page: heading + filter sidebar (SEARCH, IDENTITY Business/Personal, STATUS, TAGS) + 3-column grid of <article> cards + pagination. Previous marketing content moved to /about; header nav updated to Explore / About / Dashboard.
  4. feat(home): wire - drop the local seed array. Home page now fetches real public cards via a new listPublicCards helper in web/src/lib/api.ts against NEXT_PUBLIC_HOST39_CARDS_URL (defaults to the production https://agentcards.host39.org for dev). Maps each public card to the outshift card shape (name = {domain}/{slug} or {handle}/{name}, identity = business / personal -> primary or accent badge, tags from card data). Sidebar IDENTITY / STATUS / TAGS derive options from live data. Loading state shows 6 skeleton cards; empty and error states render a single centered status card with no fake fallback.

Design tokens (outshift-exact)

  • --color-surface #f5f8fd, --color-surface-light #fbfcfe, --color-surface-strong #eff3fc, --color-surface-tag #e3eafa
  • --color-ink #3c4551, --color-ink-strong #00142b, --color-ink-medium #59616b, --color-ink-weak #777d85
  • --color-line #d5dff7, --color-line-strong #c8d5f5
  • --color-brand-500 #187adc (primary / Business), --color-brand-800 #0d274d (brand tile)
  • --color-accent-teal #dff1f5, --color-accent-teal-ink #0f6e85 (Personal)
  • --radius-card 8px, --radius-control 4px
  • --font-sans Inter via next/font/google

Test plan

  • cd web && npm install && npm run build passes locally.
  • npm run dev, open /, confirm real public cards from https://agentcards.host39.org render (moonbakery.com/orders, personal/sara/card, personal/ankit-dev/agent, ...).
  • Walk /login (Business / Personal), /dashboard, /dashboard/cards/new, /dashboard/cards/[id].
  • /about still loads the previous marketing content.

Out of scope

  • Pretty HTML landing pages for individual public agent cards (those are served as application/a2a-agent-card+json by the Fastify backend; not Next.js pages).
  • Dark mode.
  • Backend / Caddy / Docker.

Vedh Krishnan added 3 commits June 20, 2026 18:39
…ge restyle

Restyles host39's frontend toward the ai-catalog.outshift.io
visual language - cool blue Cisco-inspired palette, Inter sans
throughout, soft blue-tinted card shadows on an 8px radius.

* globals.css: replace warm-cream tokens with full Outshift token
  set (colors / fonts / radii / shadows), expose them to Tailwind v4
  via @theme inline {}, keep legacy --page-bg/--panel/--border/--text
  /--muted/--soft as aliases so unswept components don't break.
* layout.tsx: load Inter via next/font/google.
* Header / PageShell / Footer: brand-tile + Inter wordmark + ink-weak
  subtitle, drop serif italic display, drop uppercase tracked nav.
* Landing / list pages: shared Card pattern, new pill / button /
  input shapes, semantic accent mapping for status pills.

No route, data, or behavior changes.
Pixel-faithful pass: replaces my custom --color-bg/--color-fg-*/
--color-border/--color-primary* with outshift's actual names from
their CSS bundle (--color-surface/--color-ink-{strong,medium,weak}/
--color-line/--color-brand-{200,300,500,600,700,800}/
--color-accent-teal/--color-surface-tag). Old names kept as aliases
so unswept code still resolves.

Header swapped to outshift's bg-surface-light / 60px / "powered by"
subtitle pattern. Page headings use font-display text-2xl
font-bold text-ink-strong leading-tight (24px/700) to match
outshift's "Explore" treatment. Cards refactored to <article>
with the exact outshift class string. Inputs and secondary buttons
use border-2 border-line bg-surface-light. Tag pills use
bg-surface-tag rounded-full px-2.5 py-0.5 text-xs font-semibold.
…d + pagination

Replaces the home page with a pixel-faithful clone of
ai-catalog.outshift.io's Explore browse: "Explore" h2 heading,
lg:w-64 left filter sidebar (SEARCH + checkbox sections + tags)
on bg-surface-strong, grid gap-4 sm:grid-cols-1 md:grid-cols-2
xl:grid-cols-3 of <article> cards using outshift's exact class
string, and the pagination nav (rounded-full pills for page
numbers, border-2 secondary buttons for Previous/Next).

Cards populated with 12 seed cards so the page renders
end-to-end without a backend. SEARCH + checkbox filters work
client-side. Header gets a "12 + cards hosted" counter
on the right matching outshift's "X AI cards indexed" chip.

Prior marketing content moved to /about so it remains reachable.
@dhve dhve force-pushed the design/outshift-style branch from 7c5ada8 to 5d7fece Compare June 21, 2026 00:14
Drops the local SEED array. Home page now fetches via the new
listPublicCards helper in web/src/lib/api.ts against
NEXT_PUBLIC_HOST39_CARDS_URL (defaults to the production
https://agentcards.host39.org for dev). Maps each real catalog
entry to the outshift card shape; sidebar IDENTITY, STATUS and
TAGS sections derive their options from the live data. Loading
state shows 6 skeleton cards; empty and error states render a
single centered status card with no fake fallback content.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant