tools/llm-oneshot/apps/chat-app/prompts/composed/15_mentions.md
Create a real-time chat app.
Important: Each feature below includes a "UI contract" section specifying required element attributes for automated testing. You MUST follow these — they define the user-facing interface. Your architecture, state management, and backend design are entirely up to you.
UI contract:
placeholder contains "name" (case-insensitive)button with text "Join", "Register", "Set Name", or type="submit"button with text containing "Create" or "New" or "+"placeholder contains "room" or "name" (case-insensitive)placeholder contains "message" (case-insensitive)button with text "Join"button with text "Leave"UI contract:
UI contract:
UI contract:
UI contract:
button with text "Schedule" or aria-label containing "schedule", or an icon button with title containing "schedule"input[type="datetime-local"] or input[type="time"] or input[type="number"] for setting the send timebutton with text "Cancel" next to pending scheduled messagesUI contract:
select, button, or input with text/label containing "ephemeral", "disappear", or "expire" (case-insensitive)UI contract:
button with emoji text (👍 ❤️ 😂 😮 😢) or a button with text "React" / aria-label containing "react" visible on message hovertitle attribute on reaction element showing voter namesUI contract:
button with text "Edit" visible on hover over own messagesinput or textarea replaces the message content during editing, with a "Save" buttonUI contract:
button with text "Members" or "Manage" in the room headerbutton with text "Kick" next to non-admin membersbutton with text "Promote" next to non-admin membersUI contract:
select or group of button elements with text "Online", "Away", "Do Not Disturb" / "DND", "Invisible"UI contract:
button with text "Reply" or "💬" visible on message hoverinput or textarea with placeholder containing "reply" (case-insensitive) in the thread panelUI contract:
input[type="checkbox"] or button with text/label containing "Private" during room creationbutton with text "Invite" in the room header or members panelbutton elementsbutton with text "DM" or "💬" next to user names in the user listUI contract:
UI contract:
UI contract:
button with text "Guest" or "Anonymous" or "Join as Guest", OR the app auto-assigns a name like "Guest-XXXXX" or "Anon-XXXXX"button with text "Register" or "Sign Up" visible to guest usersinput with placeholder containing "name" or "username" for choosing a display nameUI contract:
button with text "Pin" or aria-label containing "pin" visible on message hoverbutton with text "Pinned" or "Pins" in the channel header, opening a panel listing all pinned messagesbutton with text "Unpin" on pinned messages (in the panel or on hover)UI contract:
button with text "Edit Profile" or "Profile" or a settings/gear icon accessible from the sidebarinput or textarea with placeholder containing "bio" or "status" (case-insensitive)@usernameUI contract:
@username text in messages is visually distinct (bold, colored, or wrapped in a styled span)button with text "🔔" or aria-label containing "notification" visible in the sidebar or headerbutton with text "Mark Read" or "Mark All Read" in the notification panel