A crowdsourced property valuation platform — a two-sided marketplace where users submit property valuations, vote on estimates, and build community trust signals. Built from 0 to 1 as a side project by Michael Lin.
Live site: crowdvalue.app
CrowdValue answers a simple question: what is this property worth — and who agrees?
Traditional property valuations are produced by a single appraiser behind a closed door. CrowdValue flips that model. Anyone can post a property and a valuation; anyone else can submit their own estimate, vote on others' estimates, and accumulate trust signals based on how their past valuations compare to community consensus. The result is a living, public record of crowd sentiment on real estate values.
The platform is a two-sided marketplace:
| Side | Role | What they want |
|---|---|---|
| Posters | Submit a property + their own valuation | A credible estimate, and a sanity check on their number |
| Viewers | Browse properties, submit competing valuations, vote | To find interesting deals, build reputation, and weigh in |
Bridging the two sides is the core matching and trust logic described below.
| Layer | Technology | Why |
|---|---|---|
| Frontend | React + TypeScript | Component-driven UI with static typing across the whole app |
| Backend / Database | Supabase (Postgres + Auth + Row Level Security) | Managed Postgres with built-in auth and per-row access control — no server to maintain |
| Hosting | Cloudflare Pages | Global edge delivery for a React SPA, generous free tier |
| Distribution | Chrome Extension API | Embeds valuation context directly on third-party listing pages |
┌──────────────────┐ ┌──────────────────┐ ┌──────────────────┐
│ Cloudflare Pages │ │ Chrome Extension │ │ Supabase │
│ (React SPA) │ │ (Content Script) │ │ (Postgres + │
│ │ │ │ │ Auth + RLS) │
│ crowdvalue.app │ │ Embeds CrowdValue│ │ │
│ │ │ panel into 3rd- │ │ ┌─────────────┐ │
│ - Browse props │ │ party listing │ │ │ properties │ │
│ - Submit val. │ │ pages │ │ │ valuations │ │
│ - Vote / trust │ │ │ │ │ votes │ │
│ signals │ │ │ │ │ profiles │ │
│ │ │ │ │ └─────────────┘ │
└────────┬──────────┘ └────────┬──────────┘ └─────────┬─────────┘
│ │ │
└──────────── Supabase JS Client ─────────────────────┘
The app is a single-page React application served from Cloudflare's edge. All data access goes through the Supabase JS client, which enforces Row Level Security (RLS) policies directly in Postgres — so the browser can talk to the database safely without a custom API layer.
The Chrome extension is a second surface that reuses the same Supabase client. Its content script injects a CrowdValue panel into third-party property listing pages, letting users pull up crowd estimates without leaving the listing site.
This project was taken from 0 to 1 as a side project. The following systems are live on crowdvalue.app:
- Users post a property (address, photos, details) alongside their own valuation.
- Other users submit competing valuations on the same property, creating a distribution of estimates.
- Viewers upvote/downvote individual valuations.
- The crowd consensus is derived from the weighted distribution of votes and valuations — not a simple average.
- Each user accumulates a trust score based on how their valuations align with eventual community consensus.
- Trust signals are surfaced next to every valuation a user submits, so readers can gauge credibility at a glance.
- A browser extension that injects a CrowdValue panel into third-party property listing pages.
- Lets users see crowd estimates and submit their own valuation without context-switching to the main site.
- Supabase Auth handles sign-up / sign-in.
- Postgres Row Level Security policies govern who can read, write, and vote — enforced at the database level, not in client code.
The hard part of a two-sided marketplace is matching the two sides. CrowdValue's twist is that both sides produce the same thing: a valuation. A poster's valuation seeds a property; a viewer's valuation is their demand signal — it says "I think this is worth X, so I'd buy/engage at X."
The matching logic therefore operates on the distribution of valuations per property, not on a buyer/seller pairing:
- A property with a tight cluster of valuations has high agreement → high-confidence estimate, attractive to viewers looking for stable deals.
- A property with a wide spread has low agreement → opportunity for viewers to weigh in and earn trust signals by bringing the consensus closer to reality.
This means liquidity isn't measured in transactions but in valuation density — how many independent estimates a property has attracted. The UI surfaces this density directly, so users can see at a glance which properties have crowd consensus and which are still wide open.
Trust is the moat. A valuation is only as credible as the person behind it. CrowdValue surfaces trust signals inline, at the point of consumption rather than buried on a profile page:
- Every valuation shows the submitter's trust badge next to their number.
- Trust is earned retroactively: if your valuation later aligns with where consensus settles, your score goes up — even if you were early and initially downvoted.
- This creates a feedback loop where being right early is rewarded, incentivizing thoughtful estimates over popularity-chasing.
The trust score is computed from the user's historical valuation accuracy relative to community consensus, not from raw vote counts. This decouples credibility from mere participation volume.
Property research already happens on Zillow, Redfin, Realtor.com, and a dozen MLS sites. Asking users to come to crowdvalue.app every time breaks that workflow. The Chrome extension solves this by meeting users where they already are:
- A content script detects when the user is on a supported listing page and injects a CrowdValue side panel.
- The panel reuses the exact same Supabase client and auth session as the main site — no separate backend, no duplicate auth.
- Users can view the crowd estimate for the property they're looking at and submit their own valuation without leaving the listing.
This dramatically lowers the activation barrier: the value of CrowdValue shows up the moment a user is already evaluating a property, rather than requiring a deliberate trip to a separate destination.
- What's live: the web app at crowdvalue.app, including property submission, valuation, voting, trust signals, and auth.
- What's not here: this repo is currently a portfolio README. The source code for the web app and Chrome extension is not yet open-sourced — it may be published in the future. This document exists to communicate the system design and architecture decisions behind the project.
- No user metrics are claimed. CrowdValue is a side project with no active user base to report. It was built to explore the product space and the engineering decisions above, not to showcase growth numbers.
Michael Lin — GitHub · crowdvalue.app
Built from 0 to 1 as a side project: product design, architecture, frontend, backend (Supabase schema + RLS), and the Chrome extension.