Token Unlock Price Impact Dashboard Development
Token unlock—one of the most predictable price catalysts in crypto. Scheduled vesting cliffs are public on-chain or via project documentation, but aggregating this data and showing it in context of market cap, liquidity, and historical patterns—non-trivial. That's what makes unlock dashboard valuable.
Token Unlock Event Sources
On-Chain Vesting Contracts
Many projects deploy standard vesting contracts—read directly:
import { publicClient } from './client'
import { parseAbi } from 'viem'
const vestingAbi = parseAbi([
'function vestingSchedules(address beneficiary) view returns (uint256 start, uint256 cliff, uint256 duration, uint256 amountTotal, uint256 released)',
'function VestingScheduleCreated(address indexed beneficiary, uint256 amount) event',
])
// All beneficiaries from events
const events = await publicClient.getLogs({
address: vestingContractAddress,
event: parseAbi(['event VestingScheduleCreated(address indexed beneficiary, uint256 amount)'])[0],
fromBlock: deployBlock,
toBlock: 'latest',
})
Popular contracts: OpenZeppelin VestingWallet, Sablier v2 (streaming vesting), TokenVesting from various auditors. Each has its own ABI.
Sablier v2 deserves special attention—protocol-level streaming where unlock happens continuously, not in cliffs. For dashboard calculate unlocked amount at time T via streamedAmountOf(streamId).
Off-Chain Sources
Not all projects use on-chain vesting. Many hold tokens on multisig and transfer manually per schedule. Data sources:
- TokenUnlocks.app API—aggregates data on major projects
- Messari—historical unlock events
- Project vesting documentation—parse public docs (Notion, Gitbook)
- CoinGecko—tokenomics data for some projects
For MVP: combine on-chain parsing + manual entry for major projects + integration with one-two APIs.
Calculating Price Impact
Supply Shock Ratio
Basic metric: how many tokens unlock relative to current circulating supply and 30-day volume:
interface UnlockEvent {
date: Date
amount: bigint // in token units
category: 'team' | 'investors' | 'ecosystem' | 'public'
vestingContract: string
}
function calculatePriceImpact(unlock: UnlockEvent, marketData: MarketData) {
const unlockUsd = Number(formatUnits(unlock.amount, 18)) * marketData.tokenPrice
// % of circulating supply
const supplyImpact = unlockUsd / marketData.marketCap * 100
// Ratio to average daily volume
const volumeRatio = unlockUsd / (marketData.volume30d / 30)
// Historical pattern: investors/team sell more aggressively
const sellPressureMultiplier = {
team: 0.3, // ~30% usually sold
investors: 0.5, // ~50% sold (especially early rounds)
ecosystem: 0.1, // grants rarely sold immediately
public: 0.15,
}[unlock.category]
const estimatedSellPressure = unlockUsd * sellPressureMultiplier
return {
supplyImpactPercent: supplyImpact,
volumeRatio,
estimatedSellPressureUsd: estimatedSellPressure,
severity: volumeRatio > 1 ? 'high' : volumeRatio > 0.3 ? 'medium' : 'low',
}
}
Historical Backtesting
For each past unlock event calculate actual price change over [-7d, 0, +1d, +7d, +30d]:
-- Example query for historical analysis
SELECT
u.unlock_date,
u.amount_usd,
u.category,
p.price_7d_before,
p.price_at_unlock,
p.price_7d_after,
(p.price_7d_after - p.price_at_unlock) / p.price_at_unlock * 100 as pct_change_7d
FROM unlock_events u
JOIN price_snapshots p ON p.token_id = u.token_id
AND p.date BETWEEN u.unlock_date - interval '7 days'
AND u.unlock_date + interval '30 days'
WHERE u.token_id = $1
ORDER BY u.unlock_date DESC
This analysis shows historical correlation between unlock size and price movement for specific token—more valuable than market-wide averages.
Visualization
Timeline Chart
Primary component: horizontal timeline with unlock events. TradingView Lightweight Charts with custom markers:
import { createChart, IChartApi } from 'lightweight-charts'
// Price chart + unlock markers
const markers = unlockEvents.map(event => ({
time: event.date.getTime() / 1000,
position: 'belowBar' as const,
color: event.severity === 'high' ? '#ef4444' : '#f59e0b',
shape: 'arrowUp' as const,
text: `$${(event.amountUsd / 1e6).toFixed(1)}M unlock`,
size: Math.min(event.severity === 'high' ? 2 : 1, 3),
}))
Unlock Calendar
Calendar view of upcoming events—shadcn/ui Calendar with custom day renderer showing unlock sum per day.
Supply Breakdown
Pie/donut chart of current supply distribution by category (locked/unlocked/circulating) + stacked bar forecasting unlock by months.
Stack and Data
| Component | Technology |
|---|---|
| Price data | CoinGecko API / CryptoCompare |
| On-chain reads | viem + Alchemy/QuickNode |
| Historical data | PostgreSQL + TimescaleDB |
| Charts | TradingView Lightweight Charts |
| Frontend | Next.js + Tailwind |
| Cron jobs | Vercel Cron / Railway |
Single-token dashboard doable in 3 days. Multi-token platform with historical analysis, on-chain parsing of multiple vesting standards, and auto-updating—4–5 days.







