A Chrome extension that overrides the new-tab page with a daily.dev-style DeFi dashboard. This repo is the UI shell + wallet integration for what will later become the surface for a 4-agent swarm (Portfolio Manager, ALM, Intent Router, Swap Executor) running as Gensyn AXL nodes.
Scope right now: extension shell + Reown AppKit wallet connect. No agent runtime, no Uniswap, no KeeperHub, no real data feeds. Agent cards, portfolio numbers, intents log, and news items are mock placeholders so the layout is ready for wiring in later phases.
- Vite + React + TypeScript
- Manifest V3 (
chrome_url_overrides.newtab→index.html) - TailwindCSS, dark theme (Linear/Vercel-leaning)
- Reown AppKit + Wagmi adapter, viem,
@tanstack/react-query @crxjs/vite-pluginfor manifest + dev HMR
- Node 20+ (Node 22 tested)
- A Reown AppKit project ID — free at https://cloud.reown.com
cp .env.example .env
# edit .env and paste your Reown project id
npm install --legacy-peer-deps
--legacy-peer-depsis required.@reown/appkit-adapter-wagmipulls a transitiveaccountspackage whose peer-dep graph trips npm's strict resolver. The flag is harmless here — versions are pinned inpackage.json.
npm run devVite serves the dashboard at http://localhost:5173. To preview it as a real
extension while developing, run npm run build and load the dist/ folder
(see below) — @crxjs/vite-plugin supports HMR for unpacked extensions when
loaded from dist/ after a build.
npm run buildThis produces a self-contained, unpacked extension at dist/.
- Open
chrome://extensions - Toggle Developer mode on (top-right)
- Click Load unpacked and select the
dist/folder - Open a new tab — the dashboard renders
- Click the connect button in the header — the Reown AppKit modal opens
To pick up code changes, click Reload on the extension card after each
npm run build.
src/
config/ # appkit, wagmi, chains
components/
layout/ # Header, Sidebar, RightRail
portfolio/ # SummaryCards, AllocationChart
agents/ # AgentCard, AgentStatusPanel
news/ # NewsFeed, NewsCard
common/ # Button, Surface, Badge
hooks/ # useWallet
lib/ # format helpers, mock data
types/ # Agent, Intent, NewsItem
pages/NewTab.tsx
App.tsx
main.tsx
public/
icons/ # 16 / 48 / 128 placeholder icons
manifest.config.ts # @crxjs/vite-plugin manifest source
.env (gitignored) — copy from .env.example:
VITE_REOWN_PROJECT_ID=
If the project id is missing the dashboard still renders, but the wallet modal
will be unhappy. Watch the browser console for the warning logged by
src/config/appkit.ts.
Configured chains: Unichain, Base, Mainnet. The set lives in
src/config/chains.ts and src/config/appkit.ts — adjust there.
| Script | What |
|---|---|
npm run dev |
Vite dev server |
npm run build |
Type-check + build to dist/ |
npm run typecheck |
tsc --noEmit |
npm run lint |
ESLint over src/ |
npm run preview |
Preview the production build |
- AI agent logic, runtime, or orchestration
- Gensyn AXL nodes, P2P comms, MCP, A2A messaging
- Uniswap v3/v4, Universal Router, Permit2 integration
- KeeperHub integration
- Real news feed (RSS / API)
- Real portfolio data
- Intent netting / routing logic
The shell exists so those layers can drop in cleanly.