Te lo cuento en español. Sounds nicer in Spanish.
Over many years of developing software I've kept evolving the way I work, until arriving at what I call Software Gardening.
Building applications is a lot like gardening: you don't just have to design and think your idea through, you also have to tend it and adapt it to its environment and to the tech novelties that change faster every day.
Creating software is creating something alive, something you have to care for.

You've probably seen apps that look obsolete within a few months. I design with the gardening mindset in my head.
Minimalism and simplicity as the only possible way to adapt: something seemingly simple that actually involves quite a bit of complexity.
Designing is removing things. Choosing what matters, highlighting it and getting rid of everything else (pruning).
As a software gardener, I like to tend my projects. It's not just about planting an idea and waiting for it to grow, but about nurturing it, pruning it and adapting it to the changing conditions of the environment.
Other things to keep in mind:
Inheriting someone else's garden. Taking over a plot someone planted before you: first understand why each thing is where it is, and don't uproot what you don't understand. (legacy code)
Compost. The projects that didn't work out aren't thrown away: they rot down nicely and fertilize the next ones. Failure as fertile soil.
Grafting. Joining two plants so they grow as one. Integrating external and internal pieces.
Leaving fallow. Sometimes the best thing for a soil is to rest it for a season. Pausing a project isn't abandoning it.
No monoculture. Vary what you plant; a garden of a single crop falls whole to a single pest. (Don't depend on a single technology/client)
Cross-pollination. Bees don't work a single flower. What you learn pruning one plant you apply to the rest, and what blooms in one bed fertilizes the next. (Working on several projects at once: each one improves the others, and when one gets stuck you rotate and come back with fresh eyes)
I work based on spec-driven development, a way of working where you first write a detailed specification of what you're going to build, in structured, orderly natural language, and only then write the code. Basically the design sketch, turned into a software sketch.
The code becomes a consequence, not the main document. The key idea is to invert the usual hierarchy: the specification document is the source of truth, not the code. This document keeps changing throughout development, making the code adapt to it. Since we're in the garden, we could call it the growing soil.
The quality of a specification depends on accumulated experience and continuous learning, not on the improvisation of Vibe Coding, which I keep well away from.
This way of working with AI tools lets an experienced developer operate like a whole team. What used to need several people coordinating can now come out of a single, well-planned flow. Same result, less friction, more control.
How an app gets built from scratch: the guide (in Spanish)And it also changes how many gardens one person can tend. While the AI waters and clears the weeds, the gardener thinks, decides and prunes. I can give myself fully to one large garden or look after several small ones without letting any of them dry out, and what I learn in one I bring to the rest.



I can take care of the whole development process of an app. From the initial idea to the final launch.
I enjoy the planning and project-management side. I can help define the product, the development strategy and choose the best technical solutions.
My strengths are interface design and user experience. Spotting problems and solving them.
For the other parts of the process I like collaborating with other designers and creatives. But I can also handle them myself.
What I told you above is how I cultivate; these apps are what grows in my garden. They're not commissions: I plant them between clients, to try out ideas with no deadlines. They come from my obsessions —making lists, putting things in order, having the exact tool I want to use— and from need, not to make money.
They're my indulgences: I rebuild them for the pleasure of making them better, so they never sit still. The ones I lost interest in went to the compost, to feed the next ones. Here are the latest, the ones I'm proud of.
Nevera is my shopping list and my recipe book, made to use with one hand while the other one cooks. I sort ingredients by category, check off what's missing and save the recipes I come across. It's the app I use most: it has changed the way I shop and cook.
Everything lives on your phone: it works offline and your lists are yours. What I enjoyed most was the recipe importer, which fixes recipes that arrive broken from AI and only saves them once they're right. And the search forgives accents and typos, so jotting down the shopping is as quick as on paper.
Key tech: React Native + Expo · TypeScript · Expo Router · SQLite with Drizzle ORM · Zustand · Tailwind v4 (uniwind) · heroui-native · Fuse.js · react-i18next (ES/EN) · Bun · EAS.
Tired of saying no to almost everything, I decided to say CasiCasi («almost-almost») to everything: an app to reach goals through play, made so I'd stop telling Lia and Bruno, my kids, no. The deal: 100 points to get what they want, going up or down depending on what they do and on my capricious, unfair judgement.
As teenagers they wanted something else, so this summer I rebuilt it from scratch. The best part is the challenges: I send them a task —what to do, how many points it's worth and by when— in a link they open without installing anything. I know when they open it and when they say it's done, but I still hand out the points, once I've checked.
No accounts, no cloud and nobody's data: a challenge lives for a while at an unguessable address and deletes itself, and everything else stays on the phone. Its blog reads on the web and inside the app.
Key tech: React Native + Expo 57 · TypeScript · Expo Router · SQLite with Drizzle ORM · Zustand · Tailwind v4 (uniwind) · heroui-native · Skia and Victory Native (the chart) · Moti · local and push notifications (Expo) · Next.js and Redis/Upstash for the challenges · Bun · EAS.
What do I watch? was born out of despair: five platforms, twenty minutes of scrolling and nothing in the end. QVO brings order: my lists of movies and series, with IMDb data and which platform each one is on. I use it every day and it saves me from sitting through too much rubbish (some still slips through, but less).
I obsessed over two things: that it be fast and that it look after itself. It shows what it already knows right away and checks for anything new in the background, with no flicker. And it carries everything inside, with no separate server, like a plant that doesn't need watering from outside. The treat: a screen with my most-watched directors, genres and actors, and haptics with a personality of their own.
Key tech: React Native + Expo · TypeScript · Expo Router · SQLite with Drizzle ORM · Zustand · TanStack Query · Tailwind (uniwind) · Zod · Lottie · EAS (builds and over-the-air updates).
Citas is famous quotes that type themselves on screen, letter by letter, as if someone were writing them for you. I wanted a clean place to read a good quote, save it, search through mine and suggest the missing ones. I open it to get inspired, have a laugh or start thinking.
What I'm proudest of can't be seen: to link quotes and catch duplicates I don't use AI, but a simple recipe —what they're about, which words they share and who said them— that the phone works out on its own, offline and without sending your data anywhere. And the moderation tools live inside the app and only show up for me: no separate website, no server to maintain.
I treated myself: it remembers the quotes you've seen and starts over before they run out, you pick the color with a wheel and the text turns light or dark to match the background. There's an iOS widget, and on iPad it becomes a frame that keeps cycling through quotes, like a digital frame hanging on the wall.
Key tech: React Native + Expo 56 · TypeScript · Expo Router · SQLite with Drizzle ORM · Zustand · Tailwind v4 (uniwind) · Moti · Gesture Handler · Redis/Upstash backend · Bun · EAS.
TICS makes my Mac sound like a mechanical keyboard when I type, and like a mouse when I click. That clack feels good, and I wanted it without buying another keyboard. It lives in the menu bar, with eleven keyboards to choose from, and the mouse plays along with its clicks, drags and scroll wheel. It relaxes me: it's background noise that keeps pace with me and goes quiet when I stop to think.
I built it in Swift because it would always be open: it had to be light, use little memory and sound right as the key goes down. The challenge was trust, because an app that hears every key looks a lot like a keylogger. So it only listens: it knows which key you press, not what you type, keeps nothing and never connects to the internet. The treat: the Logitech mouse buttons that Logi Options+ keeps for itself make a sound too, and on an MX Master 4 they can vibrate.
It's free and open source, with the code on GitHub.
Key tech: Swift 6 · SwiftUI · Swift Package Manager, no Xcode project · AVAudioEngine · listen-only event taps · CoreBluetooth and Logitech's HID++ · Bun for the scripts.
A cutting for you. My ideas app isn't among these: it's the notebook where I jot down what I'll later hand over to AI, and I'm the only one who uses it. But I took a cutting of its text editor to share. It highlights tags and links, keeps your lists going and, when a Spanish typo slips in, suggests the right word in gray. It's free and open source, in case you want to plant it in your own app.
Different plants from the same garden. What they share isn't the technology, but the way they're cared for: thinking before planting, automating the boring parts and not calling anything good until it convinces me. They're the most honest proof of how I work when something excites me.