Retro Bulletin Board Systems on atproto. Web app and TUI. lazy mirror of alyraffauf/atbbs atbbs.xyz
forums python tui atproto bbs
3
fork

Configure Feed

Select the types of activity you want to include in your feed.

web: add brew install method

+30 -2
+7 -2
web/templates/home.html
··· 32 32 <!-- Install --> 33 33 <div class="border-t border-neutral-800 py-8"> 34 34 <h2 class="text-neutral-300 mb-4">Better yet, use your terminal</h2> 35 - <pre class="bg-neutral-900 border border-neutral-800 rounded px-4 py-3 text-neutral-400 text-xs mb-3"><span class="text-neutral-500">$</span> pip install atbbs 35 + <div class="flex gap-4 border-b border-neutral-800 mb-4"> 36 + <button data-install="brew" class="install-tab py-2 text-neutral-200 border-b-2 border-neutral-200">brew</button> 37 + <button data-install="pip" class="install-tab py-2 text-neutral-500 hover:text-neutral-300 border-b-2 border-transparent">pip</button> 38 + </div> 39 + <pre id="install-brew" class="install-panel bg-neutral-900 border border-neutral-800 rounded px-4 py-3 text-neutral-400 text-xs"><span class="text-neutral-500">$</span> brew install alyraffauf/tap/atbbs 36 40 <span class="text-neutral-500">$</span> atbbs</pre> 37 - <p class="text-neutral-500 text-xs">Requires Python 3.14+.</p> 41 + <pre id="install-pip" class="install-panel bg-neutral-900 border border-neutral-800 rounded px-4 py-3 text-neutral-400 text-xs hidden"><span class="text-neutral-500">$</span> pip install atbbs 42 + <span class="text-neutral-500">$</span> atbbs</pre> 38 43 </div> 39 44 </div> 40 45
+23
web/ts/pages/home.ts
··· 18 18 }); 19 19 20 20 loadDiscover(); 21 + initInstallTabs(); 22 + } 23 + 24 + function initInstallTabs() { 25 + document 26 + .querySelectorAll<HTMLElement>(".install-tab[data-install]") 27 + .forEach((btn) => { 28 + btn.addEventListener("click", () => { 29 + const name = btn.dataset.install!; 30 + 31 + document.querySelectorAll(".install-tab").forEach((b) => { 32 + b.classList.remove("text-neutral-200", "border-neutral-200"); 33 + b.classList.add("text-neutral-500", "border-transparent"); 34 + }); 35 + btn.classList.remove("text-neutral-500", "border-transparent"); 36 + btn.classList.add("text-neutral-200", "border-neutral-200"); 37 + 38 + document 39 + .querySelectorAll(".install-panel") 40 + .forEach((p) => p.classList.add("hidden")); 41 + document.getElementById(`install-${name}`)?.classList.remove("hidden"); 42 + }); 43 + }); 21 44 } 22 45 23 46 async function loadDiscover() {