Hand me your specifications and a deadline. One person, the whole stack — architecture, backend, frontend, the AI, and hosting set up for you — delivered as one working package, not a pile of parts.
Designed and built end-to-end. Paste a batch of words and get clean cards — definitions, real examples, synonyms you'd actually use, and natural text-to-speech pronunciation. Rails 8 API with a Nuxt 4 frontend; definitions powered by Claude, text-to-speech audio by ElevenLabs. Proof of what 0-to-100 looks like when I run the whole thing.
An everyday problem turned into a product: Turkish bureaucracy expects a very specific tone and format that almost nobody learns properly. Users describe their situation in plain language — a consumer complaint, a resignation, a municipal issue — and get back a properly formatted official petition with the right address and institutional tone, ready to export as PDF. Claude does the language; the rest is mine.
RailsClaude APIPDF
Current
Canadian healthcare integrationFull-stack · Nuxt 3 + Rails 7 API
Building a Nuxt 3 client and a Rails 7 API that sit on top of an existing system used by Canadian healthcare organisations. Sensitive fields are encrypted in the browser with the user's private key and only ever leave it as ciphertext — the server stores and routes them but never sees plaintext. Operational data still flows normally where it doesn't need protecting, so the legacy stack underneath keeps working. Live with users; I'm on the small team driving it forward.
A classic legacy-rescue: Heroku had retired the Ruby version this project ran on, the original team had moved on, and the codebase wasn't deployable any more. I brought Rails and Ruby up to current, pulled unnecessary micro-services back into the monolith where they belonged, and dropped the fragile third-party dependencies that were doing more harm than good. Left it deployable, readable, and maintainable for whoever comes next.
RailsRuby upgradeHerokuMicro-servicesRefactors
Recent
Razor ScootersRails 3 → 6 upgrade · internal apps
Razor's content and document workflows ran on internal Rails apps stuck on version 3. I took them to Rails 6, rebuilt the PDF document pipeline with Prawn, modernised the background-job layer and added the notifications that should have been there all along, and refreshed the UI with Bulma. The result is a stack the next developer can actually open, read, and ship from.
Came on board to maintain an existing Rails application. The work was specific and useful: refresh how PDF invoices were generated, update their Elasticsearch plugin to behave the way they expected, and build an anomaly alert system so the owners knew when something was off before a customer told them.
A SaaS bridging US high-schools and universities so students can take courses early. I was brought in for a Rails 3.2 → 5 upgrade — meant to last a month. They liked the work and kept me on to build custom code for new clients whose needs didn't fit the platform's automation around sign-up, course registration, reporting and invoicing.
Rails 3.2 → 5WorkflowsCustom client code
Recent
Toptal · Frontend migrationRails & Vue
First the backend: Rails 3 to Rails 5 — upgrades like these are becoming my speciality. Then the frontend: moving from ExtJS to Vue with Vuetify, one component at a time, without breaking the screens still on the old framework.
Rails 3 → 5VueVuetifyMigration
Recent
AroundYou (via Toptal)Troubleshooting across micro-services
Several micro-services on different Rails and Postgres versions, with bugs and time-outs nobody had time to chase. I worked the JIRA board down ticket by ticket — SEO redirects, JavaScript calculation errors, server timeouts — fixed the APIs, and added a few new endpoints along the way.
RailsPostgreSQLAPIsDebugging
Earlier
Innovation Factory · KPMGSenior developer · base architecture
Hired as a senior developer to lay the foundation for the next version of the platform. I rebuilt the core on Trailblazer, ran React components as widgets across the UI, and added multi-tenancy so one codebase could serve clients like Heineken, Vodafone and PostNL from a single deploy. Underneath: Rails and PostgreSQL with AWS, S3, background workers and Elasticsearch. The company was later acquired by KPMG Netherlands.
A platform that connects personal trainers to their clients — sessions planned together, tracked over time, and accessed from either the web app or mobile. I built it as API-first from the start so the business logic stayed honest and shared, instead of getting smeared across two clients. Rails on Heroku, Backbone.js on the responsive frontend, Resque and Redis behind the scenes.
Pierre Vacances · Center ParcsLead developer · booking integration
A migration project: Pierre & Vacances wanted to sell Center Parcs stays through their own booking flow, which meant a web service had to broker between the two systems reliably. I led the work on the test suite — Rails 3 with MySQL, plus SoapUI scripts for the integration cases — so the team had something to trust before each release.
Rails 3MySQLSoapUIWeb servicesTest suite
Earlier
VisiWeb · Bakker SpeesASP.NET full-stack
The client already sold a Windows application to his customers and didn't want the web version to break the habit. Built with ASP.NET (C#) against a web service his team maintained, so the same business logic backed both the desktop and the browser. Heavy XML/XSLT in the pipeline; ExtJS up front gave the UI its Windows-like feel. I worked on both VisiWeb 1.0 and 2.0.
The stack I reach for. Backend is home; I cross the full stack when a project needs one person who can.
Ruby on RailsMaster
API developmentMaster
PostgreSQL & MySQLExpert
Vue.js / NuxtExpert
JavaScriptExpert
AI / LLM integrationExpert
AWS · S3 & SESExpert
DigitalOcean & DevOpsExpert
HTML5 / CSS3Expert
Material DesignExpert
ReactProficient
Ways to work
How we work together.
Two ways to engage, depending on where your project is. Both end with something real shipped — and we agree the terms before I start.
01Whole project
One price, zero to one hundred.
We agree the scope and a single price for the whole thing — designed, built, hosted and handed over as one working package. You know what you're getting, and what it costs, before a line of code.
Scope and price agreed up front
Built, hosted and delivered as one package
No hourly meter, no surprises
Fixed scope · one price · 0 → 100
02Short sprints
Or short, focused sprints.
Need a focused burst rather than the whole build? We work in short, time-boxed sprints — easy to start, easy to stop, with something shipped at the end of each one.
Time-boxed, a week or two at a time
Rescues, migrations, features, second opinions
Pause or extend whenever you need
Rolling · easy to start, easy to stop
Not sure which fits? Tell me about the project and I'll suggest the honest option — even if it's the smaller one.
About me
One person, whole project — or the fix when it breaks.
I'm happiest building what a client dreams up — turning an idea into something that ships. When things break, I like the second role too: tracking down what's really wrong makes me feel like a detective.
I do my best work on projects with passionate teams that meet daily and talk openly. My speciality is startups that want one technical person who speaks their language and isn't afraid to be honest with them.
I'm grateful that remote work lets me move between Türkiye, the Netherlands and Thailand — and still ship with teams anywhere.
Contact
Ready when you are.
Tell me about your project — what you're building, what's stuck, or what you want to take from zero to one hundred. I read every message and reply within a day.