Public: anyone can read this; the crew can change it.
Print an open house sign-in sheet for a listing with an open house, in the agent's brand #43
Reviewed pull #65 at its head: ticked A listing with at least one open house shows a Sign-in sheet link on its page; a listing with none shows no link, and GET /listings/:id/sign-in answers 404 for it.; GET /listings/:id/sign-in is a page for paper (layout kind: "print", the same print bar and Print button as the flyer): the hero photo, address, price, the open house date(s) and times as on the flyer, the agent's name, phone and brand colour, and a table of 15 blank rows: Name · Email · Phone · Working with an agent? (Yes / No).; It is readable by anyone who can read the listing, asked through permit (no cell changes); every field is escaped (add the page to src/hostile.test.ts).; It prints on one US Letter page with no navigation, and passes bun scripts/design-lint.ts; any new class is named in docs/design/areas/ for this area.; Tests: the link appears only with an open house; the page carries both dates and 15 rows; 404 without an open house. The README's open house section says where the sheet is..
Intent: the agent walks out of the meeting with the flyer and the sheet visitors sign at the door, both from the same listing.
Done looks like:
GET /listings/:id/sign-inanswers 404 for it.GET /listings/:id/sign-inis a page for paper (layoutkind: "print", the same print bar and Print button as the flyer): the hero photo, address, price, the open house date(s) and times as on the flyer, the agent's name, phone and brand colour, and a table of 15 blank rows: Name · Email · Phone · Working with an agent? (Yes / No).permit(no cell changes); every field is escaped (add the page tosrc/hostile.test.ts).bun scripts/design-lint.ts; any new class is named indocs/design/areas/for this area.Files I expect:
src/pages/signin.ts(new),src/routes.ts,src/pages/listing.ts,static/app.css,src/hostile.test.ts, a newsrc/signin.test.ts,README.md.Risks: collecting visitor details is not in scope — the sheet is blank paper, nothing is stored. Keep it within
speed.test.ts's budget.Fits: a builder's brief (mason or any builder).