Artificial intelligence
01Language models inside real business processes: assistants that answer from your internal documents, data extraction from PDFs and email, automatic classification and routing of incoming requests.
Available for new projects
I design and build websites, portals, custom business software and automations that talk to the systems you already run. From process analysis to release, with code that still reads well two years later.
01Skills
I work across the whole cycle: process analysis, architecture, development, release and maintenance. A typical project touches three or four of these at once.
Language models inside real business processes: assistants that answer from your internal documents, data extraction from PDFs and email, automatic classification and routing of incoming requests.
Marketing sites, landing pages and institutional websites. Real attention to loading speed, technical SEO and accessibility: a site that is slow or unindexed is a site that does no work.
Client portals, supplier areas, intranets. Authentication, granular roles and permissions, multi-tenancy, audit trails and content the client can manage without calling me.
For when off-the-shelf software does not fit how you actually work. Records, inventory, orders, invoicing, approval flows and reporting, built around the process you already have.
Catalogues with variants and tiered pricing, payments, shipping and — above all — the link back to your business software, so stock and orders are not typed in twice by hand.
Getting systems that were never meant to meet to talk to each other. APIs, webhooks, scheduled imports, overnight syncs, and all the repetitive work somebody is doing by hand right now.
Data modelling, the numbers that actually matter, and dashboards you can read in ten seconds. With exports and scheduled reports for the people who still prefer a spreadsheet.
Separate staging and production, automated deploys, containers, verified backups and monitoring. The part nobody sees, and the part that decides whether you sleep after go-live.
02Stack
I pick the technology to fit the problem, not the other way round. This is the ground I move fastest on.
Languages
Frontend
Backend
Data
Artificial intelligence
Infrastructure
03Method
I would rather have a few clear phases and something you can click through early, than a long quote followed by three months of silence.
We look at the process before the code: what your team does today, where the time goes, and what is actually worth automating.
Something you can click through within a few weeks, so decisions get made on a real thing instead of a description of one.
Short iterations, a staging environment that stays current, and frequent updates. You watch it grow instead of waiting for it.
Go-live, training for the people who will use it, monitoring and maintenance. The project does not end on delivery day.
04Work
Problem, technical decisions, measured result. Here are the two most recent ones; the other four — this site, the GDPR search, e-invoices and the configurator — are on the projects page.
A dashboard fed pre-computed totals can only answer the questions whoever prepared the data had anticipated. The first different question needs a change, a release and a week.
The browser receives the municipal detail — 7,896 rows — and aggregates on the fly. Changing level, indicator or filter is not a request to a server: it is a loop over an array.
The map weighs 99 KB because it is TopoJSON: quantised coordinates, points stored as deltas, and borders shared between neighbouring regions rather than duplicated. The same drawing as GeoJSON weighs 2,700.
Fifty-one checks that reconcile the totals by every route and test them against facts that do not come from the data. On the first run Italy’s population came out at 118 million: the ISTAT file carries a total row per municipality, and summing it with the detail counts everything twice.
A contrast ratio is a single number, and on its own it decides nothing: the same pair of colours passes at 24 px and fails at 16. The tools you find show the number with two fixed ticks beside it, and the real question goes unanswered — from what size up is this colour fine?
The threshold moves with size and weight, because that is how the standard is written. Transparency is composited before it is measured: rgba(0,0,0,.5) on white is #808080 and scores 3.95:1, not 21:1 — a tool that ignores alpha returns a number that exists on no screen.
And when it fails, it says which colour to use instead. The fix moves in lightness only, inside OKLCh, so the hue stays put and a corrected red stays red rather than turning pink. Sometimes, though, the right answer is that the background is wrong: on a mid grey no text colour whatsoever reaches 7:1, and saying so is worth more than offering a colour that does not solve it.
The real work is not one pair but a whole theme, where the pairs are n×n: paste the custom properties of a stylesheet and they all come out at once.
A hundred and eighty-one checks, eight of them against numbers published by other people that I did not compute anywhere myself. The expectations are recomputed by a second implementation written in Python from the specification, not by the engine they are meant to test. And the page’s own theme passes its own tool against AAA, not AA: the check re-reads the stylesheet from disk, so a colour changed without looking at the contrast makes it fail.
Measuring the rendered page, rather than the declared colours alone, it found a defect of its own: on the matrix diagonal a grey dash at 12 px sat at 4.05:1. It was decoration disguised as text, and it is now a hatch.
There are four more projects: this site, citation search over the GDPR, XML e-invoices and a window configurator. Same structure — problem, technical decisions, measured numbers.
All projectsI take one project at a time, and the portfolio has just started. If yours is next you get my full attention, undivided — and in exchange all I ask is to write it up here, with the real numbers.
05Profile
17Labs — one person
17Labs is the name I work under, but there is no team behind it: there is me. I am saying that up front because it is the first thing I would want to know if I were on your side of this page.
I have been writing code since I was sixteen. It started as the thing I did instead of studying and I never stopped: what used to be tinkering is the job now, but the part I enjoy has not changed — working out how something works, then building it better.
Away from the screen I am into card games: Magic: The Gathering and One Piece. It is more relevant than it sounds — they are sets of rules interacting with each other, and getting good means reading those interactions before anyone else does, while keeping track of everything your opponent might be holding. That is exactly what you need when you step into a company's process and have to find where it jams.
My day job is building software for a large company, and I am staying there. 17Labs is the name I take my own projects under, and I choose them: it is not a second business to fill up, it is room for the work I actually want to do.
Which means something concrete for you: I take one project at a time and I am fully in it. No queue, no clients competing for the same hours.
06Frequently asked
I have been writing code since I was sixteen and I do it for a living: I build software full time for a large company.
17Labs is the name I take my own projects under, and it has just started. So what you will find above is documented personal work rather than a client list — that is a choice, not a gap papered over with borrowed names.
It genuinely depends on the project, and I will spare you the invented price list: a marketing site and a system covering five departments have nothing in common, in either price or time.
The fastest way to find out is a call. I will ask a few questions about what happens in your process today and give you an honest estimate — and if the job does not make sense, I will tell you instead of selling it to you.
One. When I take a job I am fully in it, with no queue and no splitting myself between clients competing for the same hours.
That is the concrete advantage of hiring one person instead of a studio: you are never the project that waits.
Delivery includes a support period. It is deliberately short — roughly a month — because its job is to cover the things that only surface once the software is genuinely in use: a fix, a detail to adjust, a question from someone using it every day.
If you want to continue after that, it extends. But I would rather it were your choice once you have seen how it goes, than a signature collected beforehand.
Yes, anywhere. I work fully remotely with no geographic limits: what it takes is a video call now and then and a written channel where you can reach me.
I work in English and Italian.
The project code is yours. What I write for you — your process logic, your data model, your interfaces — is handed over with full repository access and stays yours. If you ever want to change supplier or bring the work in house, you do not need my permission.
There is one exception, and it is only fair to state it up front: the generic libraries and components I carry from one project to the next stay mine, and you get an unlimited, perpetual licence to use them within your project. That is not there to lock you in — it is what lets me avoid starting from zero every time, which is what makes the work cost you less.
The only thing I keep is the right to write the project up in my portfolio. If you would rather I did not, just say so.
It depends, and it needs looking at before anyone promises anything. Send me the code and tell me where things stopped: I will assess how much is salvageable, what is worth rewriting, and whether it makes more sense to continue or restart.
You get that assessment either way, even if we then decide not to work together. A clear answer beats a quote for something I have not seen.
07Contact
Even a half-formed idea is fine: the first half hour is usually about working out whether the problem is really the one it looks like. I reply within one working day.