GRAVURE PRODUCTION GUIDE · GRV

Production guide

How this magazine got made

Gravure is a fictional print magazine and a real piece of engineering: the Astro-native build in the Brightinfinite Track 2 batch, shipped as pure static output with zero client JavaScript. This page is its colophon, printed in the same two inks as everything else.

01 · The brief received

A print house for the overlooked

The locked brief asked for the publications vertical: an independent print magazine about the overlooked built world, published as issues, with Astro's heart used as designed. The operator expanded the subject in his own hand: not only the substations, corridors, and docks, but the golden-night people, the nightshift photographers, improvisers, electronic music makers, night joggers, meditators, and builders who seize the hours nobody else wants. Ten pieces across three issues carry that expansion.

The brief fixed the materials. Paper #f6f2e9, ink #221f1a, and one stroke: process blue #0f7fb8, the printer's registration color, spent on every link, mark, and folio. Spectral carries display and text; Space Mono does the talking in the margins. Register chambers: THE QUIET PAGE and FAIL-MODE IMAGES. The islands budget allowed one; the light table proved to need none, so the site ships zero.

02 · The collection architecture

Issues, articles, authors: one graph, nineteen pages

Every repeating thing is a typed content collection. Articles reference authors through Astro's reference(), carry their printed folio, and declare their plates as data. Nothing editorial is hardcoded in a component: add a markdown file, and the issue index, light table, author page, and folio sequence all rebuild themselves.

src/content/
  issues/     3 entries   number, title, season, standfirst,
                          pages, cover plate spec, inks
  articles/   10 entries  title, issue, folio, author -> reference('authors'),
                          standfirst, plates[{kind, seed, caption}], body (md)
  authors.json 6 entries  name, role, bio

issues  <-(issue number)--  articles  --(reference)->  authors
   |                            |                          |
/issues/[num]           /articles/[id]             /authors/[id]
light table, index      folio, body, plates        proof strip, index

19 pages statically generated. Client JavaScript shipped: none.

03 · The fail-mode plate engine

Images that were never photographs

No foundry assets exist for this site, so every image is earned procedurally. A plate is a spec, {kind, seed}: a seeded PRNG draws line work for twelve subjects (substations, corridors, freight elevators, long-exposure figures, breath rings) with deliberately shaky lines, then the fail-mode pass degrades it the way the house degrades everything. A turbulence-driven displacement map warps the drawing like a bad photocopy, low-frequency noise tones the ground like a wiped intaglio plate, halftone dot patterns stand in for every continuous tone, and high-frequency grain varnishes the result. Ink only; blue appears solely as crop and registration marks.

The same seed draws the same plate on every build, so the plates are content, not decoration: they live in frontmatter next to the captions that describe them.

// the fail-mode pass, applied to every plate at build time
<filter id="copy-${uid}" x="-4%" y="-4%" width="108%" height="108%">
  <feTurbulence type="turbulence" baseFrequency="0.012 0.028"
                numOctaves="2" seed="${spec.seed % 97}" result="warp"/>
  <feDisplacementMap in="SourceGraphic" in2="warp"
                     scale="${f(2.2 + r() * 2.4)}"
                     xChannelSelector="R" yChannelSelector="G"/>
</filter>
<filter id="grain-${uid}">
  <feTurbulence type="fractalNoise" baseFrequency="0.9" numOctaves="2"
                seed="${(spec.seed * 5) % 89}" stitchTiles="stitch"/>
  <feColorMatrix type="matrix"
    values="0 0 0 0 0.13  0 0 0 0 0.12  0 0 0 0 0.10  0 0 0 0.55 0"/>
</filter>

<rect width="600" height="750" fill="#f1ebdd"/>                  <!-- the stock -->
<rect ... filter="url(#mottle-${uid})" opacity="0.10"/>          <!-- wiped plate tone -->
<g filter="url(#copy-${uid})" transform="rotate(${rot} ...)">    <!-- warped line work -->
  ${art}
</g>
<rect ... filter="url(#grain-${uid})" opacity="0.16"/>           <!-- film grain varnish -->
DEMONSTRATION · SEED 900
The engine, run once for this page. Change the seed and the yard rebuilds itself; keep it and the plate prints identically forever.

04 · The critique record

What each pass found, and what it changed

  1. Pass 01

    Found. The issue three cover plate read as a repeated stick figure, not a long exposure: heads in a tidy row, limbs splayed, no scene around the walker. Contributor index initials were derived from file slugs and printed wrong. Archive card production specs wrapped raggedly onto a second line. Issue index rows swelled to three lines because the meta column carried entire standfirsts. One hero fact line was confusing copy.

    Changed. Rebuilt the figure generator with a walking gait: alternating limb swing, a bobbing head, a street lamp with a halftone light cone to give the exposure a scene. Initials now derive from names. Card specs cut to pages, pieces, and screen ruling. Issue rows carry the author's name only. The fact line now reads "two inks on uncoated stock."

    Upgrade. Blue page-corner crop marks on every page, printed at the sheet's corners the way the press prints them on untrimmed stock.

  2. Pass 02

    Found. The contributor index printed "1 pieces" against two of the masthead names. The kicker's blue rule dangled detached at the line end when a kicker wrapped on mobile. The reworked figure plate still read as a row of touching rings before it read as a walker, because ghost spacing exactly matched the head diameter. The article page itself held up: body measure, drop cap, and margin plates all sat correctly.

    Changed. Pluralization now counts properly. The kicker rule drops away under 640px. The exposure ghosts spread to 46px steps with smaller heads and a deeper bob, so the gait reads before the geometry does.

    Upgrade. The colophon page: the production record for the whole edition, with plate counts, folio totals, and contributor numbers computed from the collections at build time, linked from the footer spec block.

  3. Pass 03

    Found. The colophon left its entire right half as dead paper at desktop width, quiet in the wrong way. The facade plates hung their fire-escape zigzag across the window grid itself, scribble instead of structure. The light table, ghost numeral, and mobile recompositions held up under inspection.

    Changed. The colophon now sets its record and its per-issue notes as two columns on wide stock, with a correction note in the margin register. The fire escape moved outside the facade frame where the building actually keeps it, with its own stringer and landing lines.

    Upgrade. A print stylesheet good enough to bind: crops, navigation, and furniture drop away, tone tiers return to white stock, plates keep their frames and refuse to break across pages.

← Back to the archive