# Suburb posters Printable A4 posters for pinning around town — **landscape and portrait (vertical) of each** — carrying that suburb's reserved house referral code. Both `.html` and print-ready `.pdf` are committed. | Suburb | Code | Files | |---|---|---| | West Ryde | `WR2114` | `west-ryde-poster{,-portrait}.{html,pdf}` | | Meadowbank | `MB2114` | `meadowbank-poster{,-portrait}.{html,pdf}` | | _(business cards, no poster)_ | `TF1000` | — | All three codes are reserved in `tutorsfirst/payments/migrations/0017_reserve_campaign_codes.py`. The codes are **house/campaign codes**: nobody owns them, so nothing is paid to a referrer — the newcomer gets the benefit. A student/parent signing up with one earns a free connection; a tutor earns a free week of Featured once approved. Uptake per code lands in the Friday summary email (`manage.py weekly_signups`). ## Printing Hand the `.pdf` to the print shop — it is already A4 at the right orientation, single page, with the backgrounds baked in. Printing the `.html` yourself instead: open in a browser → Print, then set **Paper** A4 in the matching orientation, **Margins** None (the page box carries its own), and **Background graphics ON** — otherwise the navy masthead and cream page print white. ## Regenerating Everything is generated from `build_posters.py` — edit the template there, not the HTML. It needs `segno` for the QR codes, which is deliberately **not** a project dependency (the generated HTML inlines the QR as SVG, so viewing needs nothing). The PDFs are printed from that same HTML by headless Chrome, so the two can't drift: ```sh python3 -m pip install --target /tmp/pylibs segno PYTHONPATH=/tmp/pylibs python3 docs/posters/build_posters.py # HTML + PDF PYTHONPATH=/tmp/pylibs python3 docs/posters/build_posters.py --no-pdf # HTML only ``` Each poster carries two QR codes — "register as a student/parent" and "list as a tutor" — both pointing at the signup with `?ref=`, so the code is prefilled. To add a suburb: reserve its code in a migration, add an entry to `POSTERS` in `build_posters.py`, re-run.