A fully on-chain tip jar cApp for Cookie Chain — the community-run SVM. Connect a wallet (Nightly supported, plus any Solana-standard injected wallet), send a COOK tip with the click of a button, and watch the Crumb Feed update straight from chain data.
Live app: https://aaron11998.github.io/cookie-crumbs/
Repo republished under
aaron11998— the originalaltaranexus-ship-itGitHub org was suspended 2026-09-24 (old links 404). Same code, same chain, same jar. Chain: Cookie Chain mainnet · RPChttps://rpc.cookiescan.io· Explorer cookiescan.io
- Wallet connection — Nightly first (per the bounty), with fallback discovery for Phantom/Solflare/Backpack-style injected providers via the Solana wallet standard.
- Transaction execution — tips are plain system-program transfers (SOL-style native COOK transfer). The connected wallet is fee payer; nothing is custodied, no backend exists.
- Transaction confirmation handling — blockhash is fetched up-front, the signature is confirmed via
confirmTransactionwith blockheight-based expiry and a 60s timeout, and on-chain errors are surfaced. - Error handling & feedback — human-readable errors for rejection / insufficient funds / wrong network / RPC hiccups, status banner at each stage (build → sign → broadcast → confirm), toasts + inline receipts with explorer links.
- App-specific data & activity — the Crumb Feed reads the jar's recent history via
getSignaturesForAddress→getTransaction(balance deltas, senders, timestamps), plus totals: crumb count, total COOK, unique tippers, last-24h volume and a 24-hour tips-per-hour chart. - Analytics — everything above is computed client-side from RPC data. No API keys, no database.
- Boosted tips (pay-for-prominence) — a tip of 5+ COOK is a 🚀 BOOST: it renders with a badge and is pinned to the top of the Crumb Feed above newer small tips. Verifiable on-chain from the same transfer the feed already reads — no backend, no trust. Boost bigger → get seen first.
- Referral split — share links carrying
?via=<address>route 30% of the protocol fee to the promoter. Growth rail: earn by distributing tip pages. - Tip splits (revenue sharing) — a tip jar that pays its collaborators. A tipper writes
split:<bps>:<recipient>as the tip message and the same transaction pays that recipient their share of the jar's proceeds — a plain system-program transfer, verifiable on-chain, no program and no escrow. A jar owner can register a default split once (0.001 COOK) so every future tip on that page splits automatically. The split comes out of the jar's cut, so the tipper's cost and the protocol fee are unchanged. - Tip goals — a page can show a live fundraising progress bar (2 COOK to set, updated on-chain; the goal ledger only counts tips sent after the goal was set).
All tips land in a plain wallet owned by nobody's app logic — a community pot:
5E9GChFUkhz3UvpRhN4aftKGYdtYPNK9uX1SARAvUZe8
View it on the explorer: https://cookiescan.io/address/5E9GChFUkhz3UvpRhN4aftKGYdtYPNK9uX1SARAvUZe8
Narrated video walkthrough (75s): https://aaron11998.github.io/cookie-crumbs/media/walkthrough.mp4 — also in the repo under media/walkthrough.mp4.
Cookie Chain has no faucet. Get COOK by bridging from Solana through the community multi-sig Hyperlane bridge: https://hyperlane.cookiescan.io (see the docs).
No build step, no dependencies — it's a static site:
git clone https://github.com/aaron11998/cookie-crumbs
cd cookie-crumbs
python3 -m http.server 8080
# open http://localhost:8080The only external runtime dep is @solana/web3.js loaded via CDN (unpkg IIFE build). Point your wallet (Nightly → network → Cookie Chain, RPC https://rpc.cookiescan.io) and you're live.
index.html markup — jar card, tip form, feed, how-it-works
styles.css cookie-themed dark UI (pure CSS, no framework)
app.js all logic:
· wallet discovery/connect (nightly.solana, window.solana, providers.solana)
· getLatestBlockhash → Transaction(SystemProgram.transfer) → sign → sendRawTransaction
· confirmTransaction({signature, blockhash, lastValidBlockHeight}, 'confirmed')
· feed: getSignaturesForAddress → getTransaction → pre/post balance deltas
· stats + canvas chart, 30s auto-refresh
Design choice: the Memo program is not deployed on Cookie Chain, so tip messages are kept client-side (attached to the tip in the browser) while the money is 100% on-chain. Everything the chain can prove, the app shows; nothing is faked.
- Built on Cookie Chain (SVM) — mainnet RPC, native COOK transfers
- Wallet connection (Nightly required ✓, standard wallets ✓)
- Transaction execution + confirmation handling + error handling
- App-specific data/activity view (feed) + analytics (stats + chart)
- Live, publicly accessible URL (GitHub Pages)
- Open-source repo (MIT)
- README with setup instructions (this file)
- X thread demo + share in Cookie Chain Telegram (owner step)
MIT — do whatever, just be excellent to each other. 🍪
Mapping of the listing's required features to what ships here:
| Listing requirement | Cookie Crumbs |
|---|---|
| Connect a wallet (Nightly required) | Nightly-first provider discovery + wallet-standard fallback (Phantom/Solflare/Backpack-style) |
| Display connected wallet address | Shortened address + wallet label in the connect button, full address in receipts |
| Interact with on-chain functionality | Native COOK system-program transfers to the community jar (or any ?jar= page) |
| Execute transactions + real-time feedback | Stage banner: build -> sign -> broadcast -> confirm, toasts at each step |
| Transaction confirmation handling | Pre-fetched blockhash, blockheight-based expiry + 60s timeout via confirmTransaction |
| Error handling and user feedback | Human-readable errors: rejection / insufficient funds / wrong network / RPC failure |
| App-specific data and activity | Crumb Feed: per-tip history (sender, amount, message, time) read from chain |
| Analytics / dashboard | Totals (tips, COOK volume, unique tippers, 24h volume) + 24-hour tips-per-hour chart |
| CookieScan integration | Deep links to cookiescan.io for every tip, the jar, and fee transactions |
| Deployed and publicly accessible | https://aaron11998.github.io/cookie-crumbs/ (GitHub Pages) |
| Open source + README | This repo; setup in Running locally above |
Application addresses (Cookie Chain mainnet, RPC https://rpc.cookiescan.io):
- Community tip jar (tip destination): 5E9GChFUkhz3UvpRhN4aftKGYdtYPNK9uX1SARAvUZe8
- Protocol fee treasury (0.75% of each tip): 2BmqohyRU8mprrRXtUokCBje52MBKFd3FWNCcsPLJf3k
Both are plain system accounts - the app is 100% client-side and custodies nothing. Get COOK for your first tip via the community bridge: https://hyperlane.cookiescan.io
Put a Tip 🍪 button on any page with one script tag:
<script src="https://aaron11998.github.io/cookie-crumbs/embed.js"></script>- Add
data-jar="<base58 address>"to collect tips into your jar (omit it to tip the community jar). - Add
data-via="<base58 address>"to credit a promoter's referral fee share on tips from your widget. - Add
data-label="<text>"to customize the button (default Tip 🍪; trimmed, max 32 chars). - The button opens the full tip page in an on-site popup; tips are plain on-chain COOK transfers signed by the tipper's own wallet. Your site never touches keys, RPC, or transaction bytes.
- Deep link: load your page with
?cookie_crumbs=popupto open the tip flow immediately. - JS API:
CookieCrumbs.open()/CookieCrumbs.close()for custom triggers.
Every tip through an embedded widget carries the same 0.75% protocol fee as the hosted app — embedding is the platform's distribution rail.
The widget is deployed on every org-owned property — each one is a live distribution rail carrying the protocol fee:
| Site | Widget | Notes |
|---|---|---|
| Cookie Crumbs | the app itself | community jar, all 10 mechanisms |
| Lumenfall | "Tip the devs 🍪" (fixed bottom-left) | injected automatically by build_matrix.sh on every web export |
| Aeon Intelligence | "Tip the desk 🍪" | research-brief audience |
| K-Dense Science Lab | "Support open research 🍪" | storefront audience, promoter share routed to the protocol treasury |
Upgrade any widget to a premium embed and earn 50% of the protocol fee on every tip from your site (vs the standard 30% promoter share), plus tip analytics events.
-
Send 1 COOK (one-time per month) from your wallet to the protocol treasury
2BmqohyRU8mprrRXtUokCBje52MBKFd3FWNCcsPLJf3k— a plain transfer in Nightly/Phantom, memo optional. -
Add your attributes to the script tag:
<script src="https://aaron11998.github.io/cookie-crumbs/embed.js" data-jar="<your jar>" data-premium="true" data-wallet="<the wallet that paid>"></script>
-
That's it — verification is fully on-chain: the widget scans the treasury's recent transactions for a payment of ≥ 1 COOK from your wallet within the last 30 days. No account, no API key, no backend.
Why it recurs: verification covers a rolling 30-day window, so keep the 50% share flowing by topping up 1 COOK each month. The payment is the subscription.
Premium also unlocks analytics: the widget postMessages { type: "cookie-crumbs:tip:open" | "cookie-crumbs:tip:confirm" | "cookie-crumbs:tip:error", detail } events to your host page (listen for message events and filter on the type prefix). Non-premium embeds receive no events, and verification fails closed — if the on-chain check can't confirm your payment, the widget silently stays on the standard 30% share.
Personal jar pages can carry a fundraising target: a live progress bar fed by the same on-chain tips the feed already reads.
- Connect the owner wallet on your own tip page and use 🎯 Set a tip goal.
- Confirm the transaction: 2 COOK to the protocol treasury with the memo
cookie-crumbs:goal:<your-jar>:<goal-lamports>[:label]— the fee IS the goal-setting, verified straight from the ledger. - Every subsequent tip moves the bar. Set a new goal any time for another 2 COOK (newest goal memo wins).
Like everything else in Cookie Crumbs there is no backend: goals, progress, and updates are all read from the chain.
The community tip page sells its top banner slot as a 24-hour rental, settled entirely on-chain:
- Send a tip of 25+ COOK to the community jar with the message
sponsor:<your name>(the 📣 Sponsor 25 chip fills the amount and auto-prefixes the marker for you). - The newest qualifying transaction owns the banner at the top of the page for 24 hours — your label renders next to a "rented · Nh left" link pointing at the renting transaction on Cookiescan.
- Renewal is the revenue loop: when the slot expires the banner disappears until someone rents it again.
Like every other number in Cookie Crumbs, sponsorship is verified straight from the ledger (balance delta + SPL Memo) — there is no backend, no database, and nothing to trust but the chain. A sponsor tip is still a tip: the 0.75% protocol fee and any ?via= referral split apply exactly as usual.