DEV Community

WTB.land
WTB.land

Posted on

I Built a Reverse Marketplace with .NET 10, gRPC-Web, and Vanilla JS

The Problem with Traditional Marketplaces

Every marketplace works the same way: sellers list products, buyers scroll through thousands of listings hoping to find what they need at the right price.

I wanted to flip this model. What if buyers posted what they wanted and sellers competed to offer the best deal?

That's WTB.land - a reverse marketplace (WTB = Want To Buy).

How It Works

  1. Buyer posts a request - "I want a MacBook Pro M3, budget $1500, like-new condition"
  2. Sellers browse requests and submit offers with price and description
  3. All offers are public - sellers compete, highest bid gets a TOP BID badge
  4. Buyer picks the best deal - chat with sellers, compare offers, done

The Tech Stack

  • Backend: .NET 10 (ASP.NET Core MVC + gRPC)
  • Database: SQLite (yes, really)
  • Frontend: Vanilla JavaScript SPA (~1800 lines, no React/Vue/Angular)
  • Protocol: gRPC-Web over protobuf (not REST/JSON)
  • CSS: Tailwind CSS 3.4
  • Deploy: Single binary on a $7/month Hetzner VPS

Why gRPC-Web Instead of REST?

Binary protobuf is ~30% smaller than JSON. I wrote a 98-line custom gRPC-Web transport that handles binary framing over XHR. No code generation on the client - protobuf.js parses the .proto file at runtime.

Why Vanilla JS Instead of React?

The entire SPA is 1800 lines. It does pushState routing, SSR hydration, lazy loading, and real-time chat polling. Adding React would have tripled the bundle size for zero benefit.

Why SQLite?

For a young marketplace with hundreds of requests, SQLite is perfect. Single file, zero config, instant backups.

SEO: The Hard Part

A JavaScript SPA is invisible to search engines by default. My solution: hybrid SSR + SPA architecture.

  • Server renders full HTML with SEO content (meta tags, JSON-LD, Open Graph)
  • Client JS hydrates from server-injected JSON - no duplicate API call
  • Subsequent navigation uses pushState + gRPC calls

Result: Google PageSpeed 100/100 on mobile and desktop.

Try It

WTB.land is live and free. 26 categories, built-in chat, no fees. 60-90ms response times on a single-core VPS.


Have you built anything with gRPC-Web? I'd love to hear your thoughts.

Top comments (0)