Where our outside-facing documents live

Every way we put a deck, proposal, demo or one-pager in front of someone outside Propflow, who reads them, and a plan to run all of it from one site.

2026-10-14 · read-only audit · Proposed — pending Fede's review · raw command output in findings.md

On this page: Summary · The surfaces · What is live · Who reads them · Hosts and addresses · Code in the app · The plan · Not verified

Summary

Five ways to send a document outside, on three hosts, with three different gates. Only one of them, the client knowledge-review board, had a real outside reader in the last 30 days. The investor deck has had no visit at all since July 29.

The surfaces

SurfaceAddressGateTrackingLive docs
Client demos and proposalspropflowai.co/demo/<slug> and /proposals/<slug> (same files)Email box; secret link. One slug also asks a password (gate probe)Yes: unlocks, page opens, slide dwell8 servable of 10 folders (6 real) (S3 list)
Client onboarding docspropflowai.co/onboarding/<slug>Email boxYes, plus saved checkboxes in our database0 new: the Yale 25 file above, through a third address
Knowledge-review boardpropflowai.co/onboarding/review/<slug>Per-client passwordYes2 seen in log
Investor deck and memodeck.propflowai.co, propflowai.co/funding-researchOne shared passwordYes2
Share pagesshare.propflowai.co/<id>None; secret linkNone5
Shared checkboxes for share pagesshare-state.propflowai.coNonen/a1 page uses it
Internal docs (not external)docs.propflowai.coCloudflare Access (company login)Shared answers only1,874 pages
Full surface table (all columns) and full wording of the top facts
SurfaceAddressHostGateTrackingSource of truthHow it ships · whoLive docsLast change
Client demos and proposalspropflowai.co/demo/<slug> and /proposals/<slug> (same files)Product app on VercelEmail box; secret link. One slug also asks a password (gate probe)Yes: unlocks, page opens, slide dwellS3 propflow-photos/proposals/<slug>/Upload script, live in seconds · anyone with AWS command-line access8 servable of 10 folders (6 real) (S3 list)2026-10-14 (v6 demo upload)
Client onboarding docspropflowai.co/onboarding/<slug>Product appEmail boxYes, plus saved checkboxes in our databaseSame S3 folderSame upload script0 new: the Yale 25 file above, through a third address2026-08-28
Knowledge-review boardpropflowai.co/onboarding/review/<slug>Product appPer-client passwordYesOur database (review records), not a fileCreated by the onboarding flow2 seen in log2026-10-02 (code)
Investor deck and memodeck.propflowai.co, propflowai.co/funding-researchProduct appOne shared passwordYesPDF and memo inside the app repoPull request through CI · any engineer2PDF 2026-05-06, memo 2026-09-23
Share pagesshare.propflowai.co/<id>Vercel, separate projectNone; secret linkNone4 of 5 pages in the docs repo share/; live folder not savedHand deploy that replaces the whole site · Fede, Gera52026-10-14 (deploy)
Shared checkboxes for share pagesshare-state.propflowai.coCloudflare Pages + D1Nonen/adocs repo workers/share-state/Hand deploy1 page uses it2026-10-13
Internal docs (not external)docs.propflowai.coCloudflare PagesCloudflare Access (company login)Shared answers onlydocs repoPush to main1,874 pages2026-10-15 (deploy)
Sources for the table

Sources: S3 list, Vercel API, Cloudflare API, headless curl of every gate, git log. All in findings.md. The new test site propflow-decks.pages.dev exists (answered 401 at probe time) and was left alone.

What is live
DocumentSlugUploaded (Mac time)State
Clara — live demo (v6 preview)leasing-renewals-demo-v6-…2026-10-14servable
Western Slope onboarding timelinewestern-slope-se9…2026-09-08servable
Situs Group proposalsitus-f6…2026-09-04servable
Clara — live demo (password)leasing-renewals-demo-29…2026-08-28servable
Halcyon pilot agreementhalcyon-demo-0a…2026-08-28servable
Yale 25 Station onboardingconam-yale25-07…2026-08-28servable
Fast-path demo (no name file)…-fastpath-7k…2026-08-26orphan
Sample proposal (fictional)sample2026-08-28test
Yale 25 (two older folders)yale25, conam-yale25-onboarding-…2026-08-28empty shell name file only
Western Slope inbox one-pagerwestern-slope-inbox-…goneremoved opened 2026-09-23, likely now on the share site (matched by title and date)

Share site, live deployment file list: inbox-after-Clara (with podcast), renewals blueprint (with PDF), Situs rollout plan, Google Workspace approval guide, and "The Center of the Bow Tie" (with podcast), which is in no repo. Its audio exists only inside the live deployment.

Who reads them

Successful unlocks from the access log, 1,416 rows total. "Outside" means an email not on propflowai.co; Gmail counts as outside, so some of it may be us.

DocumentUnlocks 30dUnlocks 90dOutside 30dOutside 90dLast access (UTC)
Knowledge review, Western Slope1148772026-10-11
Situs proposal321012026-10-13
Live demo v633002026-10-15
Knowledge review, Western Slope test020002026-10-05
Western Slope inbox (removed)22002026-09-23
Live demo (password)11050322026-09-17
Western Slope timeline037002026-09-09
Yale 25 onboarding05032026-09-08
Halcyon agreement06012026-08-29
Investor deck and memo01002026-07-29

Source: read-only query of the production table, partition DECK_ACCESS (findings.md, "Access log aggregate"). Sample, fast-path and empty Yale folder: no successful unlock ever.

Share site: no usage data exists. Vercel's visitor analytics is not switched on for that project, and none of the five pages loads any tracking script.

Hosts and addresses
WhereWhat runs there
Vercel (20 projects)Product app (propflowai.co, deck., 7 preview addresses), share site, Camellia website, inside-edge.co, mock property-system sandbox, and 14 old or one-off projects, 8 of them never deployed
Cloudflare Pages (5)docs, share-state, factory, matrix (all behind company login except share-state), propflow-decks (new)
Cloudflare Workerssales.propflowai.co (internal sales tool, company login); a tunnel serves agents. and three webhook addresses
Points atAddresses
Vercelpropflowai.co, www, deck, 7 previews, knock-sandbox, yardi-sandbox, share (through the catch-all record)
Cloudflare Pagesdocs, factory, matrix, share-state
Cloudflare Worker / tunnelsales / agents, decision-hook, gh-webhook, zoom-hook
Elsewhereo1.o1 (dead), mail-signing records for SendGrid and Amazon email

Addresses to clean up: preview-jg-agentflow-in-app points at Vercel but no project claims it (404). o1.o1 is an old fixed address that times out. knock-sandbox and yardi-sandbox answer 404 at the front door but belong to a live sandbox project, so check before removing. A catch-all record sends every unknown subdomain to Vercel, so a typo still resolves.

Code in the app
PartLinesStays?
Shared gate, sign-in cookie and tracking library3,612Partly: review needs ~575
Admin traffic page (and old redirect)3,517Goes
Investor deck viewer and PDF route2,255Goes
Gated document viewer components1,244Partly: review uses the frame
Onboarding pages (doc + review board)1,023Review board (991) stays
Document stream and checkbox save routes742Goes
Cross-cutting tests840Mostly goes
Upload script, storage reader, memo, small pages588Goes
Total13,821About 11,800 can go (estimate)

Source: wc -l per directory (findings.md, "Code size"). The split between "goes" and "stays" is an estimate; an import trace would make it exact. Rules to unwind: next.config.js:185-190, 291-295, 405-413; middleware.ts:255-263 and 805-816.

The plan: one outside site /demo and /proposals (app) /onboarding docs (app) deck. and /funding-research (app) share. (Vercel) + share-state /onboarding/review (app) One decks site (Cloudflare Pages)email box + secret link, one tracking function stays in the app: live product, not a document
TodayMovesRedirectsDeletedLost, and the smallest keep
Demos and proposalsThe 6 real files, same slugs; sample and fast-path droppedOld addresses send readers to the new site, same slug. The slug is the key, so it must not changeUpload script, stream route, storage reader, empty foldersSlide dwell and the admin page. Keep: a small function on the new site that records email and slide events in Cloudflare storage. Not our current table, because that would mean putting AWS keys into Cloudflare (Fede's call). Export the 1,416 old rows to a docs page once, so history survives either way
Onboarding docYale 25 fileYesDatabase checkbox saveSaved checkboxes: use share-state, already built
Investor deckPDF and memo, behind a passworddeck. addressDeck viewer, PDF routeNothing used since July
Share pagesAll 5, including the one not in any repo, with audioshare. addressVercel projectNothing; gains tracking
Review boardNothingNoNoNothing

Order, one small pull request each

  1. Copy every share file and the 6 real S3 files into the decks repo; prove each address opens.
  2. Add the email box and the tracking function on the decks site; prove one unlock lands.
  3. Redirect /demo, /proposals and /onboarding/<slug> to the new site (app pull request).
  4. Point deck. and share. at the new site. DNS change: Fede's go.
  5. Delete the app's upload, stream and deck-viewer code, one folder per pull request.
  6. Delete the admin traffic page after exporting its history.
  7. Retire the share Vercel project and the dead addresses. Fede's go.

Alternative gate: Cloudflare Access with a one-time emailed code proves the reader owns the email, which the email box does not. Different reader experience and possible seat limits; not verified.

Not verified
PropFlow Docs