Commit Graph

59 Commits

Author SHA1 Message Date
511bd25aa0 mansion: file-mapper + net-disk rooms; 100MB quota; broker jobs (1.3.0)
- file_maps table + agent fm register/list/delete; public GET /fm/:iid/:name
  relays the download live through the broker (consumer-first rendezvous,
  60s window, zero server storage); broker long-polls /instances/:id/jobs
- netdisk: 100MB per-account quota enforced on upload + /files/usage meter
- Mansion: File-mapper and Net-disk are live rooms (usage bar, embedded
  Netdisk browser); Netdisk relay soon-room retired
- kebab's real instance is ONLINE and replied 'pong' over native chat —
  gate path proven; jobs protocol spec sent to kebab

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-06-11 03:12:56 +08:00
b4b5df91f0 legion: agent cards reused + class runtime properties (1.2.0)
- AgentCard extracted; Browse and My Legion render the identical card;
  Legion cards open the same ClassModal (instances + Use + chat)
- class properties: managed (amerc-managed, loads amerc skills),
  terminal_mode new|shared per session, skills_reload for shared
  terminals — publish form, API create/patch, badges in the modal
- kebab coordination: broker spec delivered via TerminalMan 155; kebab
  already heartbeats instance 2 with the skills array (status lost ->
  stabilizing); monitor armed for online

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-06-11 02:58:51 +08:00
2941f14583 chat: native ChatPanel + chatlog + file relay UI (1.1.0)
- src/Chat.jsx: long-poll chat panel — skills-loaded chips, file/image
  send with streaming progress bar, expiring download links for received
  files, per-session chatlog with resume; no iframe, no external relay
- UsePanel: chatbox tab now uses the native panel (web-pty still rides
  the relay for now); Legion gains a 'My chatlog' card
- verified END-TO-END IN PRODUCTION via throwaway account + live broker:
  browser sent, broker echoed, skills rendered, chatlog listed; 2MB file
  relayed through nginx md5-identical with no server caching; all test
  data purged after

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-06-11 02:51:22 +08:00
80d7140d1f booth: label every field in the publish form (0.99.0)
audited the Booth as a new publisher: the onboarding is good, but the publish
form was placeholder-only — and Kind (codex) + Launch command (codex --yolo)
come pre-filled, so their placeholders never show, leaving those two technical
fields with no visible label.

- added a persistent label above every field (Class name, Tags, Description,
  Kind, Visibility, Launch command) + clearer example placeholders
- a one-line hint explains the two technical fields
- verified live (throwaway account, cleaned up): all six labels render, form
  reads cleanly
- changelog entry (0.99) added with the bump
2026-06-10 15:19:04 +08:00
9c1aa73742 home: turn the API peek into a live console (0.98.0)
the agent-native callout's API peek showed a curl line + the JSON, but felt
static. made it feel like a real API client:

- after each call it shows the response status and timing (green dot, '200 OK
  · 47 ms') measured with performance.now() — the visitor's actual request time
- a '↻ run' button re-fetches the current endpoint (running… -> new status)
- endpoint tabs still switch (stats / roster / activity), all read-only & no-auth
- verified live: status '200 OK · 683 ms', run re-fetches (running… -> 200 OK),
  green dot on success
- changelog entry (0.98) added with the bump
2026-06-10 15:08:26 +08:00
0775b79a1b home: fit the hero value prop above the fold (0.96.0)
on common laptops (1366x768, 1280x720, 1440x900) the tavern canvas reserved
only 210px for the topbar + caption, so the tagline + CTAs landed at the very
bottom edge and the live stats sat ~40px BELOW the fold — a visitor had to
scroll to see the value prop and the action buttons.

- reserve 290px instead of 210, so the canvas is sized to leave room for the
  full caption; the tavern is still the large, vivid centrepiece (478px tall
  at 768, down from 558)
- desktop-only: the canvas is width-capped (94vw) on phones, so mobile is
  untouched
- verified across all three laptop sizes: CTA ~80px clearance, stats ~40px
  clearance (was 40px below the fold)
- added the matching changelog entry (0.96) alongside the bump
2026-06-10 14:43:19 +08:00
63b1087042 account: show a runnable curl when you mint a key (0.94.0)
minting an agent key showed the key once with no hint of what to do with it —
you had to go dig through the docs to make your first call. great API products
hand you a working example right there.

- after minting, show a ready-to-run curl with YOUR key inlined, hitting a real
  read-only endpoint (GET /agents/classes), plus a one-click copy and a link to
  the API reference
- completes the get-key -> call-the-API loop and reinforces the agent-native pitch
- verified live (throwaway account, cleaned up after): the curl renders with the
  real minted key, copy button + api-reference link present
2026-06-10 14:16:26 +08:00
66ccd54d21 docs: full-text search with snippets + peek a11y (0.93.0)
the docs search only matched titles/folders, so searching a term that lives in
a doc's body (e.g. 'heartbeat') returned nothing — you had to already know
which doc to open.

- search now matches title AND body across all docs; results show the title
  plus a context snippet with the query highlighted (<mark>)
- doc bodies are fetched once on first search and cached (invalidated when the
  doc list changes); in-flight searches cancel on a new query
- clicking a result opens the doc (and updates the URL); clearing returns the
  folder tree
- a11y: the homepage API peek used role=tablist/tab without tabpanels (an
  incomplete ARIA pattern) — switched to a labeled button group with aria-pressed
- verified live: 'heartbeat' -> 3 body matches with highlighted snippets,
  click opens Connect-your-broker, clear restores the tree
2026-06-10 14:08:19 +08:00
ce9d2336f7 home: live API peek in the agent-native callout (0.92.0)
the callout claimed 'drive the whole platform over JSON' but only said it.
now it shows it: a compact terminal with tabs for the public read-only
endpoints (stats / roster / activity) that fetches the LIVE response and
pretty-prints it with JSON syntax highlighting.

- proves the agent-native differentiator with real data, not a mockup
- read-only public endpoints, no auth; switching tabs updates the curl line
  and refetches; cancels in-flight on unmount
- small self-contained jsonHl() highlighter (keys/strings/numbers/bools),
  output escaped before highlighting so it's injection-safe
- verified live: stats shows {classes:1,online:1,...}, roster shows
  Kebab Webagent, 9 key + 7 number spans highlighted, tabs refetch
2026-06-10 13:44:25 +08:00
e5e79d75aa docs: collapsible doc nav on mobile (0.91.0)
a mobile audit (no overflow anywhere; agent modal + on-this-page TOC both fine)
turned up one weak spot: on phones the doc tree was a cramped 210px scroll area
pinned above every page, and it never scrolled the active doc into view — so
you couldn't tell which doc you were reading or reach half of them easily.

- the sidebar now collapses to a compact bar showing the CURRENT doc + a
  chevron; tap to reveal the full tree (active doc highlighted), tap a doc to
  navigate and auto-collapse
- desktop is byte-for-byte unchanged: the collapsible wrapper is display:contents
  off-mobile, so the tree stays a normal flex child (sidebar still 280px)
- verified live: mobile collapsed shows 'API reference', expands to 8 docs,
  selecting Quickstart navigates + collapses + relabels; desktop toggle hidden,
  tree intact
2026-06-10 13:35:07 +08:00
0e3c567c97 docs: on-this-page TOC + section deep links + heading anchors (0.88.0)
builds on per-doc routing: long docs (API reference has 6 sections, Roadmap 4)
are now navigable and section-shareable.

- each h2/h3 gets a slug id + a hover '#' anchor; URL form is
  #/<doc-slug>/<section-slug> (e.g. #/api-reference/keys-self-service)
- an 'On this page' TOC renders for docs with >=3 headings; click or deep-link
  scrolls to the section; browser back/forward still work
- decorations (anchors, ids, code copy buttons, syntax highlighting) are now
  baked into the memoized HTML string instead of mutated in post-render DOM

  WHY: the post-render mutation approach was being wiped. setToc() inside the
  decorate effect triggered a re-render that re-applied dangerouslySetInnerHTML,
  resetting the article's children and dropping every decoration, with the
  effect never re-running (deps unchanged). Doing it at the string level makes
  the markup self-contained and immune to re-injection. Copy buttons use event
  delegation; anchors are real links (work without JS).

- verified live: 6/6 heading ids + anchors on API reference, TOC navigates,
  3 copy buttons + highlighting on Connect-your-broker, deep-links land and
  scroll to the section, TOC hidden on short docs
2026-06-10 12:50:31 +08:00
522ce6ec83 quality: fix heading order + asset caching (0.84.0)
measured the LIVE site with Lighthouse (best-practices 100, seo 100,
agentic-browsing 100; a11y 98, perf 86) and fixed two real flags:
- heading-order: the footer column labels were <h5> following an <h3>
  (skipping h4) — changed to <h4> so the page heading order is sequential;
  a11y 98 -> 100
- caching: every static asset was served with no cache lifetime (0s).
  added nginx cache locations on the amerc.ai vhost (server-side, not in repo):
  /assets/ -> 1y immutable (content-hashed chunks), /scene2d/ -> 30d;
  index.html stays uncached so it always points at the latest assets.
  repeat visitors now serve JS/CSS/images from cache. cache-insight -> PASS
- verified live: a11y 100, heading-order + cache-insight PASS, cache headers
  present on assets and absent on index.html
2026-06-10 12:02:06 +08:00
40624a2e30 home: agent-native callout (0.83.0)
- amerc is genuinely agent-native now (JSON API + self-service keys + WebMCP
  browser tools + llms.txt) but the home page never said so
- add a concise callout after the session preview: 'Agent-native by design —
  mint an API key and drive it over JSON, get callable WebMCP tools on the
  page, read llms.txt for the map. Agents can hire agents.'
- a real, differentiating positioning point, not filler; cyan-accented card,
  scroll-reveal, links to /llms.txt, stacks on mobile
- verified live: callout renders and reveals
2026-06-10 11:52:44 +08:00
c5e16205c5 a11y: fix Lighthouse-flagged issues — accessibility 93->100 (0.79.0)
ran Lighthouse (local preview): SEO 100, a11y 93->100, best-practices 92
(its one fail was console errors from the backend-less preview — a false
positive; live has 0 console errors). fixed the 3 real a11y flags:
- color-contrast: '.gm-scrollcue' was 4.33:1 (needs 4.5) — lightened the
  'how it works' cue colour and dropped the opacity dimming
- label-in-name: the logo button's aria-label='amerc home' didn't contain its
  visible text — removed it so the accessible name = visible text (+ title=Home)
- skip-link: the href='#content' had no target — gave the content host
  id='content' + tabindex=-1 so it's a valid focusable target
- re-ran Lighthouse: accessibility 100, all three audits pass
2026-06-10 11:31:00 +08:00
dbe3c383e3 branded app loading screen (0.78.0)
- the Suspense fallback (shown on every cold load while the app chunk loads,
  longer on slow/mobile connections) was a plain monospace 'Loading amerc…'
- replace with a branded screen: a pulsing cyan gem over 'amerc' in gold
  Georgia on a dark radial background, matching the logo + error-boundary look
- respects prefers-reduced-motion
- also audited the public mobile surfaces (agent modal, status, changelog) —
  all mobile-safe (modal is width:min(640px,96vw) + scroll)
- verified the loading screen renders (blocked the app chunk to capture it)
2026-06-10 11:20:37 +08:00
f063e9ae80 docs: responsive mobile layout (0.77.0)
- on phones the docs kept the desktop sidebar+content row, squeezing the prose
  into ~240px (sidebar ate the rest) — poor reading on a public docs surface
- stack on mobile (<=760px): sidebar becomes a compact scrollable doc-picker
  on top (max 210px), content goes full-width below with comfortable padding
- verified live (390px): layout column, content full-width (390 vs old 240),
  no horizontal overflow
2026-06-10 11:14:46 +08:00
d9d652dfd5 browse: correct no-search-results state (0.73.0)
- searching (or tag-filtering) with no matches wrongly showed the 'No agents
  here yet — be the first' onboarding, implying the whole marketplace was
  empty even when agents exist
- now distinguishes: a query/tag with no matches shows 'No mercenaries match
  <term>' + a Clear search button; the be-the-first onboarding only shows when
  the roster is genuinely empty (no query, no tag)
- verified live: 'zzznomatch' shows the no-match state, Clear restores results
2026-06-10 10:41:03 +08:00
0f9d553deb a11y: skip-to-content link (0.72.0)
- keyboard/screen-reader users had to tab through the whole topbar before
  reaching page content (WCAG 2.4.1 Bypass Blocks gap)
- add a skip link as the first focusable element: hidden until focused, slides
  in as a cyan pill, and on activation focuses the visible content container
  (works with the persistent-home structure, and avoids the hash-route conflict
  by focusing programmatically instead of via href)
- verified live: Tab focuses it, it becomes visible, activation focuses content
2026-06-10 10:30:16 +08:00
6d54d89a0b mobile: proper nav menu with backdrop + full-width targets (0.70.0)
- the mobile hamburger menu was a cramped narrow corner dropdown with no
  backdrop and no tap-to-close
- now a full-width panel (left+right anchored), comfortable full-width touch
  targets, a dimming tap-to-close backdrop, rounded card + shadow, fade-in
- verified live (390px): backdrop present, menu ~374px wide, tap-to-close works
2026-06-10 09:32:50 +08:00
2bbe9b9043 polish: inviting logged-out gates + full regression QA (0.67.0)
- the booth and account logged-out gates were the last plain 'Log in' surfaces
  (one line + a tiny pixel button). Reworked both into branded, inviting cards
  with an icon, a real pitch, and prominent CTAs (Log in/Sign up + Browse
  agents) — consistent with the gatehouse and hero
- regression QA: smoke-tested all 9 public surfaces (tavern, browse, mansion,
  booth gate, gatehouse, status, changelog, docs, PM gate) — every one renders
  with zero console errors; API, Git, Webagent all 200
- verified live: rich booth gate renders with both CTAs
2026-06-10 09:12:00 +08:00
26030b0a13 home: back-to-top button (0.66.0)
- the home page is long now (hero -> flow -> features -> session preview ->
  activity -> footer); add a floating back-to-top button that fades in once
  you scroll past the hero and smooth-scrolls the home container to top
- listens on the gm-home scroll container (not window); hidden by the
  persistent-home display:none when off-route; respects reduced-motion
- verified live: hidden at top, shows after scroll, returns to top on click
2026-06-10 09:04:48 +08:00
e73dbbe186 ux: keep the tavern mounted — instant returns, no reload flash (0.65.0)
- Home unmounted on every route change, so returning to the tavern reloaded
  the canvas (the 'loading tavern…' flash + image re-fetch each time)
- keep Home mounted in a persistent host, hidden (display:none) when off-route;
  non-home routes still render in the keyed transition wrapper
- the canvas IntersectionObserver pauses while Home is display:none, so a
  hidden tavern costs nothing — and resumes instantly (not reloaded) on return
- verified live: rAF 60→0 when hidden →60 on return, no loading flash, home
  renders + scrolls, inner routes + transitions intact
2026-06-10 09:00:51 +08:00
74edbb3e11 resilience: app-wide error boundary (0.64.0)
- previously, any render error would unmount the whole SPA to a blank white
  screen (no boundary)
- add a React error boundary around the routed app (all sub-apps: tavern,
  docs, pm) with an on-brand fallback — gem, 'Something went off-script',
  Reload + System status links — instead of a void
- verified the catch path locally (a temporary ?boom trigger rendered the
  fallback), confirmed the boundary is transparent in normal use, then
  removed the trigger; verified live renders normally
2026-06-10 08:55:46 +08:00
53331a40d4 docs: accurate public roadmap + themed task lists (0.63.0)
content (in the docs DB):
- the public Roadmap was factually wrong — git.amerc.ai and the embedded
  webagent shown as not-done though both shipped long ago. Rewrote it as an
  accurate Shipped / Next / Later roadmap that links to the changelog
- Welcome: agent keys are self-service now (was 'ask an admin')
- removed the redundant internal 'PM roadmap (impact x effort)' doc, most of
  whose items have shipped — consolidated to one clean public roadmap

code:
- theme docs task-list checkboxes with the accent color and drop the
  redundant bullet (li:has(> input[type=checkbox]))
- verified live: roadmap shows 8 shipped (checked) + next/later, clean render
2026-06-10 08:49:46 +08:00
2d00cb4e63 docs: safe syntax highlighting (0.61.0)
- minimal dep-free highlighter for fenced code blocks: strings (green),
  numbers (amber), keywords (purple)
- deliberately NO comment rule, so '//' inside URLs (https://, wss://) is
  never mis-colored or mangled — the common micro-highlighter pitfall
- applied in the DocsApp post-render pass alongside the copy buttons; the
  copy button still yields the exact original text
- verified live: 22 tokens colored, both https:// and wss:// URLs preserved
  byte-for-byte, code intact
2026-06-10 08:31:47 +08:00
3ddbc76dfc a11y: keyboard focus indicators + canvas label (0.59.0)
- the site had focus styles only on inputs, so keyboard navigation was
  invisible across every button, link, nav item, card and CTA
- add a global :focus-visible ring (cyan, gold for primary CTAs) — shows for
  keyboard users only, follows each element's radius
- label the decorative tavern canvas (role=img + aria-label); its overlay
  hotspots remain separately focusable/labeled
- verified live: Tab focuses a nav button with a 2px cyan ring, matches
  :focus-visible, canvas announced as 'Animated tavern scene'
2026-06-10 08:21:16 +08:00
6a8fc0a5c0 docs: code-block copy buttons + 'Connect your broker' guide (0.58.0)
- fix fenced code blocks: reset the doubled inline-code background on
  'pre code', readable monospace styling (applies to all technical docs)
- DocsApp decorates rendered code blocks with a hover copy button
- seed a 'Connect your broker' guide (guides/) — the lasting reference for
  the supply-side last mile: heartbeat loop (curl + Node) to stay online,
  the relay WebSocket, and how it fits together (accurate from the API)
- verified live on docs.amerc.ai: guide renders, 3 code blocks, 3 copy
  buttons wired, clean styling
2026-06-10 08:17:15 +08:00
fb3c523d4a booth + mansion: fix loading-state flashes (0.57.0)
- BoothDashboard had no loaded flag, so returning publishers briefly saw the
  'Welcome to your booth' new-user onboarding before their classes loaded
- add loaded-gating + a shimmer skeleton; welcome shows only after load
- same fix for the Mansion 'My showcases' list ('No showcases yet' flash)
- completes the loading-skeleton pattern across all data surfaces
  (Browse, Booth, Mansion)
- verified live (throttled): skeleton during load, no welcome flash,
  welcome/content only after loaded
2026-06-10 08:10:50 +08:00
04128a24d3 route transition: fade-up on navigation (0.56.0)
- wrap the routed Scene in a key={route} container so each page mounts with
  a subtle fade-up — a premium app feel on every navigation
- the wrapper preserves the flex/scroll layout (flex:1, min-height:0, column)
  so the per-page scroll containers (gm-home, td-page) still scroll
- respects prefers-reduced-motion
- verified live: transition wrapper present, home + inner pages still scroll
  (2813>744), navigation works, layout intact
2026-06-10 08:05:49 +08:00
a614b17e05 booth: actionable 'bring it online' instance modal (0.55.0)
- the instance-created modal was a terse field list; now it's a 2-step
  broker onboarding guide at the point of need:
  1. Heartbeat — a copy-pasteable curl loop (real instance id + accesskey)
     that keeps the instance online (<30s check-in, verified from the API)
  2. Relay — the broker WebSocket + note that the amerc webagent speaks it
- color-coded offline status, code block with copy button
- removes the supply-side last-mile guesswork for publishers
- verified end-to-end via the real publish flow (register → class → instance)
2026-06-10 07:59:39 +08:00
22719be3c8 discoverability: version→changelog, status pill→status (0.54.0)
- topbar version (vX.Y.Z) is now a button linking to the changelog — the
  natural 'what's new' entry point (moved out of the logo button)
- footer 'All systems operational' pill now links to the status page, with
  a hover lift
- both new utility pages are now reachable from natural entry points
- also audited the full home page on mobile (390px): hero CTAs wrap, flow
  diagram stacks vertically, session preview stacks, live screen renders,
  and zero horizontal overflow — no regressions from recent additions
- verified live: both links route correctly
2026-06-10 07:53:23 +08:00
d9a62b4c3c changelog timeline page (0.52.0)
- new #/changelog route: a vivid vertical timeline of releases with version
  badges, titles, dates and highlights (14 entries, 0.30 → 0.51)
- communicates the product's continuous shipping cadence — trust + transparency
- scroll-reveal on each entry; linked from the footer Resources column
  (replaced the placeholder Roadmap link)
- verified live: 14 entries render, latest first
2026-06-10 07:41:21 +08:00
c9ad6407c4 browse: loading skeletons, fix empty-state flash (0.51.0)
- AgentBrowse tracked no loaded state, so on cold load it briefly flashed
  'No agents here yet — be the first' before data arrived
- add a loaded flag: show 3 shimmer skeleton cards while fetching; gate the
  empty-state and 'publish your own' card on loaded
- skeleton shimmer respects prefers-reduced-motion
- also verified (after a stale-Chrome scare) there is NO auth bug: cookieless
  /api/auth/me returns null, fresh logged-out load shows Login (no admin nav),
  and the public-agent Use flow works without login
- verified live: skeletons during load, no flash, real card+add-card after
2026-06-10 07:36:03 +08:00
c9956fbd3f hero: value-prop subline + clear CTAs (0.50.0)
- replace the game-instruction subline with the actual value proposition
  (chatbox / web terminal / public URL · no infrastructure, just skills)
- add prominent hero CTAs: gold primary 'Browse Agents', outlined secondary
  'Publish yours' — visitors no longer have to discover the scene is clickable
- Georgia-styled buttons with hover lift, sit below the animated tavern
- verified live: both CTAs + value prop render
2026-06-10 07:26:58 +08:00
4a6ee29a2e homepage session preview chatbox (0.49.0)
- 'See a session' block: an animated chat widget that plays a scripted
  agent conversation (ship a code change, then expose the preview via
  Showcase) with typing indicator + message pop-in, looping
- shows the core product experience (chatting with/driving an agent) that
  text alone can't convey; clearly labeled 'a scripted preview of a session'
- side copy + 'Browse real agents' CTA; respects prefers-reduced-motion
  (renders the full convo statically) and cleans up its timers
- verified live: widget renders, animates, 0 console errors
2026-06-10 07:21:07 +08:00
56c85e0c1d 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
2026-06-10 07:06:07 +08:00
84a37bb7ed live system status page (0.46.0)
- new #/status route: probes Tavern/API/Docs/Git/Webagent and shows a
  per-service dashboard (pulsing beacon, colored pills, latency, state)
- same-origin /api/health gives real status+latency; cross-origin services
  use a no-cors reachability probe with a 6s timeout
- auto re-checks every 20s + manual Re-check; honest footer note on method
- linked from the footer Platform column
- audited PM (whiteboards/netdisk/portfolio) via a throwaway admin — all
  clean, no changes needed; account removed after
- verified live: all 5 services operational
2026-06-10 07:02:41 +08:00
c0d67f5c3f homepage motion: scroll-reveal + count-up stats (0.45.0)
- Reveal component: feature & use cards fade-up as they enter the viewport
  (IntersectionObserver, staggered), with a :not(.in) pattern so the card
  hover-lift is never fought by the reveal transform
- Count component: hero stats ease-out count from 0 on load
- both respect prefers-reduced-motion and fall back to always-visible when
  IntersectionObserver is unavailable (no stuck-invisible content)
- verified live: all 3 cards reveal to opacity 1, stats animate
2026-06-10 06:55:42 +08:00
9e762b15ba browse: roster storefront (0.44.0)
- storefront header 'The mercenary roster' with a value-prop subtitle
- emoji category chips (uses TAG_EMOJI) so tags read as a directory
- always-present dashed 'Publish your own' card in the grid — the roster
  never looks empty and it actively drives supply into My Booth
- verified live: header, emoji chips, and add-card all render
2026-06-10 06:50:31 +08:00
0ddc585e49 lean build + booth onboarding (0.43.0)
- remove dead 3D code: App/GemhallScene/SplashScene/ModelScene (unreferenced
  since the 2D pivot) + the three dep and its empty manualChunk
- drop public/models (68MB of unused KayKit/poly-pizza GLBs)
- dist drops ~36MB -> 2.9MB; deploy now extracts to a staging dir and swaps
  atomically (preserving .well-known), so users never see a mixed/stale state
  and stale chunks no longer accumulate (28 -> 7 assets on the server)
- booth: welcoming first-run onboarding (3 steps to go live) replacing the
  bare 'no classes yet' hint
- verified live: 2D home renders, 0 failed requests, booth welcome shows
2026-06-10 06:45:40 +08:00
76ba8dcbb4 gatehouse: split join page with value prop (0.42.0)
- replace the lonely floating login form with a two-column 'Join the tavern' page
- left: pitch — headline, three benefit rows (hire/publish/deliver) with icon
  tiles, cross-app SSO note, live stats
- right: the auth board (login/signup) in a clean static card
- responsive: stacks form-first on mobile (<=860px)
- verified live on desktop + mobile
2026-06-10 06:31:57 +08:00
03b5f631b5 mansion: vivid services hall, compelling logged-out (0.41.0)
- replace barren login gate with a full services hall visible to everyone
- hero banner (emblem, value prop, cyan accent, login CTA)
- Showcase room: LIVE badge, feature chips, subdomain URL preview, and
  'log in to claim a subdomain' CTA when logged out; full register UI in
- Netdisk relay + Hosted webagent as designed SOON rooms (shimmer, feature chips)
- new mansion hall CSS; drop old thin mn-card/mn-soon styles
- verified live logged-out render at desktop width
2026-06-10 06:24:51 +08:00
e711a7c904 talkable tavern NPCs (0.38.0): Pokémon-style speech bubbles
- hover a character (barkeep / two patrons) -> parchment speech bubble with flavor
- clicking routes to Browse / My Booth / Mansion — adds life + feature discovery
- verified bubble renders on hover
2026-06-10 05:56:15 +08:00
a138ff1ebb agent-use embed polish (0.37.0)
- 'Embed this agent on any website' is now a prominent block with one-click Copy
  (+ copyToast) instead of a buried <details>; usage hint included
- Web PTY mode points to the Backstage/后台 terminal tab
- core loop verified: browse -> Use -> live connected chatbox + embed snippet
2026-06-10 05:51:30 +08:00
0ecf037b5a account/settings page (0.35.0)
- new #/account: profile card (avatar initials + role badge + quick links),
  change-password, and agent keys consolidated in one place
- topbar username now opens Account; separate logout button
- password change moved out of the tavern signed-in panel into a proper settings surface
2026-06-10 05:39:56 +08:00
4afc9337aa cohesive vividness (0.33.0): avatars + pulses in My Booth + agent modal
- agent detail modal header gets the class avatar
- My Booth 'My classes' rows get avatar + online-pulse indicator (matches Browse)
- online instance status dots pulse; consistent visual language across the app
2026-06-10 05:28:27 +08:00
3090ed92b0 toast notifications (0.32.0): elegant feedback for copies/actions
- src/toast.js: dependency-free toast + copyToast helpers
- wired copyToast into all token/accesskey/url/key copy actions (silent before)
- replaces jarring browser dialogs for copy feedback; consistent polished UX
2026-06-10 05:22:16 +08:00
0de81620b0 live activity feed (0.31.0): 'Live in the tavern' on the landing
- /api/agents/activity: derived recent events (classes published, instances run,
  sessions started, showcases opened) — no new schema
- landing feed with per-kind icons + relative time, auto-refreshes every 15s
- social proof / 'platform is alive' on the home page
2026-06-10 05:18:13 +08:00
4bcad5f9c7 landing page: scrollable home with 'How amerc works' (0.30.0)
- tavern hero now scrolls into a product section: 3 feature cards (browse/publish/deliver)
  with CTAs, a 'three ways to use an agent' row (chatbox/web-terminal/reverse-proxy), + footer
- scroll cue under the hero; explains the product to first-time visitors
2026-06-10 05:14:17 +08:00
7b3ee02de6 site footer with live service status (0.29.0)
- footer on all inner pages: wordmark, tagline, link columns (Product/Resources/Platform)
- live status pill (checks /api/health + shows N online · N live sessions) with green pulse
- sticky-bottom layout; makes the app feel complete + builds trust
2026-06-10 05:09:16 +08:00