commit dfa872731c22bdb5367c56cbf27f8a18f22a5300
parent 484762bca178702302796e4b8d21ae786e4b65ab
Author: virtualtack <[email protected]>
Date: Sat, 26 Sep 2026 13:09:19 -0700
Snapshot of v1.10-1-g5e89d9b
Diffstat:
5 files changed, 27 insertions(+), 4 deletions(-)
diff --git a/SNAPSHOT.md b/SNAPSHOT.md
@@ -1,7 +1,7 @@
# About this snapshot
This repository is the public release of the OnlyN00bs badge, taken from its private
-development repo at `v1.10` on 2026-09-26. It holds what describes the **production unit
+development repo at `v1.10-1-g5e89d9b` on 2026-09-26. It holds what describes the **production unit
as it is**: the firmware, the Web Bluetooth setup app, the site, the parts list, and the
case.
diff --git a/web/src/assets/badge.css b/web/src/assets/badge.css
@@ -299,3 +299,7 @@ dialog.lightbox figcaption { font-size: 13px; color: #bdbdbd; text-align: center
/* The gallery link at the top of the page (where the TL;DR box was): a plain accent link in
the page's lowercase `//` voice, not a second call-to-action competing with setup. */
.top-link { margin: 20px 0 8px; }
+
+/* The badge page's // photos section: the gallery's first row (three tiles). On a phone the
+ grid is two columns, so the third would sit alone on a second row: show two instead. */
+@media (max-width: 520px) { .gallery-preview figure:nth-child(n+3) { display: none; } }
diff --git a/web/src/gallery/index.html b/web/src/gallery/index.html
@@ -17,7 +17,7 @@
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:image" content="https://badge.virtualshack.io/assets/img/og-badge.jpg">
<!-- ?v= must match CACHE in ../sw.js — same rule as index.html -->
-<link rel="stylesheet" href="../assets/badge.css?v=37">
+<link rel="stylesheet" href="../assets/badge.css?v=38">
<link rel="icon" type="image/svg+xml" href="../assets/icon.svg">
<link rel="manifest" href="../manifest.webmanifest">
<meta name="theme-color" content="#212121">
diff --git a/web/src/index.html b/web/src/index.html
@@ -32,7 +32,7 @@
invisible to visitors for hours after a deploy. A new query = a new edge cache key =
it lands immediately. Safe for offline: sw.js matches with ignoreSearch, so this still
resolves to the precached bare URL. -->
-<link rel="stylesheet" href="assets/badge.css?v=37">
+<link rel="stylesheet" href="assets/badge.css?v=38">
<link rel="icon" type="image/svg+xml" href="assets/icon.svg">
<link rel="manifest" href="manifest.webmanifest">
<meta name="theme-color" content="#212121">
@@ -159,6 +159,25 @@
<li><b>Also not included: anyone's data.</b> Encounter logs and the list of who got which badge
stayed private. The repo is the badge, not the con.</li>
</ul>
+ <!-- generated from the gallery manifest: the first row, once there are photos -->
+ <!-- gallery-preview:begin -->
+ <h2 id="photos">// photos</h2>
+ <div class="gallery gallery-preview">
+ <figure>
+ <a href="gallery/" data-w="1600" data-h="1200"><img src="assets/gallery/thumbs/dc34-01.jpg" alt="A green OnlyN00bs badge on the finder screen beside the official DEF CON 34 badge and a challenge coin, with a purple foot charm on the case"
+ width="720" height="540" loading="lazy" decoding="async"></a>
+ </figure>
+ <figure>
+ <a href="gallery/" data-w="1234" data-h="929"><img src="assets/gallery/thumbs/dc34-02.jpg" alt="A hand holding a purple OnlyN00bs badge on the finder screen, with a green badge on a lanyard behind it"
+ width="720" height="542" loading="lazy" decoding="async"></a>
+ </figure>
+ <figure>
+ <a href="gallery/" data-w="929" data-h="1238"><img src="assets/gallery/thumbs/dc34-03.jpg" alt="A lavender badge with foot and gummy-bear charms, its finder screen listing five nearby badges"
+ width="540" height="720" loading="lazy" decoding="async"></a>
+ </figure>
+ </div>
+ <p class="small"><a href="gallery/">all photos →</a></p>
+ <!-- gallery-preview:end -->
<h2 id="setup">// setup</h2>
diff --git a/web/src/sw.js b/web/src/sw.js
@@ -17,7 +17,7 @@
* there is one version to remember, not two.
*/
-const CACHE = "onlyn00bs-v37";
+const CACHE = "onlyn00bs-v38";
// Resolved against the worker's own location, so it's right whether the site is served at
// / (production) or under a path (a local preview).