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

Hand the seller a one-page launch report: every asset, who approved it and when, and the property page link, ready to print #60

Merged opened this

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

Merged

`GET /listings/:id/report` now serves a one-page seller report, and it is pushed to the branch.

shipped production is serving it deploy 957b843

opened this

GET /listings/:id/report now serves a one-page seller report, and it is pushed to the branch.

The page shows the address, price and status, the hero photo, the property page link and one row per asset. An approved row shows its kind, "Approved by <name> on <date>" and its words. An unapproved row shows only Draft — not approved yet, with no words.

  • Where it is linked: the listing page has a "Seller report" button next to Print flyer and Download launch kit. The README walkthrough has a new step 13, "Print the seller report".
  • Print: it reuses the flyer's print frame, so the nav and buttons drop out on paper. A few @media print rules in static/app.css add margins, cap the photo height and keep each row on one page.
  • Access: the route calls getListing, so read access follows permit, as the flyer does. It is added to the escaping loop in src/hostile.test.ts.
  • Tests: src/report.test.ts shows the 412 Alder Lane sample with six approved rows, all by its sample agent. It also shows that a fresh listing's rows are all marked Draft, with no "Approved by" and no feature text. The new tests plus the hostile, sample, kit and property tests pass (38 in total). I also ran the speed, walkthrough, design, a11y and OpenAPI tests before the final edits and they passed.
  • Not run: scripts/gate.ts does not exist in this clone. bun x tsc --noEmit only printed its help text, because there is no tsconfig. A manual type-check only reported missing type packages, such as bun:sqlite and node types. scripts/lint-design.ts printed nothing.
  • Not done: the approved-only rule is a one-line check (approval is null or not) in the page file, and I did not factor it out of the kit or the property page. The kit's own stamp helper stays private, so the "Approved by" wording now lives in two places.
  • Contract: no cell in contract.json was loosened.

To try it, open any listing and press Seller report. The 412 Alder Lane sample shows all six rows approved.

🤖 Generated with Claude Code

Closes #58

commented

GET /listings/:id/report now serves a one-page seller report, and it is pushed to the branch.

The page shows the address, price and status, the hero photo, the property page link and one row per asset. An approved row shows its kind, "Approved by <name> on <date>" and its words. An unapproved row shows only Draft — not approved yet, with no words.

  • Where it is linked: the listing page has a "Seller report" button next to Print flyer and Download launch kit. The README walkthrough has a new step 13, "Print the seller report".
  • Print: it reuses the flyer's print frame, so the nav and buttons drop out on paper. A few @media print rules in static/app.css add margins, cap the photo height and keep each row on one page.
  • Access: the route calls getListing, so read access follows permit, as the flyer does. It is added to the escaping loop in src/hostile.test.ts.
  • Tests: src/report.test.ts shows the 412 Alder Lane sample with six approved rows, all by its sample agent. It also shows that a fresh listing's rows are all marked Draft, with no "Approved by" and no feature text. The new tests plus the hostile, sample, kit and property tests pass (38 in total). I also ran the speed, walkthrough, design, a11y and OpenAPI tests before the final edits and they passed.
  • Not run: scripts/gate.ts does not exist in this clone. bun x tsc --noEmit only printed its help text, because there is no tsconfig. A manual type-check only reported missing type packages, such as bun:sqlite and node types. scripts/lint-design.ts printed nothing.
  • Not done: the approved-only rule is a one-line check (approval is null or not) in the page file, and I did not factor it out of the kit or the property page. The kit's own stamp helper stays private, so the "Approved by" wording now lives in two places.
  • Contract: no cell in contract.json was loosened.

To try it, open any listing and press Seller report. The 412 Alder Lane sample shows all six rows approved.

🤖 Generated with Claude Code

Changes requested — before the latest push

The page works and the print button is wired, but the terminal has no way to see the seller report. Fix first: add the report to src/tty.ts, as the launch kit is there (key k). Give it its own key, such as R, that shows the same report text, approved words only. Both doors must do the same, and the tty help line and the README step 13 must name it. Build the text in one small module, for example src/report.ts, and use it from both src/pages/report.ts and src/tty.ts. Also move the "Approved by name on date" wording there so it is not written in two places, as you noted yourself. Add a tty test showing the report appears and that a draft asset is marked Draft and never worded.

commented

The seller report now has a terminal door: press R on an open listing to see it. I've pushed the change to the same branch. I ran the tty, report, kit, hostile, walkthrough and speed tests, and all 50 pass. I did not re-run the full suite or the type-check.

  • Shared module: src/report.ts is new and holds the rule and the wording, so each is written once. approvedLine, DRAFT_MARK, reportRows and reportText live there, along with oneLine and cleanText, which moved over from src/kit.ts. A draft row never carries its words, in either door.
  • Who uses it: src/pages/report.ts renders from reportRows. src/kit.ts takes "Approved by … on …" from approvedLine and keeps its own "DRAFT — not approved" text, so the launch kit file reads exactly as before.
  • Terminal: src/tty.ts shows reportText on R and esc goes back to the assets. The help line now reads "k launch kit · R seller report". README step 13 names R too.
  • Tests: two new tty tests in src/tty.test.ts.

- On a fresh listing, R shows Draft marks, no "Approved by" and none of the draft words. After approving the MLS description it shows "Approved by me on …", that asset's words, and "1 of 6 assets approved". - The help line names the report.

I agreed with everything in the review.

Approved

Approved. The earlier ask for a terminal door is met: R on an open listing shows reportText, which goes through the same getListing gate as the page. It is approved-only and the help line and README name it. The approved-or-draft rule and the Approved by wording now live once in src/report.ts, and the kit reuses it. The page escapes every typed field, the route is in the hostile loop, no contract cell changed, and there are no new dependencies. I read the diff and did not exercise the preview.

Sign in to join this conversation.

↑↓ navigate ↵ open ⌘↵ its app esc close

Keyboard shortcuts

Docs