Paid pings that get answered. A creator-paid inbox on Solana where x402 (HTTP 402) enforces pay‑per‑message delivery and Solana Pay settles USDC with a public on‑chain receipt.
Live: https://pingx402.vercel.app/
Demo video: https://pingx402.vercel.app/demo-video
GitHub: https://github.com/syntaxsurge/ping402
ping402 turns “send a message” into a single, verifiable action:
pay → deliver → triage
Creators publish a public inbox at /u/[handle] with tiered urgency (Standard / Priority / VIP).
Senders pay via Solana Pay, get a public receipt, and the creator sees a clean, prioritized inbox.
Creators, founders, support teams, and on-call engineers get flooded with low-signal inbound. ping402 flips the incentive:
- If you want priority attention, you pay.
- If you pay, your ping is delivered (provable on-chain).
- If you don’t pay, the endpoint stays behind HTTP 402.
This creates a simple, user-friendly “market for urgency” that’s easy to understand, easy to verify, and hard to spam.
- Standard —
$0.01 - Priority —
$0.05 - VIP —
$0.25
Tiers are enforced by the x402 paywall and reflected in the Solana Pay checkout (asset, amount, pay-to).
ping402 is built to be eligible for both tracks:
- Clear audience + problem: creators, founders, and teams overwhelmed by low-signal inbound.
- Great UX: search handle → pick tier → pay → receipt → inbox triage (no accounts/passwords).
- Solana-native advantage: fast settlement + verifiable receipts on-chain.
- Practical consumer utility: a simple market for attention and response urgency.
- x402 is the enforcement layer: delivery is gated by HTTP
402 Payment Required(not an add-on). - Solana is the proof + settlement layer: payment occurs on Solana and is verifiable via the receipt.
- API-first: the paywalled endpoint is usable by web UIs, scripts, and agents that can speak x402.
- Discovery support: the app exposes x402 discovery resources for testing and integration.
- Claim a handle:
/owner-signin(connect wallet + sign message). - Open your public inbox:
/u/[handle]. - Choose a tier and pay via Solana Pay (connected wallet or QR).
- After payment, the profile page shows a receipt link (
/r/[messageId]) and the ping appears in/inbox.
Note: payments use USDC on the configured network (X402_NETWORK); you’ll also need SOL for fees. The checkout UI shows the exact mint, amount, and recipient.
- Connect a Solana wallet.
- Claim a handle by signing a message (no SOL transfer):
/owner-signin. - Share your public inbox:
/u/[handle]. - Triage paid pings in
/inboxand track revenue + status counts in/dashboard.
- Search a creator handle:
/ping(or open/u/[handle]directly). - Choose a tier (Standard / Priority / VIP).
- Compose a ping and pay via Solana Pay (connected wallet or QR).
- Receive a public receipt:
/r/[messageId]with the payment transaction.
ping402 is intentionally designed so removing either x402 or Solana breaks the core promise.
- Paid delivery is enforced by an HTTP 402-protected route:
POST /api/ping/send?tier=[tier]
- The server declares payment requirements (scheme, network, amount, pay-to). The request succeeds only after the client retries with proof in
PAYMENT-SIGNATURE. - x402 discovery is exposed via:
GET /api/x402/discovery/resources
- Payments settle on Solana using the x402 Exact SVM scheme (USDC stablecoin by default).
- The UI uses Solana Pay so senders can pay via a connected wallet or QR code.
- Successful pings produce a public receipt page:
GET /r/[messageId]
- Next.js 15 (App Router) + TypeScript (strict)
- Convex (realtime data + mutations/queries)
- Tailwind CSS v4 + shadcn/ui
- Solana Wallet Adapter + Solana Pay
- x402 v2 (HTTP 402, Exact SVM scheme, discovery extensions)
GET /— marketing landing page (includes the embedded demo video)GET /how-it-works— redirects to/#how-it-worksGET /fund— redirects to/#fundingGET /demo-video— redirects to the configured demo video URL (DEMO_VIDEO_URL)GET /pitch-deck— redirects to the configured pitch deck URL (PITCH_DECK_URL, only when set)GET /ping— handle search + onboarding entrypointGET /u/[handle]— public inbox profile pageGET /ping/[tier]— compose page with in-app Solana Pay checkoutGET /r/[messageId]— public receipt page (payment tx link)GET /owner-signin— creator handle claim/sign-in (Solana message signature)GET /dashboard— creator dashboard (requires creator session)GET /inbox— creator inbox (requires creator session)GET /inbox/[messageId]— message detail + status actions (requires creator session)
POST /api/ping/send?tier=[tier]— x402-paywalled ping delivery endpointPOST /api/solana-pay/ping-intents— create a Solana Pay checkout intent for a ping draftGET /api/solana-pay/ping-intents/[intentId]— poll + confirm Solana Pay payment for an intentPOST /api/solana-pay/ping-intents/[intentId]/consume— consume an intent (creates the message)GET /api/handles/lookup?handle=[handle]— handle availability lookup (exact match)GET /api/handles/search?query=[query]— handle search + suggestionsGET /api/profiles/by-owner-wallet?walletPubkey=[walletPubkey]— resolve wallet pubkey → claimed handle (if any)POST /api/auth/nonce— issue one-time sign-in noncePOST /api/auth/verify— verify signature, claim handle, set creator session cookiePOST /api/auth/signout— clear creator session cookieGET /api/x402/discovery/resources— facilitator discovery proxy (HTTP resources)GET /api/health— health check JSON
- Node.js 18+
- pnpm
- A Solana wallet (Phantom recommended)
pnpm installCopy the template and fill what’s required:
cp .env.example .env.localRequired
PING402_JWT_SECRET— 32+ chars, signs the creator session cookie.
Generated by Convex when you run dev
NEXT_PUBLIC_CONVEX_URLCONVEX_DEPLOYMENT
Common optional
NEXT_PUBLIC_SITE_URL— absolute URLs for metadata routes (or rely onVERCEL_URL)X402_NETWORK— devnet:solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1/ mainnet:solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdpX402_FACILITATOR_URL— defaults tohttps://x402.org/facilitatorDEMO_VIDEO_URL— powers the homepage embed and/demo-videoPITCH_DECK_URL— optional redirect target for/pitch-deck(only enabled when set)
Single command (starts Next.js + Convex):
pnpm devOpen:
http://localhost:3000— landinghttp://localhost:3000/ping— find a creator / start sendinghttp://localhost:3000/owner-signin— creator sign-in / claim handlehttp://localhost:3000/inbox— creator inboxhttp://localhost:3000/r/[messageId]— public receipt
pnpm convex:reset truncates all Convex tables for the current deployment.
Set CONVEX_RESET_TOKEN in .env.local before running it.
- Import this repo into Vercel.
- Set environment variables in Project Settings:
NEXT_PUBLIC_CONVEX_URLCONVEX_DEPLOYMENTPING402_JWT_SECRETDEMO_VIDEO_URL(recommended)PITCH_DECK_URL(optional)NEXT_PUBLIC_SITE_URL(optional; or rely onVERCEL_URL)
- Deploy.
- x402: https://www.x402.org/
- Coinbase x402 docs: https://docs.cdp.coinbase.com/x402/welcome
- Solana Pay: https://docs.solanapay.com/
