- commit
- 2a3329ba3bad2b15ad9abdcfcf49164632052f74
- parent
- 0b7955b964b58cf1cf10ea976ff37e26ed53a275
- author
- Dami <dami.etoile@gmail.com>
| M | website/ | 74 | +++++++++++++++++++-------- |
| M | website/ | 81 | ++++++++++++++++++++++++++++++ |
@@ -11,21 +11,15 @@
1111 <body>1212 <a class="skip" href="#main">Skip to content</a>1313 14- <!--15- goq.sh is the project and domain. Portal is the installed client;16- sigil is the headless host CLI. "goq" is the games-over-QUIC17- wordplay and repository name (github.com/FelineStateMachine/goq).18- TODO(install-script): the curl one-liners below point at goq.sh but19- those install scripts are NOT published yet. Publish them (client20- app + host runtime package) before launch, then confirm the exact21- commands here and in dither.js.22- -->14+ <!-- Portal is downloaded as a signed desktop app. Sigil is installed on a15+ dedicated Bazzite machine through the fail-closed bootstrap command. -->2316 <!-- ─── First screen: full-viewport dither with a floating panel ─── -->2417 <div class="screen">2518 <header class="topbar">2619 <a class="topbar-github" href="https://github.com/FelineStateMachine/goq" rel="noopener">source </a>2720 <nav class="topbar-nav">2821 <a href="#features">features</a>22+ <a href="#roadmap">next</a>2923 <a href="#how">how</a>3024 <a href="#start">start</a>3125 </nav>@@ -42,24 +36,31 @@
4236 <rect x="14" y="7" width="2" height="3" fill="var(--moss)" />4337 <rect x="19" y="7" width="2" height="2" fill="var(--moss)" />4438 </svg>45- <pre class="hero-ascii" role="img" aria-label="goq.sh">░▄▄▄░█▀█░█▀█░░░█▀▀░█░█39+ <pre class="hero-ascii" role="img" aria-label="goq.sh">░█▀█░█▀█░█▀█░░░█▀▀░█░█4640 ░█▄█░█░█░█▄█░░░▀▀█░█▀█4741 ░▄▄█░▀▀▀░░░█░▀░▀▀▀░▀░▀</pre>48- <p class="hero-tagline">Your key is the address. Plug in, tap, connect.</p>42+ <p class="hero-tagline">Your key is the address. Plug in, tap, play.</p>4943 <div class="install-group">50- <div class="seg" role="radiogroup" aria-label="Install as">44+ <div class="seg" role="radiogroup" aria-label="Get goq">5145 <label class="seg-opt">52- <input type="radio" name="install-target" value="client" checked />53- <span>client</span>46+ <input type="radio" name="release-target" value="portal" checked />47+ <span>portal</span>5448 </label>5549 <label class="seg-opt">56- <input type="radio" name="install-target" value="host" />57- <span>host</span>50+ <input type="radio" name="release-target" value="sigil" />51+ <span>sigil</span>5852 </label>5953 </div>60- <div class="install" data-copy="curl -fsSL https://goq.sh | sh">61- <code class="install-cmd"><span class="install-prompt">$</span> <span class="install-text">curl -fsSL https://goq.sh | sh</span></code>62- <button class="install-copy" type="button" aria-label="Copy install command">copy</button>54+ <div class="release-action" data-release-target="portal">55+ <a class="portal-download" href="https://github.com/FelineStateMachine/goq/releases" rel="noopener">Portal downloads</a>56+ <p class="release-note">signed + notarized macOS builds will appear here · public alpha pending</p>57+ </div>58+ <div class="release-action" data-release-target="sigil" hidden>59+ <div class="install" data-copy="curl --proto '=https' --tlsv1.2 -fsS https://goq.sh/install-sigil -o /tmp/install-sigil && bash /tmp/install-sigil">60+ <code class="install-cmd"><span class="install-prompt">$</span> <span class="install-text">curl --proto '=https' --tlsv1.2 -fsS https://goq.sh/install-sigil -o /tmp/install-sigil && bash /tmp/install-sigil</span></code>61+ <button class="install-copy" type="button" aria-label="Copy Sigil install command">copy</button>62+ </div>63+ <p class="release-note">non-root Bazzite setup · signed release channel pending</p>6364 </div>6465 </div>6566 <p class="hero-note">Games over QUIC: one-to-one SteamOS streaming over iroh <br> Work in progress. Not a finished product.</p>@@ -100,6 +101,35 @@
100101 </ol>101102 </section>102103 104+ <!-- ─── Promoted hardening roadmap ─────────────────────── -->105+ <section class="roadmap" id="roadmap">106+ <div class="section-rule" aria-hidden="true"></div>107+ <h2 class="section-title"><span aria-hidden="true">##</span> hardening next</h2>108+ <p class="roadmap-intro">The first target stays deliberately narrow: hardware H.264 at 1280×800/60. These are the promoted steps from a proven stream to one that adapts without accumulating latency.</p>109+ <ol class="roadmap-grid">110+ <li class="roadmap-item reveal">111+ <span class="roadmap-status">promoted · transport</span>112+ <h3><a href="https://github.com/FelineStateMachine/goq/issues/7" rel="noopener">Iroh/MoQ media objects</a></h3>113+ <p>Prioritized, cancellable video objects with explicit GOP boundaries and keyframe recovery. Input remains independent.</p>114+ </li>115+ <li class="roadmap-item reveal">116+ <span class="roadmap-status">promoted · control</span>117+ <h3><a href="https://github.com/FelineStateMachine/goq/issues/8" rel="noopener">Adaptive bitrate</a></h3>118+ <p>Feed RTT, loss, backpressure, and decode backlog into a bounded controller with measured recovery and no queue growth.</p>119+ </li>120+ <li class="roadmap-item reveal">121+ <span class="roadmap-status">promoted · motion</span>122+ <h3><a href="https://github.com/FelineStateMachine/goq/issues/9" rel="noopener">Motion-sensitive resolution</a></h3>123+ <p>Favor fresh, smooth motion at lower resolution, then restore detail after motion settles without breaking pointer mapping.</p>124+ </li>125+ <li class="roadmap-item reveal">126+ <span class="roadmap-status">promoted · codec</span>127+ <h3><a href="https://github.com/FelineStateMachine/goq/issues/10" rel="noopener">Auto Codec</a></h3>128+ <p>Select from end-to-end hardware support and measured latency. H.264 remains the safe baseline; compression ratio alone never wins.</p>129+ </li>130+ </ol>131+ </section>132+103133 <!-- ─── How it works ─────────────────────────────────────── -->104134 <section class="how" id="how">105135 <div class="section-rule" aria-hidden="true"></div>@@ -158,12 +188,12 @@
158188 <li class="start-step reveal">159189 <span class="start-num" aria-hidden="true">01</span>160190 <h3>provision sigil</h3>161- <p>A bare-metal Linux box. The runbook walks an AMD Bazzite machine from blank to streaming. The daemon runs headless; Gamescope is the display.</p>191+ <p>Run the Sigil setup command on a dedicated AMD Bazzite machine. It accepts only signed runtime packages; Gamescope becomes the headless display.</p>162192 </li>163193 <li class="start-step reveal">164194 <span class="start-num" aria-hidden="true">02</span>165195 <h3>open portal</h3>166- <p>In Portal, tap your FIDO2 key and identity is minted on the token. A D-pad PIN pad keeps it couch-friendly.</p>196+ <p>Download a signed Portal build on your client machine. Tap your FIDO2 key; the D-pad PIN pad keeps onboarding couch-friendly.</p>167197 </li>168198 <li class="start-step reveal">169199 <span class="start-num" aria-hidden="true">03</span>@@ -171,7 +201,7 @@
171201 <p>Tap the same key anywhere else: SteamOS appears, your controller just works. Hold Back+Start for a second to escape the session.</p>172202 </li>173203 </ol>174- <p class="start-note">You'll need a FIDO2 key with hmac-secret support (YubiKey, Google Titan, …) and a Linux machine for Sigil. Portal builds run on Linux and macOS. <a class="footer-link" href="https://github.com/FelineStateMachine/goq" rel="noopener">Runbook and source →</a></p>204+ <p class="start-note">You'll need a FIDO2 key with hmac-secret support (YubiKey, Google Titan, …) and an AMD Bazzite machine for Sigil. The first signed Portal release targets macOS; other client packages remain source builds until they receive an equally strict release path. <a class="footer-link" href="https://github.com/FelineStateMachine/goq" rel="noopener">Runbook and source →</a></p>175205 </section>176206 </main>177207 @@ -92,6 +92,7 @@ a { color: inherit; }
9292 .topbar-github,9393 .topbar-nav,9494 .seg,95+.portal-download,9596 .install-copy,9697 .install-prompt,9798 .section-title span,@@ -222,6 +223,39 @@ a { color: inherit; }
222223 gap: 10px;223224 max-width: 100%;224225 }226+.release-action {227+ display: flex;228+ flex-direction: column;229+ align-items: center;230+ gap: 8px;231+ max-width: 100%;232+}233+.release-action[hidden] { display: none; }234+.portal-download {235+ display: inline-flex;236+ align-items: center;237+ justify-content: center;238+ min-height: 44px;239+ padding: 10px 22px;240+ border: 1px solid var(--ink);241+ background: var(--ink);242+ color: var(--paper);243+ font-family: var(--mono);244+ font-size: 12px;245+ font-weight: 700;246+ letter-spacing: 0.06em;247+ text-decoration: none;248+ text-transform: uppercase;249+ transition: background 0.12s, color 0.12s;250+}251+.portal-download:hover { background: var(--terracotta); }252+.portal-download:focus-visible { outline: 2px solid var(--moss); outline-offset: 3px; }253+.release-note {254+ color: var(--ink-muted);255+ font-family: var(--mono);256+ font-size: 10.5px;257+ line-height: 1.45;258+}225259 /* platform segmented radio */226260 .seg {227261 display: inline-flex;@@ -392,6 +426,53 @@ a { color: inherit; }
392426 .feature-grid { grid-template-columns: 1fr; }393427 }394428 429+/* ─── Promoted hardening roadmap ──────────────────────────── */430+.roadmap { padding: clamp(56px, 8vw, 96px) var(--edge); }431+.roadmap-intro {432+ max-width: var(--maxw);433+ margin: 0 auto clamp(24px, 3vw, 34px);434+ color: var(--ink-muted);435+ font-size: 15px;436+}437+.roadmap-grid {438+ max-width: var(--maxw);439+ margin: 0 auto;440+ list-style: none;441+ display: grid;442+ grid-template-columns: repeat(2, 1fr);443+ gap: 1px;444+ border: 1px solid var(--hair);445+ background: var(--hair);446+}447+.roadmap-item {448+ min-height: 210px;449+ padding: clamp(22px, 3vw, 34px);450+ background: var(--paper-2);451+}452+.roadmap-status {453+ display: block;454+ margin-bottom: 18px;455+ color: var(--terracotta);456+ font-family: var(--mono);457+ font-size: 10.5px;458+ letter-spacing: 0.08em;459+ text-transform: uppercase;460+}461+.roadmap-item h3 {462+ margin-bottom: 10px;463+ font-family: var(--mono);464+ font-size: 17px;465+ text-transform: lowercase;466+}467+.roadmap-item h3 a { text-decoration-thickness: 1px; text-underline-offset: 4px; }468+.roadmap-item h3 a:hover { color: var(--terracotta); }469+.roadmap-item h3 a:focus-visible { outline: 2px solid var(--moss); outline-offset: 4px; }470+.roadmap-item p { color: var(--ink-muted); font-size: 14.5px; line-height: 1.55; }471+@media (max-width: 720px) {472+ .roadmap-grid { grid-template-columns: 1fr; }473+ .roadmap-item { min-height: 0; }474+}475+395476 /* ─── How it works: one-stop diagram ───────────────────────── */396477 .how {397478 padding: clamp(56px, 8vw, 96px) var(--edge);