From 1ccf7e58ecf47b7d475ae02c0ab8632f110ea30e Mon Sep 17 00:00:00 2001 From: Theodore Song Date: Sun, 12 Jul 2026 15:47:08 -0400 Subject: [PATCH] Add real-money allocation planning --- index.html | 129 +++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 126 insertions(+), 3 deletions(-) diff --git a/index.html b/index.html index e4da7e9..91aa0f7 100644 --- a/index.html +++ b/index.html @@ -228,6 +228,9 @@ a.market-title:hover{color:#fff;text-decoration:underline;text-decoration-color: .chart-wrap{width:100%;margin-top:8px} .legend{grid-template-columns:1fr} .agent-brief{grid-template-columns:1fr} + .invest-grid{grid-template-columns:1fr} + .invest-agent{grid-template-columns:auto 1fr} + .invest-agent input{grid-column:1 / -1;width:100%} .pos{align-items:flex-start;gap:12px} .pos .pq{max-width:none} .right{min-width:92px} @@ -243,6 +246,23 @@ a.market-title:hover{color:#fff;text-decoration:underline;text-decoration-color: .steps li{position:relative;padding:0 0 16px 44px;font-size:14px;color:#cdd6e8} .steps li::before{counter-increment:s;content:counter(s);position:absolute;left:0;top:-2px;width:30px;height:30px;border-radius:9px;display:grid;place-items:center;font-weight:700;font-size:13px;color:#fff;background:linear-gradient(135deg,var(--accent),var(--accent2))} .disclaimer{border:1px solid rgba(251,191,36,.3);background:rgba(251,191,36,.07);border-radius:14px;padding:16px 18px;font-size:13px;color:#e6dcc2;margin-top:8px} +.invest-grid{display:grid;grid-template-columns:1.05fr .95fr;gap:18px} +.invest-agent{display:grid;grid-template-columns:auto 1fr auto;gap:13px;align-items:center;padding:14px 0;border-bottom:1px solid var(--border)} +.invest-agent:last-child{border-bottom:none} +.invest-agent input{width:112px;border:1px solid var(--border);border-radius:9px;background:rgba(255,255,255,.05);color:var(--text);font:700 13px 'Inter',sans-serif;padding:8px 10px} +.invest-agent input:focus{outline:1px solid var(--accent)} +.invest-name{font-family:'Space Grotesk';font-weight:700} +.invest-copy{color:var(--muted);font-size:12.5px;margin-top:2px} +.invest-total{display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:12px;margin-bottom:14px} +.invest-num{background:rgba(255,255,255,.04);border:1px solid var(--border);border-radius:14px;padding:14px} +.invest-num .k{font-size:11px;color:var(--muted);text-transform:uppercase;letter-spacing:.6px} +.invest-num .v{font-family:'Space Grotesk';font-size:24px;font-weight:700;margin-top:3px} +.checklist{list-style:none;margin:0;padding:0;display:grid;gap:10px} +.checklist li{display:flex;gap:9px;color:#cdd6e8;font-size:13.5px} +.checklist li::before{content:"";width:9px;height:9px;border-radius:50%;margin-top:6px;background:var(--accent);box-shadow:0 0 0 4px rgba(124,140,255,.12);flex:0 0 auto} +.exposure-row{display:flex;justify-content:space-between;gap:12px;padding:10px 0;border-bottom:1px solid var(--border);font-size:13px} +.exposure-row:last-child{border-bottom:none} +.risk-note{border:1px solid rgba(251,113,133,.28);background:rgba(251,113,133,.08);border-radius:14px;padding:14px 16px;font-size:13px;color:#f4c6cf} /* ---------- misc ---------- */ .toast{position:fixed;bottom:24px;right:24px;z-index:100;background:rgba(18,24,40,.92);border:1px solid var(--accent);padding:13px 19px;border-radius:13px;font-size:14px;opacity:0;transform:translateY(12px);transition:.28s;pointer-events:none;max-width:360px;backdrop-filter:blur(12px);box-shadow:var(--shadow)} @@ -277,6 +297,7 @@ footer{margin-top:34px;padding-top:22px;border-top:1px solid var(--border);color + + +
+
๐Ÿ’ธ Invest in Agents
+
+
+

Allocation draft

planning only
+
+
+
+
+
+

How real money should work

+
    +
  1. User owns funds โ€” connect a wallet or regulated brokerage account; the site should not custody deposits directly.
  2. +
  3. Consent per agent โ€” users choose which agents can trade and the maximum amount each may control.
  4. +
  5. Execution layer โ€” agent signals become signed user orders through Polymarket's trading flow or a compliant partner.
  6. +
  7. Risk controls โ€” stop-loss, gain-stop, exposure caps, market exclusions, and emergency pause stay visible before any order is sent.
  8. +
+
+
+

Compliance checklist

+
    +
  • Eligibility, location, age, KYC, and sanctions screening before real trading.
  • +
  • Clear disclosure that prediction markets are risky and users can lose the full amount committed.
  • +
  • No pooled customer funds unless handled by a properly regulated structure.
  • +
  • Audit logs for every signal, user approval, order, fill, stop, and withdrawal.
  • +
+
+
+

Execution status

not enabled
+

Real orders require user-signed trading credentials and an eligible account. The current site only creates an allocation draft.

+
+ Trading docs + Terms + +
+
+
+ Important: this site still does not move money or place orders. This tab is the bridge design: it lets people plan allocations and shows the safe path toward wallet-based or regulated real-money execution. +
+
+
+
+
โ„น๏ธ The competition
@@ -421,8 +486,9 @@ const FOCUS_KEY = "pma_focus_v1"; const VIEW_KEY = "pma_view_v1"; const PF_SORT_KEY = "pma_portfolio_sort_v1"; const CHART_RANGE_KEY = "pma_chart_range_v1"; +const INVEST_KEY = "pma_invest_allocations_v1"; const CATEGORIES = ["All","Politics","Sports","Crypto","Economy","Pop Culture","Other"]; -const SYNC_KEYS=[AGENTS_KEY,SUG_KEY,FOCUS_KEY,VIEW_KEY,PF_SORT_KEY,CHART_RANGE_KEY]; +const SYNC_KEYS=[AGENTS_KEY,SUG_KEY,FOCUS_KEY,VIEW_KEY,PF_SORT_KEY,CHART_RANGE_KEY,INVEST_KEY]; const CAT_COLORS = {Politics:"#fb7185",Sports:"#34d399",Crypto:"#fbbf24",Economy:"#7c8cff", "Pop Culture":"#c77dff",Other:"#94a1bb",All:"#7c8cff",Copy:"#22d3ee"}; const DATA_API = "https://data-api.polymarket.com"; @@ -1178,7 +1244,7 @@ function board(){ const MEDALS=["๐Ÿฅ‡","๐Ÿฅˆ","๐Ÿฅ‰"]; /* ---------- Rendering ---------- */ -function renderAll(){renderOverview();renderLeaderboard();renderSuggestions();renderPortfolioTab();renderAbout();} +function renderAll(){renderOverview();renderLeaderboard();renderSuggestions();renderPortfolioTab();renderInvestTab();renderAbout();} function renderOverview(){ const b=board(); const lead=b[0]; @@ -1535,6 +1601,63 @@ function renderHistory(history){ if(!history.length){root.innerHTML=`
No activity yet.
`;return;} root.innerHTML=history.map(h=>`
${h.action}${h.date} โ€” ${esc(h.detail)}
`).join(""); } +function loadInvestAllocations(){ + try{return JSON.parse(localStorage.getItem(INVEST_KEY))||{};}catch(e){return {};} +} +function saveInvestAllocations(a){ + localStorage.setItem(INVEST_KEY,JSON.stringify(a)); + pushCloudState(); +} +function agentExposureSummary(cfg,p,amount){ + const eq=Math.max(equity(p),1); + const open=(p.positions||[]).filter(x=>(x.value||0)>0).slice().sort((a,b)=>(b.value||0)-(a.value||0)).slice(0,3); + if(!amount||!open.length)return `
Add an amount to preview this agent's largest mapped exposures.
`; + return open.map(pos=>{ + const mapped=amount*((pos.value||0)/eq); + const q=pos.url?`${esc(pos.question.slice(0,52))}${pos.question.length>52?"...":""}`:`${esc(pos.question.slice(0,52))}${pos.question.length>52?"...":""}`; + return `
${q}
${esc(pos.side)} ยท ${esc(pos.category||"Other")}
${fmtUSD(mapped)}
`; + }).join(""); +} +function renderInvestTab(){ + const root=$("investAgents"); if(!root)return; + const totals=$("investTotals"); + const st=loadState(), alloc=loadInvestAllocations(); + const rows=board().map(row=>{ + const amount=Number(alloc[row.c.id]||0); + return Object.assign({},row,{amount}); + }); + const total=rows.reduce((s,r)=>s+(Number.isFinite(r.amount)?r.amount:0),0); + const chosen=rows.filter(r=>r.amount>0).length; + const avgReturn=chosen?rows.filter(r=>r.amount>0).reduce((s,r)=>s+r.ret*(r.amount/total),0):0; + if(totals)totals.innerHTML=[ + {k:"Planned capital",v:fmtUSD(total)}, + {k:"Agents funded",v:String(chosen)}, + {k:"Weighted return",v:chosen?fmtPct(avgReturn):"+0.00%"}, + ].map(x=>`
${x.k}
${x.v}
`).join(""); + root.innerHTML=rows.map(row=>{ + const pct=total>0?(row.amount/total*100):0; + return `
+
${row.c.emoji}
+
+
${row.c.name}
+
${fmtPct(row.ret)} return ยท ${row.p.positions.length} open ยท ${pct.toFixed(1)}% of draft allocation
+
${agentExposureSummary(row.c,row.p,row.amount)}
+
+ +
`; + }).join(""); + document.querySelectorAll("[data-invest-agent]").forEach(input=>{ + const saveDraft=()=>{ + const next=loadInvestAllocations(); + const val=Math.max(0,Number(input.value||0)); + if(val)next[input.dataset.investAgent]=val; + else delete next[input.dataset.investAgent]; + localStorage.setItem(INVEST_KEY,JSON.stringify(next)); + }; + input.oninput=saveDraft; + input.onchange=()=>{saveDraft();pushCloudState();renderInvestTab();}; + }); +} function renderAbout(){ const root=$("aboutAgents");if(!root)return; const st=loadState(); @@ -1544,7 +1667,7 @@ function renderAbout(){ function esc(s){return String(s).replace(/[&<>"]/g,c=>({"&":"&","<":"<",">":">",'"':"""}[c]));} /* ---------- Tab routing ---------- */ -const TABS=["overview","leaderboard","suggestions","portfolio","about"]; +const TABS=["overview","leaderboard","suggestions","portfolio","invest","about"]; function showTab(name){ if(!TABS.includes(name))name="overview"; document.querySelectorAll(".tabpanel").forEach(p=>p.classList.toggle("active",p.dataset.tab===name));