From 56c85e0c1d40d4d48e2ed9625d10e2ee1bf9040d Mon Sep 17 00:00:00 2001 From: artheru Date: Wed, 10 Jun 2026 07:06:07 +0800 Subject: [PATCH] homepage flow diagram (0.47.0) - animated 'You -> amerc edge -> Your users' architecture diagram on the home features section: three nodes (broker+agent / relay+proxy+auth / chatbox+terminal+url) connected by flowing-dot links - makes the non-obvious 'agent mercenary layer' model legible at a glance - horizontal on desktop, stacks vertical on mobile, animation respects prefers-reduced-motion; wrapped in the scroll-reveal - verified live: 3 nodes, 2 links render, visible --- index.html | 2 +- package.json | 2 +- src/Scene2D.jsx | 25 ++++++++++++++++++++++++- src/styles.css | 19 +++++++++++++++++++ 4 files changed, 45 insertions(+), 3 deletions(-) diff --git a/index.html b/index.html index 93e9abe..5133ba6 100644 --- a/index.html +++ b/index.html @@ -4,7 +4,7 @@ - + diff --git a/package.json b/package.json index bef7ca2..0528b74 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "amerc-site", - "version": "0.46.0-status", + "version": "0.47.0-flow", "private": true, "type": "module", "scripts": { diff --git a/src/Scene2D.jsx b/src/Scene2D.jsx index b7035c1..f817b76 100644 --- a/src/Scene2D.jsx +++ b/src/Scene2D.jsx @@ -7,7 +7,7 @@ import Account from './Account.jsx'; import TavernGame from './TavernGame.jsx'; import { api } from './api.js'; -const RELEASE = '0.46.0-status'; +const RELEASE = '0.47.0-flow'; const NAV = [ { id: 'home', label: 'Tavern' }, @@ -150,11 +150,34 @@ function ActivityFeed() { ); } +const FLOW = [ + { ico: '💻', title: 'You', sub: 'broker + agent', body: 'Your broker runs the agent on your own machine — codex, claude, any CLI. It dials out over WebSocket, so there are no inbound ports to open.' }, + { ico: '💎', title: 'amerc edge', sub: 'relay · proxy · auth', body: 'amerc authenticates each session, relays the agent, and proxies traffic — all on the public edge at amerc.ai.' }, + { ico: '👥', title: 'Your users', sub: 'chatbox · terminal · url', body: 'They reach your agent as an embedded chatbox, a live web terminal, or a public Showcase subdomain.' }, +]; +function FlowDiagram() { + return ( +
+ {FLOW.map((n, i) => ( + +
+ + {n.title} + {n.sub} +

{n.body}

+
+ {i < FLOW.length - 1 && } +
+ ))} +
+ ); +} function HomeFeatures({ setRoute }) { return (

How amerc works

An agent mercenary layer for embedding, bringing, and hosting AI agents across vertical software boundaries.

+
{HF_STEPS.map((s, i) => ( diff --git a/src/styles.css b/src/styles.css index c8d185e..d2928ab 100644 --- a/src/styles.css +++ b/src/styles.css @@ -1301,3 +1301,22 @@ button { .st-state.up { color: #36f0b0; } .st-state.down { color: #ff7a8c; } .st-state.checking { color: #b6a7d4; } .st-foot { color: #7a6a98; font-size: 12px; line-height: 1.6; margin: 14px 2px 0; } @media (max-width: 560px) { .st-host { display: none; } .st-name { min-width: 0; flex: 1; } } + +/* homepage flow diagram (0.47) */ +.fd { display: flex; align-items: stretch; gap: 0; margin: 6px 0 34px; flex-wrap: wrap; justify-content: center; } +.fd-node { flex: 1 1 220px; min-width: 200px; max-width: 320px; background: linear-gradient(180deg, #15102a, #0e0a18); border: 1px solid #271c3a; border-radius: 16px; padding: 18px 16px; text-align: center; display: flex; flex-direction: column; align-items: center; gap: 3px; } +.fd-ico { font-size: 30px; line-height: 1.1; filter: drop-shadow(0 3px 8px rgba(0,0,0,0.45)); } +.fd-node strong { color: #fff; font-size: 15px; margin-top: 4px; } +.fd-sub { color: var(--cyan); font-size: 10.5px; letter-spacing: 0.5px; text-transform: uppercase; } +.fd-node p { color: #a99cc8; font-size: 12.5px; line-height: 1.55; margin: 7px 0 0; } +.fd-link { flex: 0 0 56px; align-self: center; height: 3px; position: relative; border-radius: 3px; background: linear-gradient(90deg, #2a2040, #46c8e0, #2a2040); overflow: hidden; } +.fd-link i { position: absolute; top: 50%; left: 0; width: 7px; height: 7px; margin-top: -3.5px; border-radius: 50%; background: #aef2ff; box-shadow: 0 0 9px #46c8e0; animation: fdflow 1.7s linear infinite; } +@keyframes fdflow { from { left: -8px; } to { left: calc(100% + 8px); } } +@media (max-width: 760px) { + .fd { flex-direction: column; align-items: stretch; } + .fd-node { max-width: none; } + .fd-link { flex: 0 0 34px; width: 3px; height: 34px; align-self: center; background: linear-gradient(180deg, #2a2040, #46c8e0, #2a2040); } + .fd-link i { left: 50%; top: 0; margin-left: -3.5px; margin-top: 0; animation: fdflowv 1.7s linear infinite; } +} +@keyframes fdflowv { from { top: -8px; } to { top: calc(100% + 8px); } } +@media (prefers-reduced-motion: reduce) { .fd-link i { animation: none; opacity: 0; } }