<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Freelance .NET-, Angular-, Python- en Flutter-developer in West-Vlaanderen on Rock-IT - Peter Dewachtere - Freelance IT Developer</title><link>https://dewachtere.be/</link><description>Recent content in Freelance .NET-, Angular-, Python- en Flutter-developer in West-Vlaanderen on Rock-IT - Peter Dewachtere - Freelance IT Developer</description><generator>Hugo</generator><language>nl-BE</language><lastBuildDate>Wed, 16 Sep 2026 10:03:53 +0200</lastBuildDate><atom:link href="https://dewachtere.be/index.xml" rel="self" type="application/rss+xml"/><item><title>Omni-Term B2B-webshop</title><link>https://dewachtere.be/projects/omni-term-webshop/</link><pubDate>Wed, 16 Sep 2026 00:00:00 +0000</pubDate><guid>https://dewachtere.be/projects/omni-term-webshop/</guid><description>&lt;p&gt;&lt;a href="https://www.omniterm.be"&gt;Omni-Term&lt;/a&gt; uit Izegem is sinds 1970 groothandel in verwarming, solar en ventilatie, met meerdere vestigingen en professionele installateurs als klanten. Voor die installateurs bouw en onderhoud ik de B2B-webshop &lt;strong&gt;pro.omniterm.be&lt;/strong&gt;: het digitale verlengstuk van de toonbank, 24 uur per dag open.&lt;/p&gt;
&lt;h3 id="de-uitdaging"&gt;De uitdaging&lt;/h3&gt;
&lt;p&gt;Installateurs bestellen vaak &amp;rsquo;s avonds of vanop de werf. Ze willen meteen weten of een artikel in hun vestiging op voorraad ligt en wanneer ze het kunnen afhalen of geleverd krijgen. De webshop moet daarom naadloos samenwerken met het ERP-systeem van Omni-Term: klantspecifieke prijzen, voorraad per vestiging, openstaande orders en facturen moeten altijd correct zijn.&lt;/p&gt;</description></item><item><title>BillableMe: werkregistratie voor freelancers</title><link>https://dewachtere.be/projects/billableme/</link><pubDate>Wed, 16 Sep 2026 00:00:00 +0000</pubDate><guid>https://dewachtere.be/projects/billableme/</guid><description>&lt;p&gt;Als freelancer weet ik hoe vervelend het is om na een lange werkdag nog uren te reconstrueren, bonnetjes te verzamelen en ideeën te onthouden die u onderweg had. &lt;strong&gt;BillableMe&lt;/strong&gt; is de app die ik daarvoor zelf ontwikkelde: alles wat u voor een klant doet, registreert u meteen op uw smartphone, per klant en per project.&lt;/p&gt;
&lt;h3 id="wat-billableme-doet"&gt;Wat BillableMe doet&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Uren en activiteiten&lt;/strong&gt;: registreer prestaties per klant, project en activiteit, met een ingebouwde timer of achteraf, en bekijk ze per dag, week, maand of jaar&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Kosten en verplaatsingen&lt;/strong&gt;: beroepskosten en extra kosten per registratie, met vervoerstypes en foto&amp;rsquo;s van bonnetjes&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Bonnetjes lezen met AI&lt;/strong&gt;: een foto van een ticket wordt automatisch uitgelezen (OCR), zodat bedragen niet meer manueel ingetikt hoeven te worden&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Spraaknotities&lt;/strong&gt;: neem onderweg een to-do, herinnering of notitie op; de app zet ze automatisch om in tekst, in het Nederlands of Engels, en maakt ze doorzoekbaar&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Veilig en meertalig&lt;/strong&gt;: aanmelden met biometrie, volledig in het Nederlands en Engels, met een gezondheidscontrole van de backend bij het opstarten&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="technologie"&gt;Technologie&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;App&lt;/strong&gt;: Flutter met Riverpod, GoRouter en Freezed, audio-opname en -weergave, Material Design; getest via TestFlight en binnenkort beschikbaar in de App Store en Google Play&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Backend&lt;/strong&gt;: NestJS (TypeScript) met TypeORM en PostgreSQL, JWT-authenticatie, Redis en Bull-wachtrijen voor achtergrondtaken, audit logging en optimistic locking&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;AI-diensten&lt;/strong&gt;: eigen Whisper-transcriptiedienst in Python (FastAPI, zonder GPU) en Google Document AI voor het uitlezen van bonnetjes&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Hosting &amp;amp; DevOps&lt;/strong&gt;: Docker Swarm met meerdere API-replica&amp;rsquo;s, nginx, private registry en health checks, gehost door Rock-IT&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="waarom-een-eigen-product"&gt;Waarom een eigen product?&lt;/h3&gt;
&lt;p&gt;BillableMe is ontstaan uit mijn eigen dagelijkse praktijk en wordt gebruikt zoals een echte gebruiker het gebruikt. Het is tegelijk mijn proeftuin voor nieuwe technologie: spec-driven development, AI-transcriptie en documentherkenning zijn hier eerst uitgetest voor ze bij klanten ingezet worden. Wat hier goed werkt, komt ook mijn klanten ten goede.&lt;/p&gt;</description></item><item><title>POVV DSV Tool: bestel-app voor leden</title><link>https://dewachtere.be/projects/povv-dsv-tool/</link><pubDate>Wed, 16 Sep 2026 00:00:00 +0000</pubDate><guid>https://dewachtere.be/projects/povv-dsv-tool/</guid><description>&lt;p&gt;&lt;a href="https://www.povv.be"&gt;POVV&lt;/a&gt; (Producenten Organisatie Vleesvee) is een coöperatie die vleesveehouders ondersteunt en hun marktpositie versterkt. Via POVV bestellen de leden onder meer veevoeder bij verschillende leveranciers. Om dat bestelproces te vereenvoudigen ontwikkelde ik de &lt;strong&gt;DSV Tool&lt;/strong&gt;: een mobiele app voor de leden, een webbeheerpaneel voor het secretariaat en een centrale backend die alles verbindt. Rock-IT werkt al sinds 2021 samen met POVV; na de website volgde in 2026 dit bestelplatform.&lt;/p&gt;
&lt;h3 id="de-uitdaging"&gt;De uitdaging&lt;/h3&gt;
&lt;p&gt;Vleesveehouders willen snel en eenvoudig bestellen, waar en wanneer het hen past, zonder telefoontjes of mails heen en weer. Het secretariaat wil overzicht: wie bestelde wat, tegen welke prijs en bij welke leverancier, en hoe komt die bestelling automatisch bij de leverancier terecht? En omdat het om een besloten ledenwerking gaat, moet de toegang eenvoudig maar veilig zijn, zonder wachtwoorden die vergeten worden.&lt;/p&gt;</description></item><item><title>Kadeo: website voor een keramiekatelier</title><link>https://dewachtere.be/projects/kadeo-website/</link><pubDate>Wed, 16 Sep 2026 00:00:00 +0000</pubDate><guid>https://dewachtere.be/projects/kadeo-website/</guid><description>&lt;p&gt;&lt;a href="https://katleendeprez.be"&gt;Kadeo&lt;/a&gt; is het keramiekatelier van Katleen Deprez. Ze wilde een website die haar werk laat spreken: rustig, warm en visueel, met een galerij die ze zelf kan aanvullen zonder tussenkomst van een developer. Ik ontwierp en bouwde de site van A tot Z en host ze op de infrastructuur van Rock-IT.&lt;/p&gt;
&lt;h3 id="de-uitdaging"&gt;De uitdaging&lt;/h3&gt;
&lt;p&gt;Een portfoliosite voor een kunstenaar draait om beeld. Foto&amp;rsquo;s moeten snel laden, scherp zijn op elk scherm en eenvoudig te beheren: uploaden, bijsnijden, ordenen in secties en klaar. Tegelijk moet de site vindbaar zijn in Google, een contactformulier hebben dat spam buitenhoudt en voldoen aan de cookiewetgeving. En dat alles zonder abonnementskosten voor een extern CMS.&lt;/p&gt;</description></item><item><title>Kadeo Photo Uploader: foto-app voor het atelier</title><link>https://dewachtere.be/projects/kadeo-photo-uploader/</link><pubDate>Wed, 16 Sep 2026 00:00:00 +0000</pubDate><guid>https://dewachtere.be/projects/kadeo-photo-uploader/</guid><description>&lt;p&gt;Nieuw werk komt uit de oven, de foto wordt gemaakt met de smartphone&amp;hellip; en dan moet ze nog naar de laptop, bijgesneden en geüpload worden. Voor het keramiekatelier &lt;a href="https://katleendeprez.be"&gt;Kadeo&lt;/a&gt; bouwde ik daarom een kleine, doelgerichte Flutter-app die die omweg overslaat: foto kiezen, sectie kiezen, uploaden. Klaar.&lt;/p&gt;
&lt;h3 id="de-uitdaging"&gt;De uitdaging&lt;/h3&gt;
&lt;p&gt;De &lt;a href="https://dewachtere.be/projects/kadeo-website/"&gt;website van Kadeo&lt;/a&gt; heeft een volwaardig beheerpaneel, maar op een smartphone is een browser-CMS omslachtig. De app moest snel en eenvoudig zijn, foto&amp;rsquo;s automatisch in de juiste kwaliteit aanleveren en veilig communiceren met de website zonder dat telkens een wachtwoord ingetikt moet worden. Bovendien hoefde ze niet in de App Store: ze draait enkel op de iPhone van de keramiste.&lt;/p&gt;</description></item><item><title>MVDM Advocaten: website voor een advocatenkantoor</title><link>https://dewachtere.be/projects/mvdm-advocaten/</link><pubDate>Wed, 16 Sep 2026 00:00:00 +0000</pubDate><guid>https://dewachtere.be/projects/mvdm-advocaten/</guid><description>&lt;p&gt;&lt;a href="https://www.mvdmadvocaten.be"&gt;MVDM Advocaten&lt;/a&gt; is een advocatenkantoor met vestigingen in Ieper en Brielen. Sinds 2018 verzorg ik de website van het kantoor, aanvankelijk onder de naam Onraet-Verfaille. Toen het kantoor in het najaar van 2022 verderging als MVDM Advocaten, kreeg de site een volledig nieuwe uitstraling, met de sobere zwart-witfotografie die nu het visitekaartje van het kantoor is.&lt;/p&gt;
&lt;h3 id="de-uitdaging"&gt;De uitdaging&lt;/h3&gt;
&lt;p&gt;Een advocatenkantoor wil vertrouwen uitstralen: sober, professioneel en vooral duidelijk. Bezoekers zoeken snel het antwoord op drie vragen: wat doet dit kantoor, wat kost het en wie zijn de advocaten? De site moest daarnaast beschikbaar zijn in het Nederlands en het Frans, goed gevonden worden in Google en de naamswijziging opvangen zonder bezoekers te verliezen.&lt;/p&gt;</description></item><item><title>Spraaknotities met AI: zo zet BillableMe audio om in tekst met Whisper</title><link>https://dewachtere.be/blog/whisper-spraaknotities-billableme/</link><pubDate>Wed, 16 Sep 2026 00:00:00 +0000</pubDate><guid>https://dewachtere.be/blog/whisper-spraaknotities-billableme/</guid><description>&lt;p&gt;Als freelancer krijg je de beste ideeën in de auto of op de werf, net wanneer typen niet lukt. Daarom kreeg &lt;a href="https://dewachtere.be/projects/billableme/"&gt;BillableMe&lt;/a&gt; spraaknotities: je spreekt een to-do, herinnering of notitie in, en een halve minuut later staat de tekst erbij, doorzoekbaar. Zo heb ik dat aangepakt.&lt;/p&gt;
&lt;h3 id="de-eisen"&gt;De eisen&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Audio blijft op mijn eigen server, zonder externe transcriptiedienst.&lt;/li&gt;
&lt;li&gt;Nederlands en Engels, met automatische taaldetectie.&lt;/li&gt;
&lt;li&gt;Geen GPU: het moet draaien op de bestaande Docker Swarm.&lt;/li&gt;
&lt;li&gt;De gebruiker wacht nooit op de transcriptie.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="stap-1-opnemen-in-flutter"&gt;Stap 1: opnemen in Flutter&lt;/h3&gt;
&lt;p&gt;De app neemt op met het &lt;code&gt;record&lt;/code&gt;-package in AAC (m4a), vraagt de microfoonpermissie en laat je meteen een categorie, een vlag en een titel kiezen. Het bestand gaat als multipart-upload naar de NestJS-API. Vanaf dat moment staat de notitie in de lijst, met de status &amp;ldquo;wordt verwerkt&amp;rdquo;.&lt;/p&gt;</description></item><item><title>Zoeken in een technische catalogus: Elasticsearch en ETIM bij Omni-Term</title><link>https://dewachtere.be/blog/etim-zoeken-elasticsearch-omniterm/</link><pubDate>Wed, 16 Sep 2026 00:00:00 +0000</pubDate><guid>https://dewachtere.be/blog/etim-zoeken-elasticsearch-omniterm/</guid><description>&lt;p&gt;Een installateur die &amp;ldquo;prescomanometer 1/2&amp;rdquo; intikt, wil één ding: het juiste artikel, meteen. In de &lt;a href="https://dewachtere.be/projects/omni-term-webshop/"&gt;B2B-webshop van Omni-Term&lt;/a&gt; zoeken installateurs op artikelnummer, leverancierscode, merk, omschrijving of een technisch kenmerk, en dat over een catalogus van vele fabrikanten. Zo heb ik die zoekfunctie opgebouwd.&lt;/p&gt;
&lt;h3 id="eén-zoekvak-veel-soorten-vragen"&gt;Eén zoekvak, veel soorten vragen&lt;/h3&gt;
&lt;p&gt;De zoekopdracht wordt eerst geanalyseerd. Herkent de code een artikelnummer of een leverancierscode, dan gaat ze rechtstreeks naar exacte en wildcard-matching op die velden, met de hoogste boost. Herkent ze een merknaam, dan krijgen producten van dat merk voorrang. De rest zijn gewone termen, die over meerdere velden tegelijk gezocht worden: de omschrijving als exact keyword, als geanalyseerde tekst en als edge-ngram voor prefixen, de productbeschrijving, en de hiërarchie van categorie tot productfamilie. Zoeken op een oud artikelnummer levert via een geneste lijst van voorgangers ook de opvolger op.&lt;/p&gt;</description></item></channel></rss>