SMOALD / Portfolio
// Portfolio

Everything here is live, and every link works.

I've separated work I did for someone else from projects I built for myself, because the difference matters when you're deciding whether to hire me. Nothing on this page is a mock-up or a concept.

// Work for other people

Built for someone else's business.

I'm early in my freelance career and I'd rather say so than pad this section. Here's the real one.

Business website · Bilingual · Pro bono ● Live

T.P.A. Honey Farm

ฟาร์มผึ้งเทพภักดี — a working honey farm in Thailand

The problem

The farm had a website, but it was dated and difficult to use on a phone — which is how nearly all of their customers would find them. They sell a range of products that needed explaining properly: honey, bee pollen, royal jelly, propolis, honeycomb and a line of skincare. And their customers read Thai, English, or both.

What I built

I modernised their existing website — a complete rebuild as a Flask application that works on the phone in their customers' hands, keeping both languages throughout rather than bolting on a translation. Every product category got its own detail page, and the photography they already had was pulled together into a gallery that actually does it justice. Deployed live with the domain and hosting configured end to end.

What it demonstrates

That I can take an existing business with real products, real customers and a dated website, understand what they sell, and modernise what they already have into a site that works on the device their customers are holding — rather than starting from a blank page.

  • Flask
  • Python
  • Jinja
  • Bilingual TH/EN
  • Responsive
  • Render

Honest note: this was unpaid. I modernised the site for a friend's business without charging for it. It's here because it's genuine work for a genuine business, not because it was a commercial contract.

// My own products

Things I built, run and pay for myself.

Nobody briefed these. They're where I prove what I can do without anyone telling me how.

Web application · Subscription · AI ● Live

ThaiBridge AI

A language-learning app with real accounts, working subscription billing and a built-in AI tutor

The problem

I set myself the hardest version of a first web app deliberately. Anyone can build a to-do list. I wanted to prove I could build the parts a real online product actually needs — proper user accounts, genuine card payments, and a feature people would come back for — because those are exactly the parts that are easy to fake and hard to get right.

What I built

A Flask application with user accounts, Stripe subscription billing, and a Claude-powered tutor that answers questions in context. Around 9,000 lines across 86 routes and 56 pages, with 1,523 automated tests and continuous integration, running live on its own domain.

The decision I'd point to

Anything the browser can edit, a user can fake. So the database — and only the database — decides who has paid, and it's written solely by a signed, server-to-server message from Stripe. A tampered cookie can't unlock a paid feature. That one decision removed an entire category of bugs and cheats, and it's the kind of thinking I'd bring to your project too.

Proven, not claimed

  • A real test card payment verified end to end
  • Accounts confirmed to survive a redeploy without data loss
  • The AI feature capped so it can't run up an unexpected bill
  • 1,523 automated tests running on every change
  • Flask
  • PostgreSQL
  • Flask-Login
  • Stripe
  • Claude API
  • pytest
  • CI
  • Render
E-commerce · Front end ● Live

SMOALD Living

An online storefront built from scratch in plain HTML, CSS and JavaScript — browse a collection, filter by category, and add to a live slide-out basket that updates as you go. No frameworks, no build step.

  • HTML5
  • CSS Grid
  • Vanilla JS
  • GitHub Pages

A working demo — the shopping experience is complete; checkout is the next stage.

This website ● Live

smoald.com

The site you're reading. Static, hand-built on its own design system, deployed on Cloudflare Pages with a custom domain, DNS and SSL I configured myself — the same setup I'd give you.

  • HTML5
  • CSS tokens
  • Cloudflare Pages
  • Pages Functions
// Personal projects

Built to learn something specific.

Not client work and not presented as such — but each one exists because there was something I wanted to be able to do.

Game · Python● Playable

Samsara: Triple Gem

A 2D realm-exploration game in Pygame, compiled to run directly in a browser with Pygbag — no download, no install.

  • Python
  • Pygame
  • Pygbag
Game · Desktop● Playable

Dharma Duel

A Top Trumps-style card game with 40 figures and four AI difficulty levels, packaged as a standalone download for Windows, Mac and Linux.

  • Python
  • Pygame
  • PyInstaller
Backend · API● Live

MCP Server

A Model Context Protocol server that gives AI assistants access to custom tools over a clean API. Built in Python and deployed live.

  • Python
  • MCP
  • Render
Web app · Front end● Live

Grant Matcher

A tool for matching organisations to funding opportunities they'd actually qualify for, deployed on GitHub Pages.

  • HTML5
  • JavaScript
  • GitHub Pages
Mobile-first · Study tool● Live

Buddhist Quiz

A flashcard and quiz app for students revising for an exam — multiple study modes, difficulty levels and progress tracking, designed for a phone.

  • HTML5
  • JavaScript
  • GitHub Pages
Business tool● Live

Sole-trader bookkeeping tracker

A bookkeeping template for UK Self Assessment with automatic tax-year totals and a recurring-costs checklist. Built for my own business, then anonymised and published.

  • Excel
  • Python
  • UK tax year

Want something like one of these?

Tell me what your business needs and I'll come back with a fixed price and a timeline.