ProjectFlowPro.dev · Full-stack engineering · Cloud · Automation
Complex Systems. Clear Solutions. Built to Last.
I design and develop web applications, mobile products, SaaS platforms, cloud infrastructure and automation systems, with an emphasis on clean architecture, maintainable code and dependable delivery.
- TypeScript
- React
- Flutter
- Python
- AWS CDK

this.fn = new NodejsFunction(this, 'Fn', {
entry: props.entry,
handler: 'handler',
runtime: lambda.Runtime.NODEJS_20_X,
architecture: lambda.Architecture.ARM_64,
…- TypeScript
- React
- Next.js
- Angular
- Flutter
- Dart
- Python
- Node
- NestJS
- GraphQL
- Prisma
- AWS CDK
- Lambda
- DynamoDB
- Postgres
- Supabase
- Google Cloud
- Firebase
- CloudFront
- Stripe
Engineering skills
What I build with, and the proof behind it.
Each skill links to the systems and code behind it, with counts taken from the repositories, not described in general terms.
Frontend: React and Next.js
TypeScript · React · Next.js · Angular · Emotion
Static-exported Next.js products, installable web apps and component systems, written in strict TypeScript.
Template Hub storefront: Next.js static export with a checkout-to-activation flow
See the evidenceMobile: Flutter and Dart
Flutter · Dart · Riverpod · Drift
Feature-first clean architecture, typed routing and offline data that survives every upgrade.
HomeProSG: 98 screens across four role domains, 20 feature modules
See the evidenceBackend and data
Postgres · Supabase · DynamoDB · Lambda · GraphQL · NestJS · Prisma · Stripe
Systems of record with row-level security, single-table DynamoDB, idempotent commands and payment webhooks.
RouteDawg: Postgres 17 on Supabase, RLS on all 70 public tables (119 policies)
See the evidenceCloud and infrastructure
AWS CDK · CloudFront · API Gateway · SES · Step Functions · SSM · Google Cloud · Firebase
Infrastructure as code that provisions customers on purchase, hosts many tenants and stays inside AWS limits.
Multi-tenant CloudFront: one private S3 bucket, a tenant parameter per site
See the evidencePython systems
Python · Pipelines · Data
Generators, planning engines and design pipelines with explicit contracts and their own tests.
WebWorks Generator: a 17-dimension acceptance contract, 143 Python test files
See the evidenceDesign systems
Tokens · Components · Flutter · CSS
Token-driven component libraries for Flutter and the web, and measured style systems for new sites.
A Flutter design system: 50 components on spacing, radius, elevation and type tokens
See the evidence
Clean code in practice
Real excerpts from the systems.
Short, unedited excerpts from the codebases behind this portfolio, with the practice each one shows.
this.fn = new NodejsFunction(this, 'Fn', {
entry: props.entry,
handler: 'handler',
runtime: lambda.Runtime.NODEJS_20_X,
architecture: lambda.Architecture.ARM_64,
timeout: Duration.seconds(props.timeoutSeconds ?? 10),
memorySize: props.memorySize ?? 256,
bundling: {
// AWS SDK v3 is provided by the Node 20 runtime — don't bundle it.
externalModules: ['@aws-sdk/client-dynamodb', '@aws-sdk/util-dynamodb'],
minify: true,
},
});const window = Math.floor(nowMs / 1000 / RATE_WINDOW_SEC);
await ddb.send(
new UpdateCommand({
TableName: tableName,
Key: { PK: `FORMRATE#${slug}#${ipHash}`, SK: `WINDOW#${window}` },
UpdateExpression: "ADD #c :one SET expiresAt = :exp",
ConditionExpression: "attribute_not_exists(#c) OR #c < :limit",
ExpressionAttributeNames: { "#c": "count" },
ExpressionAttributeValues: {
":one": 1,
":limit": limit,
":exp": (window + 1) * RATE_WINDOW_SEC + 3600,
},
})
);class WarrantyRepositoryImpl implements WarrantyRepository {
final WarrantyApiDatasource _datasource;
const WarrantyRepositoryImpl(this._datasource);
@override
Future<Warranty> fetchWarranty(String warrantyId) async {
final raw = await _datasource.fetchWarranty(warrantyId);
return WarrantyMapper.fromDto(WarrantyDto.fromJson(raw));
}
}def closure(requires: dict, start: str) -> set[str]:
"""`start` and everything it transitively requires.
A SET REACHED BY WALKING, not a list built by following one predecessor. The pipeline
branches — `roles` joins sections and plugins — so a chain-walk visited one arm and
silently declared a page complete with the other arm unaccepted.
"""
seen, stack = {start}, [start]
while stack:
for nxt in requires.get(stack.pop(), []):
if nxt not in seen:
seen.add(nxt)
stack.append(nxt)
return seenLayers with clear seams
Domain, data and presentation kept apart, so business rules import no framework code.
Idempotent by design
Webhooks, commands and workflow starts that are safe to retry, enforced in the database.
Gates before merge
Acceptance contracts, plan gates and an evidence-backed review surface decide when work is done.
Tests that count
490 infrastructure tests, 149 Flutter test files and 143 Python test files across the systems.
Core systems
Two systems behind all of my development.
PWS decides what work happens and verifies the results; BWS carries that work through the browser. Every project on this page is coordinated and verified through them.
- Since 26 Aug 2026the coordinator loop runs unattended, end to end
- At most oncemessage submission, proven by mutation tests
- Human-ownedsign-in, spending and anything irreversible
- 01
Project Workflow System (PWS)
The coordinator across my projects. It decides what work happens next, relays between me and every project session, and checks each claim against its artifacts before the work moves on.
- Work sealed into SHA-256 evidence bundles
- An independent reviewer rules on every bundle
- A person decides anything irreversible
- 02
Browser Workflow System (BWS)
The browser transport. It owns the browser surfaces and carries messages and review bundles to and from the coordinators, inside a browser the operator signs in to.
- TypeScript on Playwright: an agent and a controller
- Exactly-once channels, resumable after a crash
- Never touches passwords; every action logged
Selected systems
Products and platforms, shown as they run.


RouteDawg
- Web apps
- Supabase


HomeProSG
- Flutter
- AWS CDK


TruFitness
- Flutter
- Offline data


WebWorks Generator
- Python
- React
Screens are actual captures of the running apps and the generator's review surface; background photos from Pexels.
Application development
Three apps, end to end.
- 91screensadmin console 34 · manager 33 · driver 14 · sign-in 6 · public 4
- 70public tables with row-level security119 policies
- 3installable appsadmin console, manager, driver
RouteDawg
Dispatch and route planning for small carriers: an admin console, a manager app and a driver app, on a Supabase backend.
- Installable web apps (Next.js 15, React 19)
- Postgres 17 with RLS on every public table
- Route planning through Route Optimizer


- 98screenscustomer 38 · provider 38 · admin 8 · platform 1 · shared 13
- 20feature modulesdata, domain and providers layers
- 18CDK domain stacks103 Lambda-resolved operations
HomeProSG
A multi-role home-services platform: customers, providers and platform staff, on an AWS CDK backend.
- Flutter: 98 screens, 20 feature modules
- CDK GraphQL across 18 domain stacks
- Account-scoped authorisation


- 19screensworkout, history, templates, stats, profile and more
- 8feature modules0 of 50 domain files import Flutter
- 149test filesDrift schema 18, migrations tested
TruFitness
Offline-first workout tracking with circuits, progress and personal records, all on the phone.
- Feature-first clean architecture
- Drift schema 18, tested migrations
- 149 test files



AWS and infrastructure
Cloud that provisions customers, hosts tenants and passes its tests.
The WebWorks marketplace and the HomeProSG backend are both built in AWS CDK: infrastructure written, reviewed and tested like application code.
The AWS architectureMulti-tenant CloudFront
One private S3 bucket; each site is a tenant with its own domain and certificate.
Provisioning on purchase
Stripe webhook to order, entitlement and site, with a Step Functions domain workflow.
Forms on Lambda and SES
Per-tenant routing records, an atomic rate limit and a queue with a dead-letter queue.
Secrets and prices in SSM
SecureStrings read at runtime; price IDs per environment, test and live kept apart.
CDK at scale
HomeProSG: 18 domain nested stacks, 103 Lambda-resolved operations.
Tested infrastructure
29 Jest suites, 490 passing tests, including synth-level assertions.
The WebWorks line
From a real page to a live, sold website.
- 01
WebWorks Generator
Processes real pages into labelled components
- 02
Knowledge Base
Learns how pages are designed from that output
- 03
WebsiteCreator
Writes a design guide and builds the new site
- 04
Template Hub
Sells the finished sites
- 05
Infrastructure
Activates and provisions each purchase



How I build.
These stages are governed through the Engineering Review & Assurance System, keeping evidence, provenance and authorised approval tied to the work.
- 01
Architect
scoped plans, authority boundaries, review.
- 02
Build
controlled implementation.
- 03
Verify
evidence, tests, provenance, proof assertions.
- 04
Deliver
authorised acceptance and release controls.
Engineering Review & Assurance System
A provenance-first review surface: every claim about the state of a project shows where it came from, and approval can only come from an authorised reviewer, never from the system being reviewed.
Review surface implemented · 971 proof assertions executed across its 17 specified parts.
View the case study- Evidence
Each claim carries its provenance; a proof is bound by SHA-256 to the specification revision it proves.
- Review
The surface derives what is due. "Not due" and "undeterminable" stay separate, so missing data never reads as all-clear.
- Authority
The approver comes from the designation record. A client-supplied approver is unreachable, not merely rejected.
- Decision
Only the designated reviewer records a decision, bound to that record; the system under review can never approve itself.
These four stages summarise the full eleven-stage lifecycle. The full lifecycle
AI-assisted work runs inside the same loop: every unit of work produces evidence, an independent reviewer rules on it, and a person decides anything irreversible. How the delivery workflow works

About
A little about me
I'm Joshua K. Holloway, a self-taught software developer with more than 24 years of experience in construction and home improvement, including 15 years running my own business.
My interest in programming started in 2012 with a book from my local library. I had no idea where it would lead, but I enjoyed the challenge of figuring out how things worked.
That curiosity turned into more than a decade of learning and building software, from business applications to mobile products, cloud infrastructure, and automation systems.
I've always enjoyed work that challenges me to think, adapt, and learn something new. Software development gives me an almost endless opportunity to do exactly that.
Now I'm turning something I've enjoyed doing for years into my full-time profession, while continuing to build my own products and helping others bring their ideas to life.
Start a project
Ready to build something solid?
If you need a website, product, internal tool, automation workflow, or cloud-backed system built with clean architecture and professional execution, let's talk.
Start with the problem, the current system, and what a successful result needs to look like.

