Docs

Run your own private ownership layer.

WingsyPrivate is a Next.js application with PostgreSQL. Deploy it to Vercel, point it at a database, add the provider keys you want, and open the vault.

Quick start

  • Copy .env.example to .env.local and set DATABASE_URL, AUTH_SECRET and NEXT_PUBLIC_APP_URL.
  • npm install then npm run db:push to create the schema.
  • npm run dev and open http://localhost:9600.

Robinhood Chain (featured, key-free)

Chain id 4663. ETH balances come from the public RPC; every Stock Token in the official registry (api.robinhood.com/rhj/assets) is checked with one Multicall3 balanceOf round-trip and quoted from /rhj/prices/{symbol}. Other tokens, NFTs and transfers are read from Robinhood Blockscout on a best-effort basis. Locally, if your ISP hijacks robinhood.com, set RESOLVE_OVERRIDE to pin the hosts.

External APIs

KeyProviderNeeded for
ROBINHOOD_RPC_URLRobinhood ChainOptional RPC override; default public endpoint, no key
ALCHEMY_API_KEYAlchemyERC-20 / NFT discovery, transfers, NFT floors (EVM)
MORALIS_API_KEYMoralisAlternative EVM discovery and history
HELIUS_API_KEYHeliusSolana SPL / NFT metadata (DAS) and decoded history
COINGECKO_API_KEYCoinGeckoOptional; raises rate limits for prices
POKEMON_TCG_API_KEYPokémon TCG APIOptional; raises rate limits for card lookups
AUTH_RESEND_KEYResendEmail magic-link sign-in
NEXT_PUBLIC_WALLETCONNECT_PROJECT_IDReown / WalletConnectMobile wallet pairing

Architecture

  • src/lib/chains/* — one adapter per chain implementing ChainAdapter (discover, activity, tokenInfo, balanceOf). Register new chains in src/lib/chains/index.ts.
  • src/lib/sources — the source engine; every external value is stored as an AssetSource row with provider, timestamp and URL.
  • src/lib/valuation — typed valuations (market, floor, user, last sale, external).
  • src/lib/privacy — AES-256-GCM field encryption and HMAC blind indexes.
  • src/lib/collectibles — collectible database providers behind one interface.

Private API

All routes require a session and respond with { ok, data } or { ok:false, error }.

MethodRoutePurpose
POST/api/auth/wallet/nonceIssue a wallet sign-in challenge
GET/POST/api/walletsList / link wallets
POST/api/wallets/:id/syncRead-only on-chain discovery
GET/POST/api/assetsList assets / add a manual asset
GET/PATCH/DELETE/api/assets/:idAsset detail / edit private data / delete
POST/api/assets/:id/verifyRe-verify balance or ownership on-chain
POST/api/assets/tokenizedImport a tokenized asset by contract
GET/api/collectibles/searchSearch collectible catalogs
GET/api/portfolioPortfolio summary with valuation breakdown
POST/api/portfolio/revalueRefresh market valuations
GET/POST/api/snapshotsPrivate ownership snapshots
GET/api/search?q=Global vault search
GET/POST/api/watchlistWatchlist
GET/api/activityActivity feed with sources
GET/api/sourcesSource coverage across the vault