A 32 s trailer rendered in Blender from the Apex Universe scene. The pane in it is the real widget replaying answers Fusion AI gave on the live route, voiced by ElevenLabs Brian, with an original score. fusion/launch/ holds the 16:9 cut, its poster and English captions. The HAL 8 section gets a 'Meet Fusion AI' card (Talk to Fusion AI opens the widget through a fusion:open event), and the widget's welcome screen a 'Watch the launch film' chip that plays it in a lightbox. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
148 lines
7.1 KiB
Markdown
148 lines
7.1 KiB
Markdown
# AP3X Fusion — ecosystem hub
|
|
|
|
The public ecosystem site for Apex Fusion, served at
|
|
**https://apex-fusion.odyssey-works.io**.
|
|
|
|
## What this is
|
|
|
|
A single self-unpacking `index.html` (~2.1 MB) — React and all assets are
|
|
bundled inside it. Sections: ecosystem overview, the Vector edge, tri-chain
|
|
architecture, AP3X across ecosystems, markets, stack map, HAL 8, agent stack,
|
|
news, wallets, bridges, dapps, explorers, staking, developers, exchanges.
|
|
|
|
## Agent Stack section
|
|
|
|
"The AI Agent Economy Stack" (HAL 8's capability, economic and trust planes,
|
|
architecture stack, standards and ecosystem) is a section of the hub: nav entry
|
|
**Agent Stack** right below HAL 8, section id `agents`, component
|
|
`AgentStackSection`. Its markup lives in the bundle as the `AES_HTML` string
|
|
with every logo embedded inline as SVG, and its styles sit in the last
|
|
`<style>` block with all class names namespaced `aes-` so they cannot collide
|
|
with the hub's own. The same content is also kept as a standalone page,
|
|
`agent-economy-stack.html`, served at `/agent-economy-stack.html`; edit that
|
|
file and refold it rather than editing the section by hand. Third-party marks
|
|
are the owners' official files.
|
|
|
|
## Apex Universe section
|
|
|
|
"Apex Universe" (menu entry right below Overview, section id `universe`,
|
|
component `UniverseSection`) is the ecosystem as a star system drawn from
|
|
public data. AP3X is the star, with a corona of the nine public allocations.
|
|
PRIME, Vector and Nexus are its worlds. The stake pools form PRIME's asteroid
|
|
belt, and the staking reserve is a moon filled to what is left. Agents fly as
|
|
a fleet round Vector with the HAL 8 mothership. The bridges are jump gates,
|
|
Cardano, Base and BNB Chain are distant worlds, the partners are beacons on
|
|
the outer belt, and comets carry value home.
|
|
|
|
- The markup (`AU_HTML`) and the component live in the bundle between
|
|
`/*AU-BEGIN*/` and `/*AU-END*/`. The styles are in the `<style>` block marked
|
|
`au-css-begin`, with every class namespaced `au-`.
|
|
- `universe/` holds everything else:
|
|
- `universe.js`, the three.js sandbox, which the component loads on demand
|
|
through the page's import map;
|
|
- `data.json`, the figures;
|
|
- the Blender film (`apex-universe.mp4`) and its `poster.jpg`;
|
|
- the Blender chapter frames and the sky panorama;
|
|
- the baked world textures;
|
|
- the logos.
|
|
- **Figures refresh daily.** A cron job on the desk host (trading-bot)
|
|
publishes the desk's public ecosystem snapshot to `universe/data.json`
|
|
through the Gitea API. It commits only when the figures have changed, and
|
|
that commit is the deploy.
|
|
- **Sources:** the build script, sandbox module and Blender scene live in
|
|
`jerry/exec-engine` under `docs/pages/ecosystem/universe/`. Rebuild with
|
|
`build_site.py`, which replaces the injected block rather than duplicating it.
|
|
|
|
## How it is served
|
|
|
|
Caddy on the HAL 8 host serves this directory as a static site. The box
|
|
pulls this repository; there is no build step and nothing to compile —
|
|
committing to `main` is the deploy.
|
|
|
|
Because the site is public and carries no secrets, this repository is
|
|
public too, so the host clones it without credentials.
|
|
|
|
## External dependencies
|
|
|
|
Two things are fetched at runtime rather than bundled:
|
|
|
|
- **three.js** `0.160.0` from `cdn.jsdelivr.net` — powers the Fusion
|
|
Chamber 3D visual (§12). If the CDN is unreachable that section
|
|
degrades; the rest of the page is unaffected.
|
|
- **Fusion AI**, the assistant widget: `fusion/fusion.js`, loaded on
|
|
demand. It posts to HAL 8's public route (see the note below), and its
|
|
Python **Run** button loads Pyodide from `cdn.jsdelivr.net` on first use.
|
|
|
|
## Fusion AI (powered by HAL 8)
|
|
|
|
The red-eye button in the bottom-right is Fusion AI. The page holds no key.
|
|
It posts to `https://hal8.odyssey-works.io/v1/public/fusion/chat`, and
|
|
`window.FUSION_AI_ENDPOINT` overrides that for testing. The route runs
|
|
HAL 8's headless pipeline under its own capped account: $1 a day for
|
|
everyone, and per visitor 40 messages, 6 images and 1 video a day. Its full
|
|
contract is `docs/FUSION.md` in the HAL 8 repository.
|
|
|
|
- **Standard | Incognito** is the only control.
|
|
- Standard is `hal8-auto`; the conversation is kept in this browser only.
|
|
- Incognito is a Venice private model; nothing is kept, and generated
|
|
media is deleted after a day.
|
|
- Chat, code, web search, images, video and voice are always on.
|
|
- Python code blocks run in the visitor's browser.
|
|
|
|
The launch film lives in `fusion/launch/`. It includes:
|
|
|
|
- `fusion-ai-launch.mp4`, the 32-second, 16:9 cut shown on the HAL 8 page (the "Meet Fusion AI" card) and in the widget's "Watch the launch film" lightbox;
|
|
- `poster.jpg`, its poster frame;
|
|
- `fusion-ai-launch.vtt`, its subtitles.
|
|
|
|
The film was rendered in Blender from the Apex Universe scene. The Fusion pane in it is the real widget, playing answers Fusion AI actually gave. The voice is ElevenLabs "Brian", and the score is original.
|
|
|
|
The widget is `fusion/fusion.js` and `fusion/fusion.css`. After editing
|
|
either, run `python3 tools/fusion_inject.py`: it inlines the CSS and
|
|
re-stamps the module version inside `index.html`, and re-running it
|
|
replaces rather than duplicates.
|
|
|
|
## Markets section — live feeds
|
|
|
|
Every number on the Markets page is fetched by the visitor's browser, so
|
|
only CORS-open sources can be called directly. Two are not, and the site
|
|
origin proxies them (Caddy, `deploy/Caddyfile` in the HAL 8 repo):
|
|
|
|
| Path on this origin | Upstream | Used for |
|
|
|---------------------|---------------------|-------------------------------------------------|
|
|
| `/api/koios/*` | `api.koios.rest` | VyFi pool reserves, cstAP3X vault + supply, Minswap V2 pool datum |
|
|
| `/api/lbank/*` | `api.lbkex.com` | AP3X/USDT ticker, depth, last trade |
|
|
|
|
Direct (CORS-open): CoinGecko, DexScreener, the Minswap aggregator
|
|
(`agg-api.minswap.org`, rate-limited to roughly five calls a minute per IP,
|
|
so the page makes one), Base JSON-RPC (`base-rpc.publicnode.com`; the two
|
|
Uniswap V3 pools and the Aerodrome cbADA pool are read from the chain
|
|
because DexScreener does not index them), ApexScan v1 on Nexus (USDC.e),
|
|
the Vector Koios instance, the Prime explorer, OSAM. DexHunter is the
|
|
fallback for Cardano reserves when Koios is down.
|
|
|
|
Fast feeds refresh every 90 s; the quota'd ones (Koios, LBank, Base RPC,
|
|
ApexScan) every third tick. Polling pauses in hidden tabs.
|
|
|
|
The page's own Cardano truth is a staking receipt, not a fourth asset:
|
|
`cstAP3X` is worth `vault cAP3X / cstAP3X issued` cAP3X each (about 1.07),
|
|
so it trades above cAP3X by design.
|
|
|
|
## Updating
|
|
|
|
Edit `index.html`, commit to `main`, and the host picks it up on its next
|
|
deploy tick (every five minutes). No build, no bundler, no CI.
|
|
|
|
The page is stored inside `index.html` as a JSON-encoded template that the
|
|
bundler unpacks at load time, so do not edit the escaped text by hand.
|
|
`tools/bundle.py` decodes it to a plain HTML file and re-encodes it
|
|
byte-exactly:
|
|
|
|
```
|
|
python3 tools/bundle.py decode index.html page.html # edit page.html
|
|
python3 tools/bundle.py encode index.html page.html index.html
|
|
```
|
|
|
|
The Markets code lives in `page.html` between `const MK_CG` and
|
|
`const SECTION_COMPONENTS`.
|