Rebuilt embed-example.html with inline, full-screen, and popup examples.
Fixed host-page/frame scrolling and contained reply navigation.
New logins now transactionally replace prior sessions; displaced clients
return to login.
Added per-user session/IP locking with automatic SQLite migration.
Added modular Spam Control dashboard for locks, honeypot, and CAPTCHA
settings.
Moved CAPTCHA controls out of Plans & Platform.
Records one finalized WebM instead of 250ms fragments.
Waits for final audio data before releasing the microphone.
Handles startup/finalization failures cleanly.
Bumped frontend cache version to .8.
Verified JavaScript syntax, JSON, browser rendering, and no console
errors. Existing uploaded clips remain unchanged. A real microphone test
wasn’t available in the browser runner.
References: MDN MediaRecorder, Chromium WebM metadata issue.
Per-tier audio bitrate: Free 64, Plus 96, Pro 128 kbps.
Configurable text/voice reply threads and depth.
Registration/login-only honeypot and internal CAPTCHA.
Optional Google reCAPTCHA v2/v3 with server verification.
Archive/export support for replies and bitrate.
Dashboard controls for all settings.
Verified JavaScript, JSON, SQLite migrations, desktop/mobile UI, and
browser console. Native PHP lint was unavailable because PHP is not
installed.
Google implementation follows Siteverify and reCAPTCHA v3.
Sent messages wait for polling to catch up before rendering.
Missing interleaved messages cannot appear above later ones.
Messages sort by server timestamp, then ID.
Timestamps are assigned atomically during SQLite insertion.
Client updated to 20260609.5.
One ID-keyed message ledger now handles sends and polls.
Messages are always sorted by server ID, latest at bottom.
Duplicate DOM rows and voice players are removed.
Poll cursors advance only from validated received messages.
Voice autoplay queues each received clip once.
Added exact user_id ownership tracking.
Cache-busted client to 20260609.4.
Groups is fully removed:
No homepage navigation, Account feature, tier setting, API, or client
code.
Legacy group tables, entitlements, messages, voice files, and config are
purged automatically.
New cache-busted client: cyberchat-app.js?v=20260609.3.
Browser and SQLite migration tests passed with no console errors.
Replaced polling with a single queued cursor worker, timeout recovery,
backoff, deduplication, chronological insertion, and capped DOM history
in cyberchat-v4.js.
Removed Groups UI, API, configuration, tier features, admin controls,
and archive exposure.
Legacy group records remain stored but inaccessible.
Added configurable polling limits in config.json.
Fixed polling after voice/text sends.
Changes include:
Stalled polls abort and retry automatically.
Polling now schedules after each completed request.
Local sends no longer advance the server cursor and skip interleaved
messages.
Sends trigger immediate reconciliation.
API requests bypass browser caches.
Plans & Platform > Plans, Prices & Entitlements > Groups Available for
each tier.
Config > Feature Availability > Groups Enabled as the global master
switch.
When disabled:
Group navigation and channel selector are hidden.
Group API operations are blocked.
Active sessions update automatically.
Existing groups and messages remain preserved.
Static and browser tests passed with no console errors.
Admin tier assignment without payment via Users > Edit > Tier Override.
Fixed live group membership refresh, polling, unread indicators, and
incoming voice clip population.
Added asset cache busting so clients receive the fixes immediately.