← back to Re Flyers

RESEARCH.md

52 lines

# RESEARCH — RE flyer aggregation (TK-10708)

Read-only inventory of flyer / marketing-asset generation that ALREADY exists across the
RE builds (usre / CRCP / RENTV) + the two flyer projects. Dated 2026-08-24.

## Headline finding — TK-10708 is largely ALREADY BUILT

There is a mature, actively-running project **`~/Projects/re-flyer-aggregator`** (git history
Aug 19→24, daily cron data snapshots, deployed to Kamatera as pm2 `re-flyers-viewer` on
`:9860`, `.deploy.conf` present) that IS the TK-10708 flyer-aggregation build. It was
codex-reviewed 2026-08-19. This `re-flyers/` project does **not** rebuild it — it sits on top
of it as a thin **normalized cross-source index** (the one gap: a single deduped feed in the
exact TK-10708 schema, since the aggregator's outputs are split across a deal-scoped DB view
and a broker-scoped JSON).

**`~/Projects/rentv-bloom-flyers` is unrelated** — it is a redesign of RENTV's OWN corporate
media-kit / property-spotlight *marketing* flyer into 6 premium HTML concepts (Steve Bloom's
brand collateral), NOT property-flyer aggregation. Not a source for this index.

## What each surface produces (verified)

| Source | Project / file | What it produces | Data source | Format | Where stored |
|---|---|---|---|---|---|
| **Broker OMs/brochures** | `re-flyer-aggregator/public/flyers-found/property-flyers.json` (**202 entries**) | Real offering memoranda + lease brochures discovered on **broker-owned** property landing pages (Tier-1) | Robots-respecting discovery on broker firm sites (e.g. cibarealestate.com) | Links to `.pdf` (URL only, file NOT re-hosted) | JSON in the aggregator repo, refreshed by `scripts/property-flyers.mjs` + `property-flyers-cron.sh` |
| **Classified deal assets** | reflyers PG `external_marketing_asset` (**15 rows**) + `asset_subject_link` (15) | Per-deal marketing assets, each tiered + rights-classified (`property_brief`, `deal_recap`, `marketing_flyer`, …) | Live discovery on top Miami-Dade closed deals, tiered 1/2/3 | Row w/ `source_landing_url` + `document_url` | Local `reflyers` Postgres; consumers read `usre.deal_assets_v` (GATED tier-3 excluded) |
| **Self-generated recaps** | `re-flyer-aggregator/out/spotlight-*.html` (**7 files**) | Tier-2 closed-sale **property-spotlight** flyers built from public-record facts + our own RENTV template (no 3rd-party assets) | `scripts/generate-spotlight.mjs` over live usre deals | Self-contained print-ready HTML (→ PDF) | `out/` in the aggregator repo |
| **News / deal feed** | `re-flyer-aggregator/public/flyers/flyers.json` | CRE news + closed-deal headlines (news, not property flyers) | RSS/feeds (`ingest-rentv.mjs`, `cre-news-monitor.mjs`, `edgar-cre-monitor.mjs`) | JSON | aggregator repo, daily cron |
| **usre (nationalrealestate)** | — | **No flyer generation of its own.** It is the canonical DATA engine (parcels, `recent_commercial_deals`) the aggregator's recaps + `deal_assets_v` consume. | — | — | — |
| **CRCP (commercialrealestate)** | — | **No flyer generation.** Intended *consumer* of `deal_assets_v` (Frank the loan officer's deal view). | — | — | — |
| **RENTV (rentv)** | — | **No property-flyer generation.** Intended *consumer* (news + articles link to recap/first-party flyers). | — | — | — |

## Compliance model already established (re-flyer-aggregator, codex-corrected)

Three-gate: **copyright ∧ contract(ToS) ∧ privacy.** Key posture: *"publicly accessible" ≠
"authorized for automated harvesting."*
- **Tier 1** — RENTV first-party + broker-owned public landing pages + owner/REIT press rooms +
  public-record docs → automated URL-discovery OK (robots-respecting, rate-limited; store URL +
  provenance, never the file).
- **Tier 2** — self-generated closed-sale recap from public-record facts + our own brand marks → OK.
- **Tier 3** — CRE marketplaces (Crexi, LoopNet/CoStar, Brevitas, Biproxi, CommercialCafe) + any
  re-host of a 3rd-party PDF → **GATED** (ToS prohibits automated access; draft to
  pending-approval, never auto-run/auto-download).

This `re-flyers/` index inherits that posture: it carries `rights_basis` + `tier` on every row so
GATED/Tier-3 assets can be visually flagged/hidden in the viewer, and it **never downloads or
re-hosts** any file — it references URLs only.

## Verified counts feeding this index (seed)

`node scripts/build-seed.mjs` → `data/flyers.json`: **224 flyers**, deduped, by source:
`broker-site` 202 · `usre-deal` 15 · `rentv-spotlight` 7.