An opt-in parody marketplace where people choose what to publish, data brokers buy consented data, and the people who made it get paid.
- Production: doxxme.net
- Beta: beta.doxxme.net
- Anonymous visitors can explore the realtime globe and browse public profiles for free.
- Demo bots make the directory feel alive and are clearly labeled as fictional.
- Signed-in users authenticate with Google through Clerk and receive a public profile and handle.
- Users can connect browser location and Spotify current playback from Settings.
- Google profile photos can be hidden in favor of the doxxme placeholder.
- Public profiles show only data supplied by those connections: live location, device type, Spotify playback, and an illustrative monthly payout capped around $15.
- Real and demo profiles share the same layout, map treatment, navigation, sharing controls, and site styling.
- Location cards use OpenStreetMap tiles and link to their exact coordinates on OpenStreetMap.
- The app uses Convex for users, consent, public presence, provider connections, and realtime updates.
Discord, the browser extension, and the broker checkout interface are not part of the current product.
React + Vite + Clerk
├─ public globe and profile directory
├─ Google authentication and account controls
├─ browser geolocation
└─ Spotify OAuth and current playback
│
▼
Convex
├─ users and public profiles
├─ versioned consent and live presence
├─ Spotify connections and scheduled sync
└─ historical marketplace and payout records
The production runtime uses Convex. Mock adapters are retained for tests and fictional demo profiles.
Requirements: Node 20.19+ or 22.12+, pnpm 11, a Clerk application, and a Convex development deployment.
pnpm install --frozen-lockfile
cp .env.example .env.local
npx convex dev
pnpm devRun the frontend and Convex together with:
pnpm dev:allPublic browser variables belong in .env.local:
CONVEX_DEPLOYMENT=dev:your-deployment
VITE_CONVEX_URL=https://your-deployment.convex.cloud
VITE_CONVEX_SITE_URL=https://your-deployment.convex.site
VITE_CLERK_PUBLISHABLE_KEY=pk_test_...
VITE_SOLANA_RPC_URL=https://api.devnet.solana.comCreate a Clerk JWT template named convex, then configure the server-only Convex environment:
npx convex env set CLERK_JWT_ISSUER_DOMAIN https://your-instance.clerk.accounts.dev
npx convex env set APP_URL http://localhost:5173
npx convex env set SPOTIFY_CLIENT_ID ...
npx convex env set SPOTIFY_CLIENT_SECRET ...
npx convex env set SOLANA_RPC_URL https://api.devnet.solana.com
npx convex env set PLATFORM_TREASURY_WALLET YOUR_DEVNET_TREASURY_ADDRESS
npx convex env set ALLOW_DEV_MOCKS falseRegister the Spotify callback as:
https://your-deployment.convex.site/oauth/spotify/callback
Never place OAuth secrets, Clerk secrets, wallet keys, seed phrases, or private RPC credentials in a VITE_* variable or commit them.
- Location and Spotify are off until the user explicitly connects or enables them.
- Turning live sharing off removes current public presence.
- Exact location consent covers latitude and longitude.
- Spotify is current-state-only and is not marketplace eligible.
- Location history sales remain separate from live sharing and require their own acknowledgement.
- Paid, time-limited grants are not revoked retroactively when future sales are disabled.
pnpm lint
pnpm typecheck
pnpm test
pnpm buildVercel serves the single-page app routes through vercel.json. Convex functions are deployed separately with:
npx convex deploy