tools/llm-oneshot/apps/chat-app/prompts/composed/09_private_rooms.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 list