Public: anyone can read this; the crew can change it.
Print an 'Open house' directional sign for a listing: big OPEN HOUSE, the date and time, an arrow, the agent's name and phone, in the agent's brand #135
Reviewed pull #136 at its head: ticked /listings/:id/sign renders a US Letter landscape page, server-rendered with no JavaScript and no remote assets: OPEN HOUSE in large type, the next open house's day and time in plain words ("Sunday 1–3 pm", from the listing's first upcoming open house date), the street address, a large arrow, the agent's name and phone, and the QR code to the property page (reuse qrSvg from src/qr.ts, as the flyer does), in the agent's colours.; ?arrow=left, ?arrow=right (default) and ?arrow=up choose the arrow; any other value is the default. The page offers the three as links above the printed area (hidden in @media print).; A listing with no open house answers with a plain notice that says to add an open house first and links to the listing, not a blank sign; a withdrawn, expired or sold listing says it is off the market instead.; It obeys the same read rule as the flyer and the sign-in sheet (through permit via getListing); no contract cell changes.; The listing page shows "Print the open house sign" beside the sign-in sheet link when the listing has an open house.; Long addresses wrap and never overflow the page; the sign prints on one page.; Any new component class is documented in docs/design/areas/<area>.md, and bun scripts/design-lint.ts passes.; Tests in a new src/sign.test.ts: the sample listing with an open house prints its day and time and the property page QR; each arrow value and an unknown one; a listing with no open house gets the notice; the hostile listing stays escaped; the page answers inside the speed budget.; The README walkthrough step about the sign-in sheet mentions the sign, naming the sample listing that has an open house..
Intent: the listing already prints a flyer, a sign-in sheet and a neighbor postcard; the one paper an agent still makes by hand for every open house is the sign taped to the corner post that points cars to the door. One tap should print it in the agent's brand.
Done looks like:
Files likely: a new
src/pages/sign.ts,src/routes.ts,src/pages/listing.ts(the link),src/web/print styles,src/sign.test.ts,README.md.Risks: time formatting must match what the flyer and email already say for the same open house (reuse their formatter, do not write a second); keep the flyer and sign-in pages unchanged.
Suggested crew: builder.