A system that reads the job market every day and tells one person which roles are worth their time.
Own product · Own product, running daily, Australia · Design, build and run
Hiring data is spread across several public job sources, each with its own format, its own duplicates and its own noise. I built Beacon to collect roles from 5 public sources on a schedule, merge the duplicates into one record, and score every role against a written profile with a language model. For each strong match it prepares a tailored CV, a short covering note and a one page brief, then sends an alert to the phone. It runs around the clock on my own server, and every score comes with the reason in plain words. Result: about 400 roles read a day, narrowed to 10 to 15 worth a human look.
Stack: Python, FastAPI, PostgreSQL, Next.js, Claude Agent SDK, Telegram alerts
Result: 400 roles a day narrowed to 10 to 15 worth reading
A desktop agent that sees the screen and clicks and types like a person, only where it is allowed to.
Own product · Own product, in daily use, Australia · Design, build and run
Some work lives in applications with no API, so no integration can reach it. I built Hands, a desktop agent for the Mac that looks at the screen, decides where to act with Claude, and clicks and types like a person. You show it a task once and it repeats it, or you describe the task in plain words in a chat. Safety is the core of it: it acts only inside the applications and websites you allow, checks every step after it happens, records every run for review, and stops instantly on one key combination. Result: a 30 minute data entry routine finished in about 4 minutes, with nobody at the keyboard.
Stack: TypeScript, Node, Claude Agent SDK, Rust and Tauri for the native app, Chrome DevTools Protocol
Result: A 30 minute routine done in 4, every action recorded
A planning board where several AI coding agents take tickets, keep out of each other's way and close with proof.
Own product · Own product, in daily use, Australia · Design, build and run
When several AI coding agents work on one codebase at once, they edit the same files and forget what was decided yesterday. I built Brief, a board made for them. Every piece of work is a ticket with its goal, the proof that will count as done, and the files it may touch. An agent takes a ticket on a time limited lease, so two agents never edit the same files, and closes it with proof and a handover the next agent reads. Anything an agent notices outside its ticket waits for a person to accept or reject. Result: 8 agents working in parallel on one codebase, and 1,000 tickets closed with recorded proof.
Stack: Next.js, TypeScript, PostgreSQL, Model Context Protocol (MCP) tools, an HTTP API, self-hosted
Result: 8 agents in parallel, 1,000 tickets closed with proof
A complete private cloud on one server I own, replacing rented services and hosting every product on this page.
Own infrastructure · Own infrastructure, in daily use, Australia · Design, build and run
I wanted my photos, files, passwords, mail and notes on hardware I control, and somewhere to run the products I build. So I built a private cloud on one dedicated server: photo library, file sync, password manager, media server, mailbox, video calls with recording and transcription, analytics, and the AI apps described on this page. Everything is private by default behind an encrypted network, public sites go out through a tunnel, every app is monitored, and the whole box is backed up every night and described as code, so it can be rebuilt. Result: 30 apps on one machine, about 8 paid subscriptions cancelled, and 99.9% uptime over the past year.
Stack: Linux, Docker, Dokploy, Caddy, Cloudflare Tunnel, Tailscale, Restic, Grafana, Loki, Uptime Kuma
Result: 30 apps on one server I own, backed up nightly
A family of Telegram bots that carry alerts from servers, mail and business apps, and answer commands.
Telegram bots · Own infrastructure, Australia · Design, build and run
Alerts from servers, mailboxes, calendars and business apps were scattered across email and dashboards, and the important ones got buried. I built one always on service that runs 6 branded Telegram bots, each covering one area: server health, mail, reminders, market updates and more. Every feed can be switched on or off without a release, every message is logged, and repeats are grouped so one problem arrives as one message. The bots take commands too, so a check that used to need a laptop takes one tap on a phone. Result: 40 feeds in one place, and about 80% fewer alert messages after grouping.
Stack: Node and TypeScript with no outside dependencies, Telegram Bot API, PostgreSQL, Docker
Result: 40 feeds in one place, 80% fewer alert messages
A monitor that tracks competitor prices and stock, and suggests a price change within the owner's margin.
Price monitoring · Online retailer, consumer electronics, Australia · Design and build
The team checked competitor prices by hand in a spreadsheet, a few hundred products a week and always days late. I built a monitor that visits 12 competitor stores every 6 hours, matches each product to the client's own catalogue by model number and title, and records price, stock and promotions. A daily report flags undercuts and stock outs, and a simple rule set suggests a new price within the margin the owner chose. When a store changes its page layout the monitor raises an alert instead of quietly returning nothing. Result: 3,000 products tracked with no manual checking, and price moves caught the same day instead of the following week.
Stack: Python, Playwright, PostgreSQL, FastAPI dashboard, scheduled workers
Result: 3,000 products tracked, price moves caught the same day
Listings from many property sites merged into one clean feed and scored against the buyer's criteria.
Listing aggregation · Property investment firm, United Arab Emirates · Design and build
An investment team was following new listings across 6 property portals and agency sites, each with different fields and many copies of the same apartment. I built a collector that reads every source on a schedule, puts address, price, size and features into one format, and merges duplicates by matching addresses and comparing photos. Each listing is scored against the team's buying criteria, and the best new ones arrive in a morning email and on a shared board. Result: about 25,000 listings a month reduced to one clean feed, and the team saw new stock 2 days earlier than before.
Stack: Python, Playwright, PostgreSQL with PostGIS, OpenAI embeddings for duplicate matching, Next.js
Result: 25,000 listings a month in one feed, seen 2 days sooner
Companies that fit the ideal customer, found in public data, verified, and delivered straight into the CRM.
Leads and contacts · B2B software company, United Kingdom · Design and build
The sales team was buying lead lists that went stale within weeks and bounced on the first send. I built a pipeline that starts from public business directories and company websites, finds firms that match the ideal customer profile, and reads each site for company size, services and published contact routes. Every email address is verified before it is saved, duplicates are merged, and a language model writes one line on why the company fits. Records land in the CRM with the source of every field kept. Result: 8,000 qualified companies a quarter, a bounce rate under 3%, and no bought list since.
Stack: Python, Playwright, PostgreSQL, Claude for classification, email verification service, HubSpot API
Result: 8,000 qualified companies a quarter, bounce rate under 3%
A support assistant that answers from the help centre, cites the page, and hands over to a person when unsure.
Support agent · B2B software company, Germany · Design and build
The support team answered the same questions every day, and the answers already sat somewhere in 600 pages of help articles, release notes and internal guides. I built an assistant that searches that material, answers in the customer's own language, and cites the exact page it used. When the documents do not hold the answer it says so and passes the ticket to a person with a short summary, rather than guessing. New articles are added to its knowledge as soon as they are published. Result: about 45% of incoming questions answered without a person, and the first reply down from hours to under a minute.
Stack: Python, FastAPI, PostgreSQL with pgvector, Claude, Zendesk integration, a review screen for the team
Result: 45% of questions answered without a person
An iPhone app that reads the user's health data and gives coaching grounded in it.
Mobile app · Fitness coaching business, Australia · Design, build and release
The coaching business sent generic plans by email, and clients dropped off because nobody saw how they were really doing. I built an iPhone app that reads each client's workouts, sleep and steps from Apple Health, logs meals from a photo, and gives coaching from an AI coach that only works from that person's real data. Coaches see every client on one screen and step in when the app flags a problem. The app updates over the air, so fixes reach phones the same day. Result: 300 active users, and 35% more clients still training after 3 months.
Stack: Next.js, Capacitor for iOS, a native HealthKit plugin in Swift, FastAPI, PostgreSQL, Claude
Result: 300 active users, 35% more still training at 3 months
A subscription product built from a founder's idea to its first paying customers.
SaaS · Founder led startup, booking software for fitness studios, United States · Design, build, launch and support
The founder had a clear idea, a list of interested studio owners and no software: booking, memberships and payments for small fitness studios. I turned it into a working product: a landing page, sign up, subscription billing, a booking calendar members use on their phones, an owner's dashboard, and an AI assistant that drafts class descriptions and member emails in the studio's own voice. I launched it in stages, starting with the 5 studios already waiting, and fixed what they found every week. Result: live in 10 weeks, and 40 paying studios in the first 3 months.
Stack: Next.js, TypeScript, Supabase, Stripe subscriptions, Resend email, Claude, Vercel
Result: Live in 10 weeks, 40 paying studios in 3 months
Invoices and delivery notes read automatically, checked against orders, and posted to the accounts system.
Document processing · Freight and logistics company, Australia · Design and build
Invoices, delivery notes and customs forms arrived as PDFs and phone photos, and 2 people typed them into the accounting system. I built a pipeline that reads each document, pulls out the fields that matter (supplier, line items, totals, tax, references), checks them against the purchase orders and posts clean records to the accounts system. Anything uncertain or inconsistent goes to a review queue with the problem highlighted, so a person checks the exception instead of every page. Result: 1,500 documents a month processed, 85% of them with no human touch, and data entry cut from 2 days a week to a short daily review.
Stack: Python, FastAPI, Claude vision, PostgreSQL, Xero API, Next.js review screen
Result: 1,500 documents a month, 85% untouched by hand
An AI assistant the whole team can use, running in the company's own account, with no data sent to an outside AI provider.
Private LLM · Law firm, Australia · Design, build and hand over
Staff wanted an AI assistant for drafting and summarising, but client documents could not be sent to an outside AI provider. I set up an open weight language model on a GPU server in the firm's own cloud account, in its own country, with a familiar chat interface behind the company sign in. Staff can upload a document and ask questions about it, and a set of prepared prompts covers the common jobs: summaries, first drafts, clause comparison. Nothing is stored outside the firm's account, and every conversation is logged for their own audit. Result: 60 staff using it every week, and 0 documents sent to a third party AI.
Stack: Open weight models (Llama, Qwen), vLLM, Open WebUI, Microsoft single sign on, Docker, a cloud GPU server
Result: 60 weekly users, no document leaves the firm
The team's automations moved onto their own n8n server, with retries, alerts and backups.
Workflow automation · Digital marketing agency, Netherlands · Design, migrate and hand over
The agency ran 45 automations on a hosted service that charged per task, and the bill grew every time a client was added. Failures were silent until a client noticed. I moved every workflow to a self-hosted n8n server in their own cloud account, rebuilt the fragile ones, and added what was missing: queued workers so a busy hour does not drop jobs, automatic retries, an alert in their chat the moment anything fails, nightly backups and version history for every workflow. Then I trained 2 people to build their own. Result: about 30,000 runs a month, and the monthly bill down from $900 to $40 of server cost.
Stack: n8n with queue mode, PostgreSQL, Redis, Docker, Caddy, Slack alerts, nightly backups
Result: 30,000 runs a month, bill from $900 to $40
A team moved from rented cloud services to its own server, with every file checked on arrival.
Off SaaS · Architecture studio, New Zealand · Plan, migrate and support
The studio paid for file storage, a password manager and video calls per person, and its project archive sat in another country. I set up a private server with file sync, shared calendars, a password manager and video calls, all behind their own sign in, then moved 2 TB of project files over a weekend. Every file was checked against the original after the move, folder permissions were carried across, and the old services stayed read only for a month as a safety net. Result: 25 people moved with no lost files, $1,100 a month of licences removed, and the data now stored in their own country.
Stack: Nextcloud, Nextcloud Talk, Vaultwarden, Docker, Caddy, Restic backups, rclone for the migration
Result: 25 people moved, $1,100 a month saved, no file lost
Being installed
Finds freelance jobs worth applying for, scores them and drafts the cover letter.