Add ChatEBT: Interactive chat app with customizable personalities - #1
Add ChatEBT: Interactive chat app with customizable personalities#1naes993 wants to merge 20 commits into
Conversation
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: deffa80326
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| await new Promise(r => setTimeout(r, 700 + Math.random() * 1000)); | ||
| removeTypingIndicator(); | ||
| const pool = personality.responses; | ||
| addBubble(pool[Math.floor(Math.random() * pool.length)], 'bot'); |
There was a problem hiding this comment.
Cancel pending bot reply when chat is reset
If the user sends a message and immediately taps reset during the artificial delay, handleSend() still continues after await and appends a bot response to the freshly reset chat. Because resetChat() does not invalidate in-flight sends, users can get an unexpected “ghost” reply after reset, which breaks the reset semantics and can also respond with a different personality if one was loaded in the meantime.
Useful? React with 👍 / 👎.
Replace the synthetic Web Audio chirp with the uploaded reply notification sound, unlocking HTMLAudioElement playback on send so it works on iOS/Safari. Co-authored-by: McKenna <naes993@users.noreply.github.com>
Keep the default single-persona experience (EBT chat only) until a second personality JSON is added, then unlock the contacts/threads UI. Co-authored-by: McKenna <naes993@users.noreply.github.com>
0f80adb to
7922a24
Compare
Replace the persona emoji header with the classic Chat{name} title,
tagline, and Load/Reset buttons while keeping multi-thread back nav.
Co-authored-by: McKenna <naes993@users.noreply.github.com>
Logo opens the chat list; Start New Chat loads personalities; swipe or long-press removes threads. Hidden 10-tap / 10s-hold on the logo unlocks admin CRUD for packs and personas with localStorage persistence. Co-authored-by: McKenna <naes993@users.noreply.github.com>
Co-authored-by: McKenna <naes993@users.noreply.github.com>
Replace hard view swaps with a transform-based panel slide so opening threads from the logo feels like a native messaging app. Co-authored-by: McKenna <naes993@users.noreply.github.com>
Replace the + file picker with a bottom sheet: choose a pack, then a persona. JSON import stays in admin. Empty threads get a Start a chat CTA. Co-authored-by: McKenna <naes993@users.noreply.github.com>
Rename the list to Chats with relative timestamps, snappier slide-over with a tappable dim edge, delete confirm plus Undo toast, persistent Admin chip after unlock, and export/import backup with schema version. Co-authored-by: McKenna <naes993@users.noreply.github.com>
Browse packs as a cast grid from Chats; tapping a persona starts a chat. Show the tagline once, then replace it with a small About sheet entry. Co-authored-by: McKenna <naes993@users.noreply.github.com>
Plus opens Compose (add persona, new chat, import JSON) into My Personas. Browse stays discovery-only. Personas can point at a local agent-bridge endpoint for Hermes/OpenClaw replies with canned fallback. Co-authored-by: McKenna <naes993@users.noreply.github.com>
Summary
This PR introduces ChatEBT, a fully-functional single-page chat application with a dark-themed UI and support for custom bot personalities. The app features a responsive design optimized for mobile, real-time message handling, and audio feedback.
Key Changes
index.html): Complete chat interface with message bubbles, typing indicators, and a textarea input with auto-expanding heightsound-test.html): Interactive tool to test different audio chirp variationsexample-personality.json): Sample custom personality configuration demonstrating the JSON formatNotable Implementation Details
visualViewportAPI for accurate mobile viewport height handling, with fallback towindow.innerHeightresponsesarrayhttps://claude.ai/code/session_01Qx64it4r4wcqsryHKbS1cH