From 7cafa179cbbab993fc77ff3f2c2b1abc1081f4d8 Mon Sep 17 00:00:00 2001 From: Theodore Song Date: Sun, 12 Jul 2026 17:21:38 -0400 Subject: [PATCH] Add personal research mode --- README.md | 6 ++++++ index.html | 26 ++++++++++++++++++++++++++ personal.html | 13 +++++++++++++ 3 files changed, 45 insertions(+) create mode 100644 personal.html diff --git a/README.md b/README.md index 78d714e..f122b98 100644 --- a/README.md +++ b/README.md @@ -9,6 +9,10 @@ Open the deployed site: https://polymarket-site-eta.vercel.app +Personal research mode: + +https://polymarket-site-eta.vercel.app/personal.html + The site fetches live Polymarket markets, generates agent suggestions, lets you run hourly paper cycles, and syncs the shared arena state through the Vercel API when `BLOB_READ_WRITE_TOKEN` is configured. @@ -53,6 +57,8 @@ Use `.env.example` as the setup template. ## Notes - Paper trading only right now — no real money, nothing places real orders. +- Personal research mode hides investor/live-money tabs and is for your own + analysis plus manual execution links only. - The analysis is a transparent heuristic, **not financial advice**. - The shared arena uses cloud state when configured. Password-backed paper accounts use the backend account API; passwordless paper accounts use local diff --git a/index.html b/index.html index 679caef..617f527 100644 --- a/index.html +++ b/index.html @@ -69,6 +69,11 @@ h1,h2,h3,.brand-name{font-family:'Space Grotesk','Inter',sans-serif} .btn.primary:hover{filter:brightness(1.08)} .btn:disabled{opacity:.55;cursor:wait;transform:none} .btn.ghost{background:transparent} +.personal-mode [data-tab="invest"],.personal-mode [data-tab="live"]{display:none!important} +.personal-banner{display:none;margin:0 0 14px;border:1px solid rgba(251,191,36,.22);border-radius:14px; + padding:12px 14px;background:rgba(251,191,36,.08);color:#f8e7b0;font-size:13px} +.personal-mode .personal-banner{display:block} +.personal-banner b{color:#fff} /* ---------- hero ---------- */ .hero{position:relative;border:1px solid var(--border);border-radius:22px;padding:34px 32px;margin:14px 0 22px; @@ -331,6 +336,9 @@ footer{margin-top:34px;padding-top:22px;border-top:1px solid var(--border);color +
+ Personal research mode. This copy is for your own analysis, paper tracking, and manual trade research only. It does not pool money, onboard investors, custody funds, bypass eligibility rules, or place orders for you. +
@@ -663,6 +671,7 @@ const INVEST_KEY = "pma_invest_allocations_v1"; const PAPER_KEY = "pma_paper_accounts_v1"; const LIVE_KEY = "pma_live_readiness_v1"; const PAPER_SESSION_PREFIX = "pma_cloud_session_"; +const PERSONAL_MODE = new URLSearchParams(location.search).get("personal") === "1"; 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,INVEST_KEY,PAPER_KEY,LIVE_KEY]; const CAT_COLORS = {Politics:"#fb7185",Sports:"#34d399",Crypto:"#fbbf24",Economy:"#7c8cff", @@ -678,6 +687,21 @@ const catColor = (c) => CAT_COLORS[c] || CAT_COLORS.Other; const getFocus = () => localStorage.getItem(FOCUS_KEY) || "All"; const setFocus = (c) => localStorage.setItem(FOCUS_KEY, c); +function applyPersonalMode(){ + if(!PERSONAL_MODE)return; + document.body.classList.add("personal-mode"); + const brand=document.querySelector(".brand-name"),sub=document.querySelector(".brand-sub"); + if(brand)brand.textContent="Personal Polymarket Arena"; + if(sub)sub.textContent="private research · paper tracking · manual links"; + const heroTitle=document.querySelector(".hero h1"),heroCopy=document.querySelector(".hero p"); + if(heroTitle)heroTitle.innerHTML=`Your private agent lab for manual market research`; + if(heroCopy)heroCopy.textContent="Use the same agents, charts, paper portfolios, and Polymarket links for your own research. Nothing here pools outside money, manages investor funds, or places live orders."; + document.querySelectorAll(".hbadge").forEach((b,i)=>{ + const labels=["Private research mode","Manual execution only","Cloud paper accounts","Live market links"]; + if(labels[i])b.textContent=labels[i]; + }); +} + /* ---------- the ten competing agents ---------- Each shares the same hourly suggestions but ranks/sizes them differently. */ const AGENTS = [ @@ -2376,6 +2400,7 @@ function esc(s){return String(s).replace(/[&<>"]/g,c=>({"&":"&","<":"<"," const TABS=["overview","leaderboard","suggestions","portfolio","invest","paper","live","about"]; function showTab(name){ if(!TABS.includes(name))name="overview"; + if(PERSONAL_MODE&&["invest","live"].includes(name))name="overview"; document.querySelectorAll(".tabpanel").forEach(p=>p.classList.toggle("active",p.dataset.tab===name)); document.querySelectorAll(".tab").forEach(t=>t.classList.toggle("active",t.dataset.tab===name)); if(location.hash.slice(1)!==name)history.replaceState(null,"","#"+name); @@ -2385,6 +2410,7 @@ document.querySelectorAll(".tab").forEach(t=>t.addEventListener("click",()=>show window.addEventListener("hashchange",()=>showTab(location.hash.slice(1))); /* ---------- Wire up ---------- */ +applyPersonalMode(); $("runBtn").addEventListener("click",async()=>{ const btn=$("runBtn");btn.disabled=true;btn.textContent="Running…"; try{const r=await runDailyCycle();const b=board();toast(r.skipped?`Already ran this hour · ${b[0].c.emoji} ${b[0].c.name} leads`:`Cycle done · ${r.suggestions} ideas · ${b[0].c.emoji} ${b[0].c.name} leads`);renderAll();} diff --git a/personal.html b/personal.html new file mode 100644 index 0000000..5f7b6f5 --- /dev/null +++ b/personal.html @@ -0,0 +1,13 @@ + + + + + +Personal Polymarket Arena + + + + +

Opening personal research mode...

+ +