Diff -- /var/www/vhosts/3dshawn.com/site1/TEMPLATES/named_releases.html
Diff
/var/www/vhosts/3dshawn.com/site1/TEMPLATES/named_releases.html
modified on local at 2026-07-12 00:19:41
Added
+23
lines
Removed
-2
lines
Context
88
unchanged
Blobs
from dd23bd2d3645
to def89dd3ea6d
to def89dd3ea6d
Unified diff
Naive LCS-based line diff. Additions in emerald, deletions in rose. Both sides decompressed live from BLOB_STORE.| 1 | 1 | <div class="page-head"> |
| 2 | 2 | <span class="page-eyebrow"><span class="dot"></span> Bookmark</span> |
| 3 | 3 | <h1 class="page-title">Named releases</h1> |
| 4 | 4 | <p class="page-subtitle">Retroactively bookmark a moment. "Before the schema refactor." "Customer verified this worked." "Before I fired the intern." Every blob referenced by a named release is protected from auto-purge, so restore-to-moment always works — scoped portfolio-wide or to a single site.</p> |
| 5 | 5 | </div> |
| 6 | 6 | |
| 7 | 7 | <div class="module glow-emerald" style="margin-bottom:16px"> |
| 8 | 8 | <div class="module-head"><div class="left"> |
| 9 | 9 | <div class="module-icon"><svg viewBox="0 0 24 24" width="14" height="14" fill="none" stroke="currentColor" stroke-width="2"><path d="M20 13V7a2 2 0 0 0-2-2h-4l-2-3H6a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h5"/><path d="M14 19l2 2 4-4"/></svg></div> |
| 10 | 10 | <div class="module-title">Create a bookmark</div> |
| 11 | 11 | <span class="module-subtitle">Names the current moment. Everything captured up to now becomes restorable from this label forever.</span> |
| 12 | 12 | </div></div> |
| 13 | 13 | <div class="module-body"> |
| 14 | 14 | <form method="post" action="/named_releases.cgi" style="display:flex;flex-direction:column;gap:12px"> |
| 15 | 15 | <input type="hidden" name="save" value="1"> |
| 16 | 16 | |
| 17 | 17 | <div style="display:flex;gap:12px"> |
| 18 | 18 | <label style="flex:1;display:flex;flex-direction:column;gap:4px"> |
| 19 | 19 | <span class="rb-label">Name</span> |
| 20 | 20 | <input type="text" name="name" required placeholder="e.g. before-schema-refactor" |
| 21 | 21 | style="background:var(--bg-1);color:var(--text);border:1px solid var(--border);border-radius:8px;padding:8px 12px;font-family:var(--mono);font-size:12.5px"> |
| 22 | 22 | </label> |
| 23 | 23 | <label style="flex:2;display:flex;flex-direction:column;gap:4px"> |
| 24 | 24 | <span class="rb-label">Description</span> |
| 25 | 25 | <input type="text" name="description" placeholder="Optional context" |
| 26 | 26 | style="background:var(--bg-1);color:var(--text);border:1px solid var(--border);border-radius:8px;padding:8px 12px;font-size:12.5px"> |
| 27 | 27 | </label> |
| 28 | 28 | <label style="width:160px;display:flex;flex-direction:column;gap:4px"> |
| 29 | 29 | <span class="rb-label">By</span> |
| 30 | 30 | <input type="text" name="released_by" value="Operator" |
| 31 | 31 | style="background:var(--bg-1);color:var(--text);border:1px solid var(--border);border-radius:8px;padding:8px 12px;font-size:12.5px"> |
| 32 | 32 | </label> |
| 33 | 33 | </div> |
| 34 | 34 | |
| 35 | 35 | <label style="display:flex;flex-direction:column;gap:4px"> |
| 36 | 36 | <span class="rb-label">Scope <span class="dim" style="text-transform:none;letter-spacing:0;font-size:10.5px">— leave "All monitored sites" for a portfolio-wide bookmark</span></span> |
| 37 | 37 | <select name="scope_monitor_id" style="background:var(--bg-1);color:var(--text);border:1px solid var(--border);border-radius:8px;padding:8px 12px;font-size:12.5px"> |
| 38 | 38 | <option value="0">All monitored sites (portfolio-wide)</option> |
| 39 | 39 | [loop:@monitors] |
| 40 | 40 | <option value="$mid">$label</option> |
| 41 | 41 | [/loop] |
| 42 | 42 | </select> |
| 43 | 43 | </label> |
| 44 | ||
| 45 | <div style="display:flex;gap:12px"> | |
| 46 | <label style="flex:1;display:flex;flex-direction:column;gap:4px"> | |
| 47 | <span class="rb-label">Drift alerts <span class="dim" style="text-transform:none;letter-spacing:0;font-size:10.5px">(optional)</span></span> | |
| 48 | <select name="alert_delivery_kind" style="background:var(--bg-1);color:var(--text);border:1px solid var(--border);border-radius:8px;padding:8px 12px;font-size:12.5px"> | |
| 49 | <option value="none">Off</option> | |
| 50 | <option value="generic_webhook">Generic HTTP webhook</option> | |
| 51 | <option value="slack">Slack webhook</option> | |
| 52 | <option value="discord">Discord webhook</option> | |
| 53 | </select> | |
| 54 | </label> | |
| 55 | <label style="flex:2;display:flex;flex-direction:column;gap:4px"> | |
| 56 | <span class="rb-label">Delivery URL <span class="dim" style="text-transform:none;letter-spacing:0;font-size:10.5px">— fires when any pinned file drifts from its pinned SHA</span></span> | |
| 57 | <input type="text" name="alert_delivery_url" placeholder="https://hooks.slack.com/... (leave blank to disable)" | |
| 58 | style="background:var(--bg-1);color:var(--text);border:1px solid var(--border);border-radius:8px;padding:8px 12px;font-family:var(--mono);font-size:11.5px"> | |
| 59 | </label> | |
| 60 | </div> | |
| 44 | 61 | |
| 45 | 62 | <div style="display:flex;justify-content:flex-end"> |
| 46 | 63 | <button type="submit" class="tr-chip is-active" style="border:none;padding:8px 18px">Save bookmark</button> |
| 47 | 64 | </div> |
| 48 | 65 | </form> |
| 49 | 66 | </div> |
| 50 | 67 | </div> |
| 51 | 68 | |
| 52 | 69 | <div class="module glow-teal"> |
| 53 | 70 | <div class="module-head"><div class="left"> |
| 54 | 71 | <div class="module-icon"><svg viewBox="0 0 24 24" width="14" height="14" fill="none" stroke="currentColor" stroke-width="2"><line x1="4" y1="9" x2="20" y2="9"/><line x1="4" y1="15" x2="20" y2="15"/><line x1="10" y1="3" x2="8" y2="21"/><line x1="16" y1="3" x2="14" y2="21"/></svg></div> |
| 55 | 72 | <div class="module-title">All bookmarks</div> |
| 56 | 73 | <span class="module-subtitle">$total bookmarks. Protected ones (default) survive auto-purge; unlocked ones are eligible for cleanup after the retention window.</span> |
| 57 | 74 | </div></div> |
| 58 | 75 | <div class="module-body tight"> |
| 59 | 76 | [if:$has_rows] |
| 60 | 77 | <table class="tbl"> |
| 61 | 78 | <thead><tr> |
| 62 | 79 | <th>Name</th> |
| 63 | 80 | <th style="width:150px">Scope</th> |
| 64 | 81 | <th style="width:110px">By</th> |
| 65 | <th style="width:120px">Protection</th> | |
| 66 | <th style="width:150px">Moment</th> | |
| 82 | <th style="width:110px">Protection</th> | |
| 83 | <th style="width:130px">Moment</th> | |
| 84 | <th style="width:150px">Actions</th> | |
| 67 | 85 | </tr></thead> |
| 68 | 86 | <tbody> |
| 69 | 87 | [loop:@rows] |
| 70 | 88 | <tr> |
| 71 | 89 | <td><strong>$name</strong><div class="dim" style="font-size:11.5px;margin-top:2px">$description</div></td> |
| 72 | 90 | <td> |
| 73 | 91 | <span class="pill $scope_pill" style="font-size:10px">$scope_lbl</span> |
| 74 | 92 | <div class="mono dim" style="font-size:10.5px;margin-top:3px">$scope_h</div> |
| 75 | 93 | </td> |
| 76 | 94 | <td class="dim">$released_by</td> |
| 77 | 95 | <td><span class="pill $lock_pill">$lock_lbl</span></td> |
| 78 | 96 | <td class="mono dim"><span class="ts" data-ts="$released_epoch" data-fmt="datetime">$released_h</span></td> |
| 97 | <td> | |
| 98 | <a href="/restore_release.cgi?release_id=$id" class="tr-chip" style="padding:3px 10px;font-size:11px">Restore all</a> | |
| 99 | </td> | |
| 79 | 100 | </tr> |
| 80 | 101 | [/loop] |
| 81 | 102 | </tbody> |
| 82 | 103 | </table> |
| 83 | 104 | [/if] |
| 84 | 105 | [if:!$has_rows] |
| 85 | 106 | <div style="padding:36px 14px;text-align:center;color:var(--text-dim);font-size:13.5px"> |
| 86 | 107 | No bookmarks yet. Save your first one above. |
| 87 | 108 | </div> |
| 88 | 109 | [/if] |
| 89 | 110 | </div> |
| 90 | 111 | </div> |