A price tracker built for Pokémon TCG collectors.
GrailPing is a small, focused tool: tell it which cards you're watching, set the prices you'd act on, and it sends you a Discord or email alert when the market crosses your line. No social feed, no forum, no portfolio gamification — just alerts that fire when they should.
What we collect
- Your name and email from Google or GitHub OAuth — used to sign you in and address alert emails.
- The cards and thresholds you create. These are private to your account unless you generate a share link for one of your lists.
- Optional notification settings: a Discord webhook URL (encrypted at rest with AES-256-GCM, masked on display) and email-on/off flags.
What we don't do
- No tracking pixels, ad networks, or third-party analytics.
- No selling, renting, or sharing your watchlist data with anyone.
- No storing your Discord webhook in plaintext or sending it back to your browser decrypted.
Share links
When you publish a watchlist, we generate a random token and store only its SHA-256 hash. The raw token is shown to you exactly once at creation — copy it, share it. Anyone with the link gets a read-only, rate-limited view that strips private fields like alert thresholds and per-user notes. You can rotate or revoke the token at any time from the list settings.
Data sources
Prices and card metadata come from PokemonPriceTracker (TCGplayer market snapshots and history) and pokemontcg.io (canonical card data and a fallback price block). GrailPing is not affiliated with The Pokémon Company, TCGplayer, or eBay.
Built with
Next.js 15, Auth.js, Prisma + Postgres, Inngest for scheduled scrapes, Upstash for rate limiting, Resend for email, and a handful of typed third-party clients with retry + timeout guards. The project is actively developed — features and limits may evolve.