adopting-cats is a website for adopting cats. Its product intent, taken directly from the user's request, is to be "a web that supposed to be a adopting web for cats" — a place where everyday people can meet cats who need homes and take the first real step toward adopting one. The site's look and feel is derived from the image the user supplied as the visual and brand source.
The audience is two-sided but emotionally centred on one side:
The register is warm, hopeful, playful and low-pressure. This is a place to meet a cat, not a form to survive. It should feel like a friendly community noticeboard, not a government portal or a SaaS dashboard.
adopting-cats is a custom-UI web application with an application-owned backend. It presents a public, anonymous-facing surface where anyone can learn what the site is for and browse cats currently available for adoption, and a protected surface where a signed-in adopter can express interest in adopting a specific cat, and where a provisioned Shelter / Listing Manager can maintain the set of adoptable cat listings.
Current delivery. A responsive web application (mobile-first, 375px → 768px → 1280px) backed by a single application backend that owns cat listings, adopter accounts, manager accounts, and adoption-interest records. Cat photography appears inside listing cards and on Cat Details; the site's own voice is carried by modular vector illustration.
Actors.
Accepted behavior at a glance. Public landing and catalog browsing; a focused per-cat view; adopter self-service enrollment and returning verification; a protected interest expression bound to the correct adopter and the correct cat; manager listing review, creation and editing.
Narrow exclusions. This document does not add adoption-application processing, messaging threads, payment or fee handling, transport or logistics, medical records, foster workflows, or any account-management capability beyond first-use enrollment and returning verification. Nothing in the source authorizes those, and they are not inferred here.
Delivery ownership. The site is first-party: the application owns its pages, its identity, its listing state, and its adoption-interest records. There is no provider-owned or external-only surface in the accepted scope, and no headless delivery is requested. The backend is a single application service; the pages are custom UI, not a hosted third-party product.
Access ownership. The public entry, the catalog, and the individual cat view are reachable without an account — a visitor must be able to meet a cat before being asked for anything. Expressing adoption interest is a durable, adopter-specific commitment, so it is protected: it requires a signed-in adopter, and the resulting interest record stays bound to that adopter and to the specific cat. Manager listing work is likewise protected and requires provisioned manager access.
Identity boundary. Adopters establish their own identity through self-service enrollment on first use and verify it on return. Shelter / Listing Managers do not self-enroll into listing administration; their access is provisioned before they can reach listing work. The enrollment and verification interactions are anonymous entry points — a protected destination never owns the interaction that grants access to itself.
Current vs. future. Everything described in this document is current. No future-horizon requirements were stated by the user; the future section is therefore empty by design rather than by omission.
The user supplied an image as the visual and brand source for the site. No URL, metadata, textual content, factual entity, collection item, field, value, date, contact, link, or media reference was provided with it, and no content_source directive was declared. There is therefore no verified factual content to inventory, and no inventory is reproduced here. All cat listings, cat names, photographs and descriptions are authored through the manager listing workflow rather than imported from a source.
0 8px 0 rgba(43,33,24,0.08), lifting 4px with the shadow compressing to 0 3px 0 on hover. Pill filter chips that wrap to multiple rows on mobile rather than scrolling horizontally, so every filter is always fully visible and tappable. The hand-drawn dotted path from the hero reappears as a connector between cards. Long cat names wrap rather than truncate.Each requirement below is a distinct story point with its provenance, lifecycle facts, and observable acceptance.
FR-1 — Public entry to the adoption site (explicit) As a visitor, I should land on a page that tells me this is a place to adopt cats and points me at the cats who are available, so that I understand what the site is for and know where to go next.
FR-2 — Browse cats available for adoption (explicit) As an Adopter, I should browse the cats currently available for adoption, so that I can find a cat I want to adopt.
FR-3 — Review a specific cat before deciding (explicit) As an Adopter, I should open a single cat and read their photograph, story and attributes, so that I can decide whether this is the cat I want to adopt.
FR-4 — Adopter self-service enrollment (required_inference) As an Adopter, I should be able to create my own account on first use, so that the site can keep my interest in a cat and get back in touch with me.
FR-5 — Returning verification for adopters and managers (required_inference) As an Adopter or a Shelter / Listing Manager, I should be able to verify my identity on return, so that I can resume my own protected work.
FR-6 — Express interest in adopting a specific cat (explicit) As a signed-in Adopter, I should express my interest in adopting a specific cat, so that the shelter knows I want to adopt that cat and can get back in touch with me.
FR-7 — Withdraw a previously expressed interest (required_inference) As a signed-in Adopter, I should be able to withdraw an interest I previously expressed in a cat, so that my stated intentions stay accurate if I change my mind.
FR-8 — Manager access is provisioned, not self-enrolled (required_inference) As a Shelter / Listing Manager, I should receive my access through provisioning rather than self-enrollment, so that listing administration stays with the people responsible for it.
FR-9 — Review and maintain the set of adoptable cat listings (explicit) As a Shelter / Listing Manager, I should review and maintain the set of adoptable cat listings, so that adopters see accurate cats available for adoption.
FR-10 — Create or edit an individual cat listing (explicit) As a Shelter / Listing Manager, I should create a new cat listing or edit an existing one, so that the cats shown to adopters are current and complete.
FR-11 — Availability status governs what adopters can act on (required_inference) As the site, I should reflect each cat's current availability in the catalog and in the interest interaction, so that an adopter never commits to a cat who is no longer available.
FR-12 — The site's look and feel follows the supplied image (explicit) As the site, I should present itself in the warm, illustrated, cream-grounded visual language derived from the image the user supplied, so that the adoption site feels like a friendly community noticeboard rather than a form to survive.
prefers-reduced-motion, all decorative motion is disabled and the layout remains static, fully usable, and identical in hierarchy.Product context. An everyday person, most often on a phone, who arrives because of a photo of a particular cat. They are not filling in a form — they are meeting an animal. The site's whole emotional weight sits with them, and every public surface is built to keep the pressure low and the warmth high.
Primary goal. Find a cat they want to adopt, and take the first real step toward adopting that cat.
Distinct accepted responsibilities. The Adopter is the only persona who browses the public catalog, opens an individual cat to read their story, establishes their own account on first use, verifies it on return, and expresses — or withdraws — interest in adopting a specific cat. Their work is discovery and commitment, and it is theirs alone: no other persona browses or expresses interest.
Relevant inputs and decisions. Which filters to apply on Cats; which cat to open; whether this cat is the one; whether to create an account or sign in when the interest action requires it; what short note, if any, to send with their interest; whether to withdraw an interest they have changed their mind about.
Interactions with other accepted participants. The Adopter's expressed interest is the record a Shelter / Listing Manager's listings ultimately serve. The Adopter never administers listings and never sees manager surfaces; the manager never browses on the Adopter's behalf. The two personas meet only through the listing itself — the manager keeps it accurate, the Adopter acts on it.
Observable success. The Adopter has found a cat, read their story, and seen their interest confirmed with the "We'll be in touch!" state — and can see that interest recorded as already expressed when they return to that cat.
Source-backed constraints. The Adopter must be able to browse and read without an account; only the interest expression requires one. Their interest must remain bound to them and to the specific cat, so that a returning adopter sees their own commitment accurately.
Product context. The practical backstage. This person is responsible for keeping the adoption site's cat listings current so that adopters see accurate cats available for adoption. They work in the same warm visual language as the public site, but with a tighter, more workmanlike rhythm — a rail of listings rather than a browsing grid.
Primary goal. An up-to-date set of adoptable cats on the site.
Distinct accepted responsibilities. The Shelter / Listing Manager is the only persona who reviews the full set of listings, creates a new cat listing, edits an existing one, and changes a cat's availability status. Their work is maintenance and accuracy, and it is theirs alone: no other persona writes listing content.
Relevant inputs and decisions. Which listing to open; the cat's photograph, name, story and attributes; whether a cat is currently available; whether to add a new cat or update an existing one; whether to save or cancel.
Interactions with other accepted participants. Every listing this persona maintains is what an Adopter browses and acts on. Their accuracy decision — particularly availability — directly determines whether an Adopter can express interest in a given cat. They do not browse as an Adopter and do not see or act on adoption-interest records.
Observable success. Listings shows the current, complete set of adoptable cats, and a saved change is reflected there immediately.
Source-backed constraints. Manager access is provisioned, not self-enrolled. Listing work is protected and reachable only after verification. The manager's surfaces use the same cream ground and pill controls as the public site, with a tighter 8-pt spacing rhythm.
Material failure and recovery. If the submission fails, their note is preserved and they can retry without retyping. If the cat has become unavailable since the page loaded, the action is disabled and the page says so plainly, routing them back to Cat Details or Cats to find another cat — never a dead end. If they later change their mind, they return to Interest for that cat and withdraw the interest; a failed withdrawal leaves the existing interest intact and offers retry.
Material failure and recovery. Field-level validation blocks a save and names the offending field. A failed save preserves every entered value and offers retry. If a listing was changed or deleted elsewhere since it loaded, that is reported plainly rather than silently overwritten. Cancel returns to Listings without writing anything. If a status change fails directly from a row, the row reverts to its previous status and reports the failure with retry.
The creative direction is authoritative for this section. Its muse is Pablo Stanley, and its headline idea is cat adoption as an illustrated welcome mat — warm, human, a little funny. The direction is applied as concrete tokens below.
Colour tokens — light mode.
| Role | Hex | Use |
|---|---|---|
| Background | #FFF8EE | Cream ground carrying the whole site |
| Surface | #FFFFFF | White cards sitting on the cream ground |
| Text | #2B2118 | Ink for all body and headline text — never pure black |
| Primary | #F26B3A | Tangerine: primary actions, hero wordmark accent, category chips |
| Accent | #2E9E7E | Teal: "available", success, shelter-manager surfaces |
| Muted | #8A7A6B | Taupe: metadata, timestamps, helper text |
| Butter | #FFD9A0 | Illustration fill and section-block background only |
| Mint | #BFE3D0 | Illustration fill and section-block background only |
| Blush | #F7C8D8 | Illustration fill and section-block background only |
The pastel support set is used only as illustration fills and section-block backgrounds, never as text grounds. Proportion across the site: 60% cream/white, 25% illustration pastels, 10% tangerine, 5% teal.
Typography.
clamp(44px, 9vw, 104px); section headings clamp(30px, 4.5vw, 52px); card titles 22–26px.Shape language. Big soft radii everywhere: 28px on cards, 999px on buttons and chips, 40px on hero illustration frames. Blob and sticker shapes serve as section dividers and behind-copy accents. Cards carry a soft offset shadow — 0 8px 0 rgba(43,33,24,0.08) — rather than a blurred drop shadow, so they feel printed and tactile. Buttons are pills with a 2px solid ink or tangerine border and a 4px bottom offset that compresses on press. Hand-drawn squiggles, dotted paths and small star/tail flourishes sit between sections.
Layout. Mobile-first single column at 375px, expanding to a 12-column grid at 1280px with a max content width of 1180px and 24px gutters. The landing hero is asymmetric: illustration left, oversized headline and CTA stacked right, with a wavy divider into the cat grid. Cats is a responsive card grid — 1 column at 375px, 2 at 768px, 3 at 1280px — with filter chips that wrap rather than scroll. Cat Details is a two-column split at 1280px (photo left, story and Interest CTA right) that stacks to one column on mobile. Manager pages (Listings, Listing Edit) keep the same cream ground and pill controls but use a tighter 8-pt spacing rhythm and a left rail of listing rows at 1280px, collapsing to a stacked list at 375px. Every headline, label, number and control sits fully inside its container at all three widths; long cat names wrap rather than truncate.
Imagery. Modular vector illustration is the lead voice: rounded, flat, hand-built cats and people in the pastel support palette, with simple faces and a little humour — a cat sleeping on a laptop, a person kneeling to meet a cat at eye level. Real cat photography appears inside listing cards and on Cat Details as the emotional payoff: warm, natural-light photos on cream or pastel backgrounds, never stock-office imagery. Icons are chunky, 2px-stroked rounded pictograms. No gradient blobs, no glassmorphism, no 3D renders.
Explicitly avoided. Blue–indigo primary or accent colours (#0057FF, #2563EB, #6366F1 and neighbours) on white grounds; Inter, Roboto, Arial, Helvetica, Open Sans, Lato, Poppins or system-ui for headings or body; gradient-blob heroes, glassmorphism panels and blurred gradient backgrounds; a grid of identical hover-lift cards with blurred drop shadows; photography-heavy or stock-office heroes; all-caps display headlines and tight, aggressive tracking; truncated cat names, clipped labels or any readable text running off its container at 375px; confetti, bouncy easing or motion without a prefers-reduced-motion static alternative. The generic indigo/blue-on-white SaaS template is forbidden for this project.
The welcome mat. The public entry is built as an illustrated welcome mat: a cream ground, a hand-built vector scene of a person crouching with an outstretched hand and a cat stepping forward to meet it, and an oversized rounded headline that talks like a person.
The hero is a two-part asymmetric composition on #FFF8EE.
#FFD9A0) block that bleeds off the left edge of the viewport. The cat steps forward; the person's hand is outstretched. This is the site's whole thesis in one image — meeting, not applying.clamp(44px, 9vw, 104px), reading "Find the cat who finds you." with the word cat set in tangerine (#F26B3A) — the only colour in the type. Beneath it, a single line of DM Sans body copy, then a pill CTA Meet the cats in tangerine with an ink outline and a 4px bottom offset shadow.No centred stack, no blue button, no gradient blob. The headline breaks across two lines at desktop and runs as one long line at 375px, wrapping rather than clipping. The concept recomposes only accepted content, states and controls — the hero's CTA leads to Cats, and the sign-in routes lead to Sign Up and Login. It introduces no new behaviour, page or destination.
Interaction Model: Animated Motion Tempo: expressive Hero Dimensionality: layered_2d
Landing Hero Motion Brief.
0 8px 0 to 0 3px 0 on hover; filter chips pop with a 120ms spring; section headings reveal with a 16px rise and fade as they enter the viewport; the interest-submitted state plays a short confetti-of-paw-prints burst.prefers-reduced-motion, all decorative motion is disabled: characters do not wave or blink, the path does not draw itself, cards do not lift, chips do not spring, headings do not rise, and the paw-print burst does not play. The layout is static, fully usable, and identical in hierarchy — the same hero, the same headline, the same CTA, the same path drawn in its final position.No user-requested 3D or WebGL was specified, and the direction's hero dimensionality is layered_2d, so no Canvas/R3F/Drei scene is required.
NFR-1 — Responsive integrity at three widths (explicit, from the creative direction)
Every headline, wordmark, label, number, card's text and control stays entirely inside the viewport and its container at 375px, 768px and 1280px, wrapping or scaling (for example font-size: clamp(...) with its mobile size) to fit. No other element covers any part of them. Long cat names wrap rather than truncate. Rationale: the direction states this as a hard readability rule, and the audience browses on phones.
NFR-2 — Reduced-motion accessibility (explicit, from the creative direction)
Under prefers-reduced-motion, all decorative motion is disabled, leaving a static, fully usable layout with the same hierarchy. Rationale: the direction requires a static alternative for every decorative motion, including the paw-print burst.
NFR-3 — Availability is not signalled by colour alone (required_inference) Availability status is stated in words as well as in teal on Cats, Cat Details, Interest and Listings. Rationale: availability governs whether an adopter can act, so it must be readable without relying on colour perception.
NFR-4 — Durable, correctly bound state (explicit, from the planning scope) Cat listings, adopter accounts, manager accounts and adoption-interest records persist across sessions. An adoption interest remains bound to the adopter who expressed it and to the specific cat it concerns, so a returning adopter sees their own commitment accurately and no adopter can act on another's. Rationale: the accepted journeys require resumable, correctly attributed state.
NFR-5 — Protected destinations require verified identity (required_inference) Interest, Listings and Listing Edit are reachable only by a verified account of the correct kind. Landing, Sign Up, Login, Cats and Cat Details are reachable anonymously. Rationale: expressing interest is a durable adopter-specific commitment, and listing administration is provisioned work; neither can be left open.
NFR-6 — Credential failures do not disclose account existence (required_inference) Login returns one generic failure message for rejected credentials and does not reveal whether an account exists. Rationale: the verification surface is anonymous and must not become an account-enumeration oracle.
NFR-7 — No dead ends (required_inference) Every failure and empty state offers a route forward: retry, clear filters, return to Cats, or return to Listings. Rationale: the accepted journeys each require a continuation, and the direction's low-pressure register is broken by a stuck screen.
NFR-8 — Entered values survive failure (required_inference) A failed Sign Up, Interest or Listing Edit submission preserves every value the person entered and offers retry. Rationale: losing a written note or a completed listing form would make the accepted journeys unusable in practice.
NFR-9 — Single application backend (required_inference) The site is served by one application backend that owns listings, identity records and adoption-interest records, alongside the custom web frontend. Rationale: the accepted scope is a single cohesive product with no independent worker, queue or third-party service requirement.
No technology choices were stated by the user. The following are the minimal, coherent defaults for the accepted scope, labelled as defaults.
[Default — not specified by user][Default — not specified by user][Default — not specified by user][Default — not specified by user][Default — not specified by user]Preserved source choices. The visual and brand source is the image supplied by the user, applied through the creative direction in sections 6–8. No other technology was specified.
Assumptions.
Constraints.
prefers-reduced-motion static alternative. (explicit)0 8px 0 rgba(43,33,24,0.08), which compresses to 0 3px 0 as the card lifts 4px on hover, giving cards a tactile, printed feel rather than a blurred drop shadow.No completed page designs yet.
Completed design pages will appear here when they are ready to preview.
No completed page designs yet.
Completed design pages will appear here when they are ready to preview.
No comments yet. Be the first!