Daily rebalancing live on Solana

Index funds for
Solana memecoins

Pick a basket, set a weighting rule, deposit SOL. Pump Index sizes every buy, then rebalances back to target every day — trimming winners, topping up the rest.

Dry-run mode is on by default. Your keys never touch the browser.

Pump Blue Chips · market cap · cap 30%

10.482 SOL

Unrealised P&L

+0.482 SOL · +4.82%

PUMP30.00%3.000 SOL+7.4%
FARTCOIN18.00%1.800 SOL+2.1%
PNUT14.00%1.400 SOL-1.8%
BILLY12.00%1.200 SOL+11.9%

Curated baskets

Four indexes ship with the app

Or build your own from any Solana token — up to 50 per index, with the same weighting engine and daily rebalancing.

Four building blocks

Every decision is a rule, not a judgement call

The index

A named list of token mints. Four curated baskets, or build your own from any Solana token — up to 50.

Blue Chips · AI Agents · Zoo · Degen Small Caps

The weighting rule

Market cap, √ market cap, equal weight, or custom percentages you type yourself.

40 / 20 / 20 / 10 / 5 / 5

The max-weight cap

Stops one token swallowing the index. PUMP would be ~65% of Blue Chips; the cap clips it to 30% and spreads the excess.

Default 30% · ignored for custom weights

The band, scaled to target

A band is a share of the target, not a flat number, so a 20% position and a 5% position trigger on the same relative move. Breaches trade back to the band edge, not the target — less turnover, no oscillation around the trigger.

Default 40% of target · floor 3 points · edge trades on

The cycle

From price feed to signed swap

01

Fetch live prices

All pools per token from DexScreener, batched 30 mints per request.

02

Keep only trusted quotes

SOL, USDC and USDT-quoted pools only. Exotic quote pools derive price through another token — that chain breaks.

03

Take the median

Across ~23 trusted PUMP pools all near $0.00181, one 5,000× outlier can't move the answer.

04

Size the orders

Weights are capped, normalised to 100%, converted to SOL, and dust below 0.02 SOL is re-spread.

05

Rebalance daily

A minute loop watches for UTC day rollover. Overweight sells first — the sells fund the buys.

06

Book the P&L

Cost basis is retired pro-rata per token, so realised profit stays correct after a full exit.

The rebalance queue

Sells before buys, because the sells fund the buys

A doubled PNUT position went from 20% to 29% of the basket, past its 8-point band. It's trimmed back to the band edge at 28%, not all the way to 20% — and the proceeds fund the buys. Every leg is quoted live before you tick it, and legs that cost more than the ceiling can't be ticked at all.

  • Plans are marked consumed before the first swap goes out — a crash can't replay the queue.
  • One execution per index at a time; concurrent attempts are rejected.
  • Every order's outcome is recorded before anything else can throw.
Order queue · Pump ZooNETS TO 0.0000 SOL
SELL

PNUT

overweight 8.9%

0.4244 SOL
BUY

FARTCOIN

underweight 4.0%

0.1918 SOL
BUY

BILLY

underweight 3.0%

0.1414 SOL
BUY

MICHI

underweight 1.9%

0.0912 SOL
4 orders · min trade 0.02 SOLOpen all in Jupiter

Phantom mode

Connect Phantom, swap in one click.

Each order is built as a real Jupiter swap, signed in Phantom and confirmed on-chain. Sells run before buys, slippage is your setting, and every confirmed swap books itself into your holdings and cost basis.

Manual mode

No wallet connected.

Every order becomes a prefilled Jupiter link. Copy the amount, swap wherever you like, tick it off, press Apply. Your keys never leave your wallet and the app can't move funds on its own.

Cost gate

On by every queue.

Check live costs pulls a fresh Jupiter quote per leg. Anything over your impact ceiling can't be swapped or ticked — it waits for the next cycle.

Self-hosted · no accounts

Run it on your own machine, with your own keys

React and Vite on the front, a small Express server that owns all state and does all the maths. The order queue is built server-side — the client can only flip a filled flag.

36

tests covering bands, orders and cost basis

1

JSON state file, written atomically

60s

scheduler loop watching for UTC rollover

Questions

Before you deposit

How is P&L calculated?+

Per token, not per portfolio. Sell a quarter of a 10 SOL position for 3 SOL and a quarter of the book cost — 2.5 SOL — is retired, leaving 7.5 SOL of basis and banking +0.5 SOL realised. Realised P&L stays on screen after a full exit, which is exactly when it matters.

Can two indexes claim the same tokens?+

No. Curated baskets deliberately overlap — BILLY and MICHI sit in two, ZEREBRO and PIPPIN in two others. One wallet backs all of them, so a shared balance is split proportionally across every index claiming it instead of being double-counted.

What if a token can't be priced?+

It's retried against its full pool list. If it still has no SOL, USDC or USDT-quoted pool, it is dropped rather than priced on unverifiable data, and the UI tells you it was excluded.

How do I build my own index?+

One search box handles a name or ticker (fuzzy search), a single contract address (exact match), or many addresses pasted at once. Every result shows the truncated mint and its DEX, because copycats with inflated stats rank above the real token.

How is the API secured?+

It binds to localhost by default and refuses to start when exposed without a 16+ character access key. Every route needs a bearer token compared in constant time, only allow-listed origins may call it, and the wallet key lives in a .env file that never reaches the browser.

What does it deliberately not do?+

It doesn't pick tokens for you, doesn't model slippage or fees in its estimates, and doesn't protect you from the asset class. It's a calculator and an execution queue — not advice.