MobileNonprofit0 to 1Built with AIData model

Volunteers donate their time. This app gives some of it back.

Adding an animal, keeping track of what is missing, writing the follow-ups, messaging the right family about the right animal. All of it took time, and most of it was awkward on a phone. I designed and built an app that makes each of these quicker, so the time volunteers give goes further.

Log in, and the first thing they see is what needs them.
Role: Product Designer & Builder, volunteer Organization: Bicho Feliz NGO Based in: Germany (remote) Timeline: 3 months, still improving
In a nutshell

Bicho Feliz NGO is an all-volunteer animal rescue in Argentina. I have volunteered there since 2020, and in 2026 I designed and built the app the team now works with.

I was the product manager, the designer, the builder and the QA: first by hand in FlutterFlow, then with Claude Code, on the same database.

95+ animalsalready have their record in the app.
The whole teamof volunteers works with it since 1 October.
No extra costnobody was hired, and the app runs on the NGO's own domain.
    The problem

    Volunteering is not a desk job

    Nobody should have to sit at a computer to fill in a spreadsheet. The people with the animals need to tell us what matters, quickly, from wherever they are.

    We improved the spreadsheet more than once, but a spreadsheet cannot know who a field is for, or tell no from nobody answered. The idea was only a list of animals. It grew into how the NGO is run.

    Many people help an animal find its family, from the foster carer who takes it home to whoever writes to the family a hundred days later. Each one needs their own part of the record, and nobody needs all of it.

    The spreadsheet: a whole questionnaire in one cell, a whole treatment in another, and the columns keep going.
    The app

    Three decisions that changed the work

    The app follows an animal from the day it arrives to a hundred days after it finds a home. These are the three decisions that changed the most for the people using it.

    From a to-do to the record, then filling in what is known.
    Yes or No, nothing selected at the start.

    The decision I would defend

    Yes, no, or not answered yet

    Some things nobody knows on day one: whether it gets on with other cats, whether it likes a cuddle. Each record is split in sections that open and close, and every section counts what is still missing.

    In the spreadsheet a blank cell meant no, or that nobody had looked. Now every question has two boxes, Yes and No, and neither is selected at the start. Behind them it is still a yes or no, but it starts empty, and empty counts as missing. Not answered yet is information too.

    Dated, signed, newest first.
    The same history, in the spreadsheet: one cell.

    The health recordStar feature

    The feature we did not know we needed

    In the spreadsheet a whole treatment lived in one cell. Everybody appended to it, it grew until it took a third of the screen, and the latest news ended up buried in the middle. It was one of the biggest problems we had.

    The feedback on the first version was that they only needed the latest visit to the vet. Entries were my answer, and they got the biggest reaction of anything I built.

    Go deeper: what I considered
    TriedOne text field for treatment, the same as the cell everybody appended to.
    Turning pointThis feature is one of the reasons I moved the app to code. In FlutterFlow, building it by hand was getting hard, without really understanding how the data was shaped or how it travelled.
    Every adoption, with the days since the email and what is still pending.
    The first email, 100 days after the adoption.

    A hundred days later

    Every Thursday the emails go out, and I answer the replies

    What I wanted automated was the remembering, not the caring. Every Thursday the app writes to the families whose adoption turned 100 days, grouped by household and worded for each animal. I read every reply, and answering a few in spare minutes is much easier than one long evening of writing.

    It sends, I follow up

    The app sends the email. I check who replied and act on it, and it never writes twice on its own.

    Go deeper: what I considered
    ChoseA weekly batch, not the exact day. Nobody gets an email at three in the morning on a Sunday, and it is how I already worked.

    All seven moments, from intake to the other ending →

    Try it yourself

    Give it two minutes, and you might want a pet after

    This is the demo, in English, with made-up animals and people. The app the volunteers use works exactly the same.

    1. Add an animal. You start as a foster carer.
    2. Open its record and add a medical entry.
    3. Switch to coordinator from More, and see what is still missing.

    Scan it: it was made for a phone

    Open the demo
    A web app, on purpose

    The NGO should not pay anything to have it, and with so few volunteers a store app would not have made sense. It opens from a link, on any phone, and a fix reaches everyone as soon as I publish it.

    Not only for this portfolio

    The demo is also where I test new features with the volunteers, before they reach the real app. Right now that is the expenses tab, which I am going through with the volunteer who handles the finances.

    On purpose

    What I chose not to build, and what each choice costs

    Some things I left out on purpose. Each one protects something the NGO cannot afford to lose: its records, the privacy of the people who adopt, and a routine the team already trusts.

    No delete button
    Nobody on the team can delete a record. Only I can, and on purpose it takes more than one step. The cost: a mistake that needs deleting comes to me.
    Documents stay outside the app
    A photo of someone's ID does not travel inside the app. The record says the address was checked. The cost: one more place to look, until we decide how to do it safely.
    The spreadsheet keeps running
    Some volunteers enter things in both, as a backup, until everyone has fostered with the app. The cost: some double entry.
    Results

    The coordinators went first, then the whole team

    I built it for the six coordinators and ran it next to the spreadsheet. Since 1 October the whole volunteer team uses it.

    The volunteersGroup chat

    We have an app now!
    (well, it is a web app, but trust me, it is better than the spreadsheet! haha)

    I made it with a lot of love, to make every task each of us does in the association easier, so we have more time for what really matters: the animals 💚🐾
    Ahora tenemos una app!
    (bueno, es una web-app, pero creanme, es mejor que la plani! jaja)

    La armé con mucho cariño y con la intención de facilitarnos todas las tareas que cada uno hace en la asociación y que tengamos más tiempo para lo que de verdad importa: los bichos 💚🐾

    beautifuuul, I already love just the intake! 🤩hermosoooo, ya me guto solo el ingreso! 🤩

    Great one Lu!! I have been poking around, amazing work 👏🏽🎉Muy buena Lu!! Ahí la estuve chusmeando, laburazo 👏🏽🎉

    I love the app💕Me encanta la app💕

    it clearly took me way less time to add it!claramente tardé mucho menos cargando!

    From the volunteers' group, the day I shared the app. Translated from Spanish, names left out.
    Go deeper

    Two more pages, for the details

    This page is the short version. The rest of the case lives in two pages of its own.

    Learnings

    What I take with me

    Ask what each thing is for
    Some things in the spreadsheet were there by decision, others only because there was no alternative. Every time I asked, the app got simpler.
    A better way is worth a little learning
    I designed for how the work could be done, not for how the spreadsheet did it. When the gain is bigger than the effort of learning, people make the switch.
    Lucila Di Vanni Frick

    Hola, I'm Lu. Senior Product Designer, 6+ years across different industries. I start with the real problem, make complexity understandable, and stay close to the outcome. More about me →

    Try it yourself