Experience
- 2023 - todayIndependentProduct partner for small teams
- 2020 - 2023Tidy Machines, LisbonSenior front-end engineer
- 2017 - 2020Ribeira Media, PortoFront-end developer, newsroom tools
2026 / Selected work
I build digital products that feel
clear, capable and a little unexpected.
Independent developer & designer
Open to good projectsI'm a front-end developer who designs, or a designer who ships her own code. For nine years I've helped founders and small product teams turn rough ideas into web apps people open every day.
I work best close to the problem: sketching flows with the people who will use them, building the real thing early, and testing it on the cheapest phone in the room.
Tell me what you're building and where it's stuck. I reply to every message within one working day.
One short letter a month: what I shipped, what broke, and one useful link. No tracking pixels.
Four recent projects, each a different kind of problem. Every case study covers the brief, the decisions that shaped the work, and what the team kept after I left.
Try another filter or a broader word. The four case studies cover web apps, commerce, money and travel.
Three kinds of work, one way of doing it: small weekly releases, decisions written down, and a team that can carry on without me.
Fixed prices, agreed in writing before we start. Euros, excluding VAT.
€6,400 / 2 weeks
One feature or flow, designed and built into your codebase.
€19,500 from, 6 to 10 weeks
A new product or a large feature, from first workshop to launch.
€4,200 / month
Six days a month for a team that already ships and wants a second pair of hands.
A 30-minute call about the product, the people using it and the deadline that matters. Within two working days you get a two-page scope: what we will build, what we will not, a fixed price and the first three weeks planned in detail.
Half a day with the people who do the work today. We map the current way of doing the task, mark the painful steps, and agree on the one flow that has to feel effortless at launch.
Every Friday there is something new on a staging site you can click, share and break. Monday starts with a short call to review it and decide what comes next. Decisions go into a shared log so nobody has to remember why a button moved.
Two recorded sessions with your team: one on the codebase, one on the component library. You keep the code, the design files, the decision log and a list of what I would build next and why.
I design and build web apps for small teams. Before going independent I spent six years inside a newsroom and a product studio, where I learned that most problems are solved in conversation long before they reach the code.
at a glance
2017
My first job was building election-night pages for a regional newsroom in Porto. Deadlines were real, traffic arrived all at once, and reporters filed from car parks on their phones. I learned to ship small, measure honestly and fix things at 2am without panic.
2020
At Tidy Machines in Lisbon I led front-end work on eleven client products and started the shared component library the whole studio still uses. Working next to designers every day changed how I write code: names, spacing and states became part of the job, not an afterthought.
2023
Now I take one project at a time, usually for founders and teams of fewer than twenty people. It keeps the work close: I sit in the workshop, write the components and stay until the team is confident running it without me.
If a screen needs a tooltip to explain itself, the screen is the problem. I would rather cut a feature than ship one people have to decode.
Prototypes in code show the awkward parts that pictures hide: slow networks, long names, empty lists.
A short log of what we chose and why saves weeks of re-arguing later, and makes handover painless.
Success is the week after I leave, when your team adds a feature with the same components and it simply fits.
Nine years of building for the web, from election-night pages to design systems. The short version is below; the long version comes with coffee.
2023 - today
Mira Hollis Studio, Porto
2020 - 2023
Tidy Machines, a product studio in Lisbon
2017 - 2020
Ribeira Media, a regional newsroom in Porto
2013 - 2017
Porto
A date-range picker in 2 kB with full keyboard support, sensible screen reader labels and no dependencies.
Turns one JSON file of design tokens into CSS custom properties with light and dark sets. Used in Plainweek and Tallypot.
Short essays on building interfaces, working with small teams and shipping without drama. About one a month.
Try a different word, or suggest the topic. The newsletter readers often pick what I write next.
One short letter a month. Unsubscribe with one click.
Tell me about the product, the people using it and where it's stuck. A few sentences is plenty; we can fill in the rest on a call.
This example site doesn't send messages, so nothing has left your browser. On a live site this is where your note would reach my inbox, with a reply inside one working day.
The things founders usually ask on the first call. If yours is missing, ask it directly.
Send the question with a line about your project and I will answer within a working day.
Let's talkOnce a month I write about what I shipped, what broke and one thing worth your time. Around 600 readers, mostly founders, designers and front-end developers.
Short version: I collect as little as possible, keep it only as long as I need it, and never sell or share it.
Last updated 1 September 2026
The contact form asks for your name, email and a description of your project. The newsletter form asks for an email address and, if you like, a first name. Nothing else is collected and there are no analytics scripts or advertising cookies.
Contact messages are used only to reply to you and to prepare a scope if we decide to work together. Newsletter addresses are used only to send the monthly letter.
Messages that do not turn into a project are deleted after twelve months. Newsletter addresses are deleted the moment you unsubscribe.
This copy of the site is a working example. The forms check what you type and show a confirmation, but nothing is sent or stored anywhere.
Ask for a copy of your data, or for it to be deleted, at any time through the contact page.
The link may be old, or the page moved when the site was tidied. These are good places to start again.