Naar de inhoud

TeamSync

Eén gedeelde map voor een heel team, zonder dat iemand ooit het werk van een ander overschrijft.

Desktopapp voor Mac en WindowsOpgeleverd

fig. IIlokale hashbasiscloudversieSHA-256L ≠ BC ≠ Bbeslispure functie, geen I/Oprecies één actieuploadendownloadenconflictkopieniets doen
fig. II Drie feiten per bestand, precies één actie.

Voor wie

Een klein team met zowel Macs als Windows-laptops dat aan dezelfde bestanden werkt.

Het probleem

Bestanden heen en weer sturen gaat altijd een keer mis: iemand werkt in een oude versie en een ander verliest zijn werk. Echt samen bewerken via Microsoft 365 vraagt een licentie per persoon en een beheerder die toestemming geeft, en die heeft een klein team meestal niet.

Wat ik bouwde

Ik bouwde een desktopapp waarin de cloud de bron van waarheid is en elke laptop een eigen kopie heeft. Een eigen sync-engine vergelijkt per bestand de lokale versie, de laatst gedeelde versie en de versie in de cloud, en kiest daaruit precies één actie. Botsen twee wijzigingen, dan blijven ze allebei bewaard. Het team ziet wie een document open heeft en kan ook tegelijk in hetzelfde document schrijven.

Wat het oplevert

  1. Nooit meer overschreven werk: bij een botsing blijven beide versies bewaard.

  2. Versiegeschiedenis per bestand, een oude versie terugzetten kan altijd.

  3. Je ziet wie een Word-document open heeft voordat je eraan begint.

  4. Samen tegelijk schrijven en het resultaat weer als Word-bestand opslaan.

  5. Werkt op Mac en Windows en werkt zichzelf automatisch bij.

Onder de motorkap

  • Sync-engine in Rust waarvan de beslisregels los te testen zijn: elke situatie heeft een eigen test.

  • Toegangsregels op databaseniveau voor elke tabel en voor de opslag, met tests die ze controleren.

  • Integratietests die twee laptops nabootsen, inclusief offline werken, hernoemen en conflicten.

Het lastigste stuk

Wijzigingen in Word gingen soms stil verloren: zolang Word een document open had, leek het bestand onveranderd en werd het nooit geüpload. Ik heb geopende documenten anders leren behandelen en een test geschreven die openen, bewerken, opslaan en sluiten precies nabootst, zodat dit niet terug kan komen.

Gebouwd met

  • Tauri 2
  • Rust
  • React
  • TypeScript
  • Supabase
  • Yjs