This document specifies a one-page portfolio website for Jassinta Roid Triniti, a Social Media Specialist, Content Creator, Videographer, and Graphic Designer based in Indonesia. The site is a playful, girly, textured personal portfolio built around the metaphor of a school locker that opens into a scrapbook of a life's work — paper, stickers, washi tape, torn edges, and candy colour.
The product intent is to give brand owners, agency recruiters, and potential clients (reached primarily through Instagram and TikTok) a single scrollable destination where they can understand Jassinta's capabilities, review her writing, photography, magazine art, strategy, campus projects, podcast work, and archive, and reach her contact section. The site must be ready to deploy on Vercel.
The audience is the anonymous portfolio visitor — a recruiter, brand owner, or prospective client — plus the portfolio owner herself, whose work and credentials are represented, and a visitor who uses the interactive Magazine Art workspace to compose a fashion magazine collage.
The product is a single-page, colour-blocked, scroll-driven portfolio. It opens on a full-viewport bank of five CSS-3D school lockers. The centre locker carries the hero headline and an "OPEN ▶" button; activating it releases the scroll lock and reveals the locker contents, which act as navigation into paper overlays for credentials, photography, letters, strategy, and notes. Below the opening, the page continues through nine named sections in a fixed order, each with its own ground colour, typography treatment, and collage composition.
All content is first-party and publicly reachable; there is no account, login, or role-based permission model. The site is a static front-end deployed to Vercel, with assets served from public/assets/. Interactive state that must persist during a session (the Magazine Art composition) is local to the active interaction; the export is a PNG produced in the browser.
Delivery ownership. The portfolio is a first-party, publicly accessible website. Every page and overlay is owned by the application and reachable without identity establishment. There is no sign-in, no account creation, and no differentiated permission model — the source establishes no shared product state that different participants control differently. The only durable, participant-specific state is the Magazine Art composition, which is local to the active interaction and exported as a PNG; it is not bound to an account.
Current boundary. The current product is the one-page portfolio described in this document: the Opening locker bank, the nine named sections, and the seven locker-item overlays (Participation, Achievement, Magazine Art, Photography, My Message, My Strategy, Notes). All of these are current.
Future boundary. Sections 10–15 of the source brief (Content Marketing, Example Strategy, Project Campus, Podcast, Archive, Contact) are named in the navigation order and given ground colours, but their detailed content was not supplied. They remain current destinations in the navigation and page contract; their internal content is not specified here and must not be invented. Any future expansion of those sections is out of scope for this document.
Exclusions. No adjacent account management, no authentication, no CMS, no server-side data store, no analytics dashboard, and no capability beyond the accepted portfolio presentation and the Magazine Art composition/export are in scope.
The following content is supplied by authoritative content_source attachments and must be reproduced verbatim where indicated.
My Message letter script — the letter body is used exactly as attached, with blush highlighter applied to quotes, closing line "Let's create something worth remembering" set in Sentient bold italic hot-pink, and a signature.
Writing Portfolio hero narrative — the hero narrative text is used exactly as attached.
11 writing works — titles, dates, and URLs are used exactly as attached, grouped as:
#B9B8CC against a powder-pink #FDE4EC wall with a rose-quartz #F7CAD0 floor and static confetti. Door ratio 1090:2500, height 80–88svh, outermost lockers may be cropped. Perspective 1800px. Realistic volume: ceiling, three walls, thick shelf, frame, slab door, recessed vent, embossed handle/lock/number. Centre locker carries four lines of Sentient set in cqw units, each word on its own rotated (±1–2°) colour block: "Content that" Regular on bubblegum #FF8DC7 and baby-blue #BFE3F5; "is Felt," Bold Italic on butter #FFF1A8 and lilac #D4C1F5; "Shared," Bold on pastel-mint #A8E6CF; "Remembered" Italic on peach-fizz #FFB38A. "OPEN ▶" sticker button beneath. DM Mono labels.StickerButton for OPEN; TocInline (2 columns) on the open state; Overlay for item destinations; HoverLabel for item labels.#FFFFFF ground (mandatory). Hero: Anton left-aligned, line-height 0.9, clamp(3.5rem,2rem+9vw,11rem), reading "WHICH / COMPANIES / HAVE I / WORKED / FOR?" with slow parallax; photo right with medium parallax. DocumentCanvas holds ten physical papers: 1px black border, 3–4 layer shadow, grain, rotations -3, 4, -5, 2, 3, -2, 5, -4, 1, -3, "01 / 10" numbering, tag, REF-ARC-00X, staple-red staple, logo contain with monogram fallback. Companies: Elsthetic, Elspresso, Aishi Aesthetic Academy, Karamina Tour, ELS Corp, Aishi Beauty, Lassiewear, inNalar.com, Independen Media, Ikapunija Media. No logo may be covered.SectionHero, DocumentCanvas, Document, Logo, data.ts.clamp(110px,19vw,280px), white frames, rotation ±9°, text safe zone, clip-path stagger reveal 120ms, float. Tablet 4, mobile 2+2. Cassette: 3D round disc with thick edge, spindle hole, image as mask; large centre slowly rotating; small side discs with rotateY, translateZ, 1px blur. Info panel top-left (title, Author, Date DD/MM/YYYY, Media) updating slide-up + fade; big title below. Contents bottom-right, TornEdge. Mobile info on top. Eleven works: Independen Media ×4, innalar.com ×4, Ikapunija Media ×3 (2024, no link).noopener noreferrer); items 9–11 open a lightbox with a "No online link" chip.SectionHero, Carousel, PhotoFrame, TornEdge, Overlay.#2A0F2E ground and film grain. Detailed content not supplied.SectionHero, TornEdge, TocOverlay.SectionHero, TocOverlay.#FFF8EE ground and walnut #7A4A32 shelf. Detailed content not supplied.SectionHero, TornEdge, TocOverlay.#FFD6E8 ground. Detailed content not supplied.SectionHero, TocOverlay.#2A0F2E ground and film grain. Detailed content not supplied. React.lazy loaded.SectionHero, TornEdge, TocOverlay.#2A0F2E ground, film grain, and bubblegum #FF8DC7 glow. Detailed content not supplied.SectionHero, TocOverlay, shared Footer.#F3E3B8 with Pushpin; frames keep native ratio; active title and year below. Data in achievements.ts (category, title, year, file, width, height) with 5 Participation records.Overlay, Carousel, PhotoFrame, Pushpin.#F3E3B8 with Pushpin; frames keep native ratio; active title and year below. Data in achievements.ts with 3 Achievement records.Overlay, Carousel, PhotoFrame, Pushpin.React.lazy loaded.Overlay, page-flip book, tray tabs, transform handles, export.Overlay, Carousel, PhotoFrame, Pushpin.Overlay, PaperNote.Overlay, PaperNote, StickerButton.Overlay, PaperNote.FR-01 — One-page portfolio delivery. As Jassinta Roid Triniti (Portfolio Owner), I should have a one-page portfolio website presenting my work as a Social Media Specialist, Content Creator, Videographer, and Graphic Designer, ready to deploy on Vercel, so that my capabilities are represented accurately and deployably. Provenance: explicit. Lifecycle: initiator — owner; observable result — site live on Vercel; failure/recovery — build failure surfaces at deploy; continuation — visitor reaches Contact. Acceptance: the site builds and deploys to Vercel with all named sections present.
FR-02 — Playful, girly, textured theme. As a Portfolio Visitor / Recruiter, I should experience a playful, girly, textured theme built from school locker, paper, sticker, and scrapbook motifs, so that the portfolio feels personal and handmade rather than corporate. Provenance: explicit. Lifecycle: initiator — visitor; observable result — themed surfaces render; continuation — visitor scrolls the page. Acceptance: locker, paper, sticker, and scrapbook motifs are visible across the page.
FR-03 — Design system tokens. As Jassinta Roid Triniti (Portfolio Owner), I should have the full hex colour token set (pink, purple, mint/blue, paper, neutral, gradients) exposed as CSS variables and Tailwind tokens, so that the palette is applied consistently. Provenance: explicit. Lifecycle: initiator — owner; observable result — tokens available as CSS vars and Tailwind; continuation — components consume tokens. Acceptance: every listed hex value is available as a CSS variable and a Tailwind token.
FR-04 — Section background assignments. As a Portfolio Visitor / Recruiter, I should see each section on its assigned ground: Writing hero powder-pink; Cassette blush→lilac; Content Marketing/Archive/Contact plum-night + film grain; Strategy hero lilac; Campus vanilla + walnut shelf; Podcast blush; Personal Brand pure-white (mandatory). Provenance: explicit. Lifecycle: initiator — visitor; observable result — correct ground per section; continuation — scroll continues. Acceptance: each section renders on its assigned ground; Personal Brand is pure-white.
FR-05 — Typography. As a Portfolio Visitor / Recruiter, I should read headlines in Sentient clamp(2.1rem,1.2rem+3.6vw,4.125rem) lh 1.02 balance, narrative in Poppins italic clamp(1rem,.85rem+.7vw,1.556rem) max 58ch with 1.5rem spacing, giant text in Anton, letters in Caveat, and labels in DM Mono. Provenance: explicit. Lifecycle: initiator — visitor; observable result — type renders per role; continuation — reading continues. Acceptance: each type role uses its specified family and clamp.
FR-06 — Light textures. As a Portfolio Visitor / Recruiter, I should see light textures: grain SVG feTurbulence (multiply .06–.10; dark screen .05), paper grain, pink glitter, die-cut sticker, washi, and lined paper. Provenance: explicit. Lifecycle: initiator — visitor; observable result — textures render at specified opacities; continuation — scroll continues. Acceptance: each texture appears at its specified blend and opacity.
FR-07 — Component library. As Jassinta Roid Triniti (Portfolio Owner), I should have the components HoverLabel (paper price-tag), StickerButton, Pushpin, PaperNote, PhotoFrame (always contain), TornEdge, TocOverlay/TocInline, SectionHero, Overlay (focus trap, Esc, hash #/participation, role=dialog, body lock), and Carousel (arrows, drag, keyboard, dots). Provenance: explicit. Lifecycle: initiator — owner; observable result — components available and used; continuation — pages compose from them. Acceptance: each component exists with its specified behavior.
FR-08 — TornEdge placement. As a Portfolio Visitor / Recruiter, I should see TornEdge only below Opening-terbuka, Cassette, Content Marketing, Video Reveal, Campus, and Archive, with 3-octave seeded SVG noise per section, blending with the background, white fibers offset 3–8px, drop-shadow, and height clamp(36px,6vw,90px). Provenance: explicit. Lifecycle: initiator — visitor; observable result — torn seam renders only at allowed boundaries; continuation — scroll continues. Acceptance: TornEdge appears only at the six allowed boundaries.
FR-09 — Navigation order. As a Portfolio Visitor / Recruiter, I should navigate in the order Opening, Personal Brand, Writing Portfolio, Content Marketing Specialist, Example Strategy, Project Campus, Podcast, Archive, Contact. Provenance: explicit. Lifecycle: initiator — visitor; observable result — sections appear in order; continuation — ToC jumps between them. Acceptance: the nine sections appear in the specified order.
FR-10 — ToC behavior. As a Portfolio Visitor / Recruiter, I should use a ToC list with smooth-scroll click and a pink active marker via IntersectionObserver, positioned bottom-right on Cassette & Video Reveal, top-right on Content Marketing, Archive, Contact, as a floating top-right button elsewhere, and as TocInline 2 columns on Opening-terbuka. Provenance: explicit. Lifecycle: initiator — visitor; observable result — active section marked pink; continuation — visitor jumps to any section. Acceptance: ToC position and active marker match the specification per section.
FR-11 — Scroll lock. As a Portfolio Visitor / Recruiter, I should have scroll locked while the locker is closed, so that the opening experience is not skipped. Provenance: explicit. Lifecycle: initiator — visitor; observable result — scroll locked until OPEN ▶; continuation — scroll-lock released on open. Acceptance: scroll is locked before OPEN ▶ and released after.
FR-12 — Footer. As a Portfolio Visitor / Recruiter, I should see a footer in DM Mono reading "2026 | Jassinta Roid Triniti | Creative Portfolio". Provenance: explicit. Lifecycle: initiator — visitor; observable result — footer renders; continuation — footer links to Contact. Acceptance: footer text matches exactly.
FR-13 — Responsive breakpoints. As a Portfolio Visitor / Recruiter, I should experience the layout at breakpoints <480, 768, 1024, 1440, ≥1920 (max-width), using svh/dvh, safe-area, clamp, and container queries. Provenance: explicit. Lifecycle: initiator — visitor; observable result — layout adapts per breakpoint; continuation — reading continues. Acceptance: each breakpoint renders without overflow.
FR-14 — Input and motion adaptation. As a Portfolio Visitor / Recruiter, I should have mouse effects only under hover:hover, touch equivalents ≥44px, reduced-motion respected, relayout via ResizeObserver + visualViewport debounced 100ms, overflow-x: clip, native media aspect ratios, lazy load, video playing only when visible (max ~6), and React.lazy for Flipbook, Magazine, Archive. Provenance: explicit. Lifecycle: initiator — visitor; observable result — effects and loads adapt to input and motion preference; continuation — interaction continues. Acceptance: hover effects gated on hover:hover; touch targets ≥44px; reduced-motion honored; lazy chunks load on demand.
FR-15 — Accessibility and performance targets. As a Portfolio Visitor / Recruiter, I should have full keyboard support, aria-labels, pink 3px focus, English alt text, and Lighthouse mobile Performance ≥70 and Accessibility ≥90. Provenance: explicit. Lifecycle: initiator — visitor; observable result — keyboard and screen-reader access; continuation — navigation continues. Acceptance: Lighthouse mobile meets both thresholds; focus ring is pink 3px; alt text is English.
FR-16 — Asset structure. As Jassinta Roid Triniti (Portfolio Owner), I should have assets under public/assets/{items,locker,video,img,strategy,photos,achievements,brand,pdf} with lowercase filenames without spaces (e.g. vintage_cindy_1..17.jpg, logo_1..10.png, foto_jassinta_duduk.png, comic_rush.pdf). Provenance: explicit. Lifecycle: initiator — owner; observable result — assets resolve at their paths; continuation — pages load media. Acceptance: all assets resolve from the specified directories with lowercase, space-free names.
FR-17 — Opening closed locker bank. As a Portfolio Visitor / Recruiter, I should see five CSS-3D lockers with door ratio 1090:2500, height 80–88svh, outermost may be cropped; on mobile 1 locker per screen with horizontal scroll-snap and dots 1–5. Provenance: explicit. Lifecycle: initiator — visitor; observable result — locker bank renders; continuation — visitor scrolls or opens. Acceptance: five lockers render with the specified ratio and height; mobile shows one per screen with dots.
FR-18 — Realistic locker volume. As a Portfolio Visitor / Recruiter, I should see realistic locker volume: ceiling, three walls, thick shelf, frame, slab door, recessed vent, embossed handle/lock/number, in steel-lilac, perspective 1800px, parallax ±3°, idle sway on mobile. Provenance: explicit. Lifecycle: initiator — visitor; observable result — volume renders with parallax; continuation — visitor interacts. Acceptance: all volume parts render; parallax and idle sway behave as specified.
FR-19 — Centre locker headline. As a Portfolio Visitor / Recruiter, I should see the centre locker headline in Sentient 4 lines (cqw sizing), each word on a colour block rotated ±1–2°: "Content that" Regular bubblegum/baby-blue; "is Felt," Bold Italic butter/lilac; "Shared," Bold pastel-mint; "Remembered" Italic peach-fizz. Provenance: explicit. Lifecycle: initiator — visitor; observable result — headline renders per word block; continuation — visitor activates OPEN ▶. Acceptance: each word sits on its specified colour block with the specified weight and rotation.
FR-20 — OPEN ▶ interaction. As a Portfolio Visitor / Recruiter, I should trigger on OPEN ▶: confetti ≤24, pink glitter paper-wipe 500–700ms, scene change, items pop in progressively, scroll-lock released, focus moved; reduced-motion crossfade 250ms; no TornEdge. Provenance: explicit. Lifecycle: initiator — visitor; observable result — scene changes and scroll unlocks; continuation — visitor explores locker contents. Acceptance: the sequence runs as specified; reduced-motion uses a 250ms crossfade.
FR-21 — Locker open L1. As a Portfolio Visitor / Recruiter, I should see L1 with a door and a card "I Can Help You With:" listing Social Media Manager, Social Media Strategy, SEO Writing, Video Content, Graphic Designer, Editorial Planning, Copywriting, etc. Provenance: explicit. Lifecycle: initiator — visitor; observable result — card renders; continuation — visitor reads capabilities. Acceptance: the card lists the specified items.
FR-22 — Locker open L2. As a Portfolio Visitor / Recruiter, I should see L2 without a door: Certificates (top shelf), Trophies (right, in front of certificates), Magazine (behind camera, not floating), Camera (shelf 2), Shoes (bottom). Provenance: explicit. Lifecycle: initiator — visitor; observable result — items rest on shelves; continuation — visitor opens item overlays. Acceptance: each item is placed as specified; the magazine does not float.
FR-23 — Locker open L3. As a Portfolio Visitor / Recruiter, I should see L3 with a door and a video card intro_video.mp4 1080×1920 without crop, muted autoplay, "Tap for sound", mute/pause buttons, stopping when off-screen. Provenance: explicit. Lifecycle: initiator — visitor; observable result — video plays muted and stops off-screen; continuation — visitor toggles sound or pauses. Acceptance: video is uncropped, muted-autoplays, and stops when off-screen.
FR-24 — Locker open L4. As a Portfolio Visitor / Recruiter, I should see L4 without a door: Polaroid (top shelf, hanging), Letter (bottom right), Notes (below letter), Book (center-left), Umbrella (leaning), Bag (bottom). Provenance: explicit. Lifecycle: initiator — visitor; observable result — items placed as specified; continuation — visitor opens item overlays. Acceptance: each item is placed as specified.
FR-25 — Locker open L5. As a Portfolio Visitor / Recruiter, I should see L5 with a door and a card "Platform I Am Proficient in:" listing Instagram, TikTok, Facebook, Google Business Profile, Canva, Capcut, Adobe Suites. Provenance: explicit. Lifecycle: initiator — visitor; observable result — card renders; continuation — visitor reads platforms. Acceptance: the card lists the specified platforms.
FR-26 — Card styling. As a Portfolio Visitor / Recruiter, I should see cards filling the door, text wrapping, Sentient bold titles, and Poppins lists with pastel heart/star icons. Provenance: explicit. Lifecycle: initiator — visitor; observable result — cards render per style; continuation — visitor reads. Acceptance: cards fill the door with wrapped text and pastel icons.
FR-27 — Locker body and door colours. As a Portfolio Visitor / Recruiter, I should see L2/L4 with candy-pink body, berry→aubergine interior, blush shelves; doors alternating lilac/candy-pink/pastel-mint; walls powder-pink, floor rose-quartz, static confetti; footer + TocInline + TornEdge. Provenance: explicit. Lifecycle: initiator — visitor; observable result — colours render per locker; continuation — visitor explores. Acceptance: each locker uses its specified colours.
FR-28 — Item extrusion and interaction. As a Portfolio Visitor / Recruiter, I should see items with 4–10 layer translateZ extrusion, contact shadow, tilt parallax, resting on shelves; alpha hit-test >20 (silhouette); hover/focus follows silhouette (rise 6–10px, +3%, pink glow, HoverLabel); mobile tap 1 = label, tap 2 = open; SVG/CSS fallback; Polaroid, umbrella, bag, shoes are decoration without labels. Provenance: explicit. Lifecycle: initiator — visitor; observable result — items respond to hover/focus/tap; continuation — visitor opens overlays. Acceptance: hit-testing follows the silhouette; decoration items have no labels.
FR-29 — Item mapping. As a Portfolio Visitor / Recruiter, I should open overlays via: Certificates→Participation, Trophies→Achievement, Magazine→Magazine Art, Camera→Photography, Letter→My Message, Book→My Strategy, Notes→Notes, all using Overlay. Provenance: explicit. Lifecycle: initiator — visitor; observable result — correct overlay opens; continuation — visitor reads the overlay. Acceptance: each item opens its mapped overlay.
FR-30 — Participation/Achievement carousel. As a Portfolio Visitor / Recruiter, I should browse a carousel of white-framed photos on aged-paper with Pushpin, frames keeping native ratio, active title and year below, from achievements.ts (category, title, year, file, width, height) with 5 Participation + 3 Achievement. Provenance: explicit. Lifecycle: initiator — visitor; observable result — active title and year update; continuation — visitor browses all records. Acceptance: 5 Participation and 3 Achievement records render with native-ratio frames.
FR-31 — My Message letter. As a Portfolio Visitor / Recruiter, I should read an open envelope with blue lined paper, pink margin, binder holes, Caveat ≥22px (mobile ≥19px), scroll inside the paper, script exactly as attached, blush highlighter quotes, closing "Let's create something worth remembering" Sentient bold italic hot-pink, and a signature. Provenance: explicit. Lifecycle: initiator — visitor; observable result — letter readable with highlights and signature; continuation — visitor closes the overlay. Acceptance: the letter matches the attachment; Caveat sizes meet the minimums.
FR-32 — Magazine Art workspace. As a Magazine Collage Creator (Visitor), I should compose a fashion magazine on a 4-sheet (8-side) page-flip book with pink cover (mobile 1 page), per-page collage layer, and a 3-tab tray: Photos (17 photos, no frames), Text (VOGUE Bodoni Moda, Fashion Pinyon Script, OOTD Bebas Neue, recolorable), Elements (13 SVG: ribbon, pastel camera, sparkle, butterfly, lips, perfume, heel, pearls, rose, washi, cherries, tiara). Provenance: explicit. Lifecycle: initiator — visitor; observable result — composition appears on the page; continuation — visitor adds more items. Acceptance: the book, tray tabs, and item sets match the specification.
FR-33 — Magazine interactions. As a Magazine Collage Creator (Visitor), I should click to add, drag, use scale/rotate/delete/z-order handles, pinch, clamp, undo/redo, clear, and save PNG. Provenance: explicit. Lifecycle: initiator — visitor; observable result — composition updates and exports as PNG; continuation — visitor continues editing or exports. Acceptance: each interaction works; PNG export produces the composed page.
FR-34 — Photography carousel. As a Portfolio Visitor / Recruiter, I should browse 17 photos on paper with pins, no crop (desktop 3–4, tablet 2–3, mobile 1.2–1.5), with credit in DM Mono: Model: Chindy; Photograph & Editing: Jassinta Roid Triniti. Provenance: explicit. Lifecycle: initiator — visitor; observable result — photos render uncropped with credit; continuation — visitor browses all photos. Acceptance: 17 photos render at native ratio with the specified credit.
FR-35 — My Strategy flow. As a Portfolio Visitor / Recruiter, I should read a scrapbook flow with pink dashed path, sticky notes, icons, big numbers, scroll animation, cycle arrow back to step 1, hover/tap detail, intro "My strategy for managing social media content usually consists of several stages.", and 7 steps: Define the Target Market, Define the Style Guide, Build the Content Plan, Shoot & Record, Edit to the Style Guide, Post on Schedule, Analyze & Optimize (chips Engagement, Awareness, Conversion). Provenance: explicit. Lifecycle: initiator — visitor; observable result — all seven steps visible with chips; continuation — cycle arrow returns to step 1. Acceptance: the intro and seven steps render with the specified chips.
FR-36 — Notes page. As a Portfolio Visitor / Recruiter, I should read a spiral notebook in Caveat: "The 3 Keys to Marketing & Content Success: Awareness, Engagement, Conversion", with different-colour highlighters. Provenance: explicit. Lifecycle: initiator — visitor; observable result — three keys readable with distinct highlighters; continuation — visitor closes the overlay. Acceptance: the text matches exactly with distinct highlighters.
FR-37 — Personal Brand structure. As Jassinta Roid Triniti (Portfolio Owner), I should have the structure PersonalBrand > Hero, DocumentCanvas > Document×10 > Logo, data.ts. Provenance: explicit. Lifecycle: initiator — owner; observable result — structure renders; continuation — visitor reads papers. Acceptance: the component structure matches.
FR-38 — Personal Brand hero. As a Portfolio Visitor / Recruiter, I should see Anton left-aligned, lh .9, clamp(3.5rem,2rem+9vw,11rem): WHICH / COMPANIES / HAVE I / WORKED / FOR?, slow parallax; photo right with medium parallax. Provenance: explicit. Lifecycle: initiator — visitor; observable result — hero renders with parallax; continuation — visitor scrolls to papers. Acceptance: the hero text and parallax match the specification.
FR-39 — Ten physical papers. As a Portfolio Visitor / Recruiter, I should see 10 physical papers: 1px black border, 3–4 layer shadow, grain, rotations -3,4,-5,2,3,-2,5,-4,1,-3, "01 / 10", tag, REF-ARC-00X, staple-red staple, logo contain + monogram fallback. Provenance: explicit. Lifecycle: initiator — visitor; observable result — papers render with rotations and refs; continuation — visitor reads each paper. Acceptance: all ten papers render with the specified rotations and reference numbers.
FR-40 — Company list. As a Portfolio Visitor / Recruiter, I should see Elsthetic, Elspresso, Aishi Aesthetic Academy, Karamina Tour, ELS Corp, Aishi Beauty, Lassiewear, inNalar.com, Independen Media, Ikapunija Media, with no logo covered. Provenance: explicit. Lifecycle: initiator — visitor; observable result — all ten companies visible with uncovered logos; continuation — visitor reads each paper. Acceptance: all ten companies render; no logo is covered.
FR-41 — Personal Brand interaction. As a Portfolio Visitor / Recruiter, I should experience desktop parallax rAF + lerp; hover rise 8px, rotation ±1.5°, number/tag cherry-red; mobile 2 columns, parallax off. Provenance: explicit. Lifecycle: initiator — visitor; observable result — hover and parallax behave as specified; continuation — visitor reads papers. Acceptance: desktop hover and parallax match; mobile shows 2 columns with parallax off.
FR-42 — Writing Portfolio hero. As a Portfolio Visitor / Recruiter, I should see "Storytelling" Bold Italic + "Through Screens" Bold, the attached narrative, and 6 1:1 images (imn_1,2; innalar_1,2; ikapunija_1,2), width clamp(110px,19vw,280px), white frames, rotation ±9°, text safe zone, clip-path stagger reveal 120ms, float; tablet 4, mobile 2+2. Provenance: explicit. Lifecycle: initiator — visitor; observable result — hero and images render with stagger; continuation — visitor scrolls to the cassette. Acceptance: the hero text matches the attachment; six images render with the specified width and rotation.
FR-43 — Cassette carousel. As a Portfolio Visitor / Recruiter, I should see a 3D round disc (thick edge, spindle hole, image as mask), large centre slowly rotating, small side discs (rotateY, translateZ, 1px blur), info panel top-left (title, Author, Date DD/MM/YYYY, Media) updating slide-up + fade, big title below, wheel/drag/arrows/keyboard navigation + snap, click = new-tab link (noopener noreferrer), items without link (9–11) = lightbox + chip "No online link", Contents bottom-right, TornEdge, mobile info on top. Provenance: explicit. Lifecycle: initiator — visitor; observable result — info panel updates per slide; linked works open in a new tab; unlinked works show the lightbox chip; continuation — visitor browses all eleven works. Acceptance: the disc, info panel, and navigation behave as specified; items 9–11 show the lightbox chip.
FR-44 — Eleven writing works. As a Portfolio Visitor / Recruiter, I should see 11 works: Independen Media ×4, innalar.com ×4, Ikapunija Media ×3 (2024, no link), with titles, dates, and URLs from the attachment. Provenance: explicit. Lifecycle: initiator — visitor; observable result — all eleven works render with attached metadata; continuation — visitor opens a work. Acceptance: titles, dates, and URLs match the attachment.
FR-45 — Anonymous entry and scroll-lock release. As a Portfolio Visitor / Recruiter, I should reach Opening before the portfolio sections and release the closed-locker scroll lock through OPEN ▶. Provenance: required_inference. Lifecycle: initiator — visitor; observable result — scroll lock released; continuation — visitor scrolls into the portfolio. Acceptance: Opening is the first section; OPEN ▶ releases the lock.
FR-46 — ToC continuation. As a Portfolio Visitor / Recruiter, I should use the ToC to continue across all nine named portfolio sections. Provenance: required_inference. Lifecycle: initiator — visitor; observable result — ToC jumps to the selected section; continuation — visitor reads the section. Acceptance: the ToC lists all nine sections and jumps to each.
FR-47 — Locker item overlay continuation. As a Portfolio Visitor / Recruiter, I should continue from locker items to Participation, Achievement, Magazine Art, Photography, My Message, My Strategy, and Notes. Provenance: required_inference. Lifecycle: initiator — visitor; observable result — the mapped overlay opens; continuation — visitor reads the overlay and closes it. Acceptance: each item opens its mapped overlay.
FR-48 — Magazine composition state and export. As a Magazine Collage Creator (Visitor), I should have the Magazine Art workspace retain composition state during the active local interaction and export the result as PNG. Provenance: required_inference. Lifecycle: initiator — visitor; observable result — composition retained during the interaction; PNG exported; continuation — visitor continues editing or leaves. Acceptance: composition persists during the interaction; PNG export succeeds.
Product context. A brand owner, agency recruiter, or prospective client who arrives from Instagram or TikTok to evaluate Jassinta's fit for social media, content, video, and graphic design work. They are anonymous and have no account.
Primary goal. Understand Jassinta's capabilities, review her credentials and work samples, and reach the Contact section.
Distinct accepted responsibilities. Navigate the section ToC; open the locker doors; open overlays for Participation/Achievement, Magazine Art, Photography, My Message, My Strategy, and Notes; browse the cassette carousel and open linked works or lightboxes; read the Personal Brand company papers; read the Writing Portfolio hero and images.
Relevant inputs or decisions. Which section to visit next; whether to open a locker item; whether to open a linked writing work or view the lightbox; whether to continue to Contact.
Interactions with other accepted participants. Reads the owner's letter, strategy, notes, and credentials; views the owner's photography and magazine art; may hand off to the Magazine Collage Creator role when they choose to compose.
Observable success. They can reach the Contact section and understand her capabilities and platforms.
Product context. The portfolio subject whose work, achievements, writing, photography, and brand collaborations are presented. She is not an interactive user of the site in the current scope; her presence is represented through content.
Primary goal. Have her content, credentials, and contact presence represented accurately and deployably on Vercel.
Distinct accepted responsibilities. Her work is presented across the nine sections and seven overlays; her letter, strategy, notes, photography, magazine art, and company collaborations are the substance of the portfolio.
Relevant inputs or decisions. The content she supplies (letter script, writing works, company list, photography credits, strategy steps, notes text) determines what the site presents.
Interactions with other accepted participants. The Portfolio Visitor / Recruiter reads her letter, strategy, notes, and credentials; the Magazine Collage Creator composes using her photos and elements.
Observable success. The site is live and presents her personal brand, writing portfolio, and creative work as intended.
Product context. A visitor who uses the Magazine Art page to build a fashion magazine collage. They are anonymous and have no account.
Primary goal. Compose a magazine page and export it as a PNG.
Distinct accepted responsibilities. Add photos, text, and elements; drag, scale, rotate, delete, and manage z-order; pinch; clamp; undo/redo; clear; save PNG.
Relevant inputs or decisions. Which photos, text styles, and elements to add; how to arrange them; when to export.
Interactions with other accepted participants. Uses the owner's photos and elements; their composition is local to the active interaction.
Observable success. The composed magazine page can be exported as an image.
intro_video.mp4 card (muted autoplay, "Tap for sound", mute/pause, stops off-screen); L5 shows the "Platform I Am Proficient in:" card. L2 and L4 show items resting on shelves.#/participation, role=dialog, and body lock. The carousel shows white-framed photos on aged-paper with Pushpin; the active title and year update below.noopener noreferrer); items 9–11 open a lightbox with the "No online link" chip.public/assets/{items,locker,video,img,strategy,photos,achievements,brand,pdf} with lowercase, space-free filenames.Muse and headline. Jessica Walsh — scrapbook maximalism, colour-saturated and unapologetically girly. The headline idea: a school locker you open to find a life's work pasted inside a scrapbook.
Mode. Light mode, colour-blocked sections, never white-first except Personal Brand (pure-white #FFFFFF, mandatory).
Core tokens (exact hex by role).
#FDE4EC (powder-pink)#FFF8EE (vanilla)#1B1017 (ink)#FF2E93 (hot-pink)#7B4FB8 (grape-soda)#E8A5B8 (dusty-rose)Section grounds.
#FDE4EC (powder-pink); floor #F7CAD0 (rose-quartz)#FDE4EC (powder-pink)#FFD6E8 (blush) → #D4C1F5 (lilac)#2A0F2E (plum-night) + film grain#D4C1F5 (lilac)#FFF8EE (vanilla) + #7A4A32 (walnut) shelf#FFD6E8 (blush)#FFFFFF (pure-white, mandatory)Sticker palette. Bubblegum #FF8DC7, baby-blue #BFE3F5, butter #FFF1A8, pastel-mint #A8E6CF, peach-fizz #FFB38A.
Secondary text. Grape-soda #7B4FB8 and berry #7A2E5C on light grounds; on plum-night grounds, milk-white #FFFDF9 with hot-pink #FF2E93 and champagne #EBD08C highlights.
Paper neutrals. Aged-paper #F3E3B8, lemon-chiffon #FFF6C9, honey #F6D76B for tags, notes, and labels. Ink #1B1017 for all reading text on paper.
Ratio. ~60% colour-block ground, ~30% paper surfaces, ~10% hot accent — accent is scarce so it stays hot.
Typography.
clamp(2.1rem,1.2rem+3.6vw,4.125rem), line-height 1.02, text-wrap balance, per-word colour blocks rotated ±1–2°.clamp(1rem,.85rem+.7vw,1.556rem), max 58ch, 1.5rem paragraph spacing.clamp(3.5rem,2rem+9vw,11rem); Sentient h1 clamp(2.1rem,1.2rem+3.6vw,4.125rem); h2 clamp(1.6rem,1.1rem+2vw,2.75rem); h3 clamp(1.25rem,1rem+1vw,1.75rem); body Fraunces clamp(1rem,.85rem+.7vw,1.556rem); label DM Mono 11–12px; Caveat clamp(1.2rem,1rem+1vw,1.75rem).Shape language. Sticker-and-paper geometry: die-cut silhouettes with a 2px white cut-line and soft offset shadow, chunky 16–28px radii on cards, pill buttons, capsule chips, torn paper edges, washi-tape strips at ±4–8°, pushpins, spiral bindings, envelope flaps, 3D locker volumes with slab doors and recessed vents. Nothing razor-sharp except the Personal Brand document papers (1px black border, corner staple). Colour-block section boundaries are hard-edged or torn, never gradient-blobbed.
Spacing rhythm. 1.5rem paragraph spacing; section seams carried by TornEdge at clamp(36px,6vw,90px); collage elements rotate 1–9° off a strict 12-column grid.
Imagery style. Collage-first: paper photos with white borders and pins, Polaroids, cut-out sticker SVGs, washi tape, halftone and grain overlays, confetti. Photography is art-directed, high-saturation, and girly — the 17 vintage Cindy shots, the seated portrait, magazine spreads — always contained inside its frame at native aspect ratio, never cropped to fit. Surreal props and colour fields stand in for stock imagery; no generic SaaS illustration, no gradient blobs.
Avoid. Bootstrap-blue or indigo primaries on white; Inter, Roboto, Arial, Helvetica, Open Sans, Lato, Poppins, or system-ui for headings or body; gradient-blob heroes and grids of identical hover-lift cards; cropping any photograph to fill a frame; neutral greys, muted corporate palettes, or white-first sections outside Personal Brand; flat single-layer sticker art without the white cut-line and offset shadow; bouncy or springy easing on entrance motion; covering, clipping, or running readable text and controls off an edge.
The public entry is a full-viewport bank of five CSS-3D school lockers in steel-lilac #B9B8CC against a powder-pink #FDE4EC wall with a rose-quartz #F7CAD0 floor and static confetti, perspective 1800px, outermost doors bled off both viewport edges. The centre locker's door face is the hero canvas: four stacked lines of Sentient set in cqw units, each word sitting on its own rotated colour block — "Content that" on bubblegum #FF8DC7 and baby-blue #BFE3F5, "is Felt," bold italic on butter #FFF1A8 and lilac #D4C1F5, "Shared," bold on pastel-mint #A8E6CF, "Remembered" italic on peach-fizz #FFB38A — with a hot-pink #FF2E93 "OPEN ▶" sticker button pinned beneath, labels in DM Mono. Nothing is centred, nothing is a gradient, and the composition could not be mistaken for a SaaS hero. Activating OPEN ▶ fires confetti (≤24), runs a pink glitter paper-wipe (500–700ms), changes the scene, pops items in progressively, releases the scroll lock, and moves focus; under reduced-motion it collapses to a 250ms crossfade.
Interaction Model: Animated Motion Tempo: expressive Hero Dimensionality: layered_2d
Landing Hero Motion Brief.
NFR-01 — Responsive breakpoints. The layout must support breakpoints <480, 768, 1024, 1440, ≥1920 (max-width), using svh/dvh, safe-area, clamp, and container queries. Provenance: explicit. Rationale: the source specifies these breakpoints and units.
NFR-02 — Input adaptation. Mouse effects must run only under hover:hover; touch must have tap equivalents ≥44px. Provenance: explicit. Rationale: the source specifies input gating and touch target size.
NFR-03 — Reduced motion. Reduced-motion must be respected; the locker opening uses a 250ms crossfade. Provenance: explicit. Rationale: the source specifies reduced-motion behavior.
NFR-04 — Relayout. Layout must be recalculated via ResizeObserver + visualViewport, debounced 100ms. Provenance: explicit. Rationale: the source specifies relayout behavior.
NFR-05 — Overflow. overflow-x: clip must be applied. Provenance: explicit. Rationale: the source specifies horizontal overflow handling.
NFR-06 — Media aspect ratios. Media aspect ratios must always be native; PhotoFrame always uses contain. Provenance: explicit. Rationale: the source specifies no-crop behavior.
NFR-07 — Lazy loading. Assets must lazy load; video must play only when visible, with a maximum of ~6 videos; React.lazy must be used for Flipbook, Magazine, and Archive. Provenance: explicit. Rationale: the source specifies loading behavior.
NFR-08 — Lighthouse mobile targets. Performance ≥70 and Accessibility ≥90 on mobile. Provenance: explicit. Rationale: the source specifies these thresholds.
NFR-09 — Accessibility. Full keyboard support, aria-labels, pink 3px focus, and English alt text. Provenance: explicit. Rationale: the source specifies accessibility requirements.
NFR-10 — Overlay accessibility. Overlay must include focus trap, Esc close, hash #/participation, role=dialog, and body lock. Provenance: explicit. Rationale: the source specifies overlay behavior.
NFR-11 — External link safety. Writing work links must open in a new tab with noopener noreferrer. Provenance: explicit. Rationale: the source specifies link behavior.
NFR-12 — Asset naming. Asset filenames must be lowercase without spaces under public/assets/{items,locker,video,img,strategy,photos,achievements,brand,pdf}. Provenance: explicit. Rationale: the source specifies asset structure.
NFR-13 — Readable text and controls stay whole. Headlines, wordmarks, labels, numbers, cards' text, and controls must stay entirely inside the viewport and their container at 375px, 768px, and 1280px, wrapping or scaling to fit, with no other element covering them. Provenance: explicit (creative direction). Rationale: the direction requires readable text and controls to remain whole at every viewport.
React.lazy for Flipbook, Magazine, and Archive.public/assets/{items,locker,video,img,strategy,photos,achievements,brand,pdf}.achievements.ts, data.ts).Assumptions.
vintage_cindy_1..17.jpg), 10 logo files (logo_1..10.png), foto_jassinta_duduk.png, and comic_rush.pdf are available under the specified asset directories.intro_video.mp4 file is available at 1080×1920.Constraints.
#FFFFFF (mandatory).intro_video.mp4 1080×1920 must not be cropped.hover:hover; touch equivalents must be ≥44px.public/assets/{items,locker,video,img,strategy,photos,achievements,brand,pdf}.#/participation, role=dialog, and body lock.noopener noreferrer.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!