Projects
A selection of projects I've built for clients and personal ventures. Each project showcases my approach to solving real-world problems with modern web technologies.
Élara, Luxury Fashion E-Commerce
A full-stack luxury e-commerce platform for fur and leather fashion, selling worldwide. Built with Laravel 12 and Vue 3. It handles Stripe checkout in multiple currencies, region-aware shipping and tax, gift cards, ATO-compliant refunds, customer self-service returns and exchanges, and a full admin panel with analytics.
Overview
Élara is a production-grade, global e-commerce platform for a luxury fur and leather fashion brand, built to sell worldwide from day one. A Laravel 12 JSON API powers a Vue 3 single-page app, Stripe Checkout handles payments across several currencies, and a pre-launch password gate keeps the storefront private during the build. The store is currently live in pre-launch: the waitlist gate is up, and the full multi-region commerce stack and admin panel are built and verified behind it.
Primary markets are Australia, the United States, the European Union, the United Kingdom, and South Africa, with a "Rest of World" fallback shipping zone.
Global Commerce
- Multi-currency. The base currency is AUD, with USD, EUR, and ZAR available for both display and Stripe checkout. Exchange rates are cached and refreshed daily by a scheduled command, and the storefront currency is auto-detected from the visitor's IP on their first visit.
- Region-aware shipping. Countries map to zones, each with its own rates, free-shipping thresholds, and a customs and duties notice for international orders.
- Region-aware tax. GST for Australia, sales tax for the US, and VAT for the EU, UK, and South Africa, calculated inclusive or exclusive depending on the zone.
- Pricing drift detection. An admin dashboard flags any per-currency price row that drifts from the live FX rate beyond a configurable threshold, and re-snaps it to today's rate with one click.
Returns, Exchanges & Refunds
- Customer self-service returns. There's a 30-day return window, which extends to 365 days for major failures under Australian Consumer Law, on top of the EU 14-day cooling-off period and the South African 6-month defect warranty. Customers can upload photos for defects and follow the request through a full status workflow with email confirmations at each step.
- Exchanges. Customers pick a variant of the same product, and the system creates a zero-cost replacement order automatically.
- Partial and full refunds. Refunds work at the item level with proportional discount math and a Stripe-first payment split across Stripe and gift card. Each one produces an ATO-compliant adjustment note with sequential numbering and a GST breakdown.
- Self-service order cancellation that automatically reverses the refund, stock, coupon, and gift-card balances.
Storefront
- Product browsing with audience segmentation, category and type filtering, sale pricing on date ranges, search with autocomplete, and a hybrid cart that lives in localStorage and the database and merges on login.
- Checkout for both guests and signed-in customers, running Cart, Shipping, Billing, and Review steps, with coupon codes and gift-card redemption (partial or full payment).
- A customer portal covering the dashboard, order history with a timeline, reorder, invoice and adjustment-note PDFs, an encrypted address book, 2FA, GDPR data export, and account deletion with anonymisation.
- Reviews, gift cards, and SEO. Product reviews are moderated and support helpful voting, gift cards are purchasable with a 3-year expiry, and the SEO layer adds JSON-LD structured data and a cached XML sitemap.
Admin Panel
- Dashboard with revenue and sales charts (Chart.js), orders by region, revenue by currency, top products, and low-stock alerts.
- Full management of orders, returns, products (variants, images, stock audit trail), users, coupons, gift cards, content, promotional banners, and shipping and tax settings, all with create, read, update, and delete.
- User impersonation. Staff can log in as a customer, but only with a documented reason. The customer gets an email notification, the session expires after an hour, the session ID regenerates, and everything lands in an audit trail.
- Analytics and marketing. Sales reports export to CSV, and newsletters send in rate-limited chunks that respect each customer's preferences.
- Material and compliance. Each product records its fur species, country of origin, treatment, and care instructions to meet FTC, EU, ACL, and CPA labelling rules.
Security
- Pre-launch gate. While it's enabled, the middleware blocks every endpoint that isn't on the allowlist. Access comes either from a password-derived HTTP-only cookie (compared in constant time) or an Admin or Staff session.
- Authentication. Sanctum SPA session auth, Google OAuth, and enforced email verification. Admin and Staff accounts also need email-based two-factor (a 6-digit OTP, bcrypt-hashed, plus single-use recovery codes).
- Data protection. Addresses and phone numbers are encrypted with AES-256, order URLs use ULIDs so they can't be guessed, and soft deletes keep order history intact for compliance.
- Hardened HTTP. A strict Content-Security-Policy (no unsafe-inline on scripts), HSTS, and the full set of security headers, backed by four-tier rate limiting, restricted CORS, and CSRF on every mutation.
- Stripe idempotency. Every refund operation carries an idempotency key, and webhooks are signature-verified and deduplicated.
- Bot protection with honeypot fields and submission-timing checks on the contact form and waitlist signup.
Compliance
- Global privacy. The platform covers GDPR (EU), CCPA (US and California), POPIA (South Africa), and the Australian Privacy Principles, with data export, account deletion, cookie-consent logging, and region-specific legal pages.
- ATO. ABN checksum validation, sequential adjustment-note numbering, per-line-item GST extraction, and 5-year financial record retention through soft deletes on every financial model.
- Consumer law. Consumer-guarantee rights are stated per region, return windows are configurable, and gift-card terms appear at the point of sale.
Architecture
- A service-layer design. Dedicated services handle checkout, stock, gift cards, coupons, refunds, returns, currency, shipping, tax, and pricing, which keeps the business logic out of the controllers.
- Form Request validation on every mutation endpoint.
- DB-backed settings with a cache and config fallback for the values admins can change.
- Caching and query optimisation through cached reference data, eager loading, and
chaperone()to head off N+1 queries. - Queued Mailables for the full order, return, and exchange lifecycle, plus account events and marketing.
- Operational endpoints for uptime health checks, IP geo-detection, and an SES webhook that keeps a bounce and complaint suppression list current.
Phasin'Land, Custom Apparel E-Commerce
A production-grade e-commerce platform for custom apparel with an AI-powered Design Studio (Fabric.js + OpenAI), Stripe wallet payments, gift cards, a coupon engine, a review system, and a full admin panel with analytics. Built from scratch with Laravel 12, Vue 3, and Pinia, and launching soon.
Overview
Phasin'Land is a complete e-commerce platform I built from the ground up for a custom apparel and accessories brand. Customers browse products, create their own designs in an AI-powered canvas editor, and check out with Stripe, all wrapped in a modern Vue 3 SPA with a full admin panel behind it. It targets the Australian market first, with ATO and ACL compliance baked in, and the architecture is ready to expand globally from there.
The build is finished and the platform is launching soon. The public storefront goes live once the brand is ready to open its doors.
AI-Powered Design Studio
The flagship feature is a full canvas editor built with Fabric.js 7 that lets customers design their own apparel:
- Text, shape, image, and pattern tools with full formatting controls
- An AI Design Assistant, a conversational chat powered by OpenAI (GPT Image 1 and DALL-E 3) that generates and edits images straight on the canvas
- Content moderation that combines local keyword matching with the OpenAI moderation API, plus trademark detection (Nike, Disney, and the like) and profanity filtering that normalises leetspeak
- A smart pricing engine that recalculates in real time, adding surcharges for AI generation ($5), extra colours ($2 per colour over 2), custom uploads ($3), and design complexity (10 or more objects)
- DPI validation to enforce print quality
- Undo and redo, zoom and pan, and a real-time mockup preview
- An admin approval workflow where designs go through review with approve, reject, or change-request options, and print files generate asynchronously through job queues
E-Commerce Core
- A product catalogue with variants (size and colour), categories, audiences (Men's, Women's, Kids, Unisex), and multi-image galleries
- A shopping cart that persists, merges on login, and carries the attached design
- Stripe checkout with Apple Pay, Google Pay, and Link, plus webhook handling with idempotency and duplicate prevention
- The order lifecycle, covering status management, tracking numbers, and refunds with pessimistic locking to prevent double-refunds
- Stock management with audit logging and automated low-stock email alerts
Gift Cards & Coupons
- A gift card system that's purchasable from $10 to $500, delivered by email with a personal message, with balance tracking, a 3-year expiry, and admin management
- A coupon engine with percentage or fixed discounts, date ranges, per-user and global usage limits, minimum order thresholds, first-order-only coupons, sale-item exclusion, and category-specific targeting
Reviews & Social Proof
- Customer reviews with 1 to 5 star ratings, a helpful-vote system, admin moderation (approve, reject, reply), and automated review-request emails after delivery
Admin Panel
- A dashboard with sales charts (Chart.js), recent orders, low-stock alerts, and popular products
- Full CRUD for products, orders, designs, users, coupons, gift cards, banners, and categories
- A design review queue with an approval workflow and change-request tracking
- Analytics covering sales trends, top products, revenue reports, and CSV exports
- Activity logs, a complete audit trail of every admin action with filtering and export
- Email logs that track all 22 transactional email types
- A settings panel for shipping rates, GST, design pricing, AI limits, business info, and social links
Security & Authentication
- Sanctum token-based API auth with Google OAuth 2.0 social login
- Two-factor authentication (TOTP with recovery codes) that can be enforced on every admin account
- Role-based access control (Customer, Staff, Admin) through Spatie Permission
- GDPR compliance with data export and account deletion
- Stripe webhook signature verification backed by cache-based idempotency
- Encrypted database fields for sensitive data like phone numbers and addresses
- Sentry error monitoring with structured event logging
Architecture
- 31 Eloquent models, 46 controllers, 16 service classes, 6 Pinia stores, and 115 Vue components
- A service-layer architecture built around AiChatService, CheckoutService, DesignPriceCalculator, GiftCardService, EventLogger, and InvoiceService (PDF generation via DOMPDF)
- Async job queues for print file generation, supplier packs, and marketing emails
- AWS S3 integration for storing designs, mockups, invoices, and avatars
- 38 database migrations covering the full commerce, design, and audit schemas
Psychopedagogue Professional Website
Manon Distave, Les Petits Pas
A warm, professional website for an educational psychologist in Liège, Belgium. Built with Statamic CMS so the client can manage all the content herself. It has audience-segmented service pages, a contact form with email notifications, cookie consent, and a custom soft colour palette.
Overview
I designed and built a professional website for Manon Distave, a qualified psychopedagogue (educational psychologist) based in Liège, Belgium. The site markets her services to four distinct audiences, children, parents, university students, and teachers, with a dedicated page tailored to each one.
Client Requirements
The client needed a site that felt warm and approachable rather than clinical, was easy to update without developer help, worked beautifully on mobile, and spoke clearly to each of her audience segments. Budget and timeline were both tight, so the flat-file Statamic CMS approach turned out to be the perfect fit.
Design & Branding
- A custom colour palette of beige-rose backgrounds, sage-green accents, powder-pink hover states, and warm taupe text, chosen to feel welcoming and professional without tipping into sterile
- A typography trio of Playfair Display for headings, Raleway for subheadings, and Nunito Sans for body, which balances elegance against readability
- Custom CSS animations: a floating profile photo, card hover lifts, button ripple effects, and fade-in page transitions
- A mobile-first responsive layout with an Alpine.js hamburger menu
Audience-Segmented Content
Each service page is tailored to its audience with its own language, objectives, and process steps:
- Children: 6 learning objectives, a playful approach description, and a 3-step process
- Parents: 6 guidance areas, an emotional-support section, a common-challenges checklist, and a parent testimonial
- Students: a four-service grid (methodology, proofreading, professional posture, study techniques) and 4 key benefits
- Teachers: 6 professional-development objectives, a collaborative approach, and a 3-step process
Content Management
Every piece of text on the site is editable from the Statamic Control Panel. There are 13 global content sets covering profile, services, testimonials, contact details, pricing, analytics settings, and site branding, so the client can update everything without touching code.
Key Features
- A contact form with name, email, phone, a service-type selector, and a message, protected by a honeypot and sending HTML email notifications to the client with reply-to set to the sender
- Cookie consent management with configurable analytics (Plausible or Google Analytics)
- SEO with custom meta descriptions per page, Open Graph tags, semantic HTML, and a proper heading hierarchy
- Image optimisation through Glide, including WebP conversion and quality control
- A flat-file architecture that needs no database, keeps content version-controlled in Git, and stays lightweight and portable
- Testimonials woven throughout, with parent and student success stories for social proof
Outcome
The result is a polished, professional website that the client runs on her own. The audience-segmented approach makes the value clear to each type of visitor, and the warm design reflects how she comes across in person.
CedouDev Business Website
The site you are looking at right now, a business portfolio built with Laravel 12 and Statamic CMS. It has dynamic services and projects collections, Schema.org structured data, a contact form with Slack notifications, and a content architecture managed entirely through the CMS.
Overview
This is the online home for CedouDev. It works as both a professional business site for contracting clients and a portfolio for prospective employers, and every piece of content runs through Statamic's flat-file CMS.
Key Features
- A dual-purpose design that leads with the business side (services, projects, calls to action) while keeping the full professional background close at hand (experience, education, resume download)
- Dynamic collections. Services and Projects are Statamic collections with their own blueprints, so adding new entries from the Control Panel is straightforward
- A contact form with inquiry-type routing (Project Inquiry, General Question, Job Opportunity), a company field, honeypot spam protection, timestamp-based anti-spam, and real-time Slack notifications colour-coded by inquiry type
- SEO through Schema.org JSON-LD (ProfessionalService), Open Graph and Twitter Card meta tags, per-page meta descriptions, and canonical URLs
- Responsive design, mobile-first with Tailwind CSS 4 and Alpine.js for the interactive navigation
- Performance from Glide image optimisation, Vite asset bundling, and a deliberately small JavaScript footprint
- Conditional shop integration, a shop link in the navigation that toggles on when the e-commerce platform goes live