diff --git a/docs/thesis-seed-v3.md b/docs/thesis-seed-v3.md new file mode 100644 index 0000000..d6e07d7 --- /dev/null +++ b/docs/thesis-seed-v3.md @@ -0,0 +1,51 @@ +# Ten31 Thesis — Seed v3 + +*Revision after Grant's v2 feedback. Changes: (1) removed ALL "bet" language — we invest with conviction, we don't gamble; (2) added freedom-oriented technologies to the core themes (complementary alongside bitcoin/AI/energy); (3) cut the generic "we back special founders" pillar (too hand-wavy / everyone claims it / hard to prove) and refold the real, substantiable point — a decade of access — into the edge pillar; (4) fixed the segment angles: don't lead with "since 2013" for bitcoin-native HNWIs (they may have been in longer), but DO use our long history for institutions/family offices, where it's a genuine credibility edge.* + +--- + +## The one-liner + +> **Ten31 invests in the critical infrastructure behind bitcoin, AI, energy, and freedom technologies — four long-term trends that run on the same scarce inputs, where we've had conviction and a front-row seat since 2013.** + +## The throughline + +Bitcoin adoption, the AI buildout, and energy demand are all growing for the long haul — and freedom-oriented technologies are the complementary layer that ties them together. They aren't separate themes: they run on the same scarce inputs — **energy, compute, and sound money**. The company powering a bitcoin mine, the one cooling an AI datacenter, and the one custodying digital capital are solving versions of the same problem. + +**Ten31 invests, with conviction, in that infrastructure — the picks and shovels.** We've been in the bitcoin ecosystem since 2013, longer than almost anyone, so we have the conviction, the relationships, and the first look at the best companies these markets will need. + +## What we invest in (3 pillars + the proof) + +**1. Four connected trends, one set of scarce inputs.** +Bitcoin adoption, AI buildout, energy demand — plus **freedom-oriented technologies** as the complementary layer (sovereign computing, open protocols, the tools that keep individuals and businesses in control). All of it is bottlenecked on the same scarce things: cheap energy, computing power, and sound money. We invest in the companies that supply them. + +**2. Real infrastructure with real revenue — not speculation.** +Picks and shovels: mining, energy, custody, payments, compute, security, and freedom tech. Companies that generate revenue regardless of market sentiment. We're investing in businesses, not chasing tokens. + +**3. We saw the connection first — and we have the access to act on it.** +The overlap of bitcoin, energy, AI, and freedom tech is under-invested today, and our decade in the ecosystem is the edge: it gives us conviction generalist funds don't have, first look at the strongest founders, and relationships and access others simply can't get. *This is substantiable* — it shows up in the companies we've backed and the deals we see. + +**The proof:** $200M+ deployed across two funds into 30+ of the best companies in the space — Strike (bitcoin financial services), Start9 (personal datacenters / edge AI), and energy + mining infrastructure (e.g. Giga Energy, Upstream Data). Fund III continues the same strategy. + +## Why it's hard to refute (no hand-waving) + +- *Are these growing markets?* Obviously — bitcoin, AI, and energy are three of the biggest long-term trends there are. +- *Do they share scarce inputs?* Yes — energy and compute are the literal bottleneck for AI and mining; sound money is the settlement layer. +- *Has anyone else been investing across all of it, with this history?* Almost no one — we've been at it since 2013. +- *Are these real businesses?* Yes — revenue-generating infrastructure, not speculation. + +## Per-segment angle (one line each, same core) + +- **Bitcoin-native HNWI** — you already have conviction in bitcoin; we give you exposure to the entire infrastructure buildout around it, and access to the best companies in the space. *(Lead with shared conviction + access — NOT our tenure; many of these investors have been in as long as or longer than us.)* +- **Institution** — durable, revenue-generating exposure to the bitcoin/AI/energy buildout, through a manager who has been in this ecosystem since 2013 — longer than almost anyone, and a real credibility edge. *(Tenure is a key selling point here.)* +- **Family office (diversified, curious)** — a long-horizon allocation to four connected trends, grounded in real businesses, from a team with a decade-plus track record in the space. *(Tenure matters here too.)* +- **Smaller accredited ($100k)** — the same thesis our largest, most-convicted investors back, at an accessible entry point. +- **AI / energy operators** — you live the energy-and-compute scarcity every day; we invest across the stack that supplies it. + +## Voice + +Direct, concrete, confident, conviction-driven. **Never** "bet"/"betting"/"gamble" — we invest behind things we have conviction in. Lead with what we buy and why it grows; plain English an engineer or a serious LP can verify in their head; real examples and numbers. Avoid abstract philosophy and anything that makes eyes glaze over. + +--- + +*Next: react again — especially on pillar 3 (is "access/first look" the right framing for the edge?), the freedom-tech wording, and whether the segment angles land. The deeper essays stay as supporting material, not the pitch.* diff --git a/docs/thesis-seed-v5.md b/docs/thesis-seed-v5.md new file mode 100644 index 0000000..acfa26c --- /dev/null +++ b/docs/thesis-seed-v5.md @@ -0,0 +1,47 @@ +# Ten31 Thesis — Seed v5 + +*Captures Grant's v4 edits. The Option A vs Option B framing decision (scarcity-forward vs "freedom tech" as the banner) stays open for Grant and his partner to debate, and the wording of each option may keep refining. This is the version to seed into the CRM as the starting point.* + +--- + +## Framing (still being debated by the partners) + +- **Option A (scarcity-forward):** Ten31 invests in the infrastructure of scarcity. We back the bitcoin, energy, and AI companies that produce and secure the scarce resources these markets are built on. +- **Option B (freedom tech as the banner):** Ten31 invests in freedom technology. We back the bitcoin, energy, and AI companies building the foundation for a more sovereign, less centralized economy. + +*(Both descriptions are themselves still being refined.)* + +## The throughline + +Bitcoin, AI, and energy are three of the largest growth markets of the next decade, and they depend on the same scarce resources: cheap energy and computing power. We believe that energy, compute, and AI infrastructure will settle on money that is hard to produce. That is not the case today, and connecting these markets to bitcoin is the part of the thesis that very few others are making, even as broader crypto tries to attach itself to AI and energy. Ten31 invests in that infrastructure with strong conviction. + +## Pillars + +**1. Scarcity is the whole opportunity.** +Every one of these markets is bottlenecked on something scarce. AI and bitcoin both compete for cheap energy and compute. And we believe energy, compute, and AI infrastructure will increasingly settle on money that is hard to produce, which points directly at bitcoin. The companies that own and supply the scarce side of that equation capture the value as demand grows. That is where we invest. *(The bitcoin connection is a forward-looking conviction, not a description of today. That gap is the opportunity.)* + +**2. We invest in foundational infrastructure with real revenue.** +The companies that generate energy, secure capital, and power computation. Real businesses earning real money from real demand today. + +**3. Founders seek us out, and we lead deals others never see.** +Founders come to us because of our experience and our genuine alignment with bitcoin. We pursue and lead opportunities exclusive to us. People in this ecosystem know our track record and want us on their side. + +## The proof + +$200M+ deployed across two funds into 30+ of the strongest companies in the space (Strike, Start9, energy and mining infrastructure). A six-year track record that includes large-scale M&A and public-markets activity that is unmatched by others in this space. Fund III continues the same strategy. + +## Per-segment angle + +- **Bitcoin-native HNWIs (OGs).** Bitcoin only wins if people build on it. Holding is not enough. You care about making bitcoin succeed, and so do we. We put capital behind the companies that turn bitcoin into a working economy. +- **Institutions.** Exposure to the bitcoin, energy, and AI buildout through a team with a six-year institutional track record, including large-scale M&A and public-markets activity unmatched by others in this space (and Grant's prior institutional experience on top of that). +- **Family offices.** A long-horizon allocation grounded in real businesses, run by a team with deep credibility and a real track record. +- **Smaller accredited ($100k).** The same thesis our most convicted investors back, at an accessible entry point. +- **AI and energy operators.** You may not be focused on bitcoin today, and that is exactly the point. We believe bitcoin becomes a larger component of energy and compute over time, and most operators in your space are not yet positioned for it. We are, and we invest across the stack that connects them. + +## Voice + +Direct, concrete, conviction-driven. No "betting" language, no em dashes, no "X, not Y" phrasing, no kitchen-sink lists. Plain sentences a serious LP can verify in their head. + +--- + +*Open decisions for the partners: Option A vs B (and the wording of each); whether pillar 3's "sought out / exclusive deals" is the edge to lead with. This seed goes into the CRM and the Architect helps iterate from here.* diff --git a/frontend/index.html b/frontend/index.html index 2d87a26..2641726 100644 --- a/frontend/index.html +++ b/frontend/index.html @@ -1280,6 +1280,190 @@ padding-top: 16px; } + /* Thesis Workshop ----------------------------------------------------- */ + .thesis-ws-banner { + display: flex; + align-items: flex-start; + gap: 10px; + padding: 12px 14px; + margin-bottom: 18px; + background-color: #1a2233; + border: 1px solid #35506a; + border-radius: 8px; + color: #c7d3e0; + font-size: 13px; + line-height: 1.5; + } + + .thesis-ws-banner.ready { + background-color: #10b9810f; + border-color: #1f6f54; + } + + .thesis-ws-banner-icon { + flex-shrink: 0; + font-size: 16px; + line-height: 1.3; + } + + .thesis-ws-node { + border: 1px solid #263548; + border-radius: 8px; + background-color: #0d1622; + margin-bottom: 14px; + overflow: hidden; + } + + .thesis-ws-node.selected { + border-color: #3b82c4; + box-shadow: inset 0 0 0 1px #3b82c455; + } + + .thesis-ws-node-head { + display: flex; + align-items: center; + justify-content: space-between; + gap: 12px; + width: 100%; + text-align: left; + padding: 12px 14px; + background-color: transparent; + color: var(--text-primary); + font-weight: 400; + border-radius: 0; + } + + .thesis-ws-node-head:hover { + background-color: #152233; + transform: none; + box-shadow: none; + } + + .thesis-ws-node-type { + font-size: 10px; + font-weight: 600; + text-transform: uppercase; + letter-spacing: 0.08em; + color: #8ea2b7; + } + + .thesis-ws-node-title { + font-size: 14px; + font-weight: 500; + color: #e5edf5; + margin-top: 3px; + } + + .thesis-ws-children { + padding-left: 18px; + border-left: 1px solid #1d2a3a; + margin: 4px 0 4px 18px; + } + + .thesis-ws-body { + padding: 4px 14px 16px; + } + + .thesis-ws-count { + flex-shrink: 0; + font-family: 'IBM Plex Mono', monospace; + font-size: 12px; + font-weight: 600; + color: #93c5fd; + background-color: #3b82c422; + border-radius: 999px; + padding: 4px 10px; + } + + .thesis-ws-options { + display: flex; + flex-direction: column; + gap: 12px; + } + + .thesis-ws-option { + border: 1px solid #263548; + border-radius: 8px; + background-color: #111a27; + padding: 14px; + } + + .thesis-ws-option-head { + display: flex; + align-items: center; + justify-content: space-between; + gap: 10px; + margin-bottom: 8px; + } + + .thesis-ws-option-num { + font-family: 'IBM Plex Mono', monospace; + font-size: 11px; + font-weight: 600; + color: #8ea2b7; + text-transform: uppercase; + letter-spacing: 0.06em; + } + + .thesis-ws-option-text { + font-size: 14px; + line-height: 1.6; + color: #e5edf5; + white-space: pre-wrap; + } + + .thesis-ws-rationale { + margin-top: 10px; + padding: 8px 10px; + background-color: #0d1622; + border-left: 2px solid #3b82c4; + border-radius: 0 6px 6px 0; + font-size: 12px; + line-height: 1.5; + color: #8ea2b7; + } + + .thesis-ws-rationale-label { + font-size: 10px; + font-weight: 600; + text-transform: uppercase; + letter-spacing: 0.08em; + color: #93c5fd; + margin-bottom: 3px; + } + + .thesis-ws-controls { + margin-top: 16px; + border-top: 1px solid #263548; + padding-top: 16px; + display: flex; + flex-direction: column; + gap: 16px; + } + + @media (min-width: 760px) { + .thesis-ws-controls { + flex-direction: row; + align-items: flex-start; + } + .thesis-ws-control-col { + flex: 1; + min-width: 0; + } + } + + .thesis-ws-control-col { + display: flex; + flex-direction: column; + gap: 8px; + } + + .thesis-ws-n-input { + min-width: 0; + width: 80px; + flex: none; + } + .index-action-status { margin-bottom: 14px; } @@ -9264,6 +9448,610 @@ ); }; + // Friendly label for the various node types in a thesis tree. + const THESIS_NODE_TYPE_LABEL = { + thesis_root: 'Thesis', + throughline: 'Throughline', + section: 'Section', + claim: 'Claim', + proof_point: 'Proof Point', + objection: 'Objection', + segment_cut: 'Segment Cut' + }; + + const formatNodeType = (t) => THESIS_NODE_TYPE_LABEL[t] || formatThesisStatus(t); + + // Detect the server's "Architect not connected" signal so we can show a + // calm connect-the-Architect message instead of a raw 502. + const isArchitectMissingKeyError = (err) => { + const status = err?.status; + const payload = err?.payload || {}; + const haystack = `${err?.message || ''} ${payload.error || ''} ${payload.reason || ''} ${payload.detail || ''}`.toLowerCase(); + return status === 502 || haystack.includes('anthropic_api_key') || haystack.includes('api key') || haystack.includes('not configured'); + }; + + const ARCHITECT_CONNECT_HINT = "The Architect isn't connected yet — add your Anthropic API key on the server to enable generation. You can still view and edit the thesis."; + + // Renders a single node's competing options (its variant group). The + // number of options is whatever the server returns — could be 0, 1, or + // many — and is rendered as a dynamic list, never a fixed A/B layout. + const ThesisWorkshopOptions = ({ token, node, lineKey, isAdmin, architectReady, onShowToast }) => { + const nodeId = node.id; + const [data, setData] = useState(null); + const [loading, setLoading] = useState(true); + const [error, setError] = useState(''); + const [genN, setGenN] = useState(3); + const [guidance, setGuidance] = useState(''); + const [generating, setGenerating] = useState(false); + const [feedbackN, setFeedbackN] = useState(2); + const [feedback, setFeedback] = useState(''); + const [sendingFeedback, setSendingFeedback] = useState(false); + + const load = useCallback(async () => { + try { + setLoading(true); + const result = await api(`/api/thesis/nodes/${nodeId}/variants`, {}, token); + setData(result); + setError(''); + } catch (err) { + setError(getErrorMessage(err, 'Failed to load options')); + } finally { + setLoading(false); + } + }, [token, nodeId]); + + useEffect(() => { load(); }, [load]); + + const handleGenerate = async (e) => { + e.preventDefault(); + if (!isAdmin || generating) return; + const n = Math.max(1, Math.min(8, parseInt(genN, 10) || 1)); + try { + setGenerating(true); + const result = await api(`/api/thesis/nodes/${nodeId}/generate`, { + method: 'POST', + body: JSON.stringify({ n, guidance: guidance.trim() }) + }, token); + const count = result?.data?.generated ?? (result?.data?.options || []).length; + onShowToast(`Generated ${count} option${count === 1 ? '' : 's'}`, 'success'); + setGuidance(''); + await load(); + } catch (err) { + if (isArchitectMissingKeyError(err)) { + onShowToast(ARCHITECT_CONNECT_HINT, 'error'); + } else { + onShowToast(getErrorMessage(err, 'Failed to generate options'), 'error'); + } + } finally { + setGenerating(false); + } + }; + + const handleFeedback = async (e) => { + e.preventDefault(); + if (!isAdmin || sendingFeedback) return; + if (!feedback.trim()) { + onShowToast('Add some feedback for the Architect to address', 'error'); + return; + } + const n = Math.max(1, Math.min(8, parseInt(feedbackN, 10) || 1)); + try { + setSendingFeedback(true); + const result = await api(`/api/thesis/nodes/${nodeId}/feedback`, { + method: 'POST', + body: JSON.stringify({ feedback: feedback.trim(), n }) + }, token); + const count = result?.data?.generated ?? (result?.data?.options || []).length; + onShowToast(`Revised — ${count} new option${count === 1 ? '' : 's'}`, 'success'); + setFeedback(''); + await load(); + } catch (err) { + if (isArchitectMissingKeyError(err)) { + onShowToast(ARCHITECT_CONNECT_HINT, 'error'); + } else { + onShowToast(getErrorMessage(err, 'Failed to send feedback'), 'error'); + } + } finally { + setSendingFeedback(false); + } + }; + + if (loading) return