What is Redprop?
Redprop is a B2B dashboard that centralizes inventory, clients, and leads for real estate agents into a unified interface, enabling real-time management from any device.
Type
Stack
State
Deploy
1. The Challenge: Spreadsheet Chaos
Our stakeholder, “Gonzalo,” managed a portfolio of 120 properties using only Excel and WhatsApp. Each lead required manually searching through three different sheets, resulting in an average response time of 4 hours.
We needed to build Redprop as an operational command center. The goal: bring response time down to < 10 minutes.
2. The Solution: Feature Spotlights
Instead of building a boring admin tool, we designed an immersive experience.
A. The “God Mode” Dashboard
The core goal: enable an agent to understand their business status in 5 seconds.
B. “Always-On” Navigation Filters
We broke the “filter via modal” pattern. We used a faceted sidebar that updates the URL in real-time, allowing for exact search sharing.
UX Challenge: Agents hated losing context when opening modals to filter prices.
Solution: Immediate visual feedback. Click “3 Rooms” -> URL changes -> List refreshes smoothly.
C. The “Anti-Churn” Upload Wizard
Registering a property used to take 15 minutes on a giant form. We turned it into a 3-step conversation.
The stepper reduces cognitive load by splitting 50 fields into digestible tasks.
3. Design System & UI
To convey trust, we created a strict visual language.
Typography
Chosen for high legibility in dense data tables (prices, sq meters).
Color Palette
A primary “Trust Blue” complemented by functional semantics (Green=Sale, Amber=Reserved).
4. Engineering: Under the Hood
As Frontend Lead, the priority was data consistency.
Server-Side State Management (Nuqs)
We moved application state to the URL. This not only improves UX (shareable links) but decouples filtering logic, reducing re-renders by 30%.
// Conceptual example of URL <-> State sync
const [search, setSearch] = useQueryState("q", parseAsString.withDefault(""));
const [minPrice, setMinPrice] = useQueryState("min", parseAsInteger);
Data Architecture (TanStack Query)
We implemented an aggressive cache-invalidation strategy. If an agent updates a price in the Dashboard, the public view updates without a reload, ensuring no outdated price offers are ever made.
4. Results & Impact
The MVP not only won the Demo Day but transformed Gonzalo’s daily operation, allowing him to double his deal-closing capacity without hiring extra staff.
Next Steps (V2)
I am currently refactoring towards a real multi-tenant SaaS architecture, implementing PostgreSQL and RLS to scale from a single user to multiple agencies.