Seven AI applications. An agentic marketing platform, and six agent apps on one secure platform — deployed on AWS and Azure.
Each application solves one real working problem — marketing & sales operations, security triage, outage response, research, test maintenance, design review, personal finance — with a team of AI agents built on LangGraph. Every one keeps a person in control of anything that matters.
All six agent apps are deployed on AWS, Azure or both, behind secure sign-in. A pay-per-use version also runs on AWS and Azure. The marketing platform is self-hosted.
Alongside the applications, two warehouse data platforms — the same raw-to-reporting pipeline built first on Snowflake and then on Databricks, agreeing to the penny on every reporting table. These are data pipelines, not AI apps.
Seven applications · two data platforms · AWS and Azure deployments
- Agentic AI Marketing Automation PlatformSelf-hosted42 agents research, qualify and draft for a small B2B business — humans approve everything
- Cyber Security AI AgentDeployed on AWSLinks code, log and cloud findings into ranked incidents
- DevOps Incident Analysis SuiteDeployed on AWS & AzureTurns noisy ops logs into incidents with quoted runbook steps
- Multi-Agent AI Deep ResearcherDeployed on AzureCited research reports that show where sources disagree
- Browser Automation AI AgentDeployed on AzureWrites website tests and repairs broken ones — only if a re-run passes
- Design Analysis SuiteDeployed on AzureReviews a screen design; every finding says measured or AI opinion
- AI Financial CoachDeployed on AWSBank statements to a debt, budget and payoff plan with exact figures
- Warehouse ELT on SnowflakeData platformTested raw-to-reporting layers built with dbt inside the warehouse — a bad row fails the build
- Warehouse ELT and MLOps on DatabricksData platformThe same layers in PySpark, plus a fine-tuned classifier and a copy-back into the app's database
- AWS EKS deploymentDeployed on AWSThe agent apps running in the AWS cloud
- AWS serverless deploymentDeployed on AWSA pay-per-use version running in the AWS cloud
- Azure AKS and serverless deploymentDeployed on AzureThe agent apps and a pay-per-use version in the Azure cloud
Marketing & sales operations
Agentic AI Marketing Automation Platform
An AI marketing and sales team for a small B2B software business. 42 specialised agents research competitors, qualify leads, draft content and prepare outreach, driven by 45 automated workflows on schedules and events. Every result is structured and checked before it is stored, and a person approves everything that leaves the building. It drafts; it never publishes or sends on its own.
Traditional vs AI
| Traditional way | What changed | Advantage |
|---|---|---|
| Research happens when someone finds time | Research runs automatically on a schedule, and results are checked | It happens every week, not when someone is free |
| One-off chatbot answers pasted around | Results arrive in a fixed, checked format straight into spreadsheets and the CRM | Repeatable results that flow straight into the tools |
| A budget alert fires after the overspend | Each job's cost is checked against the budget before it starts | A job that can't afford to finish never starts |
| Draft claims about competitors go unchecked | Only fully checked research is kept; anything unverified is dropped | Sales material never claims something unverified |
STAR outcome
- SSituation
- Two products launching with no marketing staff and a very small budget; the work either didn't happen or came from unverified one-off chat answers.
- TTask
- Run dozens of marketing and sales jobs automatically, with structured verifiable output, bounded AI cost, and a human gate on everything that leaves — portable from a laptop to a server without rework.
- AAction
- I designed and built the platform end to end: AI agents that run on a schedule or when something happens in the business, every result checked before it is used, and a person approving anything before it goes out. I tracked what the AI actually cost and brought it well within budget, packaged it to run the same way on any server, and set up automated checks on every change.
- RResult
- 42 AI assistants built, covering content, finding leads, sales support and strategy.
- Researching one competitor now costs 31 cents instead of $12.69 — about 41 times cheaper — with every result still checked.
- 27 of them passed full real-world trial runs with no failures; the rest are ready and waiting for real business information.
- Not measured extra revenue or leads — no live campaigns yet.
Security operations
Cyber Security AI Agent
A defensive AI security analyst. It links fragments from source code, logs, cloud permissions and web traffic into ranked incidents with the evidence attached, and drafts a response that a person must approve. It recommends; it never blocks, executes or attacks.
Traditional vs AI
| Traditional way | What changed | Advantage |
|---|---|---|
| Analyst reads each tool separately and joins them mentally | Related warnings are linked into one incident automatically | "These are one incident" is found every run, not only by the best analyst |
| Severity alone decides who gets paged | Top priority also depends on whether the weakness can really be exploited | A critical finding with no exploitation path pages nobody |
| Runbook chosen and copied by hand | The right response guide is found automatically and summarised | Consistent, cited response plan |
| Generic AI summariser over logs | Findings come from the security tools; the AI only explains them | Reproducible — it cannot invent a CVE, host or timestamp |
STAR outcome
- SSituation
- Security signals are spread across code, dependency, container, cloud and log tools; correlation and response drafting are manual.
- TTask
- Correlate them into prioritised incidents with evidence and draft a response — without the system acting on its own or an AI inventing findings.
- AAction
- I built a multi-agent app orchestrated by LangGraph that pulls together warnings from several security tools, backs its analysis with trusted reference material, and waits for a person's approval before any response goes out. I packaged it to run the same way anywhere and set up automated build and deployment, with a manual approval step before anything goes live.
- RResult
- In a trial run it turned 37 separate security warnings into 25 ranked problems, most urgent first.
- Recognises all 16 attack types it was designed to spot — this counts coverage, not accuracy.
- More than 600 automated checks run before every release.
- Not measured time saved; trialled on sample data, not a real company's systems.
2/2Cyber Security AI Agent
Screenshots





Site reliability & on-call
DevOps Incident Analysis Suite
Upload your ops logs. A team of AI agents groups the failures into distinct incidents, ranks them, attaches remediation steps quoted word-for-word from your own runbooks, and drafts the Slack message and Jira tickets — nothing is sent until a person approves.
Traditional vs AI
| Traditional way | What changed | Advantage |
|---|---|---|
| Search several log files by hand | Logs in many formats are read and grouped into incidents automatically | Distinct faults surface without reading every line |
| Remember or search for the right runbook | The best-matching runbook is found and its steps quoted with the source | Team knowledge used, every step traceable, "nothing fits" said plainly |
| Ask a chatbot for fix steps | The AI explains why; the fix steps come only from your runbooks | No invented commands reach the engineer |
| Recurrence spotted only if someone remembers | Repeat faults are recognised and counted automatically | Repeat faults flagged automatically |
| Hand-write the ticket and Slack update | Drafted automatically, sent only after approval, no duplicates | Less comms overhead; the human stays in control |
STAR outcome
- SSituation
- Outage triage over noisy, multi-format logs is manual, and generic AI tools can hallucinate dangerous fix commands.
- TTask
- Recommend fixes an engineer can trust — auditable, safe, and still working when the databases or the AI provider are down.
- AAction
- I built a multi-agent app orchestrated by LangGraph that only recommends fixes it can back with evidence and says so when it can't, keeps passwords and keys out of its records, raises tickets and messages only after a person approves, and keeps working when parts of the system are down. I packaged it to run the same way anywhere and set up automated build and deployment, with a manual approval step before anything goes live.
- RResult
- In a trial on sample logs it found 34 problems in about 17 seconds, backed every suggested fix with a source, and openly declined the 4 it could not support.
- Working on several problems at once cut one batch from 2½ minutes to under 20 seconds.
- Gives the same answers even when its supporting services are down, and hides any passwords or keys it finds.
- Not measured time saved compared with an engineer doing it by hand.
2/2DevOps Incident Analysis Suite
Screenshots








Research & analysis
Multi-Agent AI Deep Researcher
Seven AI agents answer a research question over several rounds and write a report in which every claim has a citation and a score for how well that citation backs it. Weak claims are labelled, not hidden, and places where sources disagree are shown.
Traditional vs AI
| Traditional way | What changed | Advantage |
|---|---|---|
| One keyword search or one chatbot prompt | Research runs in rounds, each building on what was found | Follow-ups aim at real gaps, not guesses made up front |
| Citations taken on trust | Every claim is checked against the source it cites | Weak support is visible, claim by claim |
| Disagreement averaged away or missed | Conflicts between sources are flagged and double-checked | One model's mistake can't erase a real conflict |
| A model decides "am I done?" | Clear, fixed rules decide when the research is complete | Predictable stopping; runs can be reproduced |
| A single search | Searches are combined and balanced across different sources | Six paragraphs from one paper don't count as six sources |
STAR outcome
- SSituation
- AI research reports cite sources that don't back them and hide disagreement.
- TTask
- Build a researcher whose evidence can be checked, and which still works with no model and no databases.
- AAction
- I built a multi-agent research app orchestrated by LangGraph that checks each claim against its sources and shows where sources disagree instead of hiding it. I packaged it to run the same way anywhere and set up automated build and deployment, with a manual approval step before anything goes live.
- RResult
- Fine-tuning cut false alarms about sources contradicting each other from 21 to 9, while the one genuine disagreement always stayed visible.
- Runs live on a server cluster.
- Not measured business impact or accuracy on real-world material — trialled on a small demo library.
2/2Multi-Agent AI Deep Researcher
Screenshots









Test automation & QA
Browser Automation AI Agent
A self-healing test-automation tool. It learns the user journeys on a website, writes test scripts for them, runs them against a changed version of the site, and repairs broken tests — keeping a repair only if the whole script then passes.
Traditional vs AI
| Traditional way | What changed | Advantage |
|---|---|---|
| Engineer hand-codes each journey | User journeys are discovered and tests written automatically | Coverage starts from what the site actually does |
| Engineer fixes each broken test after a redesign | A repair is proposed automatically, with safety checks | Repairs proposed automatically, without touching the wrong thing |
| A fix is accepted in code review | Accepted only if the whole test passes again | No false passes from a repair that only looks right |
| Read error messages by hand | Each failure is categorised and explained; tool problems are kept apart from real site failures | Engineers debug the right thing |
STAR outcome
- SSituation
- Automated website tests break whenever a site's look changes, and simple auto-repair tools can make a failing test look like a pass.
- TTask
- Repair broken tests without ever trading correctness for a pass.
- AAction
- I built a multi-agent app orchestrated by LangGraph that repairs broken automated test steps on its own, double-checks every repair, and may only visit approved websites. I packaged it to run the same way anywhere and set up automated build and deployment, with a manual approval step before anything goes live.
- RResult
- In the demo it fixes broken test steps by itself — in both a simulated and a real web browser, even when its supporting services are down.
- Caught a release that claimed to be healthy but could not actually open a browser; releases are now checked for this automatically.
- Not measured how often repairs succeed, or time saved, on real websites.
2/2Browser Automation AI Agent
Screenshots





Design & accessibility review
Design Analysis Suite
Upload a screen design. Five specialist AI agents measure it, critique it, compare it with reference designs and return a prioritised, cited review — where every finding says whether it was measured from the pixels or is an AI opinion.
Traditional vs AI
| Traditional way | What changed | Advantage |
|---|---|---|
| Manual contrast tool per element, often skipped | Readability and button sizes measured on every upload | Accessibility checks are never skipped |
| One reviewer's judgement | Several AI specialists review it; each finding is labelled measured or opinion | Readers can see which claims are checkable |
| Reviewer's memory of guidelines | Each recommendation cites a recognised design guideline | Each recommendation has a source |
| Gut feel, or an average that hides severe issues | A serious problem limits the overall score | A serious defect can't be averaged away |
STAR outcome
- SSituation
- Design and accessibility review is manual and subjective, and AI critique tools invent measurements.
- TTask
- Build a reviewer whose numbers are checkable and which still works without an AI key or databases.
- AAction
- I built a multi-agent app orchestrated by LangGraph that reviews designs against measurable checks, explains what it finds in plain language, and keeps working even without its AI service. I packaged it to run the same way anywhere and set up automated build and deployment, with a manual approval step before anything goes live.
- RResult
- Clearly tells good designs from flawed ones: good samples score 96–98 out of 100, flawed ones 55–72.
- Removing repeated findings shortened one report from 30 items to 21.
- Repeat reviews of the same design came back in under a second instead of 11 seconds.
- Not measured review time saved, or how well it agrees with human reviewers.
2/2Design Analysis Suite
Screenshots






Personal finance
AI Financial Coach
A seven-agent coach that turns your own bank statements into a debt analysis, budget, payoff plan and savings strategy. Every number is exact arithmetic you can trace back to your transactions; an AI only writes the explanation. Educational analysis, not financial advice.
Traditional vs AI
| Traditional way | What changed | Advantage |
|---|---|---|
| Manual tagging or brittle keyword rules | Spending is sorted into categories automatically | Long-tail merchants categorised; uncertain lines shown as "other" |
| Filter by keyword to answer "how much on X" | Ask in plain English; the matching transactions are added up exactly | Finds merchants without the keyword, and shows the rows |
| Charts with no ordering or payoff date | Common payoff strategies compared, each with a debt-free date | A decision, not just a picture |
| AI chatbot that may invent figures | The AI only explains figures that are already calculated | Same numbers with or without AI |
STAR outcome
- SSituation
- Personal finances live in messy, inconsistent bank exports; tools either chart without deciding, or use AI that can hallucinate numbers.
- TTask
- Build a coach whose figures are exact and traceable, and which keeps working with no AI key and no databases.
- AAction
- I built a multi-agent personal-finance coach orchestrated by LangGraph with exact money calculations, automatic sorting of spending into categories, and each person's data kept separate. I packaged it to run the same way anywhere, with one-step deployment.
- RResult
- Sorted all 234 transactions in a demo account into spending categories, with none left unsorted.
- For a demo household its debt plan paid everything off 39 months sooner and saved £4,977.79 in interest compared with paying only the minimum (made-up data).
- Keeps working even when its supporting services are down.
- Not measured how many people use it, time saved, or accuracy for real households.
2/2AI Financial Coach
Screenshots







Data warehouse · Snowflake
Warehouse ELT on Snowflake
Raw bank-statement and ops-log files land in Snowflake and come out as a tested, reportable star schema — raw, cleaned and reporting layers built with dbt running inside Snowflake itself, on Snowflake's own scheduler. A bad row fails the build rather than being quietly dropped, and the finished tables answer questions asked in plain English. Snowflake is hosted on AWS, in an AWS account dedicated to this platform. The source data is synthetic.
Traditional vs this build
| Traditional way | What changed | Advantage |
|---|---|---|
| Scripts move the data; a report checks it afterwards | The checks are part of the build, and a failure stops the chain | Bad data never reaches the reporting layer at all |
| A separate scheduling tool has to be run and secured | Snowflake's own task graph runs the transformations inside the warehouse | One fewer moving part to operate, pay for and protect |
| Totals are reconciled in a report somebody reads later | Reconciliation is itself a test that fails the build | A mismatch stops publication instead of being spotted weeks on |
| Every question needs an analyst to write SQL | Ask in plain English; the generated query is checked and run read-only | The warehouse computes every number — the AI never produces one |
| "Only your own rows" enforced by the reporting tool | Enforced by the warehouse itself, per household | The rule holds whichever tool connects, including a direct query |
STAR outcome
- SSituation
- Each of my applications kept its own figures in its own database. There was no shared warehouse, no single agreed definition of a number, and no way to prove a published total still matched the source it came from.
- TTask
- Build a warehouse pipeline where every published number is tested before it is published, where a bad input stops the run instead of quietly producing a wrong report, and where the schedule needs no extra orchestration tool.
- AAction
- I built raw, cleaned and reporting layers on Snowflake using dbt, with dbt running inside the warehouse and triggered by Snowflake's own two-step task graph. Every data test runs at error severity, so one failure fails the build, fails the task and skips everything downstream — including the reconciliation test that compares money totals between layers. I added plain-English questions over the reporting tables, a dashboard, per-household row-level access, spending caps, and a build pipeline in which every check must prove it actually examined something before it is allowed to report success.
- RResult
- Loaded 2,708 transactions, 101,178 log lines and 26 incidents in 8 seconds, with the full transformation finishing in 44 seconds inside Snowflake.
- A load with 6 deliberately planted defects failed with exactly those 6 test failures and every reporting table was skipped, so the last good version stayed in place.
- 89 data tests gate every run. Pull-request checks add unit tests, a full-history secrets scan, and floors that fail any check which looked at nothing.
- Runs unattended on a daily schedule; one run metered at 0.055 Snowflake credits, under a monthly cap that suspends the warehouse when reached.
- Not measured anything on real customer data — the source files are synthetic, generated from a fixed seed.
2/2Warehouse ELT on Snowflake
Screenshots
Data lakehouse · Databricks
Warehouse ELT and MLOps on Databricks
The same raw, cleaned and reporting layers rebuilt on Databricks — the transformations written in PySpark, governed by Unity Catalog, run as a job graph defined entirely in code on compute the vendor manages. Rejected rows are kept with the reason they were rejected, money totals must agree to the penny before anything downstream runs, and a fine-tuned classifier and a copy-back into the application's own database are gated the same way. Databricks is hosted on AWS too, in its own separate AWS account — not the one the Snowflake platform uses.
Traditional vs this build
| Traditional way | What changed | Advantage |
|---|---|---|
| Bad rows are dropped, or the whole load fails with no record of why | Each rejected row is written aside with its reasons and the file it came from | Nothing disappears silently; every rejection can be explained |
| Reconciliation is a report produced after publication | Reconciliation is a gate: the money totals must be exactly equal | A single penny of drift skips every later step rather than publishing |
| Pipelines assembled by clicking in a web console | The job graph, its schedule and its dashboard all live in one code file | Reviewable, repeatable, and rebuildable from the repository alone |
| A model is shipped because it scored well once | Every training run is recorded and compared against the stored baseline | A model that is worse than the one in use cannot be registered |
| Warehouse results stay in the warehouse, out of the product's reach | A scheduled job copies the summary figures into the application's own database | Users see warehouse analytics in the app they already use |
STAR outcome
- SSituation
- The Snowflake build proved the pipeline, but it covered none of the machine-learning lifecycle, and the figures it produced had no route back to the application that people actually use.
- TTask
- Rebuild the same pipeline on a second platform without reusing its transformation tool, add the model lifecycle and the path back to the app, and make every claim about correctness and about permissions something a run can demonstrate rather than something a document asserts.
- AAction
- I rebuilt the cleaned and reporting layers in PySpark under Unity Catalog governance, with the whole job graph, its schedule and its dashboard defined in one code file and run on compute the vendor manages. The quality gates set rejected rows aside with their reasons and hold a reconciliation gate that compares money totals exactly. I fine-tuned a DistilBERT text classifier over 22 spending categories, recorded every run, versioned the model in the catalogue behind an evaluation gate, and served it as a shared service used only after a rules layer and only when it is at least 80% confident. A scheduled Kubernetes job copies the summary figures into the application's own PostgreSQL through a login confined to one schema and two tables.
- RResult
- The two platforms agree on all 12 reporting tables — identical row counts and the same money totals to the penny, from the same input files.
- Proved with a deliberately corrupt batch, not only a clean one: the gate failed and every later step was skipped, so nothing wrong was published.
- The classifier chain — rules first, then the model only at 80% confidence or above, then closest-match on meaning — raised agreement with 245 reviewed labels from 95.5% with 9 wrong answers to 99.2% with none.
- The first copy back into the app's database moved 780 rows in 36 seconds, and eleven checks each prove one thing that login is refused rather than asserting its permissions.
- Not measured accuracy on real bank data — the data is synthetic, and those 245 labels were reviewed by me rather than independently produced. The drift monitoring raises an alert; it does not stop a run.
2/2Warehouse ELT and MLOps on Databricks
Screenshots
Cloud deployment · AWS
AWS EKS deployment
The agent apps deployed to a managed Kubernetes cluster in AWS, set up entirely as code, with secure sign-in, encrypted storage, monitoring and security alerts. The same Helm charts can deploy the apps to Google Kubernetes Engine (GKE) with minimal effort.
The cluster and its supporting services














2/2AWS monitoring & security
Monitoring & observability








Security


Cloud deployment · AWS
AWS serverless deployment
A pay-per-use version on AWS, set up entirely as code, showing three patterns: a secure website, scheduled jobs, and jobs that start when a file is uploaded.
The three flows
Secure website. Pages come from private storage, and sign-in is checked twice — before the page loads and again on every request to the app.
Scheduled jobs. Jobs run automatically on a timetable, each in its own locked-down space.
Upload-triggered jobs. Uploading a file starts an analysis automatically, and a report is saved when it finishes.
2/2AWS serverless deployment
Screenshots












Cloud deployment · Azure
Azure AKS and Serverless
The agent apps deployed to a managed Kubernetes cluster in Azure using the same Helm charts as AWS, plus a pay-per-use serverless version — set up entirely as code, with secure sign-in, private networking and monitoring.
The cluster and its supporting services












2/3Azure monitoring, audit & cost
Monitoring, audit & cost






3/3Azure serverless deployment
The serverless flows
Scheduled jobs. A security scan runs every morning on its own, in a job that exists only while it runs.
Upload-triggered jobs. Uploading a log file starts an incident analysis automatically, and the result is saved when it finishes.
Pay-per-use functions. Small functions handle requests and start jobs, and cost nothing while idle.








