Skip to content

Design Decisions

Luara edited this page Jul 5, 2026 · 2 revisions

Design Decisions

Records what was chosen, what was discarded, and why — each decision made by the founder based on research, testing, and editorial judgment.


Product Decisions

D01 — Target audience: the citizen, not the cat person

Decision: the primary user is someone who isn't part of the cause yet. Discarded alternative: focus on already-engaged caretakers. Reasoning: every competitor already serves that audience. The real gap is with people not yet convinced — converting an averse citizen has more impact than being the twentieth app for people who already care.

D02 — Educational home, not a map

Decision: the landing page is educational, with entry cards for different user profiles. Discarded alternative: open directly on the interactive map. Reasoning: someone who's never heard of a cat colony would be lost on an empty map. The home educates before inviting action.

D03 — Conversion through logic, not emotion

Decision: the product never asks for altruism. It presents facts and lets the user reach their own conclusion. Discarded alternative: emotional appeals ("save these kittens"). Reasoning: emotional appeals alienate the averse audience. Logic converts. "Removing cats doesn't work" is more powerful than "cats deserve love."

D04 — Action before signup

Decision: anyone can report, explore, and use the help flow without an account. Discarded alternative: require login for any action. Reasoning: urgency prevails over identification. Someone with an injured cat can't waste time creating an account. The product earns trust before asking for commitment.

D05 — Report situations, never people

Decision: reports describe situations and animals, never identify individuals. Discarded alternative: a neighbor-reporting system with identification for mistreatment. Reasoning: digital vigilantism creates more conflict than it resolves. The product never takes sides between neighbors — the correct channel for crimes is DEPREMA (181), not an app.

D06 — Collaboration, never competition

Decision: no rankings, no public scores, no competition between caretakers. Discarded alternative: gamification with a leaderboard and competitive badges. Reasoning: conflict between caretakers is a real problem in this ecosystem already. The product can't amplify it. Recognition exists, but it's individual, never comparative.

D07 — Multiple caretakers, no hierarchy

Decision: a colony can have any number of caretakers, all with equal standing. Discarded alternative: an "owner" role with exclusive permissions. Reasoning: real colonies are cared for by informal neighbor networks. A digital hierarchy would replicate real-world conflicts.

D08 — Sensitive reports are never deleted

Decision: poisoning, abuse, and disease reports stay permanently in the timeline. Discarded alternative: auto-delete after resolution. Reasoning: incident history is evidence. Caretakers need to know what happened at that location before.


Security Decisions

D09 — Progressive location blur

Decision: 3 precision levels — anonymous (~500m), authenticated (~100m), linked caretaker (exact via RPC). Discarded alternative: exact public location to make visiting easier. Reasoning: real cases of cats poisoned after locations were shared online. Animal safety is a design decision, not just data privacy.

D10 — No colony sharing

Decision: there's no shareable public URL exposing a colony's location directly. Discarded alternative: a "share on WhatsApp" button with a direct link. Reasoning: even with blur, direct link access lowers the barrier for malicious users. Map navigation already provides enough context.

D11 — Rate limiting on anonymous reports

Decision: max 10 reports/hour per IP without login, 30/hour with login. Discarded alternative: no limit, or requiring login for any report. Reasoning: with no limit the system is vulnerable to spam and fake coordinates. With mandatory login, the immediate-emergency action is lost.

D12 — Verification by 3 confirmations

Decision: reports auto-resolve when 3 distinct users confirm them. Discarded alternative: manual resolution by caretakers only. Reasoning: distributes responsibility, prevents one person hiding a report, and builds trust in the system. The same pattern was later reused for colony verification and the 3-false-pin-flag ban system.


Architecture Decisions

D13 — Supabase over Firebase

Decision: PostgreSQL with native Row Level Security. Reasoning: RLS is auditable, SQL is standard, integrated storage eliminates an extra service, and the visual editor makes populating field data easy.

D14 — Leaflet.js over Mapbox or Google Maps

Decision: open-source map with OpenStreetMap tiles. Reasoning: no API key, no cost, no request limits. OSM data is reliable and community-maintained.

D15 — Custom i18n over next-intl

Decision: a simple LanguageContext with two translation files. Reasoning: no locale-based routing needed (avoids /pt/ and /en/ URLs). Preference saved to localStorage. Less dependency, same result.


Content Decisions

D16 — 19 articles in 5 levels, not an FAQ page

Decision: a progressive educational guide with its own slugs and SEO. Reasoning: an FAQ is passive. Articles with titles written for search intent ("How to get rid of stray cats" instead of "Why TNR works") capture search intent and convert on arrival.

D17 — Personalization quiz, not a knowledge quiz

Decision: no right or wrong answer. 3 result profiles based on motivation. Discarded alternative: a "did you know?" quiz with scoring. Reasoning: a knowledge quiz judges the user. A personalization quiz values who they are and offers a tailored path.

D18 — Cat assistant with curiosities, not data

Decision: the animated character shows fun trivia, never statistics. Reasoning: serious data already lives in the fact chips and on /impact. The assistant is the moment of lightness and delight — mixing the two would dilute both.

Clone this wiki locally