Skip to content
Deal212 Audit

Architecture

How the Deal212 public website is put together

This is the shape of the system as observed from the public side: a Cloudflare edge in front of a single-page app with catch-all routing, with a backend layer that assembles New York City open data into property reports and takes in leads.

Data flow

A visitor asks for a property report; the request travels through the edge to a backend that geocodes the address, pulls city records, and calculates comparables, then returns a page to the browser. Lead intake runs over a separate POST to the API.

  1. Client
    • Browser app
    • SPA routes
    • Catch-all 200 behavior (CR-01)
  2. Edge (Cloudflare)
    • CDN / caching
    • TLS termination
    • robots.txt & sitemap.xml handling
  3. Backend / reverse proxy
    • HTTP API
    • POST /api/lead
    • Geocoding proxy
    • Comparable sales calc
  4. Data sources
    • NYC open data (PLUTO, ACRIS, DOF)
    • NYC Planning GeoSearch
    • FEMA flood maps
    • Lead storage

Flow: browser - edge - backend - data sources. A single-page app rides a catch-all route in front of the API; static files share the fallback.

What runs where

  • Edge (Cloudflare)

    Caches static assets, terminates TLS, and - today - hands robots.txt, sitemap.xml, and unknown routes to the SPA fallback (CR-01).

  • Single-page app

    Serves the public site and property check over catch-all routing. Because the fallback returns HTTP 200 for everything, missing pages and reserved files are indistinguishable from the homepage.

  • Backend / proxy

    A reverse proxy talks to NYC open data, geocodes via NYC Planning GeoSearch, runs the comparable-sales calculation, and accepts lead intake at POST /api/lead.

  • Data sources

    New York City public sources (Finance, open data, GeoSearch, FEMA) plus lead storage. The exact source list and reconciliation notes are on the Sources page.

Where the issues live

The routing and caching behavior shows up at the edge and in the SPA fallback, the lead endpoint is a backend concern, and the content claims are authored into the pages themselves. The full categorized findings are on the Findings page.