UX Research · UI Design · Frontend Dev

Amigatos
da Milkinha

A shelter where every cat deserves to be found

End-to-end design and development of a fully automated adoption platform for a Lisbon-based cat shelter — connecting the public to a live animal database via real-time API, with a warm, trustworthy digital presence built from zero.

Role UX/UI · Frontend Dev
Duration 6 weeks
Type Pro Bono · NGO
Country Portugal 🇵🇹
Amigatos shelter
47+
cats available for adoption via live API
Client
Amigatos da Milkinha
Braga, Portugal
Deliverables
Research · User Flow · CJM
UI Design · Frontend · API Integration
Tools
Figma · HTML / CSS / JS
ASM3 API · GitHub Pages
Status
Live — amigatosdamilkinha.org
01 — Process

Design Process

From field research with shelter volunteers to a live, automated website — every phase grounded in user needs, not assumptions.

01
NGO
Landscape
Benchmark3 shelters · digital gaps
02
Field
Research
InsightsVolunteer interviews · shadow sessions
03
Personas
& CJM
3 personasSofia · Pedro · Mariana · journey maps
04
UI &
Build
3 pagesDesign · API · Responsive · Live
05
Handoff &
Docs
Volunteertraining · edit guide
Role: UX/UI Designer + Frontend Developer (Solo)
Type: Pro Bono NGO
Duration: 6 weeks
Pages delivered: 3
Responsive: Mobile-first
02 — The Brief

Challenge & Goals

Amigatos da Milkinha had been caring for dozens of cats in Lisbon for years — with zero digital presence. The shelter used ASM3 internally to manage animals, but the public had no way to discover them, browse cats, or donate remotely.

The Challenge

A shelter full of cats — invisible to the world

The shelter existed only on Instagram. Potential adopters relied on DMs, phone calls, and word-of-mouth — creating a broken, unscalable process that turned away good-faith adopters.

No website — discovery happened entirely via Instagram DMs
No live cat listings — information was outdated or unavailable
Volunteers manually handled every adoption enquiry, causing delays
No donation infrastructure — a small NGO with real operational costs
Goals

Three outcomes to design for

The project needed to solve for the adopter, the supporter, and critically — the volunteer. The best solution was one that ran itself, requiring zero ongoing content work from an already stretched team.

Create a trustworthy public presence to convert Instagram followers into adopters
Automate cat listings via ASM3 API — zero manual updates from volunteers
Add a donation flow to enable remote financial support
Build mobile-first — the audience arrives from social media on their phones
03 — Research

NGO Landscape Analysis

Before designing, I benchmarked three comparable animal shelter websites to understand what made online adoption experiences trustworthy — and where they fell short.

SOS Animal Portugal
Strength

Clear taxonomy and search by species/age. Strong emotional photography. However, the volunteer adoption process required a lengthy PDF form — high friction for a mobile user.

Liga Portuguesa dos Direitos do Animal
Gap

Institutional tone felt cold. Cat profiles were text-heavy with inconsistent photo quality. No live integration — listings updated manually, leading to outdated "already adopted" entries still visible.

Refúgio Aboim Ascensão
Strength

Warm visual language and clear process steps built trust. Donation CTA prominent on every page. Weakness: no search or filter — hard to browse 80+ animals without pagination.

"The common failure across all three was a mismatch between emotional warmth in copy and cold friction in the actual adoption journey. The opportunity was a site that felt warm and worked frictionlessly — with live, accurate animal data."

04 — User Research

Field Research & Key Insights

I conducted volunteer interviews and shadowed the shelter's weekly operations. Four recurring insights shaped every design decision.

01

"People DM us asking if the cat is still available"

Volunteers fielded the same questions repeatedly — confirmation that the core problem was information asymmetry, not lack of interest. Adopters existed; the channel was broken.

Design implication

Live API integration so every listing is always accurate. No stale "already adopted" profiles.

02

"Most people find us on Instagram — they're on their phones"

Over 80% of the shelter's audience arrived from Instagram Stories and Reels. Desktop was effectively irrelevant for first contact — mobile was the only device that mattered.

Design implication

Mobile-first design, validated on small screens first. Grid, filters and donate flow all designed at 375px before desktop.

03

"We have no time to update a website every week"

Volunteers are not marketers. Any solution requiring manual content updates would fail within weeks. Sustainability meant automation — the site had to run itself.

Design implication

ASM3 API as the single source of truth. Cat listings update automatically when shelter staff update the internal system they already use.

04

"We get donations via bank transfer after people ask us for our IBAN"

The current donation flow required DM-ing the shelter, waiting for a reply, and manually entering bank details. Every step was an exit point. Supporters existed — the infrastructure didn't.

Design implication

Dedicated donation page with IBAN + MB Way (Portugal's dominant mobile payment), zero friction path from homepage CTA.

05 — Personas

User Personas

From the field research, three distinct user types emerged — each with a different goal, a different level of digital confidence, and a different emotional relationship to the shelter.

🐱
Sofia
The First-Time Adopter · 28 · Lisbon

"I want to adopt but I'm not sure I'm making the right choice — I need to feel like the shelter is trustworthy before I commit."

MotivationFind a calm, adult cat that fits apartment life.
BehaviourArrives via Instagram. Scrolls cat grid on mobile. Reads process steps carefully before contacting.
Pain pointTrust gap Worried about commitment, unsure if the shelter is legitimate.
GoalTransparency Clear adoption process, real cat profiles, visible contact.
💶
Pedro
The Remote Supporter · 45 · Porto

"I can't adopt but I want to help. If donating is complicated, I'll just move on — there are a hundred other shelters."

MotivationContribute financially to a cause he cares about without adopting.
BehaviourLands on homepage from a shared post. Looks for a donate button immediately. Leaves if not found in 30 seconds.
Pain pointFriction No donate button on existing shelter channels — gives up and moves on.
GoalInstant path One-tap donation with familiar payment method (MB Way).
🤝
Mariana
The Shelter Volunteer · 34 · Lisbon

"I spend hours answering the same questions on Instagram. Any tool that reduces my admin work is a gift."

MotivationHelp more cats find homes with less personal effort.
BehaviourUpdates ASM3 system when cats arrive or are adopted. Shares website link instead of manually answering enquiries.
Pain pointTime Manually answers repetitive questions about available cats.
GoalAutomation Site updates itself — she never needs to touch it directly.
06 — Customer Journey Map

Sofia's Journey — First-Time Adopter

Mapping Sofia's experience from Instagram discovery to adoption request revealed three critical drop-off points — and three design opportunities.

Touchpoint
Discovery
First Visit
Browse Cats
Cat Profile
Contact / Adopt
Action
Sees shelter post on Instagram, taps link in bio
Lands on homepage, reads about the shelter & process
Goes to cats grid, browses available cats
Taps a cat, sees inline profile overlay
Clicks "I want to adopt" — contacts shelter via email or phone
Thinking
"Let me see what cats they have"
"This looks real. Do they have cats I can actually adopt now?"
"Which one is right for me? Are these profiles up to date?"
"She's perfect. Is the process complicated?"
"I hope they get back to me quickly"
Feeling
😐
🙂
😊
🤩
🤞
Pain points
OLD FLOW
Instagram link led nowhere — no website existed
Risk
Stale listings = loss of trust if "already adopted" cats appear
Anxiety
No visibility into response time — will they reply?
Opportunities
Fixed
Live website as the destination for all social traffic
Designed
Clear process steps build trust before browsing
Automated
ASM3 API ensures listings are always live and accurate
Designed
Inline overlay — no redirect, stays in adoption flow
Scoped
Clear contact options — email + phone both visible
Emotion curve
07 — Information Architecture

Site Map

Three pages, three jobs. The architecture is deliberately minimal — no sub-navigation, no dead ends. Every path leads to either adoption or donation.

ENTRY Instagram / Google HOMEPAGE index.html Hero · About · Process CTA → Adopt CTA → Donate Nav · Footer 1st impression CATS GRID cats_grid.html Live API · Filter Shuffle · Overlay ASM3 automated OVERLAY Cat Profile ASM3 plain2 inline · no reload Adopt 🎉 Contact DONATE donate.html Preset amounts IBAN · MB Way Remote support Donated ♥ Shelter funded API LAYER ASM3 Service
08 — User Flow

From first click to adoption

The primary flow maps how a potential adopter moves through the site. Three distinct lanes: the user, the supporter, and the system — making the API role explicit.

Entry
Landing
Explore
Decision
Action
Outcome
Adopter
Social /
Google
Discovery
Homepage
1st impression
Cats Grid
Browse cats
Cat profile?
Inline overlay
Contact shelter
Email / phone
Adoption 🎉
Cat finds home
Supporter
Social /
referral
Homepage
optional
cats grid
Donate?
Donate page
Donated ♥
System
ASM3 API
Fetches live cats
Auto-renders
profiles
No manual work
Key screen
Decision point
Outcome
System / API
09 — Design Decisions

Key decisions & rationale

Every design decision was tied to a specific user insight or constraint. This is how research shaped the final product.

01

Warm palette, editorial typography

Terra-cotta, cream and sand were chosen because they feel domestic and safe — not clinical. Playfair Display adds warmth and character without feeling childish. The goal: a site that feels like the shelter, not a municipal database.

Backed by

Research finding: Sofia needed to trust the shelter before she'd commit. Visual warmth is the first signal of legitimacy for an NGO with no brand recognition.

02

Inline cat overlay — no page redirect

Clicking a cat opens the ASM3 plain2 detail view directly on the page — no full reload, no navigation away from the grid. This keeps the adopter inside the browsing flow and dramatically reduces the back-button drop-off.

Backed by

The API's iframe was explored first, but couldn't be controlled visually. The plain2 overlay gave the same data with full layout control.

03

Shuffle on every page load

By default, ASM3 returns cats in a fixed order — the same animals always appear at the top. A shuffle on load ensures every cat gets equal visibility. No cat gets permanently buried just because of their ID number.

Backed by

Volunteer insight: "Some cats never get enquiries because they're always at the bottom." The shuffle is a fairness mechanism, not a feature.

04

MB Way as primary donation method

IBAN bank transfer was the existing method — but it required copying details, opening a banking app, and manual entry. MB Way is Portugal's dominant mobile payment method and completes in under 10 seconds. It was the obvious choice for a mobile audience.

Backed by

Persona: Pedro. He donates impulsively after seeing a post — any friction is an exit. MB Way removes every step between intent and action.

10 — Technical Architecture

ASM3 API Integration

The cats grid is powered by the shelter's existing animal management system — ASM3. Integrating this API meant the site is permanently up-to-date with zero volunteer effort.

cats_grid.html — API params
// ASM3 adoptable animals endpoint
const API_URL = "amigatosdamilkinha.org
  /asm3/service?method=
  animal_view_adoptable_js""

// Style config: plain2 = inline overlay
asm3_style: "plain2",
asm3_search: "true",
asm3_locale: "pt_PT",

// Shuffle for fair cat visibility
function shuffle(arr) {
  for (let i = arr.length-1;
      i > 0; i--) {
    const j = Math.floor(
      Math.random() * (i+1));
    [arr[i],arr[j]] = [arr[j],arr[i]]
  }
}
Live animal data — zero manual updates

The API endpoint returns a script with every adoptable cat's data in real time. When a cat is adopted or a new cat arrives, the volunteer updates ASM3 — the website updates automatically. No content management needed.

Shuffle grid for equal visibility

ASM3 returns cats in fixed ID order — the same animals always appear first. A shuffle on each load distributes visibility fairly. Every cat gets seen, regardless of when they arrived.

Inline overlay — no page reload

The plain2 style renders the cat detail inline on the page. The iframe approach was tested first but offered no visual control. The overlay keeps users inside the adoption flow — no back-button, no lost context.

Constraint: limited search customisation

The ASM3 search filter had very limited API options — custom filtering parameters were not exposed. The design worked within this constraint: the shuffle feature compensated for what search couldn't solve.

11 — Design System

Visual Language

A small but complete design system — tokens, typography and components — ensuring consistency across three pages built and maintained by one person.

Colour Palette
Terra-cotta · Primary
Dark · Headings
Cream · Background
Sand · Secondary bg
Green · Success
Typography

Playfair Display

H1–H3 · Serif · Warmth

DM Sans

Body · UI · Labels

Spacing Scale
4px · Micro
8px · Tight
16px · Default
32px · Section
96px · Page section
Component Tokens
Border radius: 6 / 10 / 14 / 18px
Shadow: 0 4px 24px rgba(tc, .08)
Transition: .25s ease all
Eyebrow: 9px / 700 / .18em track
Grid: 1360px max-width
12 — Pages Delivered

Three screens, one mission

Each page has one job. Click any card to expand and see the full page.

index.html Expand
Homepage
Homepage
Hero · About · Process · CTA
View full
cats_grid.html Expand
Cats Grid
Cats Grid
Live API · filter · shuffle · overlay
View full
donate.html Expand
Donate page
Donation Page
Preset amounts · IBAN · MB Way
View full
13 — Impact

From invisible to online

Launching a public-facing website transformed how the shelter interacts with adopters and supporters — turning scattered social media reach into a consistent, trustworthy digital presence.

0→1
Online presence created
from scratch
47+
Cats visible to the public
in real time
3
Key pages designed &
developed end-to-end
0
Manual content updates
needed from volunteers
14 — Constraints & Trade-offs

What I had to work around

Senior design isn't just about what you built — it's about the decisions you made under constraints and why.

ASM3 search filter limitations

The API's search parameters were limited — custom filtering by breed, colour or temperament wasn't exposed. I couldn't build a faceted filter without scraping data in a way that wasn't sanctioned.

Trade-off

Accepted the constraint and used shuffle as the fairness mechanism. Documented the limitation clearly for the shelter so future developers know what's API-constrained vs custom-buildable.

No payment gateway — static donation page

A real payment integration (Stripe, PayPal) would require server infrastructure the shelter couldn't maintain. The static GitHub Pages deployment ruled out backend payment processing.

Trade-off

MB Way phone number + IBAN — the two methods adopters in Portugal already know and trust. Zero infrastructure, zero maintenance, handles 95% of the real donation use case.

iframe vs overlay for cat profiles

ASM3 offered an iframe mode for cat profiles that would open over the current page. In testing, it was impossible to style or control — it clashed with the site's visual language completely.

Trade-off

Disabled the iframe, used plain2 style instead. This rendered the profile inline with full CSS control. The user stays on the page — better for flow, better visually.

Solo delivery in 6 weeks

There was no team — no QA, no copywriter, no back-end developer. Every decision had to be scoped to what one person could design, build, and test in 6 weeks while being genuinely useful.

Trade-off

Three pages, zero dependencies, one external API. Deliberately minimal scope so the system could be fully understood and maintained by anyone after handoff — including non-technical volunteers.

15 — Reflections

What I learnt

Third-party APIs have real limits — design around them, not against them

The ASM3 API's search limitations were frustrating at first. The shift was accepting the constraint and finding a better solution within it — the shuffle feature emerged from this. The best constraint response is usually creative, not combative.

Designing for NGOs is designing for trust — not features

Every design decision — the warm palette, the clear process steps, the plain language — was ultimately about making someone feel safe enough to adopt or donate. For a cause this personal, visual design isn't decorative. It's emotional infrastructure.

Automation is the most sustainable gift you can give a small team

Volunteers don't have time to update a website. Connecting the site directly to the shelter's existing system meant zero long-term content burden. The best tool for a small team is one that runs itself — sustainability should be a design goal, not a nice-to-have.

Mobile-first isn't optional — it's where your users actually are

The shelter's audience arrives via Instagram and Facebook — meaning most users land on mobile. Designing desktop-first would have left the majority with a broken experience. Mobile-first isn't a principle for its own sake — it's the reality of where NGO audiences live.