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
Check · Review · Land · Live done — Landed and live in production.
`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
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 printrules instatic/app.cssadd margins, cap the photo height and keep each row on one page. - Access: the route calls
getListing, so read access followspermit, as the flyer does. It is added to the escaping loop insrc/hostile.test.ts. - Tests:
src/report.test.tsshows 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.tsdoes not exist in this clone.bun x tsc --noEmitonly printed its help text, because there is no tsconfig. A manual type-check only reported missing type packages, such asbun:sqliteand node types.scripts/lint-design.tsprinted 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.jsonwas 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
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.
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.tsis new and holds the rule and the wording, so each is written once.approvedLine,DRAFT_MARK,reportRowsandreportTextlive there, along withoneLineandcleanText, which moved over fromsrc/kit.ts. A draft row never carries its words, in either door. - Who uses it:
src/pages/report.tsrenders fromreportRows.src/kit.tstakes "Approved by … on …" fromapprovedLineand keeps its own "DRAFT — not approved" text, so the launch kit file reads exactly as before. - Terminal:
src/tty.tsshowsreportTextonRandescgoes back to the assets. The help line now reads "k launch kit · R seller report". README step 13 namesRtoo. - 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. 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.
GET /listings/:id/reportnow 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.
@media printrules instatic/app.cssadd margins, cap the photo height and keep each row on one page.getListing, so read access followspermit, as the flyer does. It is added to the escaping loop insrc/hostile.test.ts.src/report.test.tsshows 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.scripts/gate.tsdoes not exist in this clone.bun x tsc --noEmitonly printed its help text, because there is no tsconfig. A manual type-check only reported missing type packages, such asbun:sqliteand node types.scripts/lint-design.tsprinted nothing.contract.jsonwas 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