Tools
Soft Signal
A private, non-diagnostic seven-scene emotional check-in drawn from 25 original everyday photographs.
The original prompt.
Copy it. Add your own twist.
Read the complete original prompt
APP NAME Soft Signal APP IDEA Build a calm, private, mobile-first emotional check-in that uses original everyday scene photographs and gentle questions to help a user notice what feels present. It does not diagnose, score, classify, treat or replace professional support. The experience stays on the device and asks for no identity or free-text disclosure. CORE EXPERIENCE Open directly into the live check-in in English with progress such as "1 of 7", one life-scene photograph, its reflective question, Not Me, Feels Like Me, Not Sure and Undo. Include a small always-available "Need immediate help?" safety link that opens an inline panel rather than leaving the app. Keep the photo, question and three primary responses visible and usable without an initial downward scroll. INTERACTION AND STATE - A check-in samples exactly 7 unique stable IDs from the 25-scene pool. It is a short session, not 25 steps, and progress never says "of 25". - Swipe left or press Not Me, swipe right or press Feels Like Me, swipe up or press Not Sure. Lock transition input so every card resolves exactly once. Undo restores the previous scene and answer without resampling or reordering. - After the seven initial cards, revisit at most two Not Sure cards using the same image and a shorter localized yes/no paraphrase derived from the original question. Do not add more than two revisits. Then show the result immediately. - Result reflects two to four ordinary feeling words associated with the user's Feels Like Me answers, phrased as possibilities such as "What may be present" rather than a category or diagnosis. Offer exactly one low-pressure action chosen from: drink water and pause, step outside for three minutes if safe, send a simple check-in to a trusted person, make the next task smaller, or prepare for rest. Show a short explanation, Replay, Delete this check-in and Share before optional details. Share uses only a neutral user-chosen summary card and never includes raw answers unless the user explicitly confirms. - If answers are mixed or sparse, say that clearly and offer a neutral pause; never force a mood label. Do not calculate a mental-health score, severity, personality type, prediction or streak. - The immediate-help panel says, in complete English and Chinese: if the user may hurt themselves or someone else or cannot stay safe, contact local emergency services now and reach out to a trusted person who can stay with them. Do not show a country-specific number, claim that the app monitors risk, or resume the normal result flow from that panel until the user explicitly closes it. - Persist locale, scene IDs and order, current index, answers, revisit queue and result only in localStorage when available, with a non-blocking in-memory fallback. Refresh preserves the current session. Replay creates a new seven. Delete clears the stored check-in immediately. VISUAL AND CONTENT DIRECTION Create a quiet editorial-journal atmosphere with warm paper, deep plum ink, muted sage, mist blue, generous breathing room, subtle translucent color fields and minimal motion. Photography should feel observed and human without exposing identities. Avoid clinical dashboards, therapy branding, mood scores, emoji walls, mystical predictions, gamification, streak pressure, generic gradients or a decorative phone frame. Produce exactly 25 final original 4:5 portrait WebP photographs at 800 x 1000 in public/scenes/scene-001.webp through scene-025.webp, matched one-to-one to M01-M25. Generate sequentially in three build-time batches of at most 10: M01-M10, M11-M20, M21-M25. Complete and save each batch before the next. Retry only missing or invalid IDs. Final public/scenes contains exactly these 25 WebP files and no PNG masters or superseded copies. Every file must be publicly loadable, non-empty, exact 4:5, no more than 300 KB and visually unique. GLOBAL PHOTO BIBLE: original photoreal everyday-life editorial photography with plausible natural or practical light, tactile home and public-space details, restrained color and materially different scenes. People appear only as anonymous hands, backs, distant silhouettes or naturally obscured figures; never show identifiable faces. No external images, downloads, third-party sources, runtime generation, text baked into images, readable device screens, letters, logos, watermarks, brands, celebrities, recognizable characters, copyrighted artwork, official campaign imagery, graphic crisis imagery, self-harm depiction, unsafe-edge imagery or living-photographer imitation. Questions, feeling words and alt text remain accessible HTML outside images. SCENE AND QUESTION MANIFEST M01 | /scenes/scene-001.webp | Q: When messages pile up, do you feel pressure before you even open them? | 问:消息堆积时,你是否还没点开就已经感到压力? | tags=overwhelmed,avoidant | PHOTO: a phone with only abstract unread dots beside a dark bedside lamp, no legible interface, hands or brand. M02 | /scenes/scene-002.webp | Q: Has caring for yourself felt harder than it usually does? | 问:照顾自己是否比平时更费力? | tags=depleted,tired | PHOTO: an untouched simple breakfast cooling in gentle morning light, empty chair, no packaging or text. M03 | /scenes/scene-003.webp | Q: Do busy places leave you feeling more drained than connected? | 问:身处拥挤的地方时,你是否更容易疲惫,而不是感到连接? | tags=overstimulated,withdrawn | PHOTO: one anonymous commuter in sharp rear silhouette while a station crowd moves softly around them, no faces or signs readable. M04 | /scenes/scene-004.webp | Q: Are too many unfinished tasks competing for your attention? | 问:是否有太多未完成的事情同时争夺你的注意力? | tags=scattered,overwhelmed | PHOTO: a desk with layered blank cards, open notebook pages without writing and multiple warm task lights, no screen text. M05 | /scenes/scene-005.webp | Q: Have you been wanting quiet more than conversation? | 问:最近你是否比起交谈,更想要安静? | tags=quiet,withdrawn | PHOTO: rain tracing a window beside an empty armchair and folded blanket, cool blue evening, no person. M06 | /scenes/scene-006.webp | Q: Does your week feel full before it has even begun? | 问:这一周还没开始时,你是否就已经觉得被塞满了? | tags=pressured,anticipatory | PHOTO: a wall planner represented only by dense colored blocks with no letters or numbers, hand hovering with a blank card. M07 | /scenes/scene-007.webp | Q: Are you postponing something you normally enjoy? | 问:你是否在推迟一件平时会享受的事? | tags=flat,avoidant | PHOTO: clean walking shoes resting unused beside a sunlit doorway, soft dust motes and no labels. M08 | /scenes/scene-008.webp | Q: Can you feel lonely even when other people are nearby? | 问:即使身边有人,你是否仍会感到孤单? | tags=lonely,disconnected | PHOTO: an original dinner table with one untouched place setting in focus and anonymous guests blurred far behind, no visible faces. M09 | /scenes/scene-009.webp | Q: Are small chores feeling bigger than they are? | 问:一些小事是否感觉比实际更难面对? | tags=depleted,stuck | PHOTO: a modest pile of laundry beside a half-open basket in soft daylight, ordinary home scene without dramatic mess. M10 | /scenes/scene-010.webp | Q: Do you reach for your phone before checking in with yourself? | 问:你是否会先拿起手机,却忘了先感受一下自己? | tags=restless,distracted | PHOTO: phone face down on a bedside table at sunrise, anonymous hand paused nearby, no logo or screen content. M11 | /scenes/scene-011.webp | Q: Does moving your body feel appealing but difficult to begin? | 问:你是否想活动身体,却很难开始? | tags=restless,stuck | PHOTO: a plain gym bag and water bottle beside a bright doorway, no branding or human figure. M12 | /scenes/scene-012.webp | Q: Did a small moment of connection stay with you today? | 问:今天是否有一个微小的连接时刻留在了你心里? | tags=connected,warm | PHOTO: anonymous hand holding a phone after a call with only soft color shapes on screen, warm window reflection, no text or face. M13 | /scenes/scene-013.webp | Q: Is there an idea you still want to make room for? | 问:你心里是否还有一个想为它腾出空间的念头? | tags=hopeful,creative | PHOTO: an unfinished abstract color sketch, clean brushes and one empty section of paper, no writing or artist imitation. M14 | /scenes/scene-014.webp | Q: Would a little distance from today help you breathe? | 问:和今天稍微拉开一点距离,是否会让你更容易呼吸? | tags=restless,need-space | PHOTO: anonymous person from behind taking a quiet dusk walk on a wide riverside path, ample open sky and no identifiable face. M15 | /scenes/scene-015.webp | Q: Does rest feel possible tonight? | 问:今晚你是否觉得自己有可能真正休息一下? | tags=calm,ready-to-rest | PHOTO: neatly turned-down bed with a warm lamp and open curtain, quiet realistic bedroom with no person. M16 | /scenes/scene-016.webp | Q: Did making or sharing something give you a little energy? | 问:制作或分享某样东西,是否给了你一点能量? | tags=energized,connected | PHOTO: anonymous hands placing two bowls of home-cooked food on a table, natural steam and no packaging. M17 | /scenes/scene-017.webp | Q: Are you carrying uncertainty about what comes next? | 问:你是否正背着一种对下一步的不确定感? | tags=uncertain,anxious | PHOTO: an unopened plain suitcase beside a softly lit hallway junction, no tickets, labels or readable signs. M18 | /scenes/scene-018.webp | Q: Have you noticed one small sign that things are changing? | 问:你是否注意到一个微小的变化迹象? | tags=hopeful,attentive | PHOTO: a new leaf unfolding on a houseplant beside an anonymous watering hand, bright natural macro detail. M19 | /scenes/scene-019.webp | Q: Do social plans feel harder to enter than they looked on paper? | 问:真正进入社交场合时,是否比计划时更费力? | tags=hesitant,overstimulated | PHOTO: view from a quiet hallway into a softly blurred gathering, one anonymous figure paused at the threshold, no faces. M20 | /scenes/scene-020.webp | Q: Have you been pushing through after your energy ran out? | 问:在精力已经耗尽后,你是否还在硬撑? | tags=exhausted,pressured | PHOTO: a cold mug beside a dim laptop showing only abstract gradients, late-night desk and no readable interface. M21 | /scenes/scene-021.webp | Q: Did your body give you one clear moment of ease today? | 问:今天你的身体是否曾有过一个清晰的放松时刻? | tags=grounded,relieved | PHOTO: anonymous hands stretching into a rectangle of morning sunlight on a wooden floor, no fitness branding. M22 | /scenes/scene-022.webp | Q: Are you measuring today only by what remains unfinished? | 问:你是否只用还没完成的事情来衡量今天? | tags=self-critical,pressured | PHOTO: a row of blank sticky notes with several gently removed and one crumpled nearby, no letters or symbols. M23 | /scenes/scene-023.webp | Q: Did someone make a difficult moment feel less lonely? | 问:是否有人让一个艰难的时刻没那么孤单? | tags=supported,connected | PHOTO: two anonymous figures sharing a plain umbrella from behind on a rainy path, warm street reflection, no faces. M24 | /scenes/scene-024.webp | Q: Are you craving space without wanting to disappear from your life? | 问:你是否只是渴望一些空间,而不是想从生活中消失? | tags=need-space,reflective | PHOTO: anonymous seated figure at a safe broad ocean overlook in daylight, barrier outside frame implied by stable platform, no perilous edge. M25 | /scenes/scene-025.webp | Q: Would one gentle ritual help mark the end of today? | 问:一个温和的小仪式,是否能帮你为今天画上句号? | tags=ready-to-rest,grounded | PHOTO: anonymous hands making tea in a plain ceramic cup under warm evening light, no package, label or readable text. OUTCOME A gentle, non-diagnostic reflection naming a few possible feelings and one small next action, with clear privacy and immediate-safety boundaries. ONE-SENTENCE INSTRUCTION Swipe left for not me, right for feels like me, or up when you are not sure. TASK-SPECIFIC REQUIREMENTS - generatedRealImageAssets=true; assetCountPerApp=25; roundItemCountPerApp=7; uncertainRevisitMaximum=2. - This is not medical advice, diagnosis, crisis monitoring or therapy. Do not add free-text journaling, model inference, AI chat, a chatbot, risk scoring or external health claims. - Every question, feeling word, action, safety sentence, fallback label and accessibility string requires complete English and Simplified Chinese. Use semantic answer records rather than formatted English history so the whole interface switches cleanly. - Support touch, mouse and keyboard parity, visible focus, descriptive bilingual alt text, aria-live feedback and reduced motion. Implement localized image fallback, sparse-answer, storage-unavailable and generic error states. - No account, upload, analytics, tracking, notification, cloud sync, external API or personal-data collection. IMPLEMENTATION INSTRUCTIONS Treat this specification as the final implementation brief and build the complete app now. Open directly into the live app experience. Do not add a splash screen, opening cover, welcome page or separate onboarding flow. Include exactly one concise sentence that explains how to play or use the app. Use the sentence provided under ONE-SENTENCE INSTRUCTION. Show it inside the live app interface, not on a separate opening screen. Internationalization is required. Implement a lightweight built-in i18n layer supporting exactly two locales: English (en) and Simplified Chinese (zh). The app must always open in English and must never auto-detect or follow the browser, device or system language. Provide one clear EN / 中文 language toggle. Every user-facing string, including the one-sentence instruction and all loading, empty, success, error and result states, must have complete English and Chinese versions. Switching languages must update the entire interface without mixed-language text or untranslated fallback strings. Let Eazo adapt the app to its actual host and available viewport. Do not hard-code or target a particular browser size, device size, viewport width or height, App frame size, root-height formula, or host-container CSS implementation. In the live preview, keep the current primary action easy to discover and usable without requiring an initial downward scroll; avoid horizontal overflow and avoid decorative layers blocking required controls. Optional detail may scroll. Keep active media and secondary copy compact enough that the next action remains visible. In result states, show the summary plus Replay and Share before optional detail. Do not eagerly render a large collection of full-size result images in one long page; use a compact summary, carousel, pagination, expansion, or virtualization. Use accessible touch targets. Respect the host safe areas for iPhone notches, Dynamic Island, the status bar and the bottom home indicator in the initial implementation, before the first preview. Keep the header, language toggle, primary controls and result actions entirely inside the usable safe area. In the standard Eazo mobile host, use `padding-top: max(56px, env(safe-area-inset-top, 0px))` and `padding-bottom: max(34px, env(safe-area-inset-bottom, 0px))`, or Eazo's current official safe-area equivalent. These are safe-area insets only, not fixed viewport or App-frame dimensions; continue to let Eazo adapt the overall width and height. Make sure flex children can shrink inside the remaining usable area and that required controls are not covered or pushed off screen. Use Eazo's built-in defaults and official platform capabilities. Do not add unrelated features or expand the scope beyond this specification. When implementation is complete, provide a working preview for QA. REAL-IMAGE RUNTIME DELIVERY, DISPLAY AND PREDECODE This is a generated real-photo asset app, so implement all requirements in this section before providing the first preview. Apply them only to this app. Do not turn them into a reusable gameplay template and do not add card, swipe, random-round, seven-step, or duel mechanics unless this app's own specification requires them. During the build, the image generator may create temporary high-resolution masters, but the final public runtime directory must contain exactly the required N high-quality WebP assets and no superseded PNG copies. Keep every stable content ID and every data, cover-preview and fallback path mapped to its matching `.webp` file. Never send multi-megabyte PNG masters to the user. For a 2:3 image displayed at up to about 360 CSS pixels wide in the standard Eazo mobile host, use 800 x 1200 WebP at about quality 82 as the proven baseline. If this app renders images at a different size or ratio, export at roughly twice the actual maximum rendered CSS width while preserving the exact intrinsic ratio. Target 200 KB or less per runtime image and treat 300 KB as the hard maximum unless this specification explicitly justifies a larger asset. Serve these local WebP files directly from stable `public/` URLs and do not make image visibility depend on the `/_next/image` optimization service. If this Next.js project has an `images` configuration, keep `images.unoptimized: true` for this direct-static-asset path. Prefer a native `<img>` for the visible card, comparison and result image, with the current image loaded eagerly and `decoding="async"`. For a height-driven 2:3 layout, use an image that participates in layout, such as `height: 100%; width: auto; max-width: 100%; object-fit: contain; aspect-ratio: 2 / 3`. Never combine `next/image` `fill` with a parent whose width is `auto` or content-derived: the absolutely positioned image does not size that parent and the image region can collapse to zero width. If `fill` is used anywhere else, its positioning parent must have explicit non-auto width and height and the rendered image must be proven to have non-zero dimensions. When an active round or immediate sequence is small enough that its compressed runtime images total about 1 MB or less, start preloading and decoding every remaining image in that active round as soon as the round is created. Use `new Image()`, assign the direct WebP URL, call `decode()` when available, and keep a module- or session-level `Set` of warmed source URLs so each image is fetched and decoded only once. This rule applies to the active round, including images that may appear in comparisons or results, not to the complete 25-image pool. For a larger immediate sequence, use a bounded byte-budget window rather than preloading the whole pool, and make it wide enough that rapid consecutive actions never expose a blank or waiting image. Keep a clean named fallback for load failure. Do not add a runtime image-generation API, external URL, hotlink or third-party image service.