All work

Work samples

Snippets of how I handle this work, with the files included.

Case studies

More sample builds

Smaller builds. Each card shows a crop of the actual sample file, with links to open or download it.

Bank statements to one Excel workbook: crop of the real file

Sample buildBookkeeping & Reconciliation · Data, Reporting & Dashboards

159 transactions, every statement re-balanced

Bank statements to one Excel workbook

Three quarterly PDF statements from three banks read into one categorised transaction table, with each statement's opening + credits − debits re-proved against its closing balance.

  • 159transactions extracted
  • 3 of 3statements reconciled
  • 8exceptions for review
Product page copy and 3-email welcome sequence: crop of the real file

Sample buildAutomation & Integrations

5 product pages and 3 emails

Product page copy and 3-email welcome sequence

Five product pages and a three-email welcome sequence for a small candle brand, written to a brief with one voice and a consistent structure.

  • 5product pages
  • 3emails in sequence
  • 1,973words in the pack
Messy point-of-sale export to an analysis-ready workbook: crop of the real file

Sample buildData, Reporting & Dashboards

448 rows in, 420 clean rows out

Messy point-of-sale export to an analysis-ready workbook

A café sales export with merged headers, six date formats, text-stored numbers and duplicates, rebuilt as one clean table with a cell-by-cell cleaning log.

  • 448rows in
  • 420clean rows out
  • 2,894cell fixes logged
Timesheet and overtime calculator: crop of the real file

Sample buildBookkeeping & Reconciliation

148 shifts split into pay categories

Timesheet and overtime calculator

Shift rows split into ordinary, overtime, weekend and public-holiday hours by live formulas, with a fortnightly pay run and checks that the splits add back up.

  • 148shifts
  • 575.6hours in the pay run
  • 4/4checks pass
Excel VBA: monthly branch files to one report: crop of the real file

Sample buildData, Reporting & Dashboards · Automation & Integrations

12 files imported, duplicates skipped

Excel VBA: monthly branch files to one report

A VBA macro that finds each branch's header row, imports every monthly file, skips total rows and duplicate files, and logs what it did.

  • 12files imported
  • 785lines consolidated
  • 1duplicate file skipped
Sales data model and DAX measures: crop of the real file

Sample buildData, Reporting & Dashboards

51,401 fact rows across 4 dimensions

Sales data model and DAX measures

A star-schema sales model (one fact table, four dimensions) with documented DAX measures for revenue, margin, returns and target tracking.

  • 51,401sales rows
  • 3dimension tables
  • 17DAX measures
Three-statement model with 13-week cash view: crop of the real file

Sample buildBookkeeping & Reconciliation · Data, Reporting & Dashboards

3 scenarios, 10 of 10 integrity checks pass

Three-statement model with 13-week cash view

Linked P&L, balance sheet and cash flow driven from one assumptions tab, with base, upside and downside scenarios and a weekly cash buffer.

  • 9linked tabs
  • 3scenarios
  • 10/10checks pass
Google Sheets + Apps Script request tracker: crop of the real file

Sample buildAutomation & Integrations · CRM, Field Service & Support

73 requests tracked against SLA

Google Sheets + Apps Script request tracker

Form responses land in a tracker, get an SLA due date by urgency, and a weekly summary tab and email draft are built by script.

  • 73requests
  • 4weekly summaries
  • 250lines of script
Inventory reorder tracker: crop of the real file

Sample buildData, Reporting & Dashboards

12 of 60 SKUs flagged to reorder

Inventory reorder tracker

Reorder points from real sales velocity and lead times, stockout flags, open purchase orders netted off, and a draft PO grouped by supplier.

  • 60SKUs tracked
  • 4,108stock movements
  • 9/9checks pass
Job costing tracker for a trade business: crop of the real file

Sample buildBookkeeping & Reconciliation

12 jobs costed, 3 flagged over budget

Job costing tracker for a trade business

Quote vs budget vs actual per job from timesheets and cost lines, with margin, budget-used percentage and at-risk flags.

  • 12jobs
  • 150time and cost lines
  • 8/8checks pass
Landing page for a home cleaning service: crop of the real file

Sample buildWebsites

18 KB of HTML + CSS, no framework

Landing page for a home cleaning service

A single fast page with services, process, inclusions, FAQ and a quote form, hand-written HTML and CSS with no framework.

  • 18 KBpage weight
  • 8sections
  • 5FAQ items
n8n lead triage with scoring and reply drafts: crop of the real file

Sample buildAutomation & Integrations · CRM, Field Service & Support

10 leads scored, 4 hot

n8n lead triage with scoring and reply drafts

Inbound enquiries are normalised, scored on budget, timeline and fit, logged to CSV, and each gets a reply draft; hot leads raise an alert.

  • 10leads scored
  • 4hot alerts
  • 10reply drafts
Make scenario: web form to CRM with retries: crop of the real file

Sample buildAutomation & Integrations · CRM, Field Service & Support

35 of 35 test cases behave as designed

Make scenario: web form to CRM with retries

A form-to-CRM flow that cleans each lead, finds or creates the contact, emails a welcome, alerts sales on big budgets and retries on errors.

  • 35test cases
  • 35pass
  • 5bad leads rejected
Airtable/Notion operations base for an events team: crop of the real file

Sample buildCRM, Field Service & Support

272 records across 6 linked tables

Airtable/Notion operations base for an events team

Six linked tables (team, clients, equipment, events, tasks, bookings) with computed fields and a dry run of seven automations.

  • 6linked tables
  • 272records
  • 7automations tested
n8n: order emails to an order log: crop of the real file

Sample buildAutomation & Integrations

12 order emails parsed, 6 held for review

n8n: order emails to an order log

Order emails are parsed into header and line rows, totals are re-added, mismatches go to a review queue, and a daily summary is written.

  • 12orders parsed
  • 27line items
  • 6sent to review
pandas notebook: orders to a retention report: crop of the real file

Sample buildData, Reporting & Dashboards

4,996 raw orders cleaned and analysed

pandas notebook: orders to a retention report

Five thousand raw orders cleaned in a notebook (tests, duplicates, channel labels), then cohort retention, repeat rate and channel mix.

  • 4,996raw rows
  • 97duplicates and tests removed
  • 24.8%repeat rate measured
Supplier PDF invoices to Excel: crop of the real file

Sample buildBookkeeping & Reconciliation · Data, Reporting & Dashboards

20 invoices, 279 lines, 2 exceptions

Supplier PDF invoices to Excel

Twenty PDF invoices in three layouts read into invoice and line-item tables, totals re-added, and mismatches listed for a person to check.

  • 20invoices read
  • 279line items
  • 8/8checks pass
Sales KPI dashboard in Excel: crop of the real file

Sample buildData, Reporting & Dashboards

1,781 order lines behind one filterable dashboard

Sales KPI dashboard in Excel

A year of order lines behind one dashboard tab with region, category and rep drop-downs; every KPI and chart is a live formula.

  • 1,781order lines
  • 594orders
  • 3filter drop-downs
Local service article and content package: crop of the real file

Sample buildWebsites

1,253-word article with metadata

Local service article and content package

A 1,000-word local-service article with title, meta, headings, FAQ and internal-link plan, delivered as Markdown, Word and PDF.

  • 1,253words
  • 8H2 sections
  • 11H3 subheads
Supplier price list to a Shopify import file: crop of the real file

Sample buildData, Reporting & Dashboards

71 supplier lines to 69 variant rows

Supplier price list to a Shopify import file

A supplier's raw price list turned into a Shopify product CSV with variants, handles and options, plus a review workbook of every change.

  • 20products
  • 69variant rows
  • 13/13checks pass
SQL reporting pack on a shop database: crop of the real file

Sample buildData, Reporting & Dashboards

7 queries, 0 data-check failures

SQL reporting pack on a shop database

Six SQL queries over a SQLite shop database: monthly revenue, top customers, cohorts, product ABC, RFM segments and data checks.

  • 7SQL queries
  • 58products ranked
  • 0check failures
Stripe, Xero and bank three-way reconciliation: crop of the real file

Sample buildBookkeeping & Reconciliation

40 of 48 invoices matched

Stripe, Xero and bank three-way reconciliation

A month of Xero invoices matched to Stripe charges and bank lines, payouts matched to deposits, and every exception given a reason.

  • 48invoices
  • 7 of 8payouts matched
  • 12/12checks pass
Technical SEO crawl audit: crop of the real file

Sample buildWebsites · Data, Reporting & Dashboards

271 URLs crawled, 18 issue types prioritised

Technical SEO crawl audit

A crawl of a clinic site grouped into prioritised issues with affected URLs, impact, effort and the fix for each.

  • 271URLs crawled
  • 18issue types
  • 56P1 URLs
Researched B2B lead list: crop of the real file

Sample buildCRM, Field Service & Support · Data, Reporting & Dashboards

150 contacts at 64 companies

Researched B2B lead list

A buyer list for a packaging supplier with segment, size and role, each contact marked verified, partial or unverified with the source.

  • 150contacts
  • 86verified
  • 12/12checks pass
Branch report PDFs to Excel tables: crop of the real file

Sample buildData, Reporting & Dashboards

6 tables extracted, 10 of 10 totals re-add

Branch report PDFs to Excel tables

Tables pulled from three branch PDFs into one workbook, headings mapped to one naming scheme, and printed totals re-added.

  • 3source PDFs
  • 6tables
  • 10/10totals re-add
Product master and store upload (Indonesian): crop of the real file

Sample buildData, Reporting & Dashboards

18 raw rows to 14 import rows

Product master and store upload (Indonesian)

A raw Indonesian product list cleaned into a master sheet, synced against the store export, and written as a WooCommerce import.

  • 18raw rows
  • 14import rows
  • 46changes logged
Shared drive reorganisation with a rename log: crop of the real file

Sample buildData, Reporting & Dashboards

32 files renamed into 26 folders

Shared drive reorganisation with a rename log

A messy shared drive mapped to a numbered folder structure with dated, versioned file names, an index workbook and a full rename log.

  • 32files renamed
  • 26folders
  • 6naming rules
Recurring revenue contract review: crop of the real file

Sample buildBookkeeping & Reconciliation

13 contracts reviewed, 13 flags raised

Recurring revenue contract review

Contracts abstracted to one row each, compared with the billing report and AR ageing, and risky or missing terms flagged.

  • 13contracts
  • 13flags
  • 9/9controls pass
Warehouse stock ledger and weekly report: crop of the real file

Sample buildData, Reporting & Dashboards · Bookkeeping & Reconciliation

90 movements across 18 SKUs

Warehouse stock ledger and weekly report

Receipts, issues and transfers by location in one ledger, with live balances per SKU and a weekly report that re-proves itself.

  • 18SKUs
  • 90movements
  • 6/6checks pass
Help desk audit and target design: crop of the real file

Sample buildCRM, Field Service & Support

13 audit areas, 8 triggers redesigned

Help desk audit and target design

A help desk scored against good practice, then a target design: groups and roles, ordered triggers, SLAs, macros and a data sync map.

  • 13audit areas
  • 8triggers
  • 7macros
PHP: product CSV upload validator: crop of the real file

Sample buildAutomation & Integrations · Data, Reporting & Dashboards

49 of 60 rows pass; 11 errors listed

PHP: product CSV upload validator

A command-line PHP check that runs before a product upload: SKU format, duplicates, categories, prices, stock and barcodes, with one error row per problem.

  • 60rows checked
  • 49rows pass
  • 6fields with errors
PHP + SQLite JSON stock API: crop of the real file

Sample buildAutomation & Integrations

12 of 12 API tests pass against a live server

PHP + SQLite JSON stock API

A small JSON API for stock levels: list and filter products, read one SKU, and adjust stock with an API key, a required reason and a no-negative rule.

  • 12/12API tests pass
  • 3endpoints
  • 37lines of PHP
PHP quote calculator with tested pricing rules: crop of the real file

Sample buildAutomation & Integrations

13 of 13 pricing tests pass

PHP quote calculator with tested pricing rules

Pricing rules for a cleaning service written as one PHP function in cents: minimum charge, extras, recurring discounts and tax, each rule covered by a test.

  • 13/13tests pass
  • 7rates and extras
  • 5bad inputs refused
Python: merge monthly exports with different layouts: crop of the real file

Sample buildData, Reporting & Dashboards

4 layouts, 490 rows merged

Python: merge monthly exports with different layouts

Four monthly sales exports with different column names, date formats and money styles mapped to one schema, with store names normalised and a month summary.

  • 4source layouts
  • 490rows merged
  • 8 → 4store spellings
Python: web server log to a fix list: crop of the real file

Sample buildData, Reporting & Dashboards

2,400 lines parsed, slowest page median 1476 ms

Python: web server log to a fix list

An access log parsed into status counts, slow pages, 404s worth redirecting and hourly traffic, written to a workbook and two CSVs.

  • 2,400lines parsed
  • 113404 hits found
  • 4redirects to add
Python: duplicate supplier bill check: crop of the real file

Sample buildBookkeeping & Reconciliation

7 duplicate pairs found in 187 bills

Python: duplicate supplier bill check

Bills grouped by a normalised supplier name, then paired on invoice number (ignoring prefixes and spacing) or same amount within a week.

  • 187bills checked
  • 7pairs held
  • $15,075held before payment
Python: nested order JSON to two tables: crop of the real file

Sample buildData, Reporting & Dashboards · Automation & Integrations

40 orders, 91 lines, totals match

Python: nested order JSON to two tables

A nested shop export (customer, shipping, line items, discounts) flattened into orders and order lines that join back, with totals re-proved.

  • 40orders
  • 91line rows
  • 4/4checks pass
Australian address standardisation: crop of the real file

Sample buildData, Reporting & Dashboards · CRM, Field Service & Support

147 of 150 addresses standardised, 3 flagged

Australian address standardisation

One-line addresses split into street, suburb, state and postcode; street types and state names standardised; postcodes checked against their state.

  • 150addresses
  • 147standardised
  • 3flagged for a person
Survey comments coded into themes: crop of the real file

Sample buildData, Reporting & Dashboards

120 of 120 comments get every intended theme

Survey comments coded into themes

Open-text survey answers coded to six themes with a visible keyword rule list, tone marked, and an answer key used to measure the coding.

  • 124comments
  • 6themes
  • 120/120match the answer key
Aged receivables with reminder stages: crop of the real file

Sample buildBookkeeping & Reconciliation

$90,365 outstanding, re-aged by formula and checked in Python

Aged receivables with reminder stages

Invoices re-aged from one 'as at' date into five buckets, each customer given the reminder stage their oldest debt calls for, with a self-check.

  • 41invoices
  • $25,058over 60 days
  • PASSPython re-check of totals
Rule-based card expense categorisation: crop of the real file

Sample buildBookkeeping & Reconciliation

77% of 220 lines coded by 12 rules

Rule-based card expense categorisation

Card statement lines coded by an ordered rule list a bookkeeper can edit; unmatched lines go to a review queue and large hardware buys get a receipt flag.

  • 220statement lines
  • 77%auto-coded
  • 50left for review
Month-end close checklist: crop of the real file

Sample buildBookkeeping & Reconciliation

18 close tasks across 5 days

Month-end close checklist

Eighteen close tasks over five days with owner, evidence of done and WORKDAY due dates; late rows turn red and progress updates itself.

  • 18tasks
  • 4owners
  • 11areas covered
Client onboarding SOP: crop of the real file

Sample buildCRM, Field Service & Support

6 stages, 18 steps, 7 closing checks

Client onboarding SOP

A six-stage onboarding procedure with a 'done when' test for each stage and a closing checklist, as an editable Markdown file and a PDF.

  • 6stages
  • 18steps
  • 7closing checks
One-page site for a plumbing business: crop of the real file

Sample buildWebsites

5.4 KB page, 0 scripts

One-page site for a plumbing business

A one-page site for a trade: services, starting prices table, service area, process and FAQ. Plain HTML and CSS, no script, readable on a phone.

  • 5.4 KBtotal page weight
  • 0scripts
  • 5sections

Not listed? If it has an API or an export, I can usually work with it.