Meridian monitors blockchain ecosystems around the clock. On-chain activity, developer commits, social signals, token deployments. It surfaces early-stage projects and delivers investment-ready deal memos.
$19.7 billion in crypto VC last year. Early-stage deal count is falling. The best projects get funded through referrals and conference hallways. VCs are spending more to find fewer quality deals at pre-seed and seed, where on-chain signal matters most.
The tools VCs already use are powerful — but none of them proactively find deals or write memos. Meridian does both, autonomously.
| Meridian | Nansen | Messari | Dune | Affinity | |
|---|---|---|---|---|---|
| Autonomous Deal Discovery | ✓ | — | — | — | — |
| AI-Generated Deal Memos | ✓ | — | — | — | — |
| On-Chain Traction Signals | ✓ | Partial | — | Manual | — |
| Multi-Chain incl. TON | ✓ | ✓ | — | ✓ | — |
| No SQL Required | ✓ | ✓ | ✓ | — | ✓ |
Pay for intelligence, not seat licenses. Early access pricing locked in for life.
We're in private beta. Pricing is indicative — early access partners help shape the final tiers.
Meridian is building the intelligence layer crypto VCs have been missing. Not another dashboard. Not another analytics tool. An autonomous analyst that never stops looking.
Join funds already on the waitlist. We're onboarding teams by thesis fit. No dashboards, no hype — just deal flow that arrives before it's obvious.
$1')
.replace(/^- (.+)$/gm, '')
.replace(/\n/g, '
');
// Wrap in paragraph if needed
if (!html.startsWith('<')) html = '
' + html + '
'; return html; } function getScoreClass(score) { if (score >= 7) return 'high'; if (score >= 4) return 'mid'; return 'low'; } async function generateMemo() { const input = document.getElementById('memo-input').value.trim(); if (!input) { document.getElementById('memo-input').focus(); return; } if (input.length > 200) { showError('Input too long. Please enter a project name or address under 200 characters.'); return; } const btn = document.getElementById('memo-generate'); btn.disabled = true; btn.textContent = 'Generating...'; hideError(); document.getElementById('memo-result').className = 'memo-result'; showLoading(true); try { const res = await fetch(API_BASE, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ identifier: input }), }); const data = await res.json(); showLoading(false); if (!data.success) { showError(data.error || 'Failed to generate memo'); return; } const memo = data.memo; // Show result document.getElementById('result-name').textContent = memo.projectName; document.getElementById('result-chain').textContent = memo.chain || 'multi-chain'; document.getElementById('result-chain').style.display = memo.chain ? 'inline' : 'none'; const scoreBadge = document.getElementById('result-score'); scoreBadge.textContent = memo.signalScore + '/10'; scoreBadge.className = 'memo-score-badge ' + getScoreClass(memo.signalScore); document.getElementById('result-markdown').innerHTML = renderMarkdown(memo.markdown); document.getElementById('memo-result').className = 'memo-result active'; // Reload recent memos loadRecentMemos(); } catch (err) { showLoading(false); showError('Network error. Please try again.'); console.error(err); } finally { btn.disabled = false; btn.textContent = 'Generate Memo'; } } async function loadRecentMemos() { await loadShowcaseMemos(); } let _showcaseSeeded = false; let _showcasePollTimer = null; async function loadShowcaseMemos() { const grid = document.getElementById('recent-memos-grid'); try { const res = await fetch(API_BASE + '/showcase?limit=6'); const data = await res.json(); if (!data.success) { // Keep skeletons visible on error — don't hide the section return; } const memos = data.memos || []; if (memos.length > 0) { // Render real memo cards with TL;DR grid.innerHTML = memos.map(m => { const scoreClass = getScoreClass(m.signalScore); const date = new Date(m.createdAt).toLocaleDateString('en-US', { month: 'short', day: 'numeric' }); const tldr = m.tldr ? `