Voor een klant

Een Bluetooth-app waarbij elke tik antwoord geeft

Een app voor iOS en Android die lichtcontrollers via Bluetooth Low Energy bedient, gebouwd voor een klant, voor eindgebruikers die niet technisch zijn.

Rol
Ontwikkelaar van de app
Periode
November 2025 tot nu
Stack
TypeScript, React Native, Expo, Bluetooth Low Energy, zustand
Status
Voor een klant

Elke tik geeft antwoord.

  • sent
  • superseded
  • failed
  • busy
  • current
  • not-connected
Een knop wordt verstuurd, ingehaald door een nieuwere keuze, of afgewezen met een reden. Nooit stil.

Het probleem

De gebruikers zijn niet technisch: ze kennen alleen "de lichten" en bedienen die vaak 's avonds, vanaf hun telefoon. De klant wilde één eigen app voor drie soorten lichtproducten, die aanvoelt als onderdeel van een premium installatie en niet als een generieke LED-app.

Wat ik bouwde

Een app die de verschillende controllers zelf herkent, opnieuw verbindt zodra ze weer bereikbaar zijn, en bij elke tik eerlijk laat zien of het commando is aangekomen.

Vertaald in negen talen, waaronder Arabisch van rechts naar links.

Wat er technisch toe doet

  1. Eén supervisor die zelf herverbindt

    Elke productfamilie krijgt dezelfde supervisor, die met een vast terugvalschema opnieuw verbindt. Annuleren maakt alle lopende pogingen ongeldig, zodat een verbinding die te laat binnenkomt wordt genegeerd in plaats van een race te veroorzaken.

  2. Laatste waarde wint

    Bij het slepen van een kleur- of helderheidsslider gaat per instelling alleen de laatste waarde de lucht in. Zo loopt de verbinding niet vol en komt altijd de laatste keuze van de gebruiker aan.

  3. Elke tik krijgt een uitkomst

    Een tik wordt verstuurd, ingehaald door een nieuwere keuze, of afgewezen met een reden: bezig, al ingesteld of niet verbonden. Elke write heeft een time-out van twee seconden, dus niets blijft stil hangen.

  4. Tot tien controllers tegelijk

    Een aparte manager houdt meerdere verbindingen tegelijk bij en zet de writes achter elkaar. Er is één gewenste toestand, zodat een controller die achterloopt in één write bijloopt.

  5. Architectuurregels vastgelegd in tests

    Een test bewaakt dat het designsysteem nooit uit de Bluetooth-laag importeert, een andere dat alle talen precies dezelfde vertaalsleutels hebben.

  6. Negen talen, ook van rechts naar links

    Arabisch zit in de basiscomponenten zelf, zoals pijlen en terugvegen die met de leesrichting meedraaien.

Meetstaat

Geteld in de repository, niet geschat.

testbestanden
130
testcases
1.755
regels testcode, tegen 27.114 regels app
33.977
talen, waaronder Arabisch
9
controllers tegelijk, hoogstens
10
Hoe gemeten
git ls-files 'src/__tests__/*.test.ts*' | wc -l
git ls-files 'src/__tests__/*.test.ts*' | xargs grep -cE '^\s*(it|test)\(' (opgeteld)
git ls-files 'src/__tests__/*' | xargs wc -l
git ls-files 'src/*.ts' 'src/*.tsx' 'app/*.ts' 'app/*.tsx' plugins | grep -v __tests__ | xargs wc -l
ls src/i18n/locales | wc -l
de limiet in de verbindingsmanager

Gemeten op 27-10-2026 in de repository van de app.

Iets vergelijkbaars nodig, of een team dat zo'n systeem bouwt?

info@bitvire.com