diff --git a/README.md b/README.md index 91294fe..2bcf8a1 100644 --- a/README.md +++ b/README.md @@ -74,6 +74,14 @@ Both functions authenticate with a scoped `email + crm` key held by the paused agent runs nothing. It exists only because an API key cannot mint another API key. Deleting it revokes the key and breaks both functions. +## The printable flyer + +`public/assets/founders-break-flyer.pdf` is a one-page US Letter flyer, linked +from the footer and from the confirmation someone sees right after they RSVP, +which is the moment they might think about bringing people. The source that +generates it lives in `design/` with regeneration instructions; edit that, do not +re-design the PDF. + ## The QR code `public/images/rsvp-qr.png` and `public/assets/rsvp-qr.svg` both encode diff --git a/design/README.md b/design/README.md new file mode 100644 index 0000000..743d6d9 --- /dev/null +++ b/design/README.md @@ -0,0 +1,25 @@ +# Flyer source + +`flyer.html` is the source for `public/assets/founders-break-flyer.pdf`. It is +not served by the site; it lives here so the flyer can be regenerated rather +than re-designed when a detail changes. + +US Letter, one page, printed on white on purpose: a full-bleed dark flyer drinks +toner and collapses to a solid block on the mono laser printers in most campus +libraries. The blueprint line art carries the brand and survives a black-and-white +print intact. + +Regenerate after editing (needs Chrome and playwright): + +```js +const { chromium } = require('playwright'); +const b = await chromium.launch({ executablePath: '/Applications/Google Chrome.app/Contents/MacOS/Google Chrome' }); +const p = await b.newPage({ viewport: { width: 816, height: 1056 }, deviceScaleFactor: 2 }); +await p.goto('file:///abs/path/design/flyer.html', { waitUntil: 'networkidle' }); +await p.evaluate(() => document.fonts.ready); +await p.pdf({ path: '../public/assets/founders-break-flyer.pdf', width: '8.5in', height: '11in', + printBackground: true, margin: { top: '0', right: '0', bottom: '0', left: '0' } }); +``` + +Check `document.body.scrollHeight - 1056 === 0` before shipping: anything over +spills onto a second page, and the QR is the first thing to fall off. diff --git a/design/flyer-diagram.png b/design/flyer-diagram.png new file mode 100644 index 0000000..0c0bf08 Binary files /dev/null and b/design/flyer-diagram.png differ diff --git a/design/flyer.html b/design/flyer.html new file mode 100644 index 0000000..d7f4d8b --- /dev/null +++ b/design/flyer.html @@ -0,0 +1,167 @@ + + + + +The Founder's Break - printable flyer + + + + + + +
+ +
+

UF Startup Pool Social

+

The Founder’s
Break

+

Engineers, designers, business minds and anyone building something from the ground up. Same bar, same tables, every week.

+
+
+ +
+ +
+ +
+
When
Every Thursday
+
Time
7:00 to 9:00 PM
+
Where
Silver Q225 W University Ave
+
Entry
Free18 and over, bring ID
+
+ +
+
+

We are building Gainesville’s startup culture, one terrible pool shot at a time.

+
+

✓Zero pool skills required. Most of us are not good at this.

+

✓No pitches, no entry fee, no name tags. Grab a cue and talk shop.

+

✓Meet your next co-founder. Technical, design and business people in one room.

+
+
+ +
+ +

Scan to RSVP

+

foundersbreak.onetouch.studio

+
+
+ + + +
+ + diff --git a/design/onetouch-flyer-mark.svg b/design/onetouch-flyer-mark.svg new file mode 100644 index 0000000..b98e081 --- /dev/null +++ b/design/onetouch-flyer-mark.svg @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/design/qr-print.png b/design/qr-print.png new file mode 100644 index 0000000..8659d6f Binary files /dev/null and b/design/qr-print.png differ diff --git a/public/assets/founders-break-flyer.pdf b/public/assets/founders-break-flyer.pdf new file mode 100644 index 0000000..35ed45a Binary files /dev/null and b/public/assets/founders-break-flyer.pdf differ diff --git a/public/css/style.css b/public/css/style.css index c9cf170..5e2c579 100644 --- a/public/css/style.css +++ b/public/css/style.css @@ -464,6 +464,8 @@ form { margin-top: 2rem; } control, so it should not paint a focus ring. */ .rsvp-done:focus, .rsvp-done:focus-visible { outline: none; } .rsvp-done h3 { font-size: 1.4rem; font-weight: 700; } +.done-extra { margin-top: 1rem; font-size: 0.88rem; color: var(--muted); } +.done-extra a { color: var(--accent2); text-decoration: none; border-bottom: 1px solid var(--border-hover); } .rsvp-done p { margin: 0.8rem 0 1.2rem; color: var(--muted); } /* ── Footer ───────────────────────────────────────────────── */ diff --git a/public/images/flyer-preview.png b/public/images/flyer-preview.png new file mode 100644 index 0000000..035a278 Binary files /dev/null and b/public/images/flyer-preview.png differ diff --git a/views/index.ejs b/views/index.ejs index 5de834b..348490f 100644 --- a/views/index.ejs +++ b/views/index.ejs @@ -330,6 +330,7 @@

You are on the list.

<%= isTonight ? "Tonight" : nextLong %> at <%= V.name %>, <%= V.street %>, <%= site.startTime %>. A confirmation is on its way to your inbox.

Add the whole series to your calendar +

Bringing people? Printable flyer (PDF)

@@ -343,6 +344,7 @@ Hosted by <%= site.host.name %> + Printable flyer (PDF) <%= site.host.email %> <%= V.name %>, <%= V.street %>