Skip to content

Add ChatEBT: Interactive chat app with customizable personalities - #1

Open
naes993 wants to merge 20 commits into
mainfrom
claude/create-chatEBT-app-9ItsP
Open

Add ChatEBT: Interactive chat app with customizable personalities#1
naes993 wants to merge 20 commits into
mainfrom
claude/create-chatEBT-app-9ItsP

Conversation

@naes993

@naes993 naes993 commented May 26, 2026

Copy link
Copy Markdown
Owner

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

  • Main chat application (index.html): Complete chat interface with message bubbles, typing indicators, and a textarea input with auto-expanding height
  • Personality system: Load custom bot personalities from JSON files with configurable name, avatar, accent colors, greeting, and response pool
  • Audio feedback: Web Audio API integration for chirp sound on message responses with audio context unlock handling
  • Responsive design: Mobile-first layout using CSS custom properties, safe area insets, and viewport height synchronization for proper mobile browser behavior
  • Toast notifications: Non-intrusive feedback system for user actions (reset, file upload, errors)
  • Sound testing utility (sound-test.html): Interactive tool to test different audio chirp variations
  • Example personality (example-personality.json): Sample custom personality configuration demonstrating the JSON format

Notable Implementation Details

  • Uses visualViewport API for accurate mobile viewport height handling, with fallback to window.innerHeight
  • Implements textarea auto-resize with max-height constraint (110px)
  • Typing indicator with CSS keyframe animation for natural conversation feel
  • Random response delay (700-1700ms) to simulate realistic bot behavior
  • File upload validation ensures JSON has required responses array
  • Supports keyboard shortcuts (Enter to send, Shift+Enter for newline)
  • Comprehensive CSS custom properties for easy personality theming (accent colors, backgrounds, borders)

https://claude.ai/code/session_01Qx64it4r4wcqsryHKbS1cH

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 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".

Comment thread index.html Outdated
Comment on lines +545 to +548
await new Promise(r => setTimeout(r, 700 + Math.random() * 1000));
removeTypingIndicator();
const pool = personality.responses;
addBubble(pool[Math.floor(Math.random() * pool.length)], 'bot');

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge 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 👍 / 👎.

@naes993
naes993 temporarily deployed to github-pages May 26, 2026 14:37 — with GitHub Pages Inactive
naes993 and others added 2 commits May 26, 2026 14:23
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>
@cursor
cursor Bot force-pushed the claude/create-chatEBT-app-9ItsP branch from 0f80adb to 7922a24 Compare July 21, 2026 19:13
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>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants