Case 01 · Eigen product
Een puntenlijst die de werf overleeft
Project-Point is mijn eigen product: werfregistratie en projectbeheer voor de bouw. Punten, foto’s en planning op één plek, en een portaal waar de klant meevolgt zonder in je administratie te zitten.
- Rol
- Eigen product — ontwerp, bouw, uitbating
- Live op
- project-point.be
- Gebouwd met
- Pure JavaScript · esbuild · Supabase · Cloudflare
- Vorm
- Werf-app, klantenportaal en marketingsite
Context
Wat het verving
Een puntenlijst op een werf zit op drie plaatsen tegelijk: foto’s in een groepschat, notities op de achterkant van een leveringsbon, en één telefoontje dat nooit ergens terechtkwam. Iedereen heeft een versie, niemand heeft dé versie.
De rekening komt bij de oplevering. Er is iets afgesproken in maart, de foto die dat bewijst zit ergens in een gesprek met vierhonderd andere beelden, en de discussie gaat niet meer over het werk — ze gaat over wie zich wat herinnert.
Het product is dus geen projectbeheertool met foto’s erbij. Het is een punt: een foto, een markering op die foto, een actie, een eigenaar en een status — vastgelegd terwijl je ervoor staat, op een gsm, met werkhandschoenen aan.
Product
Wat het doet
vier dingen, geen veertig
-
Werven en punten
Per werf wat er nog moet gebeuren. Elk punt krijgt een actie — opvolging, info nodig, regiewerk of prijs doorgeven — en een status die je in één blik ziet.
-
Foto’s waarop je tekent
Maak de foto op de werf en teken er meteen op: pijl, cirkel of markering. De notitie blijft bij het punt staan, met de naam van wie ze schreef.
-
Planning en Gantt
Werken uitgezet in de tijd, en al je werven naast elkaar in één Gantt-overzicht — per week, maand of kwartaal.
-
Klantenportaal
Eén link per klant, per werf. Jij bepaalt punt per punt wat hij ziet, en hij kan reageren en zelf foto’s toevoegen.
Techniek
Keuzes die telden
en wat het alternatief kost
De klant raakt binnen zonder account
Toegang tot het portaal loopt via een e-mailadres en een pincode. Geen registratie, geen wachtwoord om te vergeten, geen account dat iemand moet beheren.
Waarom niet andersom
Een klant opent dit twee keer per jaar. Een registratieformulier is precies de plek waar die persoon afhaakt, en een portaal dat niemand opent is minder waard dan een mail. De prijs is echt: zonder identiteitsprovider draag je zelf de vervaltijd van de link, de rate limiting en de reikwijdte van de sessie — en dat krijg je alleen juist door het te testen als de verkeerde ontvanger.
Zichtbaarheid wordt per punt beslist, niet per werf
De aannemer zet elk punt op zichtbaar of intern. Prijzen die nog in discussie zijn, opmerkingen over een onderaannemer en de notitie over een betwisting blijven binnen.
Waarom niet andersom
Eén schakelaar per werf dwingt een keuze af tussen alles nuttigs verbergen en de discussie over meerwerk tonen. Per punt is meer werk om te bouwen en het is de enige fijnmazigheid die past bij hoe mensen echt over een werf praten.
Annoteren gebeurt bij het punt, niet later op kantoor
De pijl wordt op de gsm getekend, staand voor het ding zelf. De foto wordt opgeslagen mét de markering, niet naast een beschrijving ervan.
Waarom niet andersom
Een foto zonder markering is een discussie. Wie erbij stond weet over welke scheur het gaat; drie weken later weet niemand dat nog, hijzelf ook niet. Het achteraf doen is goedkoper om te bouwen en is precies de functie die stilletjes nooit gebruikt wordt.
De planning loopt over werven heen, niet binnen één werf
Het Gantt-overzicht zet elke lopende werf op dezelfde tijdlijn in plaats van elke werf zijn eigen schema te geven.
Waarom niet andersom
Eén werf plannen is niet moeilijk — dat zit al in het hoofd van de aannemer. De vraag die geld kost is welke ploeg volgende dinsdag waar staat, en die vraag is onzichtbaar tot de werven naast elkaar getekend staan.
Bouw
Hoe het gebouwd is
- 01
Geen framework
Pure JavaScript, gebundeld met esbuild. Deze app wordt geopend op een gsm op een dak met slechte ontvangst, dus elke kilobyte is een seconde dat iemand staat te wachten.
- 02
De database doet het werk
Ruwweg 180 KB PL/pgSQL in Postgres: toegangsregels, statusovergangen en wat het portaal van een werf te zien krijgt worden daar beslist, niet in de client.
- 03
Push in plaats van pollen
Web push, zodat een nieuw punt terechtkomt bij wie er iets mee moet, zonder dat iemand een tabblad moet openhouden.
- 04
Cloudflare van voor tot achter
De marketingsite, de app en het portaal komen van de edge. Dat houdt het eerste beeld snel op een werfverbinding en de vaste kost zo goed als nul.