All Projects
Live2025Client Work · SME · Conversion Design

Carpentry Business — Client Project

Portfolio-Forward Web Presence for an SA Trade Business

Client project: a craft-first website for a South African carpentry and joinery business. Portfolio gallery above the fold, WhatsApp deep link CTA as primary conversion, zero dependencies for long-term client maintainability.

Serving

SA trade business market

Market

Word-of-mouth → digital conversion

Problem

Invisible online despite excellent craft

Result

Live and used for client acquisition

The Problem

What needed solving

SA trade businesses — carpenters, joiners, furniture makers — are exceptional at their craft and invisible online. Word-of-mouth caps their growth at the size of their immediate network.

The Solution

How I built it

Portfolio gallery above the fold — not the pitch, not pricing, the work. WhatsApp deep link CTA: wa.me/27xxx that converts immediately by meeting SA clients where they already communicate. Zero dependencies for maintenance-free longevity.

Build Journey

The carpentry project's most important decision was made before writing a line of code: the portfolio gallery goes above the fold. Not the pitch. Not the pricing. The work. In the South African trades market, the product sells itself — if you can see it. The WhatsApp CTA insight came from observing client communication patterns: SA clients in the SME market don't check email forms. They message on WhatsApp. A wa.me deep link — pre-populated with 'Hi, I saw your website' — converts leads immediately by meeting them in the channel they already use. This became a rule: every SA client website should have a WhatsApp deep link as its primary CTA. It is now standard across all SME client work.

What This Taught Me

  1. 1

    Portfolio-forward layout: the craft goes above the fold in trade market websites

  2. 2

    WhatsApp is the SA SME conversion CTA — wa.me deep links outperform contact forms

  3. 3

    Zero dependencies is a service quality feature for non-technical clients

  4. 4

    Client work seeds product rules: every WhatsApp CTA lesson eventually became AdminOS architecture

Tech Stack & Decision Rationale
01

HTML5

Zero dependencies — trade business owner cannot maintain a React app

02

CSS3

Responsive gallery with aspect-ratio locks, lazy loading

03

Vanilla JavaScript

WhatsApp deep link integration, image lazy load

README.md — carpentry-business
📄 README.md
# Carpentry Business — Client Project
> Portfolio-Forward Web Presence for an SA Trade Business

## Project Context
**Category:** Client Work · SME · Conversion Design
**Status:** Live · 2025
**Author:** Nandawula Regine Kabali-Kagwa — East London, South Africa
**Company:** Mirembe Muse (Pty) Ltd · Reg: 2026-005658

## Stack
```
HTML5                          # Zero dependencies — trade business owner cannot maintain a React app
CSS3                           # Responsive gallery with aspect-ratio locks, lazy loading
Vanilla JavaScript             # WhatsApp deep link integration, image lazy load
```

## Architecture Notes
- All data mutations validated server-side via Next.js API routes
- Row-Level Security enforced at database level (Supabase)
- Mobile-first, PWA-ready, offline-tolerant where connectivity is unreliable
- PayFast integration for ZAR-native payments (no USD conversion)
- SEO-optimised: metadata, JSON-LD, canonical URLs, sitemap
- POPIA compliant — data minimisation + user consent by design

## Environment Variables
```env
NEXT_PUBLIC_SUPABASE_URL=
NEXT_PUBLIC_SUPABASE_ANON_KEY=
SUPABASE_SERVICE_ROLE_KEY=
ANTHROPIC_API_KEY=
NEXT_PUBLIC_PAYFAST_MERCHANT_ID=
NEXT_PUBLIC_PAYFAST_MERCHANT_KEY=
PAYFAST_PASSPHRASE=
RESEND_API_KEY=
```

## Links
- Live:   https://carpentary-os-demo.vercel.app/
- GitHub: https://github.com/Nanda-Regine/carpentart-os-demo
- Portfolio: https://creativelynanda.co.za/projects/carpentry-business

---
Built from East London, South Africa · Nine months · Zero to production

Interested in similar work?

Let's discuss how I can build something like this for your business.

Let's Talk