// Project Pipeline — LIMS that lives ABOVE Open Labbook. // 7 screens: pipeline overview, AI hypothesis (drug discovery), grant builder, // protocol designer, experiment marketplace, LaTeX drafting, submit checklist. // Third-party integrations are surfaced at every stage. const PIPE_PROJECT = 'Astrocyte-mediated GABA reuptake · LTP modulation'; const PIPE_ID = 'PRJ-NB-219'; function PipeRail({ active }) { return ( <>
PROJECT
{PIPE_PROJECT}
{PIPE_ID} · stage 4 of 7
EXECUTING 14d in
); } function PipeCrumb({ items }) { return (
{items.map((it, i) => ( {it} {i < items.length - 1 && } ))}
); } // Reusable integration chip strip (third-party apps at every stage) function IntegrationStrip({ apps, title = 'INTEGRATIONS' }) { return (
{title} {apps.map((a, i) => ( {a.name} ))} Add
); } // ───────────────────────────────────────────────── PIPELINE · OVERVIEW ─────── function ProjectPipelineDapp() { const stages = [ { n: 1, t: 'Ideation', s: 'Problem framing · prior art scan', state: 'DONE', pct: 100, dur: '6d', owner: 'M.H.', tone: 'ok' }, { n: 2, t: 'Hypothesis', s: 'AI drug-discovery agent · 3 leads', state: 'DONE', pct: 100, dur: '4d', owner: 'M.H. + Twin', tone: 'ok' }, { n: 3, t: 'Grant', s: 'NIH-R01 · 2.4M USD funded', state: 'DONE', pct: 100, dur: '38d', owner: 'L.S.', tone: 'ok' }, { n: 4, t: 'Protocol', s: '14 steps · 3 reagents pending QC', state: 'ACTIVE', pct: 64, dur: '3d', owner: 'R.O.', tone: 'accent' }, { n: 5, t: 'Experiment', s: 'CRO Charles River + automation rig', state: 'ACTIVE', pct: 18, dur: '11d', owner: 'CRO', tone: 'accent' }, { n: 6, t: 'Drafting', s: 'LaTeX · §1 outline only', state: 'PENDING', pct: 8, dur: '—', owner: 'M.H.', tone: 'default' }, { n: 7, t: 'Submit', s: 'Target: Cell · pre-flight 0/12', state: 'PENDING', pct: 0, dur: '—', owner: '—', tone: 'default' }, ]; return ( }> } title="Project Pipeline" sub="A research project from idea to publication, in seven stages. Each stage hands off to the next; integrations plug in at every junction." actions={<> Team · 7 Integrations · 14 Advance stage } />
{/* Pipeline chevron map */}
{stages.map((st, i) => { const isActive = st.state === 'ACTIVE'; const isDone = st.state === 'DONE'; return (
STAGE {st.n}
{st.t}
{st.s}
{st.dur} · {st.owner}
); })}
{/* Health & dependencies */}
#Stage · summaryStateOwner% doneDurationAction
{stages.map((st, i) => (
{st.n}
{st.t}
{st.s}
{st.state} {st.owner} {st.pct}% {st.dur}
Open →
))}
{/* Activity */} {[ ['17:08', 'protocol', 'R. Okafor', 'Replaced step 7 reagent (TTX → TTX-citrate · QC pass)'], ['16:42', 'experiment', 'Charles River', 'Cohort B · 12 / 24 mice processed · 92.4% retention'], ['15:30', 'protocol', 'Twin', 'Auto-flagged step 11 — variance > 8% on 3 prior runs'], ['14:18', 'grant', 'NIH', 'Disbursed milestone M2 · 580K USD → treasury'], ['11:02', 'hypothesis', 'M. Harriot', 'Promoted lead H-3 (astrocyte GAT-3) to active hypothesis'], ].map((a, i, arr) => (
{a[0]} {a[1].toUpperCase()} {a[2]} {a[3]}
))}
{[ ['Schedule risk', 0.34, 'on track'], ['Budget burn', 0.62, '1.4M of 2.4M'], ['Reproducibility κ', 0.88, 'predicted'], ['Reviewer match', 0.74, '12 candidates'], ['Compute headroom', 0.56, '8.4 GPU-mo left'], ].map(([k, v, n], i) => (
{k} {n}
0.7 ? UB.ok : v > 0.4 ? UB.ink : UB.warn }} />
))} {[ ['M. Harriot', 'PI', 'UCSF', 'accent'], ['L. Singh', 'Co-investigator', 'UCSF', 'default'], ['R. Okafor', 'Postdoc · protocols', 'UCSF', 'default'], ['A. Mwangi', 'Eng · automation', 'CZB', 'info'], ['Charles River · M.O.', 'CRO lead', 'Charles River', 'ok'], ['Twin · M⁂', 'AI agent', 'local', 'accent'], ['+ 1 reviewer', 'unassigned', '—', 'warn'], ].map((r, i) => (
{r[0]}
{r[1]} · {r[2]}
{r[3] === 'accent' ? 'PI' : r[3] === 'info' ? 'PARTNER' : r[3] === 'ok' ? 'CRO' : r[3] === 'warn' ? 'NEEDS' : 'CO'}
))}
{/* Integrations strip */}
); } // ─────────────────────────────────────────────── HYPOTHESIS · AI AGENT ─────── function PipelineHypothesisDapp() { return ( }> } title="AI drug-discovery agent" sub="The agent reads your library, queries chem-bio databases, simulates targets via AlphaFold/Boltz, and proposes ranked hypotheses you can promote or reject." actions={<> Switch to manual Sandbox Promote H-3 → protocol } />
{/* Left — agent loop */}
Find a molecular handle that selectively reduces astrocytic GABA reuptake, increasing tonic inhibition without depressing LTP induction in CA1 pyramidal cells.
{['target: GAT-3', 'tissue: cortex/CA1', 'modality: small molecule', 'tox: low', 'permeable: BBB', 'similar to: SNAP-5114'].map(c => ( {c} ))}
{[ ['retrieve', 'Pulled 184 refs on GAT-1/2/3 selectivity · 22 with kinetic data', UB.ink2], ['simulate', 'AlphaFold-3 · GAT-3 + 3 candidate scaffolds · ΔΔG range −5.2 → −9.1 kcal/mol', UB.accent], ['filter', 'Excluded 14 hits failing CYP3A4 / hERG admet rules', UB.warn], ['rank', 'Ranked by selectivity over GAT-1 (rank-norm), 6 leads remain', UB.ink2], ['critique', '3 leads share scaffold to SNAP-5114 — propose orthogonal lead H-3 (β-amino acid linker)', UB.ok], ['cite', 'Patel & Mehta 2025 (arXiv:2503.18112) — useful prior on attention decoding for binding pose', UB.info], ].map(([k, t, c], i, arr) => (
{k.toUpperCase()}
{t}
))}
{[ { id: 'H-3', t: 'β-amino acid linker analog of SNAP-5114', target: 'GAT-3', sel: 0.92, dock: -8.7, tox: 'low', pos: 'PROMOTED', tone: 'accent' }, { id: 'H-1', t: 'Cyclic guanidinium scaffold', target: 'GAT-3 / GAT-1', sel: 0.78, dock: -9.1, tox: 'med', pos: 'CANDIDATE', tone: 'ok' }, { id: 'H-4', t: 'Allosteric Na⁺-coupling disruptor', target: 'GAT-3', sel: 0.71, dock: -7.4, tox: 'low', pos: 'CANDIDATE', tone: 'ok' }, { id: 'H-2', t: 'Lipophilic SNAP-5114 derivative', target: 'GAT-3', sel: 0.62, dock: -8.2, tox: 'high', pos: 'REJECTED', tone: 'bad' }, ].map((h, i, arr) => (
{h.id} {h.t} {h.target} sel · {h.sel} {h.dock} {h.tox} {h.pos}
))}
{/* Right — molecule preview + actions */}
{/* schematic protein/binding visual */} {/* protein ribbon — wavy */} {[0, 1, 2, 3, 4, 5].map(i => ( ))} {/* ligand */} {[[155, 105], [165, 100], [175, 108], [170, 118], [160, 120], [150, 115]].map(([x, y], i, arr) => ( ))} {[[155, 105, 165, 100], [165, 100, 175, 108], [175, 108, 170, 118], [170, 118, 160, 120], [160, 120, 150, 115], [150, 115, 155, 105]].map(([x1, y1, x2, y2], i) => ( ))} GAT-3 · TM5/TM8 BINDING POCKET · pose 03
{[ ['Lin & Harriot 2024 · Cell Reports Methods', 'rwif scoring · §3'], ['Yamamoto et al. 2025 · Nat. Neurosci.', 'replication of Lin 2024'], ['SNAP-5114 patent · US6093570', 'lead scaffold prior art'], ['Patel & Mehta 2025 · arXiv:2503.18112', 'pose decoding'], ].map((r, i) => (
{r[0]}
↳ {r[1]}
))}
The agent cannot promote without your signature. All reasoning is logged to UB-Chain.
{[['Twin · proposed', 'ok'], ['L. Singh · co-investigator', 'ok'], ['M. Harriot · PI', 'pending'], ['IRB / IACUC required', 'default']].map((s, i) => (
{s[0]} {s[1] === 'ok' ? '✓ SIGNED' : s[1] === 'pending' ? 'AWAITING' : 'INFO'}
))}
); } // ───────────────────────────────────────────────────── GRANT BUILDER ───────── function PipelineGrantDapp() { return ( }> } title="Grant builder" sub="Compose a grant once. Submit to NIH, NSF, Wellcome, or pitch to research DAOs on UB-Chain. Templates align fields and budgets to each call." actions={<> Browse open calls · 184 Pitch to DAO Submit application } />
{/* Left — call selector */}
R01 · Distributed Brain Initiative
NIH NINDS · ceiling 3.0M USD · 5y
Mechanistic studies of glia–neuron interactions across cortical regions, with mandatory open data and reproducibility commitments.
Deadline · 14 Jun 2025
Review cycle · Q3 2025
Earliest start · Mar 2026
{[ ['Wellcome · Neuroscience Investigator', '4.0M GBP', '92%'], ['NSF · CAREER', '500K USD', '88%'], ['VitaDAO · Astrocyte Track', '300K UBR', '84%'], ['Molecule · IP-NFT lab launch', '~250K USD', '78%'], ].map(([n, b, m], i) => (
{n}
{b}
{m}
))}
{/* Center — composer */}
{[ ['1', 'Specific Aims', 'COMPLETE', 'ok', '412 of 1 page'], ['2', 'Significance', 'COMPLETE', 'ok', '1.2 of 2 pages'], ['3', 'Innovation', 'COMPLETE', 'ok', '0.9 of 1 page'], ['4', 'Approach', 'EDITING', 'accent', '8.4 of 12 pages'], ['5', 'Preliminary data', 'COMPLETE', 'ok', '5 figures attached'], ['6', 'Bibliography', 'AUTO · 184 refs', 'ok', 'pulled from library'], ['7', 'Budget · year-by-year', 'EDITING', 'accent', '1.4 of 2.4M'], ['8', 'Budget justification', 'PENDING', 'warn', '—'], ['9', 'Facilities & resources', 'COMPLETE', 'ok', 'auto from UCSF'], ['10', 'Equipment', 'COMPLETE', 'ok', '14 items'], ['11', 'Biosketches', 'COMPLETE', 'ok', '3 of 3 signed'], ['12', 'Letters of support', 'PENDING', 'warn', '2 of 4 received'], ['13', 'Data & resource sharing plan', 'COMPLETE', 'ok', 'IPFS + Zenodo'], ['14', 'Vertebrate animals', 'COMPLETE', 'ok', 'IACUC #21408'], ].map(([n, t, st, tone, meta], i, arr) => (
{n} {t} {st} {meta} Edit
))}
AIM 1. Identify a selective astrocytic GAT-3 modulator with low neuronal-network impact. We will deploy lead H-3 (a β-amino linker analog of SNAP-5114) generated by the project's AI hypothesis agent (Pipeline §2)…

AIM 2. Characterise the impact of GAT-3 modulation on hippocampal LTP induction and maintenance, using paired-pulse, theta-burst and chemical-LTP paradigms, in mouse acute slice…

AIM 3. Translate to behavioural relevance via a Gad65-cre × GAT3-flox conditional model and operant memory tasks, with an automated home-cage phenotyping CRO partner (see Letters of Support).
{/* Right — budget + DAO mode */}
{[ ['Personnel', 0.54, '1,296'], ['Equipment', 0.12, '288'], ['Reagents · animals', 0.18, '432'], ['Compute · UB-Chain', 0.06, '144'], ['CRO · Charles River', 0.07, '168'], ['Other · IRB · indirect', 0.03, '72'], ].map(([k, v, n], i, arr) => (
{k} ${n}K
))} {[ ['NIH eRA Commons', 'PRIMARY', 'accent'], ['NSF (parallel)', 'OPTIONAL', 'default'], ['VitaDAO · pitch', 'COMPLEMENT', 'ok'], ['Molecule · IP-NFT', 'COMPLEMENT', 'ok'], ].map((d, i) => (
{d[0]} {d[1]}
))} Pre-flight check
{[ ['Page limits', 'ok'], ['Required figures (5/5)', 'ok'], ['Biosketches signed', 'ok'], ['Letters of support (2/4)', 'warn'], ['Budget caps · personnel', 'warn'], ['Animal protocols', 'ok'], ['Data sharing plan', 'ok'], ].map((v, i) => (
{v[0]} {v[1] === 'ok' ? '✓' : '!'}
))}
); } window.ProjectPipelineDapp = ProjectPipelineDapp; window.PipelineHypothesisDapp = PipelineHypothesisDapp; window.PipelineGrantDapp = PipelineGrantDapp;