// Dapp Marketplace — full-bleed overlay opened from the icon rail's "+" button. // Catalog of apps that extend the Personal Dapp (UBP). Apps fall into categories: // research, publishing, finance, infrastructure, identity, governance. const __MKT_CATALOG = [ // Featured / installed { id: 'labbook', name: 'Open Labbook', tagline: 'Git for science · live notebooks', cat: 'research', issuer: 'UB Core', icon: 'book', tis: 94.2, installs: '128k', price: 'Included', installed: true, featured: true, desc: 'Versioned, branchable lab notebooks with on-chain commit history. Multi-author, reproducible, every cell hashed.', perms: ['Read/write notebooks', 'Sign commits with UBID', 'Push to chain'], screens: 4 }, { id: 'publication', name: 'Publication', tagline: 'Submit · review · royalties', cat: 'publishing', issuer: 'UB Core', icon: 'doc', tis: 92.8, installs: '94k', price: 'Included', installed: true, featured: true, desc: 'End-to-end paper pipeline. SBT-gated peer review, automated royalty splits, OJN integration.', perms: ['Read drafts', 'Submit to journals', 'Distribute royalties'], screens: 6 }, { id: 'institution', name: 'Institution / Grant DAO', tagline: 'Funding · payroll · governance', cat: 'governance', issuer: 'UB Core', icon: 'bank', tis: 89.1, installs: '12k', price: 'Included', installed: true, featured: true, desc: 'Run a lab, department, or grant DAO on-chain. Milestone-gated payouts, transparent overhead, member SBTs.', perms: ['Hold institutional treasury', 'Issue member SBTs', 'Sign on milestones'], screens: 5 }, { id: 'compute', name: 'Compute Marketplace', tagline: 'Spot GPU · ZK proofs', cat: 'infrastructure', issuer: 'UB Core', icon: 'cpu', tis: 91.4, installs: '67k', price: 'Pay-as-you-go', installed: true, desc: 'Bid for academic compute on a live order book. NVIDIA H100 / A100, ZK-verifiable runs.', perms: ['Submit jobs', 'Spend UBR from wallet', 'Receive output to storage'], screens: 3 }, { id: 'storage', name: 'Storage / DePIN', tagline: 'IPFS · proof-of-storage', cat: 'infrastructure', issuer: 'UB Core', icon: 'storage', tis: 88.7, installs: '54k', price: 'Pay-as-you-go', installed: true, desc: 'Pin datasets across 142 nodes. Receipts stored on-chain. Host capacity to earn UBR.', perms: ['Pin/unpin objects', 'Verify receipts', 'Pledge capacity'], screens: 3 }, { id: 'launchpad', name: 'Patent Launchpad', tagline: 'Tokenize IP · raise · royalties', cat: 'finance', issuer: 'UB Core', icon: 'rocket', tis: 86.3, installs: '21k', price: '0.4% of raise', installed: true, desc: 'Tokenize a patent and offer fractional ownership. Linear vesting, on-chain royalty waterfalls.', perms: ['Issue patent tokens', 'Hold treasury in escrow', 'Distribute royalties'], screens: 4 }, // Available — not installed { id: 'reviewer', name: 'Reviewer Hub', tagline: 'Anonymous SBT-gated reviews', cat: 'publishing', issuer: 'OJN', icon: 'check', tis: 90.6, installs: '38k', price: 'Free', desc: 'Pseudonymous peer review with verified credentials. Earn TIS for accepted reviews.', perms: ['Sign reviews with SBT', 'Read embargoed drafts'], screens: 3 }, { id: 'preprint', name: 'arXiv Mirror', tagline: 'Sync preprints · two-way', cat: 'research', issuer: 'arXiv Foundation', icon: 'doc', tis: 87.0, installs: '102k', price: 'Free', desc: 'Two-way sync between arXiv/bioRxiv and your TRID. Auto-mirror new preprints, push UB-Chain hashes back to arXiv.', perms: ['Read your arXiv drafts', 'Push DOI receipts'], screens: 2 }, { id: 'dao-vote', name: 'DAO Voting', tagline: 'Quadratic · conviction · futarchy', cat: 'governance', issuer: 'UB Labs', icon: 'shield', tis: 84.5, installs: '17k', price: 'Free', desc: 'Pluggable governance: quadratic, conviction, or futarchy. SBT-weighted ballots.', perms: ['Cast votes', 'Read DAO proposals'], screens: 3 }, { id: 'ai-twin', name: 'Research AI Twin', tagline: 'Personal model · cited from your work', cat: 'research', issuer: 'Constellation Labs', icon: 'flask', tis: 78.2, installs: '8.4k', price: '120 UBR/mo', desc: 'Fine-tune a private model on your published work, drafts and reviews. Every output is cited.', perms: ['Read all your papers', 'Read your drafts', 'Spend compute budget'], screens: 4 }, { id: 'bounties', name: 'Research Bounties', tagline: 'Open problems · paid', cat: 'finance', issuer: 'UB Core', icon: 'plus', tis: 82.9, installs: '14k', price: 'Free', desc: 'Post or claim research bounties. Reproducibility, replication studies, code translations.', perms: ['Post bounties', 'Hold escrow', 'Claim payouts'], screens: 3 }, { id: 'sloan', name: 'Sloan Foundation', tagline: 'Apply · report · disburse', cat: 'finance', issuer: 'Sloan Foundation', icon: 'bank', tis: 91.0, installs: '2.1k', price: 'Free', verified: true, desc: 'Direct integration with Sloan grant programs. Apply, submit milestones, receive disbursements.', perms: ['Read grant docs', 'Submit reports', 'Receive UBR/USDC'], screens: 3 }, { id: 'orcid', name: 'ORCID Bridge', tagline: 'Federate identity', cat: 'identity', issuer: 'ORCID', icon: 'user', tis: 95.4, installs: '187k', price: 'Free', verified: true, desc: 'Bidirectional sync between your TRID and ORCID. One canonical identity across web2 and web3.', perms: ['Read ORCID profile', 'Update affiliations', 'Sign with ORCID'], screens: 2 }, { id: 'figma', name: 'Figure Studio', tagline: 'Reproducible figures · LaTeX export', cat: 'research', issuer: 'Plotly', icon: 'doc', tis: 79.4, installs: '23k', price: '40 UBR/mo', desc: 'Build publication-quality figures from your notebook outputs. One-click LaTeX/SVG export.', perms: ['Read notebook outputs', 'Write to drafts'], screens: 3 }, { id: 'replication', name: 'Replication Vault', tagline: 'Reproducibility tokens · rewards', cat: 'research', issuer: 'UB Core', icon: 'shield', tis: 83.7, installs: '11k', price: 'Free', desc: 'Stake on whether a result will replicate. Earn when correct. Funds reproducibility studies.', perms: ['Stake UBR', 'Read replication results'], screens: 3 }, { id: 'ipfs-pin', name: 'Long-Term Archive', tagline: 'Cold storage · 100yr SLA', cat: 'infrastructure', issuer: 'Filecoin Foundation', icon: 'storage', tis: 89.9, installs: '6.7k', price: '12 UBR/TB·yr', verified: true, desc: 'Cold-archive your raw data with a 100-year SLA. Tape + IPFS dual replication.', perms: ['Read storage', 'Manage archive policies'], screens: 2 }, { id: 'editor', name: 'Editor Workbench', tagline: 'Journal editor toolkit', cat: 'publishing', issuer: 'OJN', icon: 'doc', tis: 87.6, installs: '4.2k', price: 'Free', desc: 'For journal editors: assignment, conflicts, review aggregation, decision letters.', perms: ['Read submissions', 'Assign reviewers', 'Issue decisions'], screens: 5 }, { id: 'ubid-keys', name: 'Hardware Keys', tagline: 'YubiKey · Ledger', cat: 'identity', issuer: 'Yubico', icon: 'shield', tis: 96.2, installs: '44k', price: 'Free', verified: true, desc: 'Sign UBID transactions with a hardware key. Recovery via social custodians.', perms: ['Sign with hardware key'], screens: 2 }, ]; const __MKT_CATS = [ { id: 'all', label: 'All apps', count: 18 }, { id: 'featured', label: 'Featured', count: 6 }, { id: 'installed', label: 'Installed', count: 6 }, { id: 'research', label: 'Research tools', count: 5 }, { id: 'publishing', label: 'Publishing', count: 3 }, { id: 'finance', label: 'Finance & funding', count: 3 }, { id: 'infrastructure', label: 'Infrastructure', count: 3 }, { id: 'governance', label: 'Governance', count: 2 }, { id: 'identity', label: 'Identity & keys', count: 2 }, ]; function MktCatRow({ row, active, onPick }) { return ( ); } function MktAppCard({ app, selected, onPick }) { const tone = app.installed ? UB.ok : UB.accent; return ( ); } function MktDetail({ app, onClose, onInstall }) { if (!app) return null; return (
{/* hero */}
{Icon[app.icon] || Icon.cube}
{app.name} {app.verified && {Icon.check}}
by {app.issuer}
{app.cat.toUpperCase()} {app.installed && INSTALLED}
{app.desc}
{app.installed ? <> Open Settings : <> onInstall && onInstall(app)}> {app.price === 'Free' || app.price === 'Included' ? 'Install' : `Install · ${app.price}`} Docs }
{/* stats */}
{[['TIS', app.tis], ['Installs', app.installs], ['Screens', app.screens]].map(([k, v], i) => (
{k}
{v}
))}
{/* screenshots placeholder */}
Screens · {app.screens}
{Array.from({ length: Math.min(4, app.screens) }).map((_, i) => (
{String(i + 1).padStart(2, '0')}
))}
{/* permissions */}
Permissions requested
{app.perms.map((p, i) => (
{Icon.check} {p}
))}
{/* manifest */}
Manifest
id · app.unblock.{app.id}
v · 0.4.{Math.floor(app.tis / 10)}
chain · UB-Chain · audited
license · Apache-2.0
); } function DappMarketplace({ onClose }) { const [cat, setCat] = React.useState('featured'); const [sel, setSel] = React.useState('labbook'); const [q, setQ] = React.useState(''); const filtered = __MKT_CATALOG.filter(a => { if (cat === 'all') return true; if (cat === 'featured') return a.featured; if (cat === 'installed') return a.installed; return a.cat === cat; }).filter(a => !q || a.name.toLowerCase().includes(q.toLowerCase()) || a.tagline.toLowerCase().includes(q.toLowerCase()) || a.desc.toLowerCase().includes(q.toLowerCase()) ); const selectedApp = __MKT_CATALOG.find(a => a.id === sel) || filtered[0]; return (
{ if (e.target === e.currentTarget) onClose(); }}>
{/* header */}
{Icon.store} Dapp Marketplace UB-CHAIN · 247 APPS · ALL AUDITED
{Icon.search} setQ(e.target.value)} placeholder="Search apps · category · issuer" style={{ appearance: 'none', border: 0, outline: 0, background: 'transparent', fontFamily: UB.mono, fontSize: 11, color: UB.ink, flex: 1, minWidth: 0 }} />
Close
{/* body */}
{/* category rail */}
Browse
{__MKT_CATS.slice(0, 3).map(c => )}
Categories
{__MKT_CATS.slice(3).map(c => )}
Publish your own
Build a dapp that extends UBP. Submit a manifest, pass audit, list here.
Developer portal
{/* app grid */}
{(__MKT_CATS.find(c => c.id === cat) || {}).label} {filtered.length} APPS Sort: TIS ↓
{filtered.map(a => )}
{filtered.length === 0 &&
No apps match. Try a different category.
}
{/* detail */}
{/* footer */}
ALL DAPPS AUDITED · BUG BOUNTY 50K UBR · NO TRACKING · EVERY PERMISSION ON-CHAIN v0.4.2-rc1
); } window.DappMarketplace = DappMarketplace;