wild-bedroom is a first-party creative tool for generating one hyper-realistic character portrait from a set of reference images and an explicit trait specification. The product's intent is to let a single self-starting Character Designer art-direct a specific female character — white skin, green-and-black shoulder-length hair, rose-and-skull chest tattoos, full sleeve tattoos, tongue out with a wink, gold-edged sharp canine tips — posed in her own bedroom with an unmade bed, a helmet resting somewhere in the background, and a leather jacket hung behind a door.
The audience is the Character Designer: one person, working alone, who supplies reference images and trait decisions, generates the portrait, inspects the result against every specified attribute, and iterates until the character looks unique, hyper-realistic, and does not carry the face of any woman in the supplied reference images.
The product is delivered as a custom web application with application-owned identity, a public entry surface, self-service enrollment, returning verification, and a protected generation workspace.
wild-bedroom is a web application composed of four first-party pages: Landing, Sign Up, Create Character, and Login. The Landing page is the anonymous public entry that explains what the product does before any protected work begins. Sign Up establishes first-use identity for the self-starting Character Designer. Login verifies a returning Character Designer so prior generation work can be resumed. Create Character is the protected generation workspace where reference images are supplied, the character is generated against the specified traits, and the result is reviewed and adjusted.
The only accepted active human actor is the Character Designer. The reference images of women supplied by the user are an inspiration_only visual reference used strictly as a negative reference: the generated character must not have the face of any woman shown in those images. They supply no product names, copy, facts, or capabilities.
Current delivery covers: anonymous product explanation, self-service enrollment, returning verification, reference-image intake, trait-specified character generation, result review, and adjustment requests. Explicitly out of scope for the current horizon: any capability not named in the authoritative requirement thread — no multi-character library, no sharing or export pipeline, no collaboration, no billing, no third-party provider surface, and no account-management features beyond first-use enrollment and returning verification.
The product is a single-purpose creative workspace, not a general image platform. Everything the Character Designer does happens inside one protected generation workspace, reached from a public entry surface that explains the product before any protected work begins. Identity is application-owned and self-service: the Character Designer enrolls themselves on first use and verifies themselves on return, with no invitation, provisioning, or deployment bootstrap boundary. The Landing page and Sign Up are anonymously reachable; Create Character requires a verified identity so that a generation session and its result remain bound to the correct person and can be resumed. Login is anonymously reachable because it is the interaction that establishes access to the protected workspace.
The reference images are used only as a negative constraint on facial likeness. They are not a content source, and no factual entity, field, or value is drawn from them.
Not applicable. The supplied reference directive declares uses: ["visual_inspiration"] with authority: inspiration_only and is not a content_source; it contributes only the negative facial-likeness constraint and no factual content.
wild-bedroom wordmark in Syne 800, all lowercase, running edge-to-edge; a single pill CTA in acid lime pinned beneath the headline; a horizontal scrolling row of reference thumbnails and trait chips below the hero.FR-1 — Public product explanation As a Character Designer, I should see, before any protected work begins, an anonymous Landing page that explains that wild-bedroom creates hyper-realistic character images from reference images and specified traits, so that I understand what the product does and how to begin. Provenance: required_inference. Lifecycle: Trigger — visiting the product with no verified identity. Observable result — the Landing page renders the wordmark, the character hero, and an entry CTA. Access state — anonymous. Failure/recovery — if the hero image fails, the wordmark, explanation, and CTA remain readable and functional. Continuation — proceed to Sign Up or Login.
FR-2 — Self-service first-use enrollment As a Character Designer, I should be able to establish my own identity on first use without an invitation or provisioning step, so that I can begin protected character generation work. Provenance: required_inference. Lifecycle: Trigger — choosing to begin from Landing with no existing identity. Observable result — an identity is created and I am taken into the protected generation workspace. Access state — anonymous entry on Sign Up. Failure/recovery — invalid or already-used identity information is marked on the specific field with entered values preserved; I can correct and resubmit or switch to Login. Continuation — Create Character.
FR-3 — Returning verification and resume As a Character Designer, I should be able to verify my identity on return and be brought back to my prior character generation work, so that I can continue iterating without losing what I had already set up. Provenance: required_inference. Lifecycle: Trigger — returning to the product with an existing identity. Observable result — identity verified and prior generation session available in the protected workspace. Access state — anonymous entry on Login; protected state unavailable until verification succeeds. Failure/recovery — a clear message is shown without revealing which credential part was wrong; I can re-enter and resubmit or switch to Sign Up. Continuation — Create Character with prior work resumed.
FR-4 — Reference image intake As a Character Designer, I should be able to supply the reference images of women to the generation workspace, so that the product can use them as a negative reference for facial likeness. Provenance: explicit (the user supplied reference images and stated the negative-likeness intent). Lifecycle: Trigger — adding images in the reference-image area of Create Character. Observable result — the images appear as thumbnails in the reference row and are held in the session. Access state — verified identity required. Failure/recovery — an image that cannot be accepted is reported and the existing reference set is unchanged. Continuation — set traits and generate.
FR-5 — Negative facial-likeness constraint As a Character Designer, I should get a character that does not have the face of any of the women in the supplied reference images, so that the result is a distinct, original character rather than a copy of a reference. Provenance: explicit. Lifecycle: Trigger — generation with a reference set present. Observable result — the produced portrait's face does not match any woman in the reference images. Access state — verified identity required. Failure/recovery — if the result resembles a reference face, the failure is stated plainly, the previous result and inputs are preserved, and I can adjust and regenerate. Continuation — review and adjust.
FR-6 — Hyper-realistic rendering As a Character Designer, I should get a hyper-realistic rendering of the character, so that the portrait reads as photographic rather than illustrated or stylized. Provenance: explicit. Lifecycle: Trigger — generation. Observable result — the portrait is rendered with hyper-realistic detail. Access state — verified identity required. Failure/recovery — a result that does not read as hyper-realistic is reported as a failure and can be regenerated. Continuation — review and adjust.
FR-7 — Unique character appearance As a Character Designer, I should get a character that looks unique, so that the portrait does not read as a generic or stock character. Provenance: explicit. Lifecycle: Trigger — generation. Observable result — the character presents as a distinct individual. Access state — verified identity required. Failure/recovery — a result that reads as generic is reported and can be regenerated. Continuation — review and adjust.
FR-8 — Skin tone As a Character Designer, I should get a character with white skin, so that the specified skin tone is honored. Provenance: explicit. Lifecycle: Trigger — generation. Observable result — the character's skin is white. Access state — verified identity required. Failure/recovery — a mismatch is reported and can be regenerated. Continuation — review and adjust.
FR-9 — Hair color As a Character Designer, I should get a character with green and black hair, so that the specified hair coloring is honored. Provenance: explicit. Lifecycle: Trigger — generation. Observable result — the character's hair is green and black. Access state — verified identity required. Failure/recovery — a mismatch is reported and can be regenerated. Continuation — review and adjust.
FR-10 — Hair length As a Character Designer, I should get a character who has hair but whose hair is not too long, so that the specified moderate length is honored. Provenance: explicit. Lifecycle: Trigger — generation. Observable result — the character has hair of a moderate, not-too-long length. Access state — verified identity required. Failure/recovery — hair that is absent or too long is reported as a failure and can be regenerated. Continuation — review and adjust.
FR-11 — Chest tattoos As a Character Designer, I should get a character with chest tattoos of roses and skulls, so that the specified chest tattoo subject matter is honored. Provenance: explicit. Lifecycle: Trigger — generation. Observable result — the chest carries tattoos depicting roses and skulls. Access state — verified identity required. Failure/recovery — a mismatch is reported and can be regenerated. Continuation — review and adjust.
FR-12 — Sleeve tattoos As a Character Designer, I should get a character with sleeve tattoos, so that the specified arm coverage is honored. Provenance: explicit. Lifecycle: Trigger — generation. Observable result — the character's arms carry sleeve tattoos. Access state — verified identity required. Failure/recovery — a mismatch is reported and can be regenerated. Continuation — review and adjust.
FR-13 — Pose: tongue out with a wink As a Character Designer, I should get a character posed with her tongue out and winking, so that the specified expression is honored. Provenance: explicit. Lifecycle: Trigger — generation. Observable result — the character's expression shows the tongue out and a wink. Access state — verified identity required. Failure/recovery — a mismatch is reported and can be regenerated. Continuation — review and adjust.
FR-14 — Gold-tipped canines As a Character Designer, I should get a character whose canines have gold tips that make them look sharp but not long, with the gold only on the edges of the tooth, so that the specified dental detail is honored exactly. Provenance: explicit. Lifecycle: Trigger — generation. Observable result — the canine tips are gold-edged, the teeth read as sharp but not long, and gold appears only at the tooth edges. Access state — verified identity required. Failure/recovery — gold covering more than the tooth edge, or teeth that read as long, is reported as a failure and can be regenerated. Continuation — review and adjust.
FR-15 — Bedroom background with unmade bed As a Character Designer, I should get a character whose background is her bedroom with an unmade bed, so that the specified setting is honored. Provenance: explicit. Lifecycle: Trigger — generation. Observable result — the background is a bedroom containing an unmade bed. Access state — verified identity required. Failure/recovery — a missing or wrong setting is reported and can be regenerated. Continuation — review and adjust.
FR-16 — Helmet in the background As a Character Designer, I should get a character whose helmet is visible somewhere in the background, so that the specified prop is present. Provenance: explicit. Lifecycle: Trigger — generation. Observable result — a helmet is visible somewhere in the background. Access state — verified identity required. Failure/recovery — a missing helmet is reported and can be regenerated. Continuation — review and adjust.
FR-17 — Leather jacket hung behind a door As a Character Designer, I should get a character whose leather jacket is hung behind a door in the background, so that the specified prop and its placement are honored. Provenance: explicit. Lifecycle: Trigger — generation. Observable result — a leather jacket is hung behind a door in the background. Access state — verified identity required. Failure/recovery — a missing or misplaced jacket is reported and can be regenerated. Continuation — review and adjust.
FR-18 — Trait specification and adjustment As a Character Designer, I should be able to set and adjust the character's traits — hair, tattoos, pose, teeth, and setting — and request an adjustment to the generated result, so that I can iterate until every specified attribute is correct. Provenance: required_inference (the accepted journey requires the Character Designer to direct and re-direct the character's appearance and scene details until the result matches). Lifecycle: Trigger — reviewing a generated result in Create Character. Observable result — the adjusted trait values are applied and a new result is produced. Access state — verified identity required. Failure/recovery — a failed adjustment preserves the previous result and the current trait values. Continuation — review the new result and adjust again or finish.
FR-19 — Session continuity As a Character Designer, I should have my reference images, trait values, and generated results remain bound to my identity across visits, so that I can resume my character work where I left it. Provenance: required_inference (identity continuity is indispensable for the accepted resume journey). Lifecycle: Trigger — returning and verifying identity. Observable result — prior reference set, trait values, and results are available in the workspace. Access state — verified identity required. Failure/recovery — if prior work cannot be restored, the workspace opens in its empty state with a clear notice rather than failing silently. Continuation — continue generating or adjusting.
Product context. The Character Designer is a single, self-starting creative professional working alone in wild-bedroom. They arrive with a concrete art direction already in mind and a set of reference images of women they explicitly do not want the character to resemble. They are not browsing for inspiration; they are executing a specific brief.
Primary goal. Produce one finished hyper-realistic portrait of a specific female character that matches every specified attribute and reads as a unique individual.
Distinct accepted responsibilities. The Character Designer supplies the reference images that define the negative facial-likeness boundary; specifies and adjusts the character's skin tone, hair color and moderate length, rose-and-skull chest tattoos, sleeve tattoos, tongue-out winking pose, gold-edged sharp canine tips, and bedroom setting with unmade bed, helmet, and leather jacket hung behind a door; generates the portrait; inspects the result attribute by attribute against the specification; and requests adjustments until the result is correct. They also establish their own identity on first use and verify it on return so their work is preserved.
Relevant inputs and decisions. Which reference images to supply; whether the generated face resembles any reference woman; whether the hair is present and not too long; whether the gold sits only on the tooth edges and the teeth read sharp but not long; whether the bedroom, unmade bed, helmet, and door-hung leather jacket are all present; whether the result reads as hyper-realistic and unique. Each of these is a decision to accept the result or request an adjustment.
Interactions with other accepted participants. None. The Character Designer is the only accepted active human actor; there is no collaborator, reviewer, or recipient in the current horizon.
Observable success. A finished portrait in which the character has white skin, green-and-black not-too-long hair, rose-and-skull chest tattoos, sleeve tattoos, tongue out with a wink, gold only on the edges of sharp-but-not-long canine tips, posed in her bedroom with an unmade bed, a helmet visible in the background, and a leather jacket hung behind a door — and whose face does not match any woman in the supplied reference images.
wild-bedroom wordmark and an acid-lime pill CTA.The creative direction is authoritative for this section. Muse: Jessica Walsh. Headline register: saturated attitude for a character generator that bites back — wild, playful, transgressive, unapologetically loud moto-culture energy, never a calm utility.
Colour tokens (dark mode, authoritative):
| Role | Hex | Usage |
|---|---|---|
| Background | #141014 | Deep near-black plum ground; ~55% of surface area |
| Surface | #1F1A20 | Panels, cards, sticky trait panel; ~20% |
| Text | #FFF4E9 | Warm off-white body and heading text; ~2% |
| Primary | #FF2D8A | Hot pink CTAs, wordmark, hero colour block; ~15% |
| Accent | #D6FF3F | Acid lime — green-hair echo, focus rings, marquee, hero pill CTA; ~8% |
| Muted | #8A7F86 | Secondary labels and inactive chips |
| Gold micro-accent | #E9B949 | Only the canine detail callout in the portrait |
Typography. Headings: Syne at 800 weight, tight -0.03em tracking — all-lowercase for the wordmark, uppercase for section labels. Headlines are set enormous, spanning the viewport width and allowed to overlap the character image edge. Body: Archivo at 400/500 with generous 1.6 line-height. Scale: 1.333 modular — 64/48/32/20/16 on desktop, 40/32/24/18/16 on mobile, with clamp() on display sizes.
Shape language. Big 28–40px radii on cards and buttons; pill-shaped CTAs; chunky sticker-like badges with a 3px offset shadow; hard-edged colour-block panels contrasting with the soft radii. The character portrait itself is a hard-edged rectangle cropped dramatically, so the soft UI frames a sharp subject.
Spacing rhythm. Full-bleed dark ground with generous asymmetric gutters; the hero splits 45% colour block / 55% portrait with an 80px overlap; below the hero, a horizontal scrolling row of reference thumbnails and trait chips that can be dragged and reordered.
Imagery style. One hero image: the hyper-realistic character — white skin, green-and-black shoulder-length hair, rose-and-skull chest tattoos, full sleeve tattoos, tongue out with a wink, gold-edged sharp canines — posed in her bedroom with an unmade bed, a helmet on a chair, and a leather jacket hung behind the door. The photo is colour-graded toward the hot pink/lime palette, then cut out and placed on a flat colour block so the UI feels hand-built rather than stock.
Avoid (binding). Blue or indigo accents anywhere; white or near-white page grounds; Inter, Roboto, Arial, Helvetica, Open Sans, Lato, Poppins, or system-ui for headings or body; gradient-blob heroes or glassmorphism panels; grids of identical hover-lift cards; centred headline + subtext + blue button hero composition; muted, corporate, or neutral colour treatments; photographic backgrounds that compete with the character portrait.
The public entry is a full-viewport dark plum ground (#141014) with a single oversized hot pink #FF2D8A block occupying the left 45% of the screen. The character portrait — cropped at the shoulder and bleeding off the right edge — dominates the right 55% and overlaps the pink block by 80px. The wordmark wild-bedroom is set in Syne 800 at clamp(56px, 12vw, 160px), all lowercase, in warm off-white, stacked over the pink block and allowed to run edge-to-edge. A single pill CTA in acid lime #D6FF3F sits pinned beneath the headline. There is no centred layout, no subtext paragraph, no blue button, and no gradient.
The concept carries the product's defining detail into the interface: on Create Character, a gold #E9B949 micro-callout draws a thin circle around the character's canines in the portrait with a small label reading "gold edge only" — turning the most specific requirement in the brief into a UI moment. Trait chips are sticker-like pills with a 3px offset shadow and a bouncy 1.15 scale on hover, each carrying a tiny emoji-like icon for hair, tattoos, pose, teeth, and setting. A horizontal marquee of the wordmark scrolls across the top of the Create page in acid lime, pausing on hover and wrapping into static rows under prefers-reduced-motion.
Interaction Model: Animated Motion Tempo: restrained Hero Dimensionality: layered_2d
Landing Hero Motion Brief. Focal subject: the hyper-realistic character portrait, cropped at the shoulder, bleeding off the right edge and overlapping the hot pink colour block. Input → transformation → outcome thesis: as the Character Designer scrolls the Landing page, the character portrait and the flat colour blocks shift at slightly different rates, so the portrait separates from the pink block and the oversized wild-bedroom wordmark settles into place — the composition resolves into the product's signature asymmetric hero without any element changing what it means. Motion vocabulary: subtle parallax between the character portrait and the background colour blocks on scroll; bouncy scale-ins on trait chips; hot pink hover flips on buttons; the acid-lime wordmark marquee on the Create page. No gradient blobs, no glass. Composed first frame: dark plum ground, hot pink block on the left 45%, portrait bleeding off the right edge and overlapping the block by 80px, wild-bedroom in Syne 800 running edge-to-edge over the pink block, acid-lime pill CTA pinned beneath the headline. Reduced-motion state: the parallax is removed and the hero renders as a single static composed frame with the portrait, colour block, wordmark, and CTA in their final positions; the Create-page marquee wraps into static rows so every item is fully readable.
NFR-1 — Hyper-realistic output fidelity. Generated portraits must render at a level of detail that reads as hyper-realistic rather than illustrated or stylized. Provenance: explicit. Rationale: the user's brief states "Focus on hyper realism."
NFR-2 — Negative facial-likeness guarantee. The generated character's face must not match the face of any woman in the supplied reference images. Provenance: explicit. Rationale: the user's brief states "I want her not to have the face of these women."
NFR-3 — Attribute-level inspectability. Every specified attribute — skin tone, hair color and length, chest tattoos, sleeve tattoos, pose, canine gold edges, bedroom, unmade bed, helmet, door-hung leather jacket — must be individually inspectable in the generated result so the Character Designer can verify it against the specification. Provenance: required_inference. Rationale: the accepted journey requires the Character Designer to check each attribute and request adjustments.
NFR-4 — Session durability. Reference images, trait values, and generated results must remain bound to the Character Designer's identity across visits. Provenance: required_inference. Rationale: the accepted resume journey requires prior work to be available on return.
NFR-5 — Readable text and controls at every viewport. Headlines, wordmarks, labels, numbers, card text, and controls must stay entirely inside the viewport and their container at 375px, 768px, and 1280px, wrapping or scaling (for example font-size: clamp(...) with its mobile size) to fit, with no other element covering any part of them. Imagery, decoration, and motion may be cropped, bled off an edge, rotated, overlapped, or cut as the creative direction asks, provided they cover no readable text or control. Provenance: explicit (creative direction constraint).
NFR-6 — Reduced-motion support. Under prefers-reduced-motion, the marquee must wrap into static rows and the hero parallax must resolve to a static composed frame, with every item fully readable. Provenance: explicit (creative direction constraint).
NFR-7 — Palette and typography adherence. The interface must use the specified dark-mode palette and the Syne/Archivo type pairing, and must not use blue or indigo accents, white or near-white page grounds, or the listed prohibited typefaces. Provenance: explicit (creative direction constraint).
docker-compose.yml as the inventory of runnable services; the backend, frontend, storage, and generation work are served from this composition. No separate service is introduced beyond what the accepted workflows require.Assumptions
Constraints
Current-horizon exclusions. No capability beyond the four accepted pages and the requirements above is in scope: no multi-character library, no sharing, export, or download pipeline, no collaboration or review by another person, no billing or subscription, no third-party provider surface, and no account-management features beyond first-use enrollment and returning verification.
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!