bunch of shit
This commit is contained in:
@@ -32,6 +32,7 @@
|
||||
<div class="links">
|
||||
<a class="card" id="l-watch" href="#"><b>Recordings & clips</b><span>Jellyfin — by streamer, by day/week/month</span></a>
|
||||
<a class="card" id="l-live" href="#"><b>Live now</b><span>every active stream in one page, audio follows the window you click</span></a>
|
||||
<a class="card" href="/onboarding/"><b>Onboarding checklist</b><span>for whoever is onboarding someone: tick the topics as you cover them</span></a>
|
||||
<a class="card" href="/logout"><b>Sign out</b><span>ends the Discord session for all Vanguard sites</span></a>
|
||||
</div>
|
||||
<details><summary>How watching works</summary>
|
||||
@@ -65,7 +66,7 @@
|
||||
<ol>
|
||||
<li>OBS → Tools → WebSocket Server Settings → enable, set a password.</li>
|
||||
<li>OBS → Docks → Custom Browser Docks → add <code id="dockurl">…/dock/</code>; log in with Discord inside the dock.</li>
|
||||
<li>OBS → Settings → Output → encoder <b>B-frames: 0</b> (NVENC "Max B-frames"). With B-frames the live page cannot play you over WebRTC and falls back to a delayed HLS view.</li>
|
||||
<li>Make an OBS <b>profile named Vanguard</b> once (Profile → New) and in it set Output → Advanced → your encoder with <b>B-frames 0</b> (NVENC "Max B-frames", x264 <code>bf=0</code>) and keyframe interval 2 s. The dock switches OBS to that profile on every Go Live, and on startup if you tick the box in its settings; after Go Live it checks what the server actually received and turns red if B-frames got through. With B-frames the live page cannot play you over WebRTC and falls back to a delayed HLS view.</li>
|
||||
<li>Dock → Settings: OBS WebSocket password (the rest is prefilled). Optional title prefix/suffix (<code>{date}</code> = today).</li>
|
||||
<li>Dock → Timecode band → <b>Add band + clock source</b> while not streaming (gives editors a frame-accurate timecode).</li>
|
||||
<li>Per stream: type a title, <b>Go Live</b>. The dock mints a 12-hour token and sets your stream key itself.</li>
|
||||
@@ -74,7 +75,7 @@
|
||||
<details><summary>Rules worth knowing</summary>
|
||||
<ul>
|
||||
<li>Everything streamed is recorded and visible to editors and members. <b>Dump tonight</b> throws a night away (3-day undo by an admin).</li>
|
||||
<li>Titles: letters, digits, <code>_ . -</code>; no double underscore; the dock shows the final name as you type.</li>
|
||||
<li>Titles: letters, digits, <code>_ -</code>; no dots (the server reserves <code>.webrtc</code>); no double underscore; the dock shows the final name as you type.</li>
|
||||
<li>Browser Go Live needs Windows + Chrome/Edge 141+ for window audio and the GPU encoder; on Linux use OBS.</li>
|
||||
</ul>
|
||||
</details>
|
||||
@@ -120,7 +121,7 @@
|
||||
<h2>Media admin</h2>
|
||||
<p class="lead" data-group="media-admins" data-yes="You are in <code>media-admins</code>: full rights on every folder, trash, Syncthing, dump anyone's night." data-no="Admin view — you are <b>not</b> in <code>media-admins</code>: copyparty will show you nothing and <code>/sync/</code> will 403 until you get the role."></p>
|
||||
<div class="links">
|
||||
<a class="card" id="l-stuck" href="#"><b>Stuck recordings</b><span>never published — see why, retry or bin</span></a>
|
||||
<a class="card" id="l-stuck" href="#"><b>Streaming</b><span>who is live and losing packets; recordings that never published</span></a>
|
||||
<a class="card" id="l-trash" href="#"><b>Trash</b><span>dumped nights, purged after 3 days</span></a>
|
||||
<a class="card" id="l-sync" href="#"><b>Syncthing</b><span>device pairing, folder states</span></a>
|
||||
<a class="card" href="/whoami"><b>Who am I</b><span>identity headers as the apps see them</span></a>
|
||||
@@ -181,8 +182,8 @@ $('l-git').href = sub('git'); $('l-bot').href = sub('bot'); $('l-auth').href = s
|
||||
$('l-jfadmin').href = sub('watch') + '/web/#/dashboard'; $('l-gitadmin').href = sub('git') + '/-/admin';
|
||||
$('l-dock').href = sub('live') + '/dock/'; $('dockurl').textContent = sub('live') + '/dock/';
|
||||
$('l-files').href = sub('files') + '/'; $('l-finals').href = sub('files') + '/finals/'; $('l-trash').href = sub('files') + '/trash/'; $('l-sync').href = sub('sync') + '/';
|
||||
$('l-stuck').href = sub('diag') + '/stuck';
|
||||
document.querySelectorAll('a.l-stuck-note').forEach(a => a.href = sub('diag') + '/stuck');
|
||||
$('l-stuck').href = sub('diag') + '/streaming#stuck';
|
||||
document.querySelectorAll('a.l-stuck-note').forEach(a => a.href = sub('diag') + '/streaming#stuck');
|
||||
$('l-clips').href = sub('clips') + '/'; document.querySelectorAll('a.l-clips').forEach(a => a.href = sub('clips') + '/'); $('gitssh').textContent = `ssh://git@${'git.' + base}:2222/org/repo.git`;
|
||||
(async () => {
|
||||
try {
|
||||
|
||||
58
about/onboarding/index.html
Normal file
58
about/onboarding/index.html
Normal file
@@ -0,0 +1,58 @@
|
||||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Onboarding — Vanguard</title>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<style>
|
||||
:root{--bg:#141414;--fg:#e6e6e6;--mut:#9a9a9a;--acc:#5865F2;--ok:#2ecc71;--box:#1f1f1f;--line:#2e2e2e}
|
||||
html,body{margin:0;background:var(--bg);color:var(--fg);font:17px/1.5 system-ui,sans-serif}
|
||||
main{max-width:560px;margin:0 auto;padding:36px 16px 48px}
|
||||
header{display:flex;align-items:center;gap:14px;margin-bottom:18px}
|
||||
h1{font-size:26px;margin:0}
|
||||
.right{margin-left:auto;display:flex;align-items:center;gap:12px;color:var(--mut);font-size:14px}
|
||||
button{font:inherit;font-size:14px;border-radius:8px;border:1px solid #3a3a3a;background:#262626;color:var(--fg);padding:7px 14px;cursor:pointer}
|
||||
button:hover{border-color:var(--acc)}
|
||||
section{background:var(--box);border:1px solid var(--line);border-radius:14px;padding:8px 10px}
|
||||
label{display:flex;gap:14px;align-items:center;padding:12px 10px;border-radius:10px;cursor:pointer;font-size:19px}
|
||||
label:hover{background:#262626}
|
||||
label input{width:22px;height:22px;margin:0;accent-color:var(--acc);flex:none}
|
||||
label input:checked + span{color:var(--mut);text-decoration:line-through}
|
||||
.done{display:none;color:var(--ok);margin-top:14px;font-size:15px}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<main>
|
||||
<header>
|
||||
<h1>Onboarding</h1>
|
||||
<div class="right"><span id="count"></span><button id="clear">Clear</button></div>
|
||||
</header>
|
||||
<section>
|
||||
<label><input type="checkbox" data-id="who"><span>Who we are</span></label>
|
||||
<label><input type="checkbox" data-id="about"><span>About / verify</span></label>
|
||||
<label><input type="checkbox" data-id="community"><span>Community</span></label>
|
||||
<label><input type="checkbox" data-id="vanguard"><span>Who Vanguard is</span></label>
|
||||
<label><input type="checkbox" data-id="spartan"><span>Who Spartan are</span></label>
|
||||
<label><input type="checkbox" data-id="comms"><span>Comms</span></label>
|
||||
<label><input type="checkbox" data-id="training"><span>Training</span></label>
|
||||
<label><input type="checkbox" data-id="ptt"><span>Push to mute / talk</span></label>
|
||||
</section>
|
||||
<div class="done" id="done">All covered. Clear for the next one.</div>
|
||||
</main>
|
||||
<script>
|
||||
const KEY = 'vg.onboarding';
|
||||
const boxes = [...document.querySelectorAll('input[type=checkbox]')];
|
||||
const load = () => { try { return JSON.parse(localStorage.getItem(KEY) || '{}'); } catch { return {}; } };
|
||||
const save = s => { try { localStorage.setItem(KEY, JSON.stringify(s)); } catch {} };
|
||||
function render() {
|
||||
const s = load(); let n = 0;
|
||||
for (const b of boxes) { b.checked = !!s[b.dataset.id]; if (b.checked) n++; }
|
||||
document.getElementById('count').textContent = `${n} / ${boxes.length}`;
|
||||
document.getElementById('done').style.display = n === boxes.length ? 'block' : 'none';
|
||||
}
|
||||
for (const b of boxes) b.addEventListener('change', () => { const s = load(); s[b.dataset.id] = b.checked; save(s); render(); });
|
||||
document.getElementById('clear').onclick = () => { save({}); render(); };
|
||||
render();
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
Reference in New Issue
Block a user