From 8ec3f51792923fd4db5f8e934ad08d25f61bfc99 Mon Sep 17 00:00:00 2001
From: Devin Willis
Date: Wed, 26 Aug 2026 14:49:55 -0400
Subject: [PATCH] Add a scannable RSVP QR code, print version included
---
public/assets/rsvp-qr.svg | 1 +
public/css/style.css | 15 +++++++++++++++
public/images/rsvp-qr.png | Bin 0 -> 7747 bytes
site.config.js | 1 +
views/index.ejs | 13 +++++++++++++
5 files changed, 30 insertions(+)
create mode 100644 public/assets/rsvp-qr.svg
create mode 100644 public/images/rsvp-qr.png
diff --git a/public/assets/rsvp-qr.svg b/public/assets/rsvp-qr.svg
new file mode 100644
index 0000000..a2a4e53
--- /dev/null
+++ b/public/assets/rsvp-qr.svg
@@ -0,0 +1 @@
+
diff --git a/public/css/style.css b/public/css/style.css
index 1de21d2..460894e 100644
--- a/public/css/style.css
+++ b/public/css/style.css
@@ -361,6 +361,20 @@ form { margin-top: 2rem; }
.form-status { margin-top: 0.9rem; font-size: 0.88rem; color: #fca5a5; min-height: 1.2em; }
.fine { margin-top: 0.9rem; font-size: 0.78rem; color: var(--fine); text-align: center; }
+.qr {
+ display: flex; align-items: center; gap: 1.4rem;
+ margin-top: 2.2rem; padding-top: 1.8rem;
+ border-top: 1px solid var(--hairline);
+}
+.qr-card {
+ flex: none; width: 108px; height: 108px; padding: 8px;
+ background: #fff; border-radius: var(--r-control); display: block;
+}
+.qr-card img { width: 100%; height: 100%; }
+.qr-title { font-family: "Space Grotesk", sans-serif; font-weight: 600; color: var(--text); margin-bottom: 0.3rem; }
+.qr-copy p { font-size: 0.88rem; color: var(--muted); }
+.qr-copy a { color: var(--accent2); text-decoration: none; border-bottom: 1px solid var(--border-hover); }
+
.rsvp-done h3 { font-size: 1.4rem; font-weight: 700; }
.rsvp-done p { margin: 0.8rem 0 1.2rem; color: var(--muted); }
@@ -421,6 +435,7 @@ form { margin-top: 2rem; }
.pitch { padding: 5rem var(--gut); }
.expect { padding: 5rem var(--gut); }
.rsvp-panel { padding: 1.9rem 1.4rem; }
+ .qr { flex-direction: column; align-items: flex-start; gap: 1rem; }
.foot { flex-direction: column; align-items: flex-start; }
}
diff --git a/public/images/rsvp-qr.png b/public/images/rsvp-qr.png
new file mode 100644
index 0000000000000000000000000000000000000000..8659d6fa03f1f8c30a66ca7f39c0ab87f58b7688
GIT binary patch
literal 7747
zcmeHMZERCj816>1Sd!_FY77uUqKW-66C`}pIYyPBQ0G=8I07bi1_Uc)i$V86w{??+
z1Ovg?;K<505*ZK>=h#4@bgf%NS?s2RF*mqv7ugzM>n*Ez?`+rWbI!Tl#+Uj>xF-HN
zr#<&}Iq!Mj=Xsy!Z0E|H<*CzWPFJZ^sm2w{R;g5Kd{nC*Nx@{Bowi-2dNO8Q_R{L&
zq~ULycISQnsoJyQ?aEdCwyZZTJC{FJ+!m;`8=i{)5uKBSUmVTGP_a#m@qmx~r6YQ>
zeEt9Be{d#(Zm`f4uyI!X@j{bW>vIll8m=oHbUEgZ)U|Bmhq9bHGo~~;9qI{bVvSb*
zP>+I-+19pa8=n&QhBQBI7OMQ$T#m-!y6}9TbF4dbzS`%s-14Qy9GtfNoFao5*SIf*
zG=^VYv&zrW{gQ33k@IqmtXlQv{>-rsHnE3e-Bx`p$El0$67t2eXHfkwx-=M979?Z5
z=)j=5rG(|ERu#7wnrd7{k-b8GYm0TXLC9Y>QWwr}62
z#?DVzySE5c^-b39>n=yGQ|B!-wT}9{sIMe(w-QeJuAK8G@ubgLDShbF9Vc@QXWs}^
zmr#rY{K!drS22)NtzhC5bg?6xHju${r552}4+BWYRGi2tAG>o=V^}Y!#ZESw|T}lBI)y=$Lh8p~9=bI0S$
z#d(w5h9sP#Ui)lnMi)I1L
zsYt^Vy}{e6<}@c{EHO$%FF{ZY6fs#vfkrSzt8~iE19_>^Hvd1-w@_$P{Ra`ad<0Gq
z%?V-G!W8&a*bPL>eX?sGW3UX0=EILp2(kCxkvoGM00j;!t!Skey_*WFnVA6M_nw
z35-$&b(>8x%6fzxb`7;@44Sg6C(=vl9f4fqc}yh<@<7QMAs~@1a$SjQB$+|UAz(3F
zpiptxF;eG|&P<{V%9m%iVse(mS`bMYRmixuBsxUNqyar8cQE2gh)72_rni%<7;(p^
zj(dp+hCc>v%x5f#WRa`CmYRg04BM7ov8`6AQj*F40Y>m&0M8Fe>aT7FDzY!y8eUy=
zf~&M|4>)uh&)F3GW?wJ)VPqzTytk%d{Bbjeijq`}&oz=ZGPDrGzy7kIjeoHfR|283
zX{9&z>tdNg>p;=|NR|J6-Z8f}ay2WsxKbMQ>CG<$H8#^j+~|GI%aA0tcb2sA-w597
z&XUo+R)6WW{W|j*!FzNo=pP$D&7L&i$sl_ozxZrM@cf!kS@SSnN)Kw>pFg-$zfUmt
zPQIY6Fkp|z5MF~EQ+n|H34A1ZnT#}+Ewqkxq?~4*$=nBL!62
zT`@;Bwo9&pfaG-*h_kWv?sQY@2c358c?eZE){SLrs4ODKOe%A2VW(EqJshCiwf!mE
z;B_%no5#>cBH$fwu-)g@MmAt2my2%fVGjVP4frTJLS^mz^R)Wf`FD|>2ao%|3Ww3p
t_zl1G1ooDOne email a week at most. Unsubscribe any time.
+
+
+
+
+
+
+
Point a phone at this.
+
It opens this page straight at the RSVP. Screenshot it for a story, or grab the print version for flyers.
+
+
+
You are on the list.
Check your inbox for a confirmation. See you <%= isTonight ? "tonight" : nextLong %> at <%= V.name %>, <%= V.street %>, <%= site.startTime %>. Bring your ideas and a valid ID.