Event Badge
Batch-generated attendee name badge, standard 4x3in badge stock, Landscape or Portrait, optimized for CSV roster generation to PNG.
1 / 2
Event Badge
A batch-generated conference/event attendee name badge, one PNG per row straight from a roster CSV - attendee name, organization, a tier/role, and a QR code, on a clean modern layout available in either orientation on the same standard 4x3in badge stock.
What's included
- A Badge Orientation dropdown (Landscape/Portrait) - same physical card size either way (101.6mm x 76.2mm), just held the other way, with two full layout partials so elements reflow properly rather than just rotating in place
- A curved navy/cyan header band and a computed 16-point starburst tier emblem - both real vector SVG artwork, not raster images
- A dropdown tier (Attendee/Speaker/VIP/Staff) and a QR code (
scanCodeblock) driven by a plain text field roster.csv- a ready-to-run sample batch input (see below); aportraitpreset to preview the other orientation without re-filling the form
Examples for Authors
- CSV batch generation to PNG - this project's whole point: run
roster.csv(columns:attendee_name,organization,tier,qr_data- matchingform.json's own field ids) through the Batch menu item or--batch --output-type pngto generate one badge PNG per row, withdefaultsupplying the event-level fields the CSV doesn't drive (event name, date, orientation). - Two layout partials picked by
process.js, not one conditioned by per-blockconditions -overlay_landscape.json/overlay_portrait.jsondiffer enough (the tier badge and QR code sit side-by-side in the wider Landscape layout but stacked in Portrait's taller, narrower one) that reflowing the same blocks conditionally would be more contorted than just authoring two versions;process.jspicks the page size and the overlay filename together off oneorientation == "Portrait"check. - A layout graphic + an embellishment, both hand-authored SVG -
header_banner.svg(a curved/wavy shape behind the event name, built frompathcurves) andtier_accent.svg(a 16-point rosette with genuinely computed - not eyeballed - point coordinates), both reusing the same navy/cyan palette as the rest of the layout; the sameheader_banner.svgis reused in both orientations at a different aspect ratio viafit: "cover", no second asset needed. - Reformatting an engine-side date -
process.jsreformatsevent_datewithformatDate()beforeoverlay()reads it (QuickJS has noIntl.*, sotoLocaleDateString()'s locale/options are silently ignored, not applied -formatDate()is the portable, reliable alternative every date-bearing project in this library uses).
Customizing
Swap the tier dropdown's options and tier_accent.svg's color to match your own event's branding, or recolor header_banner.svg entirely for a different palette. Add your own event logo via the optional field.

