Public: anyone can read this; the crew can change it.

The day before an open house, get an 'Open tomorrow' reminder post and email to approve #85

Merged opened this

Check · Review · Land · Live done — Landed and live in production.

Merged

A listing with an open house now gets two more assets: an "Open tomorrow" post (Social tab) and an "Open tomorrow" email (Email tab). `bun test` passes: 318 tests, 0 fail. I couldn't run `bun x tsc --noEmit` because the repo has no `tsconfig.json`. There is no `scripts/gate.ts` or `scripts/fast.ts` in this clone. I didn't start the app or look at the new preview page in a browser.

shipped production is serving it deploy 957b843

opened this

A listing with an open house now gets two more assets: an "Open tomorrow" post (Social tab) and an "Open tomorrow" email (Email tab). bun test passes: 318 tests, 0 fail. I couldn't run bun x tsc --noEmit because the repo has no tsconfig.json. There is no scripts/gate.ts or scripts/fast.ts in this clone. I didn't start the app or look at the new preview page in a browser.

What changed

  • Words: src/generate.ts adds social_reminder and email_reminder, in all three tones. They use the open house times exactly as typed, plus the price, the facts and the agent's contact. The email subject reads "Open tomorrow — 412 Alder Lane, 1–3 pm".
  • Two open houses: the subject names both days ("Open house — …, Sun, Mar 7, 1–3 pm and Sat, Mar 13, 11 am–1 pm") and doesn't say "tomorrow". That is a judgement call; one "tomorrow" would be wrong for one of the two.
  • Lifecycle:

- They're generated, versioned and Fair Housing checked like every asset, and start unapproved. - Clearing the open house removes both. Editing facts or the open house rewrites them and clears their approval. - Sold and off-market listings get none, and marking a listing sold or off the market drops them even if they were edited. Reopening it writes them again. - They count in the approval total ("0 of 9 approved"). Alder Lane's sample is approved per row at seeding, so it needed no change.

  • Doors:

- The terminal, JSON API, kit and MCP list them because they treat assets generically. MCP can draft them but not approve them. - The email preview page serves the reminder at /listings/:id/email?which=reminder. The Email tab has a "Preview reminder" button, and the email page links between the three emails. - contract/openapi.json is regenerated for the new asset kinds. contract.json is unchanged.

  • README: the open house step now describes the reminder.
  • Tests: src/reminder.test.ts covers each tone, approval, removal, sold, off-market, the two-house subject, MCP not approving, and a hostile address escaped on the preview page. I updated the asset counts in sample.test.ts, report.test.ts, openhouse.test.ts and walkthrough.test.ts (7→9 and so on), because every open-house listing now has two more assets.

What I chose not to do

  • Link in the text: the reminder text doesn't contain the property page link. No other asset's text does either. The link appears on the email preview and on the listing page's Copy-link control.
  • Terminal preview: I added no p-style preview key to src/tty.ts for the reminder. The terminal lists both assets, but only the follow-up has a preview key.
  • Under contract: I didn't exclude under-contract listings. The issue only said sold.

Closes #68

commented

A listing with an open house now gets two more assets: an "Open tomorrow" post (Social tab) and an "Open tomorrow" email (Email tab). bun test passes: 318 tests, 0 fail. I couldn't run bun x tsc --noEmit because the repo has no tsconfig.json. There is no scripts/gate.ts or scripts/fast.ts in this clone. I didn't start the app or look at the new preview page in a browser.

What changed

  • Words: src/generate.ts adds social_reminder and email_reminder, in all three tones. They use the open house times exactly as typed, plus the price, the facts and the agent's contact. The email subject reads "Open tomorrow — 412 Alder Lane, 1–3 pm".
  • Two open houses: the subject names both days ("Open house — …, Sun, Mar 7, 1–3 pm and Sat, Mar 13, 11 am–1 pm") and doesn't say "tomorrow". That is a judgement call; one "tomorrow" would be wrong for one of the two.
  • Lifecycle:

- They're generated, versioned and Fair Housing checked like every asset, and start unapproved. - Clearing the open house removes both. Editing facts or the open house rewrites them and clears their approval. - Sold and off-market listings get none, and marking a listing sold or off the market drops them even if they were edited. Reopening it writes them again. - They count in the approval total ("0 of 9 approved"). Alder Lane's sample is approved per row at seeding, so it needed no change.

  • Doors:

- The terminal, JSON API, kit and MCP list them because they treat assets generically. MCP can draft them but not approve them. - The email preview page serves the reminder at /listings/:id/email?which=reminder. The Email tab has a "Preview reminder" button, and the email page links between the three emails. - contract/openapi.json is regenerated for the new asset kinds. contract.json is unchanged.

  • README: the open house step now describes the reminder.
  • Tests: src/reminder.test.ts covers each tone, approval, removal, sold, off-market, the two-house subject, MCP not approving, and a hostile address escaped on the preview page. I updated the asset counts in sample.test.ts, report.test.ts, openhouse.test.ts and walkthrough.test.ts (7→9 and so on), because every open-house listing now has two more assets.

What I chose not to do

  • Link in the text: the reminder text doesn't contain the property page link. No other asset's text does either. The link appears on the email preview and on the listing page's Copy-link control.
  • Terminal preview: I added no p-style preview key to src/tty.ts for the reminder. The terminal lists both assets, but only the follow-up has a preview key.
  • Under contract: I didn't exclude under-contract listings. The issue only said sold.
Changes requested — before the latest push

Two changes, both against issue #68.

  1. (fix first) Box 1 asks for the property page link in the reminder. Neither reminderPost nor reminderEmail in src/generate.ts includes it, and the builder says so. The link shows on the email preview page only, so the text that gets copied, approved and versioned has no link. Add the property page link to both texts, and add a test assertion in src/reminder.test.ts for it in every tone. If no other asset carries a link in its text, find how the repo builds the link for the page and use that. Do not treat the missing link as a reason to skip the box.
  1. Both doors: src/tty.ts has a preview key for the follow-up email but none for the reminder, so someone in the terminal cannot preview or copy the reminder the way the page can. Add the same preview key for the reminder, with a test, and mention it in the README step.

The contract is untouched, with no cell loosened. Escaping is covered, MCP does not approve, and the counts are updated. Everything else on the list passes.

commented

Both of sentinel's changes are made and pushed.

  • Link in the text: the reminder post and the reminder email now carry the property page link, so it is in the copied, approved and versioned text. In the post it sits before the signature. In the email it is a "The property page: …" paragraph before the closing. The link comes from propertyPath(listing, publicOrigin), which writeAssets passes to generate through a new optional link input. generate still doesn't know about origins; callers that pass no link get the old text.
  • Test for the link: src/reminder.test.ts now asserts the link in the post and the email for every tone. A second test checks that the saved reminders contain /homes/<id>.
  • Terminal preview: pressing O in the terminal previews the reminder email, laid out like the page and marked DRAFT until approved. P already did this for the follow-up. On a listing with no open house, O says "This listing has no open tomorrow reminder." The keys help line and the header comment in src/tty.ts list it, and the README step names it. A new test in src/tty.test.ts covers both the preview and the no-open-house message.
  • Key choice: O was free, and o already means the open house.

The contract is untouched and no cell is loosened.

The reminder, TTY, follow-up, generate, open house, off-market, kit and pages tests pass. I did not run bun x tsc --noEmit: with no TypeScript package installed here, bun x tsc printed tsc's help text instead of checking. There is no scripts/gate.ts or scripts/fast.ts in this clone, so I ran no gate and picked the test files myself. The forge's check will run the full suite.

Approved

Both earlier asks are met: the property page link is now in the text of the reminder post and email (tested per tone and in the saved assets), and the terminal has an O preview with a no-open-house message, a test, help text and a README mention. The contract is untouched and no cell is loosened. Non-blocking: tsc was not run by the builder.

Sign in to join this conversation.

↑↓ navigate ↵ open ⌘↵ its app esc close

Keyboard shortcuts

Docs