Steven
Steven6 min leestijd

Vier releases in zesentwintig uur: taal-loodgieterswerk en een bridge release

GeekBye v1.7.6 tot en met v1.8.1: een taalinstelling die de laptop nooit had verlaten, een Cmd+/-overlay die je echte keybindings toont, een versie met nul codewijzigingen — en het kip-en-ei-probleem van het migreren van je auto-update-feed.

Engineering
Release
Desktop
GeekBye Releases
Vier releases in zesentwintig uur: taal-loodgieterswerk en een bridge release

Tussen een donderdagochtend en een vrijdagmiddag in februari 2026 shipte GeekBye vier releases: v1.7.6, v1.7.7, v1.8.0 en v1.8.1 — zestien commits, ongeveer zesentwintig uur tussen de eerste tag en de laatste. Geen van alle is op zichzelf een krantenkop. Samen zijn ze een portret van wat weken met kleine releases werkelijk bevatten: een feature die eindelijk zijn reis afmaakt, een quality-of-life-overlay, een versienummer zonder code erin, en één oprecht leerzaam stuk release engineering.

De taal die de laptop nooit verliet

GeekBye heeft sinds september 2025 een instelling voor de transcripttaal. Hij werkte — lokaal. Kies Spaans en de on-device speech-to-text-pipeline transcribeerde braaf Spaans. Maar grep de v1.7.5-codebase op die instelling en je vindt hem op precies drie plekken: de audiohandler, de Settings-UI en de settings-hook. Niet in de API-client. Niet in de sessietracker. Vier maanden lang was elk request dat de machine verliet taalblind: backend-sessierecords hadden geen idee welke taal ze representeerden, en de AI-chat ontving Spaanse transcripten zonder enige hint dat ze Spaans waren.

v1.7.6 is de release waarin de instelling zijn reis afmaakte — twee commits, één dag. De audio-sessiestart draagt nu transcriptLanguage in zijn payload, en het AI-stream-chat-request kreeg hetzelfde veld, doorgeregen via een kleine helper die de instelling leest en bewust undefined teruggeeft wanneer hij auto of niet gezet is, zodat oudere backends netjes degraderen in plaats van te stikken in een veld dat ze niet kennen. Er zit ook een stille bonusfix verstopt in de diff: om de taal te kunnen meesturen moest de sessiestart na de taalresolutie komen — wat, zoals wij het lezen, ook een errorpad sloot waarin een sessie kon worden gestart (en meegeteld tegen limieten) om vervolgens verweesd te raken wanneer de taalresolutie een moment later faalde.

De les generaliseert: een instelling is niet geshipt als hij een UI en een effect heeft. Hij is geshipt als hij elke consumer bereikt die ervan zou moeten weten. De onze stopte vier maanden lang bij de netwerkgrens, en niemand merkte het, omdat het lokale gedrag — het zichtbare gedrag — de hele tijd correct was. (Dit was de ruwe eerste versie van taalafhandeling, voor de goede orde; de AI leren om ook echt in de taal van het gesprek te antwoorden is een veel later hoofdstuk van dit verhaal.)

Cmd+/ — een overlay die niet liegt over je keybindings

De user-facing feature van v1.8.0 is een sneltoetsen-overlay op Cmd+/ — 193 regels nieuwe component, en één designbeslissing die het stelen waard is: hij rendert geen hardcoded spiekbriefje. Hij haalt de live shortcut-configuratie op en rendert customKeys || defaultKeys, zodat een gebruiker die zijn toetsen heeft geremapt zijn toetsen ziet. Een shortcuts-overlay die defaults toont aan iemand die ze heeft veranderd is geen documentatie; het is desinformatie met mooie typografie.

De rest is klein correctheidswerk: de overlay positioneert zichzelf links of rechts van de app-card, afhankelijk van welke kant van het scherm ruimte heeft, en sluit op Escape, op nogmaals Cmd+/, of op een klik erbuiten. Cmd+/ zelf sluit aan bij hetzelfde remapbare presetsysteem als elke andere shortcut — en dat doet ertoe, want Cmd+/ is "toggle comment" in de meeste editors, en een tool voor developers hoort niet te gaan zitten op een editortoets die je niet kunt verplaatsen.

De bridge release

De interessante engineering gebeurde in de versienummers waar niemand twee keer naar zou kijken. v1.8.0 migreerde ook de releases van het project naar een nieuwe GitHub-organisatie — org-huishoudwerk aan de oppervlakte, op één eigenschap van desktop-auto-update na: de feed-URL is ingebakken in de binary. Elke v1.8.0-installatie pollt de releases van de nieuwe organisatie. En elke installatie daarbuiten in de wereld — allemaal v1.7.7 of ouder — pollt de oude, voor eeuwig, tenzij daar iets verschijnt.

Dat is het kip-en-ei-probleem: publiceer je volgende release alleen naar de nieuwe repo en de hele bestaande vloot ziet hem nooit. Zestien minuten na de v1.8.0-tag landde een nieuwe flag in het releasescript: --publish-owner, die herschrijft waar electron-builder de artifacts naartoe uploadt na de build — expliciet "without affecting the compiled app code", zoals de codecomment het formuleert. Dat is de hele truc, en het is precies de juiste naad: de ingebakken feed van de binary en de uploadbestemming van de artifacts zijn twee verschillende beslissingen, en een migratie heeft ze voor één release ontkoppeld nodig. Bouw v1.8.1 wijzend naar de nieuwe feed, upload hem naar de oude repo; oude clients zien de update daar, installeren hem, en worden wakker terwijl ze de nieuwe organisatie pollen. De commit message noemt dit een "bridge release", en dat is de juiste naam. v1.8.1 werd getagd twee uur en twintig minuten na v1.8.0. (Voor het ontstaansverhaal van waarom dit project auto-update behandelt met respect dat aan angst grenst, zie de auto-update die onze app onsterfelijk maakte.)

En v1.7.7? Eén commit. De versiebump zelf. Geen fix, geen revert, geen uitleg in de history — onze beste lezing is een publish die opnieuw gedraaid moest worden, en dat geven we liever toe dan dat we een verhaal verzinnen. Soms bestaat een versienummer omdat software releasen een real-world proces is met real-world hobbels, geen pure functie van de source tree. En waarom 1.7 überhaupt 1.8 werd: geen commit die het zegt, maar de feedmigratie is de betekenisvolle compatibiliteitsgrens — elke 1.8.x-binary kijkt naar een andere organisatie dan elke 1.7.x-binary — en dat verdient een minor bump meer dan welke feature dan ook.

Drie dingen die deze week ons leerde

  1. Traceer een instelling naar elke consumer. De taalvoorkeur was vier maanden lang "af" terwijl de backend blind bleef. Dat het zichtbare, lokale gedrag correct was, is precies wat het gat liet overleven — de auditvraag is "wie zou hier nog meer van moeten weten?", gesteld bij elke grens.
  2. Render live config, geen documentatie. De shortcuts-overlay leest dezelfde source of truth die het shortcutsysteem gebruikt. Al het andere drijft af zodra een gebruiker iets aanpast.
  3. Een feedmigratie heeft één release nodig die in beide werelden leeft. Nieuwe feed in de binary, oude repo voor de upload. Als je releasetooling die twee doelen niet kan scheiden, voeg de flag toe voordat je hem nodig hebt — de onze kwam zestien minuten nadat hij nodig was, wat dichtbij genoeg is om te tellen.

Voor het vorige hoofdstuk in het v1-verhaal, de loginpagina IS de demo (v1.7.5); en voor de hele boog, de anatomie van software tot in de perfectie uitbrengen.

Gerelateerde Artikelen

De drie werkwoorden die Web Audio in leven houden
Steven
Steven9 min leestijd

De drie werkwoorden die Web Audio in leven houden

Twee GeekBye-point-releases, twee maanden uit elkaar en in twee verschillende bestanden, leerden onze audiocode dezelfde les vanuit tegengestelde kanten: behandel de AudioContext van de browser niet langer als wegwerpbaar. De ene release leerde resume() aan te roepen op een context die macOS stilletjes midden in een opname had gesuspend; de andere leerde suspend() te gebruiken in plaats van close() zodat opeenvolgende sessies niet langer tegen Chromiums plafond van ongeveer zes contexten aan knallen. Resume, suspend, close — dat is het hele plot.

Engineering
Audio
Desktop
Een call onderscheiden van een open app
Steven
Steven9 min leestijd

Een call onderscheiden van een open app

GeekBye kan merken dat je aan een videovergadering bent gaan deelnemen en aanbieden om die op te nemen. De detectie blijkt de makkelijke helft — een Swift-binary die elke tien seconden vensternamen leest. De moeilijke helft is precisie: niet afgaan wanneer Zoom slechts openstaat, niet vragen om een vergadering die je al opneemt, en niet de microfoon dempen in het gesprek waar je daadwerkelijk in zit. Drie releases, en elk ervan is een waarborg die moest leren zichzelf niet te verslaan.

Engineering
macOS
Desktop
De backend uit het uploadpad halen
Steven
Steven9 min leestijd

De backend uit het uploadpad halen

GeekBye neemt je scherm op en bewaart de video in je Google Drive. De eerste versie stuurde elke opname onderweg via de eigen servers van GeekBye; een release later ging het bestand rechtstreeks van je machine naar Drive, en de backend werd gedegradeerd tot het vasthouden van één enkele pointer. Het interessante is hoe weinig code de 'directe, hervatbare' versie eigenlijk bevat — want de hervatbaarheid kwam voort uit het verwijderen van een proxy, niet uit het schrijven ervan.

Engineering
Architecture
Desktop