Services
Six things I build, and I build all of them myself — no account manager, no handover, no junior doing the actual work while my name sits on the invoice. The prices below are starting points; the real number comes after a scoping conversation, and I put it in writing before anything begins.
Starting prices, one scale
- Websites from R15 000
- Automations & integrations from R9 500
- WhatsApp widgets from R4 500
- Internal tools & dashboards from R28 000
- Software development from R45 000
- Anything custom from R7 500
Scale: R4 500 — R45 000
01
Websites
Static multi-page business sites. Astro, Cloud Run, measured before it ships.
from R15 000
Trades, installers and professional firms who need a real site of 8 to 30 pages, not a template with their logo dropped into it.
This is most of my work. Astro 5, Tailwind CSS 4, vanilla JavaScript. No React, no page builder, no bought theme. It ships as static HTML in an nginx container on Google Cloud Run in europe-west1 — nothing to log into, nothing to update weekly, nothing to hack. Fonts are self-hosted through Fontsource. Images run through astro:assets and sharp, and they are served from your own site rather than hotlinked off someone else's server. Sizes range from 8 pages to 30, and the bigger ones cost more than the figure below.
I measure your brand colours for contrast before I design with them, not after. Solar DNA's orange #FE9700 reads 2.18:1 as text — unreadable — so it became a fill-only token, with #AB6600 at 4.53:1 for any orange word. Wilton Plumbing's peach was being used as body text at 1.65:1 on their old site. Then I check the built output in headless Chrome: no horizontal overflow at 320, 390, 768 and 1440, and contrast pixel-sampled off the real rendered background rather than the hex code I hoped for.
What it includes
- Every brand colour contrast-measured before use, and split into a fill-only token plus a text-safe one where it fails
- A static Astro build deployed to Google Cloud Run (europe-west1), served by nginx from a container
- Fonts self-hosted via Fontsource, and your own photography downloaded, optimised and self-hosted
- Contact form fields matched to what you actually collect, plus WhatsApp enquiry buttons in WhatsApp's own green
- Overflow and contrast verified in headless Chrome at 320, 390, 768 and 1440 against the built output
- A static build — no CMS licence, no subscription, nothing to log into
02
Automations & integrations
The admin you do by hand every week, done by a script instead.
from R9 500
Anyone whose team spends hours a week moving the same information between a form, a spreadsheet and a chat app.
Most small businesses run on copy-paste. An enquiry form arrives, someone retypes it into a spreadsheet, someone else forwards it to a WhatsApp group, and by Friday nobody knows which enquiries were answered. I wire the steps together so the retyping stops. Form to inbox to sheet. Enquiry to the right person's phone. Invoices, reminders and reports on a schedule. Data pulled out of one system and pushed into another without a human in the middle.
I want to watch the manual process once before I build anything. The automation is only worth paying for if it matches what actually happens, not what the process document says happens. Then I build for the day it breaks rather than the day it demos: every step logs what it did, failures show up instead of disappearing quietly, and a retry does not create a second copy of the same record.
What it includes
- A written map of the current manual process, made by watching you do it, before any code
- The integration itself — forms, spreadsheets, email, WhatsApp, calendar, CRM, accounting, whichever pair of systems is costing you the time
- Error handling and retries that cannot create duplicate records
- A log you can read yourself, so you can see what ran, what failed and when
- A test run against your real data before it touches anything live
- Handover notes covering how to pause it, change it, or switch it off entirely
03
WhatsApp widgets
A WhatsApp button that opens with the enquiry details already filled in.
from R4 500
Any business where enquiries arrive on WhatsApp and half the conversation is spent asking the same qualifying questions.
In South Africa the first real conversation happens on WhatsApp. A plain wa.me link gets you a message that says Hi and nothing else, and then four more messages asking which product, which suburb, what size, what budget. A custom widget asks those questions on the page first and opens WhatsApp with the answers already written into the message. You reply once, with the context in front of you, and the lead arrives qualified.
I build the widget to your site rather than dropping in a plugin. Your fields, your wording, your colours — and WhatsApp's own brand green with their exact logo geometry on the button, not an approximation of it. It is one script on the page. No monthly subscription, and no third-party dashboard sitting between you and your own leads.
What it includes
- A question flow you specify — product, area, size, urgency, whatever actually qualifies a lead for you
- Opens WhatsApp on mobile and WhatsApp Web on desktop, with the answers pre-written into the first message
- WhatsApp's exact logo geometry and brand green, so the button reads as genuine
- Routing to different numbers by branch, area or department
- Drops into your existing site as a single script tag, whatever it was built with
- Contrast-checked against the page it actually sits on, at 320 through 1440
04
Internal tools & dashboards
The spreadsheet your business runs on, rebuilt as something that won't break.
from R28 000
Teams whose day runs on a shared spreadsheet, a WhatsApp group and one person's memory.
Every business has one spreadsheet holding up the roof. Six tabs, three people editing at once, a column nobody dares delete, and a formula that quietly broke in March. I turn it into a proper tool: real records instead of cells, permissions so the wrong person cannot overwrite the right data, a history of who changed what, and screens built for the job rather than for a grid.
Same engineering as the public sites. Every screen is checked at 320, 390, 768 and 1440, because the person doing a stock count is on a phone in a storeroom, not at a desk. Data gets the same scrutiny as colour. On the Custom Timber Decks build I typed Janka hardness as number-or-null, because composite decking has no Janka figure and printing 0 lbf would have been a lie. A blank is honest. A zero is not.
What it includes
- A tool your team uses daily, not a prototype that needs a second phase to be usable
- Roles and permissions, plus a record of who changed what and when
- Import of your existing spreadsheet as it is, with the bad rows flagged rather than silently dropped
- Dashboards showing the handful of numbers you actually act on, not every number you have
- Usable on a phone at 320px, verified in a real browser, not only on a desk monitor
- Export back out to CSV at any time, so you are never locked in
05
Software development
Custom applications, built and maintained by the person who wrote them.
from R45 000
Businesses with a process no off-the-shelf product fits, or a subscription that has stopped earning what it charges.
For when the thing you need does not exist as a product, or exists but charges more per month than building it once would cost. Booking systems, quoting engines, customer portals, calculators, job tracking. Software with users, logins and data behind it. I write it, I deploy it, and I am the person you phone when it misbehaves — there is nobody else on the line.
I work in small visible pieces. You get something running at a real URL early and watch it grow, instead of a status update claiming 70% complete. Verification is empirical: I drive the built application in headless Chrome with Puppeteer and check what actually rendered, because works-on-my-machine is not a test. Astro, Tailwind and vanilla JavaScript when the job is a site. Whatever the job genuinely needs when it is not.
What it includes
- Scoping in writing first: what it must do, what it will not do, and where the edges are
- Working software at a real URL from early on, updated as it grows
- Deployed to Google Cloud Run, which scales to zero — no compute bill while nobody is using it
- Automated checks driven against the built output, not just against the source
- A fixed monthly maintenance figure if you want one, and nothing at all if you don't
06
Anything custom
Think it, I make it. Tell me the awkward idea nobody else would take.
from R7 500
Anyone with an idea that fits no category and has been told it is too small, too odd or not worth the trouble.
The five above cover most of it, not all of it. The interesting work is usually the request that fits no category. It could be a screen that lives on a workshop wall, a script that renames forty thousand files without getting one wrong, a one-page tool built for a single event, or a piece of equipment that needs a web page to talk to it. If you can describe what should happen, I can usually work out how to make it happen.
The honest part: sometimes I will tell you not to build it. Now and then the answer is a product you already pay for, or a fifteen-minute change to how you do it now, and saying so costs me the job but keeps me worth phoning next time. If it is worth building, you get the scope and the price before you commit to anything. Start with a call — 065 911 1184. It costs nothing.
What it includes
- A first conversation, by phone or WhatsApp on 065 911 1184, to work out whether it is worth building at all
- A written scope with a fixed price before any work starts
- An honest don't-build-this when something you already have does the job
- Small pieces delivered as they finish, so you can stop at any point and still own something that works
- The same discipline as everything else — contrast, overflow and behaviour verified in a real browser at 320, 390, 768 and 1440
- Direct access to me, not a ticket queue or a support address
Start a job
Not on the list? Ask anyway.
Most of what I build started as somebody describing a problem out loud.
Pick whichever suits you