Revere CRE is the first modern
market network
for Commercial Real Estate. We want to facilitate seamless search and
discovery across capital markets, leasing, and property & facility management
and to become the daily homepage for commercial real estate professionals.
Our main product can be broken down into one of three distinct feature
verticals:
A networking/prospecting platform which allows users to search, discover
and connect with each other. Our matchmaking leverages a variety of
capital markets attributes (e.g. risk profile, property type, capital
tranche) to facilitate connections.
A deal marketing platform for CRE projects. We enable our users to take
their project (e.g. ground-up development, dispositions) to market for a
fraction of the cost.
A rich set of workflow tools such as deal analytics, capital markets
statistical models and reporting automation. These enable our users to
increase transaction velocity by reducing time to capitalize on their
deals.
Our hypothesis is simple: In an industry that is predominantly relationship
based, the trust, reputation, and integrity of a Sponsor/Broker/Capital Provider
is what distinguishes them and their ability to provide an ROI to their
stakeholders. Through creating a first-of-its-kind invite-only network focused
on CRE capital markets and track record combined with turnkey deal marketing &
analytics, we will improve access to information, people, and money while
increasing overall transaction-velocity.
In the last two months alone, we began our national marketing campaign to
hundreds of thousands of people, peaking at several thousand concurrent users on
our platform. Simultaenously, we have taken several early-adopter deals to
market; tracking thousands of users' interactions on these pages and surfacing
back insights to our clients. We have faced our fair share of bugs and failure
along the way, but I am confident that our team and software can scale to meet
the challenge.
High-Level Overview
To accomplish all of this, we first had to identify a set of core competencies
so that we could prioritize feature development and anchor our buy-vs-build
discussions:
Model and render people, companies, historical employment, and the
relationships between them all. This is our core prospecting/networking data
set.
Security and privacy around user uploaded documents (images, files). These
are sensitive documents or high quality renderings of properties that our
users upload to the site.
Deal email marketing, which is a key value add to our user base.
Treating C2C analytics as a first-class citizen of our tech stack, capturing
user interactions on our page, clicks, downloads, etc. This data is useful to
project owners, but also serves as the basis of several other product
offerings.
The expectation is that this list grows as we expand our business, but in the
meantime, we set out to solve the problems above.
Breaking down the core of the Revere platform:
Our web application is written in Next.js and
React.
We model our data and interact with our PostgreSQL database via
Prisma.
We query and serve our data via Relay and
GraphQL.
We outsource our authn/authz, file storage, and related security policies to
Firebase.
Aside from prior experience, these choices were deliberately made given where we
want to be as a team and as a company:
We wanted to server-side render our application for SEO purposes (hence
Next.js). Our deal pages are publically visible for marketing purposes, and
therefore had to have OpenGraph tags for a good
user-experience when sharing on social media.
Our data is almost-purely relational (for now), so pgSQL was a solid start as
we already had experience with it as a team. The ability to store JSONB
data types has also been useful to store document-style data and query via
SQL.
Prisma allowed us to define our schema in a DSL that could be translated not
only to SQL (via Prisma Migrations), but also to GraphQL. This also provides
us a fluent API over our data so that we did not have to write raw-SQL for
our common use cases.
Prisma provides convenient wrappers like createMany and upsert,
provides TypeScript type definitions, produces performant / smaller
queries to prevent database locking, and
much more.
GraphQL and Relay (resolvers implemented with Nexus
library) provides numerous benefit for our data serving / fetching logic.
Components on our pages can specify data required for rendering
independently, ensuring complex web-pages with several components are
de-coupled. Mutations that modify state across several components are also
entirely de-coupled as Relay handles local-state modification
(optimistically rendered). As our team grows, developers can work
independently on pages/functionality as GraphQL/Relay handles all of the
difficulty of federating/resolving data.
Queries which require numerous amounts of relational data (such as our
deal page components) can be written as single GraphQL queries per
component with all the required data. Relay will prevent over-fetching of
data and multiple round-trips.
Combined with Next.js (via relay-nextjs), we can
choose to server or client side render on a component by component basis.
Firebase provides us out of the box authn/authz, along with file storage and
configurable security policies for our deal confidential data-room
functionality.
CloudFlare's CDN for our bundled JS/CSS asset provides a blazing fast
experience (< 700ms first contentful paint) even with high quality
user-uploaded media.
Finally, we write next-to-no CSS through our use of
Tailwind CSS. We have built a variety of custom
components (nicknamed: RevereKit) like: multiselect, in-app tutorial,
flyouts, and modals. These components are mobile-friendly and allow for a
consistently-styled and responsive UI/UX.
There is one piece missing in the diagram above, and it's inarguably our most
important and invaluable components: the team. There is no doubt that our
system will need to evolve as the challenges we face change in the coming months
and years. However, I know that our team will learn, support and assist each
other throughout this exciting journey!
What will provide defensibility?” The answer: “Networks of users,
transactions, or data