Web apps built properly,
from the backend up.
I build custom applications where the backend actually matters — real-time data systems, payment integrations, and the infrastructure to keep them running. Not templates, not page builders. Systems you own, in code you can hand to anyone.
Selected work.
A few recent systems — the problem, what was built and the stack behind it.
Verivello
AI-powered UK company intelligence: plain-English due diligence on any company, grounded in official records.
- Multi-source data layer: Companies House, Land Registry, Gazette, FCA
- AI assistant grounded in real records, not guesses
- Stripe subscriptions with plan-gated features
GoodPing
Uptime monitoring and fourteen free network diagnostic tools, with alerts the moment a site goes down.
- Uptime monitors, status pages and certificate-expiry warnings
- Freemium billing through Stripe
- Lean front end with strict CSP and no framework
World Hot Springs
A worldwide directory of 1,477 hot springs across 69 countries, built on an automated data pipeline.
- Automated ingestion and normalisation of open data
- Mapped, described and photographed listings
- Programmatic SEO at directory scale
What I'm usually hired for.
Work that needs a developer rather than a plugin — where the requirements don't fit an off-the-shelf product.
AI agents & LLM features
Agentic systems and LLM features that take real actions — tool and function calling, RAG grounded in your own data, and assistants that escalate properly. Built to be reliable in production, not just a demo.
Explore AI integration →Real-time systems
Live dashboards, event streams and push notifications over WebSockets. Continuous ingestion pipelines that stay up, recover from upstream failure and don't hammer their sources.
Explore real-time development →Payments & integrations
Payment gateways, webhooks and third-party APIs wired into your own systems — with the retry logic, idempotency and reconciliation that separate a demo from something you can bill through.
Explore payment integration →Custom platforms & portals
Client portals, admin systems and internal tools: authentication, roles and permissions, audit trails and reporting. Built around your actual process rather than a template's assumptions.
Explore custom web applications →Data platforms
Aggregation, normalisation and scheduled processing at volume. Turning messy external feeds and APIs into something clean, cached and fast enough to serve directly.
Explore data extraction & pipelines →Legacy PHP rescue
Inherited a codebase nobody understands? I work through undocumented systems, stabilise them, close the security holes and modernise incrementally — without a rewrite you can't afford.
Explore legacy PHP rescue →Infrastructure & deployment
Linux servers, managed hosting, web stacks, TLS, mail, DNS, CDN and backups. I can host and run the apps I build — not a standalone service, but there if you want performance and uptime handled rather than left to someone else after launch.
Explore servers & deployment →Fixed scope. Visible progress. Code you own.
Scope & proposal
We talk through the problem before anything is quoted. You get a written scope with deliverables, assumptions and a fixed price — not an hourly estimate that drifts.
Architecture
Data model, integrations and failure modes agreed up front. This is where the expensive mistakes get caught, while they're still just a diagram.
Build in milestones
Work lands on a staging environment you can use throughout. Milestone payments tied to working software, so you're never paying for progress you can't see.
Launch & handover
Deployment, monitoring and a documented handover. Full source and infrastructure access transfers to you — no lock-in, no proprietary layer you have to keep paying for.
Building web systems since 2011.
I've been building and running web systems since 2011 — from early Python automation and data work through to real-time platforms and payment integrations. Along the way I built a mobile airtime top-up service that accepted Bitcoin, when that meant writing the settlement logic yourself, and ran a UK hosting company with hardware colocated in a London data centre.
That background shapes how I build. I've been the person on call when a server fails at 3am, so I write code that fails predictably and logs enough to diagnose. I've integrated payment rails and third-party APIs that break in production, so I plan for retries, partial failures and reconciliation from the start.
I work solo and take on a small number of projects at a time. You deal with the person writing the code — no account manager, no handoff to a junior team after the pitch.
I also work with modern, AI-assisted development — tools like Claude Code and Antigravity sit alongside my own testing and review, so I ship faster without cutting corners on quality or security. The AI accelerates the typing; the judgement about what to build, and what can safely go wrong, stays with me.
- Backend
- PHP, Node.js, Python, MySQL, SQLite, REST & WebSocket APIs
- Frontend
- JavaScript, HTML5, CSS3, responsive and accessible interfaces
- Infrastructure
- Linux, Apache/Nginx, Postfix, TLS, Cloudflare, VPS & colocation
- Integrations
- Payment gateways, blockchain APIs, government & registry APIs, webhooks
- AI-assisted
- Claude Code, Antigravity, and LLM integration into real products
Built for working with international clients.
I work in English and I’m based in Istanbul on UTC+3 — two hours ahead of London, one ahead of most of Europe. That means a normal shared working day: same-day answers, calls at sensible hours, and no waiting overnight for a reply to a blocking question.
Every project runs on a written contract with a fixed scope and milestone payments. Where personal data is involved, I work to a written data processing agreement and the transfer safeguards UK and EU GDPR require — prepared up front, not negotiated afterwards.
Tell me about the project.
What you’re building, roughly when you need it, and any budget in mind. Every enquiry gets a reply within one working day — the full form (with file upload and spam protection) is on the contact page.
