Put a code on the back of a card, a picture on the front, and the page in the app
Some checks failed
CI / backend (push) Failing after 7m17s
CI / naming (push) Failing after 7m14s
CI / migrations-mysql (push) Has been cancelled
CI / frontend (push) Has been cancelled

The back side landed last commit carrying text by default, and a back laid out
as text-only renders no code box at all. So a two-sided run came out with a
blank reverse, which reads as the code having failed rather than as a setting
doing exactly what it said. The back now defaults to carrying a code, takes its
own content per row, and chooses its own symbology - a QR on the front that
opens the record, a CODE128 on the back that the bench scanner already reads.
Text-only is refused while the back carries a code, and the contradiction is
reconciled on load, so a saved setting from the broken combination repairs
itself rather than printing another blank box of cards.

A picture can go on a label: above the code, beside it, or behind everything as
a watermark, on either side or both. The file is read in the browser and never
sent anywhere, which is what makes it usable at an air-gapped site, and it is
deliberately not saved between visits - a data URL runs to megabytes and would
take every sizing value with it when the quota gave out. The watermark says
plainly that it costs the scanner contrast.

The generator was a full-screen route with no navigation and a narrow column of
controls against the left edge. That shape exists so a print cannot put the
sidebar on label stock, which is a real hazard and the reason core's label pages
are built that way - but it is a hazard the print stylesheet can answer, and
style.css now hides the shell at print time. A tool someone spends ten minutes
in gets the navigation and the full width; the stock still gets nothing but
labels, confirmed against a print PDF rather than a preview.

Two smaller things found while checking the above. A test print paired each page
with a rendered code by loop position, while the codes are keyed to position in
the whole run, so a two-sided test card could carry the wrong code; the index
now travels with the page. And the back's dotted preview outline outspecified
the print reset, drawing a dashed rule down the edge of every second card.
This commit is contained in:
cproudlock
2026-08-21 10:59:28 -04:00
parent 1593ee8204
commit 1abb6430f5
4 changed files with 303 additions and 73 deletions

View File

@@ -31,10 +31,37 @@ ADR-007 and ADR-002.
- **Contents can be positioned inside the label without moving the label.**
Align and Vertical place the code and caption block anywhere on the stock,
and Content X/Y nudge it from there. The existing X/Y nudge kept its
behaviour and is now labelled Media X/Y: it moves the whole printed area, for
behavior and is now labeled Media X/Y: it moves the whole printed area, for
a printer whose origin is off, which is a different problem from composing a
label.
- **A picture can go on the label.** Pick an image once and it prints on every
label - above the code, beside it, or behind everything as a watermark - on
the front, the back, or both. The file never leaves the browser, so an
air-gapped site can use it, and it is deliberately not saved between visits:
a data URL runs to megabytes and would take every sizing value with it when
the storage quota gave out.
- **The back can carry its own code, in its own symbology.** "Back carries" now
defaults to a code rather than text, takes per-row content from the CSV
`back` column, and has its own QR/CODE128 choice - a QR on the front that
opens the record, a CODE128 on the back that the bench scanner already reads.
A back set to carry a code can no longer be laid out as text-only: that
combination printed a blank card that looked like the code had failed, and it
is corrected on load for anyone who already saved it.
### Fixed
- **The generator prints from inside the app shell.** It was a full-screen
route with no sidebar and a narrow column of controls on the left. It is now
an ordinary page - navigation, full width - and `style.css` hides the shell at
print time, so the stock still gets nothing but labels. Verified against a
real print PDF rather than a preview.
- A test print paired each page with a code by loop position while the codes
are keyed to position in the whole run, so a two-sided test card could carry
the wrong code. The page index now travels with the page.
- The back label's dotted preview outline outspecified the print reset and drew
a dashed rule down the edge of every second card.
### Changed
- CSV parsing and page building moved out of the generator component into