fluff-house-store is a fresh, first-party direct-to-consumer storefront for a plush and soft-goods boutique. The requester, Anas Kazim, asked for a new build that mirrors the premium 3D presentation and the same product lineup as the referenced live store at https://fluff-house-store--anaskazim99.replit.app. The reference site could not be read at build time (its HTML returned no readable content), so the product roster and presentation are carried by the accepted requirement thread and the project-wide creative direction rather than by scraped reference facts: the lineup is the house's plush roster — teddy bears, bunnies and soft companions in the house's signature colourways — presented as sculptural objects inside a gallery-vitrine storefront.
The audience is gift-buyers, collectors and design-conscious adults shopping for tactile toys. The emotional register is premium, sculptural and a little theatrical: the product is soft and cuddly, the storefront is architecture. The store is operated by a store owner who maintains the product catalog so the same products remain available in the premium 3D storefront.
This document is the System Requirements Document for that build. It covers the shopper's browse-to-purchase journey, the store owner's catalog administration, the identity boundary that protects catalog administration, the premium 3D presentation language, and the delivery boundary of a fresh application that does not edit or open the existing Replit site.
prefers-reduced-motion.fluff-house-store is a three-service application: a React frontend, a shared FastAPI backend that owns all application APIs and domain modules, and a MariaDB database for application-owned persistent data. The frontend renders the public storefront and the protected catalog administration; the backend serves the product catalog, cart and purchase state, and store-owner identity; MariaDB persists products, carts, orders and owner accounts.
Two active human personas use the system. The Shopper browses the premium 3D storefront anonymously and completes a purchase. The Store owner enrolls, verifies on return, and maintains the product catalog behind a protected surface. Anonymous shopping requires no account; catalog administration requires application-owned identity.
The current delivery is the fresh first-party application described here. The reference Replit site is a visual and product reference only; it is not edited, embedded, or opened by this build.
Removed from scope
fluff-house-store--anaskazim99.replit.app as a runtime dependency).The product is a storefront, not a marketplace or a CMS. Its center of gravity is the shopper's encounter with the plush objects: a cinematic Landing entry, a staggered Storefront of sculptural plinths, a Product Details page with a sticky real-time 3D viewer, and a receipt-like Cart that completes a purchase. The store owner's work is deliberately narrow: keep the catalog truthful so the storefront stays presentable.
Access follows the accepted contract. Landing, Storefront, Product Details and Cart are public and require no identity. Catalog is role-restricted to the store owner. Login and Sign Up are the anonymous identity-access surfaces: Sign Up is first-use self-service enrollment, Login is returning verification. A protected destination does not own the interaction that establishes access to itself, so Catalog is reached only after identity is established through Sign Up or Login.
The premium 3D presentation is a current commitment, not a future idea. The hero carries a real-time WebGL plush subject; Product Details carries a per-product real-time viewer. The reference site's exact product names, prices and copy could not be verified, so the catalog is seeded with the house's plush roster as described in the creative direction and is maintained by the store owner thereafter.
The reference directive declares content_source with authoritative authority, but the verified source observations record that the reference URL returned no readable content. No product names, descriptions, prices, images, navigation items, or copy could be verified from the source. The inventory is therefore empty of verified reference facts, and no facts are invented to fill it. The product roster used by the build is the plush lineup named in the project-wide creative direction (teddy bears, bunnies and soft companions in the house's signature colourways), seeded as catalog data and editable by the store owner.
clamp(2.75rem, 7vw, 6rem), a gold hairline rule, a one-line subtext, and a pearl capsule CTA. Right column: a single real-time 3D plush bear on a curved pearl plinth bleeding off the right and bottom edges, lit by a slow studio sweep, over a faint 12° diagonal flow-line scaffold. A thin gold arc sweeps from behind the plinth into the type column.#1A1C21 with muted labels. Empty — a quiet charcoal panel with a muted line stating the house is preparing its plush collection, and a link back to Landing. Success — the full staggered grid renders. Error — a muted inline notice with a retry control; the header and Cart link remain usable. Recovery — retry reloads the catalog. Reduced motion — cards do not lift or glow on hover; the grid remains staggered and fully readable.FR-1 — Fresh build of the Fluff House store. As a Shopper, I should reach a fresh Fluff House store application that mirrors the referenced live store's premium presentation and product lineup, so that I can shop the same house in a new build. Provenance: explicit. Lifecycle: the anonymous visitor lands on Landing; the application renders the storefront; the observable result is a working store that is a new build and does not edit or open the existing Replit site. Failure: if the application is unreachable, the visitor sees the browser's own error; recovery is a reload. Continuation: the visitor enters the Storefront.
FR-2 — Premium 3D presentation. As a Shopper, I should experience the storefront in a premium 3D presentation matching the reference site's register, so that the plush products read as sculptural objects. Provenance: explicit. Lifecycle: the visitor lands on Landing and sees a real-time 3D plush subject on a curved pearl plinth with a slow studio light sweep; the Storefront presents staggered plinths; Product Details presents a sticky real-time 3D viewer. Observable result: the 3D presentation is present on Landing and Product Details and the staggered plinth rhythm is present on the Storefront. Failure: if WebGL is unavailable, static macro studio stills replace the 3D subjects and all text and controls remain usable. Recovery: the shopper continues browsing and purchasing from the fallback. Continuation: the shopper proceeds to Product Details and Cart. Reduced motion: the 3D viewer freezes to a single angle with drag-to-rotate and parallax is disabled.
FR-3 — Same product lineup. As a Shopper, I should see the same products the reference store offers — the house's plush roster of teddy bears, bunnies and soft companions in the house's signature colourways — so that the new store carries the same merchandise. Provenance: explicit. Lifecycle: the Storefront lists the catalog products; the shopper opens a product; the observable result is a product page with name, colourway, price and description. Failure: if the catalog cannot load, the Storefront shows a muted notice with retry. Recovery: retry reloads the catalog. Continuation: the shopper adds the product to the Cart.
FR-4 — Anonymous Landing entry. As an anonymous visitor, I should reach the Landing public entry before any identity establishment, so that I can understand the store before shopping or owner work. Provenance: required_inference. Lifecycle: the visitor opens the application root; Landing renders the hero, subtext and pearl capsule CTA without requiring identity; the observable result is a usable entry with a path into the Storefront and paths to Login and Sign Up. Failure: if the 3D hero fails, the static fallback renders with the same type block and CTA. Recovery: the CTA remains usable. Continuation: the visitor enters the Storefront.
FR-5 — Browse the Storefront. As a Shopper, I should browse the catalog in the premium 3D presentation, so that I can find a plush product to buy. Provenance: required_inference. Lifecycle: the shopper enters the Storefront from Landing; the staggered plinth grid renders with names and champagne-gold tabular prices; the observable result is a browsable catalog. Failure: a load error shows a muted notice with retry. Recovery: retry reloads. Continuation: the shopper opens a Product Details page.
FR-6 — View product details. As a Shopper, I should open an individual product to see its details, so that I can decide whether to buy it. Provenance: required_inference. Lifecycle: the shopper selects a product card; Product Details renders the sticky 3D viewer and the ruled spec column; the observable result is the product's name, colourway, price and description. Failure: an unknown product reference shows a muted notice and a link back to the Storefront; a 3D viewer failure falls back to a static still. Recovery: the shopper returns to the Storefront or adds to cart from the fallback. Continuation: the shopper adds the product to the Cart.
FR-7 — Add to cart and complete a purchase. As a Shopper, I should add products to a cart and complete a purchase, so that I can buy the plush products. Provenance: required_inference. Lifecycle: the shopper adds a product from Product Details; the Cart renders the receipt-like sheet with lines, quantities and totals; the shopper completes the purchase; the observable result is a confirmation panel with an order reference and total. Failure: a checkout failure shows a muted notice with retry and preserves the cart lines. Recovery: retry re-submits the same cart. Continuation: the shopper returns to the Storefront.
FR-8 — Store-owner self-service enrollment. As a Store owner, I should complete self-service enrollment before first catalog administration, so that I can establish the identity that protects the Catalog. Provenance: required_inference. Lifecycle: the owner reaches Sign Up anonymously from Landing or Login; submits email, password and confirm-password; the account is created; the observable result is access to the Catalog. Failure: mismatched passwords or an already-registered email show inline validation. Recovery: the owner corrects the form or goes to Login. Continuation: the owner enters the Catalog.
FR-9 — Store-owner returning verification. As a Store owner, I should complete returning verification to access the protected Catalog, so that only I can administer the catalog. Provenance: required_inference. Lifecycle: the owner reaches Login anonymously; submits credentials; the observable result is access to the Catalog. Failure: invalid credentials show a muted inline message without revealing which field failed. Recovery: the owner retries or goes to Sign Up. Continuation: the owner enters the Catalog.
FR-10 — Maintain the product catalog. As a Store owner, I should maintain the product catalog so that the same products remain available in the premium 3D storefront, so that the storefront stays presentable to shoppers. Provenance: required_inference. Lifecycle: the verified owner opens the Catalog; adds, edits or removes a product; saves; the observable result is the updated product list and the updated Storefront. Failure: missing name or invalid price shows inline validation; a save failure shows a muted notice with retry and retains entered values. Recovery: the owner corrects and retries. Continuation: the owner returns to the Storefront to confirm the change.
The Shopper is a gift-buyer, collector or design-conscious adult shopping for tactile plush toys. They arrive anonymously at the Landing entry and are met by a gallery-vitrine presentation: an oversized display headline, a real-time 3D plush bear on a pearl plinth, and a pearl capsule CTA into the Storefront. Their primary goal is to explore the plush lineup in the premium 3D presentation and complete a purchase.
Their distinct responsibilities are browsing the staggered Storefront, opening a Product Details page to inspect a product's colourway, price and description in the sticky 3D viewer, adding items to the Cart, and completing the purchase. Their inputs are product selection and quantity; their decisions are which product to open and whether to buy. They interact with the Store owner only indirectly: the products they see are the products the owner maintains. Their observable success is a confirmation panel with an order reference and total, reached without ever creating an account.
What makes the Shopper's work different from the Store owner's is that it is entirely public and ephemeral until purchase: no identity is established, no catalog state is authored, and the only durable state is the cart and the resulting order.
The Store owner maintains the Fluff House store's product catalog so that the same products remain available in the premium 3D storefront. They are the only persona who establishes an application-owned identity, and they do so through self-service enrollment on Sign Up or returning verification on Login.
Their primary goal is that the catalog reflects the intended products and the storefront stays presentable to shoppers. Their distinct responsibilities are adding, editing and removing products, and saving changes so the Storefront reflects them. Their inputs are product name, price, colourway and description; their decisions are what the house sells and how each product is described. They interact with the Shopper by supplying the catalog the Shopper browses. Their observable success is a saved product that appears in the Catalog list and on the Storefront.
What makes the Store owner's work different from the Shopper's is that it is protected, durable and authorial: it requires established identity, it changes shared product state, and it is the only work in the system that writes catalog data.
The muse is Zaha Hadid; the headline is "SOFT THINGS, BUILT LIKE ARCHITECTURE". The register is fluid parametric grandeur for a plush toy house: sweeping continuous surfaces, pearl-and-charcoal grounds, and calm light on curved forms.
Colour tokens (dark mode):
| Role | Hex | Usage |
|---|---|---|
| Background | #101114 | Dominant ground, roughly 70% of every screen |
| Surface | #1A1C21 | Raised product plinths and header bar |
| Text | #F3F1EC | Body and headline type |
| Primary | #E8E2D6 | Pearl headline type and primary CTA fill (charcoal text on pearl) |
| Accent | #C8A96B | Price, active swatch ring, hairline sweep along curved boundaries — never more than 5% of a view |
| Muted | #8A8F98 | Labels, captions, secondary metadata |
Contrast: #F3F1EC on #101114 and charcoal text on pearl CTAs both exceed 7:1 at body size.
Typography: Headings and body in Jost only. Display is Jost Light 300 at very large scale with -0.02em tracking and 1.05 line-height. Micro-labels are uppercase 11–12px with 0.18em tracking in muted grey. Weight contrast is the hierarchy tool: 300 display, 600 micro-labels, 400 body. Scale is a 1.25 modular with a display jump: display clamp(2.75rem, 7vw, 6rem); h2 28px → 48px; h3 20px → 28px; body 16px → 18px; label 11px → 12px uppercase.
Shape language: Sweeping parametric curves. Section boundaries are asymmetric arcs rendered as SVG masks, never straight horizontal rules. Product plinths are soft capsule or pebble forms with a single continuous curve radius of 32–48px. Cards use a 40px radius on one corner and 8px on the opposite. Buttons are full-capsule with a pearl fill and a 1px gold inner hairline. Diagonal flow lines (1px, #2A2D33) run behind the grid at 12°.
Layout: Asymmetric editorial grid on a 12-column base. The hero splits roughly 5/7 with type flush-left in the narrow column and the 3D stage bleeding off the right edge. The Storefront is a staggered two-column rhythm with each plinth offset vertically by 40–80px. Product Details is a split: a large sticky 3D viewer on the left and a narrow scrolling spec column on the right with ruled label/value pairs. The Cart is a single-column receipt-like sheet with hairline dividers and tabular numerals. Mobile collapses to one column with arcs flattened to gentle 24px curves and all type clamped to its mobile size.
Imagery: One crafted real-time 3D plush subject in the hero — a soft bear with a fabric-like normal map, sitting on a pearl plinth against charcoal — built in Three.js / React Three Fiber, plus per-product 3D viewers on Product Details. Supporting stills are macro studio photography of plush fabric: visible pile, stitched seams, felted eyes, shot on charcoal and pearl grounds. No stock people, no gradient blobs, no clip art.
Avoid: Any blue or indigo accent, especially #2563EB / #6366F1 on white; Inter, Roboto, Arial, Helvetica, Poppins or system-ui for headings or body; gradient-blob heroes, neon cyan/violet glows, or a candy-coloured toy palette; a uniform 3-card grid with identical hover-lift shadows; a centred headline + subtext + button stack; purple/violet gradients, glassmorphism panels, or frosted blur cards; fast bouncy or springy easing; photography of people or stock lifestyle scenes.
The public entry is an architectural vitrine. The Landing hero is a full-bleed charcoal stage split asymmetrically 5/7: the left five columns hold the oversized Jost 300 headline "SOFT THINGS, BUILT LIKE ARCHITECTURE" at clamp(2.75rem, 7vw, 6rem), stacked over a one-line subtext and a pearl capsule CTA pinned beneath it, flush-left, with a gold hairline rule above the subtext. The right seven columns are dominated by a single real-time 3D plush bear on a curved pearl plinth that bleeds off the right and bottom edges, lit by a slow studio sweep against a faint 12° diagonal flow-line scaffold. A thin gold arc sweeps from behind the plinth into the type column, tying the two halves together.
The signature moves carry through the whole store: section boundaries are asymmetric SVG arcs that morph on scroll instead of straight rules, so the page reads as one continuous parametric surface from hero to footer; Storefront plinths are staggered on the 12-column grid with a one-corner-40px / opposite-corner-8px radius so no two cards sit on the same baseline; Product Details pairs a sticky real-time 3D viewer with drag-to-rotate against a narrow ruled spec column; and every price is set in champagne-gold tabular numerals as the only colour on the card besides the product.
Interaction Model: Animated Motion Tempo: cinematic Hero Dimensionality: webgl
clamp(...) to fit, and no other element covers any part of them. Imagery, decoration and motion may be cropped, bled off an edge, rotated, overlapped or cut as the direction asks, as long as they cover no readable text or control. Provenance: explicit (creative direction).prefers-reduced-motion, the 3D viewer freezes to a single hero angle with a drag-to-rotate control, parallax is disabled, and the layout remains a usable static arrangement. Provenance: explicit (creative direction).#F3F1EC on #101114 and charcoal text on pearl CTAs exceed 7:1 at body size. Provenance: explicit (creative direction).durable_state_required).docker-compose.yml with the three provisioned services — frontend, backend, database. No additional services are required for the current workflows.
fluff-house-store · plush vitrine
A gallery of soft companions — bears, bunnies and friends — carved, stitched and set on plinths.
The Vitrine

fluff-house-store · plush vitrine
A gallery of soft companions — bears, bunnies and friends — carved, stitched and set on plinths.
The Vitrine
No comments yet. Be the first!