You know the drill. You're looking for a specific pair of Nike Dunk Lows from 2003, or that one Arc'teryx jacket everyone sold out of two years ago. So you open Vinted. Then eBay. Then Depop. Then Grailed. Then Vestiaire Collective. Then Poshmark.
Six apps. Six searches. Six times a day. Every day. For weeks.
I got tired of it, so I built GrailSearch — a single search bar that queries all those platforms at once and shows you everything in one feed.
The Problem
Resale is booming. There are amazing deals out there, but the inventory is scattered across a dozen platforms. Each one has its own search, its own filters, its own app. If you're hunting for something specific — a "grail" — you're basically doing a full-time job just refreshing tabs.
The worst part? By the time you spot something on platform #4, someone already bought it while you were still scrolling through platform #2.
The Solution
GrailSearch is a Rails 8.1 app that aggregates results from multiple resale platforms into a single, clean interface. You type what you're looking for, and it searches everywhere simultaneously.
Right now it pulls live results from eBay (via their API) and Vinted (scraping), and generates direct search links for Depop, Grailed, Vestiaire Collective, and Poshmark so you're one click away from any platform.
Key Features
- One search, all platforms — stop tab-hopping
- Saved searches with email alerts — set it and forget it. GrailSearch checks hourly and emails you when new listings appear
- Price tracking — see how prices trend over time for popular items
- Clean, fast UI — built with Tailwind CSS, no JavaScript framework bloat
The Stack
I kept it deliberately simple:
- Ruby 4.0.1 / Rails 8.1 — the latest and greatest. Rails 8 is genuinely a joy to work with
- PostgreSQL — rock solid, handles everything
- SolidQueue — Rails 8's built-in job backend for background search checks
- SolidCache — caching layer, also built into Rails 8
- Tailwind CSS v4 — fast styling without the overhead
- Fly.io — deployment in one command, scales to zero when nobody's using it
No Redis. No Sidekiq. No separate cache server. Rails 8 gives you all of that out of the box with Solid Queue and Solid Cache backed by your existing Postgres database. The whole thing runs on a single $5/mo Fly.io machine.
How It Works
When you search, GrailSearch fires off requests to each platform concurrently:
- eBay — uses the official Browse API with OAuth tokens
- Vinted — makes authenticated requests to their internal API
- Others — generates properly formatted search URLs for one-click access
Results get normalized into a common format (title, price, image, platform, link) and displayed in a unified feed sorted by relevance.
For saved searches, a SolidQueue recurring job runs every hour, checks each saved search against the platforms, and fires off an email via Action Mailer if there are new listings since the last check.
What I Learned
Rails 8 is incredible for solo devs. The Solid* gems mean you can run a production app with background jobs, caching, and WebSockets on a single server with just Postgres. No infrastructure complexity.
Scraping is fragile but necessary. Not every platform has a public API. Vinted doesn't, so I had to reverse-engineer their internal endpoints. It works, but I expect it to break occasionally.
The resale market is massive. While building this, I realized how many people have the exact same problem. The market for cross-platform search tools is wide open.
Try It Out
GrailSearch is live at grailsearch-app.fly.dev. Create a free account, search for your grails, and set up alerts for the items you're hunting.
If you're a developer interested in the code, it's built with standard Rails conventions — nothing exotic. Happy to chat about the architecture in the comments.
What's your grail? Drop it in the comments — I'm curious what people are hunting for.
Top comments (0)