- Status
- TikTalk 2.4.1.0 is live and now dark throughout: every page bar the OBS browser sources has moved to dark backgrounds with contrasting text, cards and boxes (PR #28, deployed and verified on production 2026-09-18, no version bump), the LIVE page is now three columns -- chat on the left, a second column for gifts, follows, likes and joins so they stop burying the conversation, and the room numbers in a narrower rail beside them (PR #29, deployed and verified on production 2026-09-18, no version bump) -- with display pictures and a comment box that posts into the room, /stats has retired into that rail, Analytics and Admin have moved out of the Settings menu into the app bar beside LIVE and the LIVE connection, TikTok connection and account details pages have folded into one Account page that /connection and /tiktok still reach (PR #30, deployed and verified on production 2026-09-18, no version bump), the interactions column is now one colour-coded line per event -- a type tag in one of eight colours, the nickname truncated, the number pushed right -- and every chat row control including Read again sits behind one Actions menu that floats over the feed instead of reflowing the row open (PR #31, deployed and verified on production 2026-09-18, no version bump), and cross-site request forgery is closed on 16 API routes including ban and mute, and the hype train now flashes gold for its full three seconds on the row that earned it and then clears itself, so the next train fills from empty instead of two viewers trading a single carriage and setting the overlay flashing between them (PR #32, deployed and verified on production 2026-09-18, v2.4.1.0), and the whole site and app have moved onto the Waveform design system: one palette in tokens instead of eighteen hand-rolled ones, Atkinson Hyperlegible Next throughout in place of Space Grotesk, and three themes -- dark, a WCAG AAA high-contrast theme, and light -- which follow the device by default through CSS alone, so the marketing site honours a light or high-contrast preference while still shipping no JavaScript, with a control in the footer and on the Account page to override it; the migration turned up fourteen contrast faults that only the light theme exposed, including the whole sign-in family rendering near-white text on white cards, and the gates that now hold it run per theme rather than once (PR #43, deployed and verified on production 2026-09-19, no version bump), and the top bar, the marketing header and the menus that drop out of them now carry a deep gradient too, with every gradient reversed to run dark on the left to lighter on the right and split in two -- a deeper pair for the chrome, which frames a page, and the original lighter pair for the heroes and heading bands, which carry headings; the connection control had to move off --accent to do it, because in the light theme that is the same dark green the bar had become and the control was left with no edge against its own bar at all. Connecting to a LIVE that was not running then turned up two more: a failed connection looked exactly like 'ready to connect', since there was no error style at all and the reason was only ever announced, so it now carries the danger tone, an error icon and the reason written under the bar; and the reason itself was whatever the upstream API sent, which is how "The requested user isn't online :(" reached the screen -- the app's own wording wins now when it knows as much, and upstream's is kept, tidied and given a sentence about what to do next when it knows more. The LIVE rail's counters lost their qualifiers (Total viewers and New followers are Viewers and Followers, which is also what a tile says when pressed) and are centred in their tiles, and a viewer's name truncates rather than breaking mid-word (deployed and verified on production 2026-09-19, no version bump). A Demo mode is live (PR #44, deployed and verified on production 2026-09-20, v2.5.0.0, all three CI checks green including the end-to-end accessibility suite): a scripted looping LIVE entered from the Settings menu, fed through the real speech, sound-alert and OBS pipeline rather than a parallel one, so a creator can hear how TikTalk sounds, learn the page or tune a voice against activity that is actually happening -- and without a TikTok account connected, which is the point, since the first audience is people who have signed up and have nothing to listen to yet. Simulated activity is fenced off from real account data at five writes; settings changes deliberately still save. Review caught three real bugs before it went up, all of the same shape -- simulated data reaching, or misrepresenting, the real world without saying so: the fence leaked for one render on exit, the demo flag crossed into a tab opened from a demo so it ran with /activity in the address bar and nothing announced it, and exiting could POST the whole simulated scene into the real activity log of any account whose log was empty, which is exactly the audience it is for. A follow-up went out the same day as v2.5.1.0 (PR #45, deployed and verified on production 2026-09-20): settings tuned inside a demo were reverted when it ended, but only when the demo was opened at /demo directly or survived a refresh -- on that route the app never armed the save, so nothing tuned reached the account, and leaving pulled the older settings back down over it and then saved those, so the change was gone for good rather than just off the screen. v2.6.0.0 followed (PR #46, deployed and verified on production 2026-09-20): the LIVE page's chat and interaction columns are announced as lists again -- both were marked as logs in a way that overrode their own list nature, so a screen reader had stopped counting the rows entirely, no "list, 40 items" and no "item 12 of 40" while moving through them; they are still logs and still silent by design, since the reader speaks new activity and the page must not announce it twice. The fault predated demo mode by months and was only ever found because demo mode is the first thing that fills a log on demand, so the first accessibility scan to see a populated one. Both footers now also carry the version and the build it came from, so a problem can be reported against a build rather than a guess. TikTalk has since moved to its own domain: the app is at ttlk.live and the API at api.ttlk.live, deployed and verified on production 2026-09-20 (no version bump), with the email addresses left on blinddrummer.uk so support@ still routes feedback and james@ is still the admin. The old tiktalk.blinddrummer.uk stays attached and allowed through the cutover so a reader whose tab is still on it does not have their live stream cut mid-stream. The move turned up that ttlk.live had already been pointed at the web service before the app knew about it, which meant the API was refusing the live stream from the new origin and anyone arriving there got a page that loaded and then would not read TikTok LIVE rankings are live (merged 639e3d0, deployed and verified on production 2026-09-23, no version bump), from EulerStream's rankings catalog add-on: Analytics now has Your rankings -- every leaderboard the creator appeared on, each with a spoken-style summary sentence then a Date / Position / Score table, over 7 days, 30 days or all available -- and a new Rankings page in the top bar reads any of 73 countries' Daily, Fans Team, Sales or League board on any day and looks any creator up by name, all tables and sentences rather than charts, beta and admin accounts only, with a shared cache and a 30-a-minute per-account limit so one user cannot spend EulerStream's allowance for everyone. A Windows CAPTCHA helper for blind creators was designed and scrapped the same day. The LIVE page now reaches the whole last 24 hours rather than the newest 200-500 (merged b992dcf, deployed and verified on production 2026-09-23, no version bump): the newest 200 load first and scrolling back to the top of a column, or moving keyboard focus onto its oldest message, loads 200 more at a time (0d8d67b, deployed the same day, replacing visible buttons that had first sat at the foot of the page and then at the top of each column), with a Load earlier link in each column that stays hidden until focused so screen reader users in reading mode are never locked out, and Start of the last 24 hours shown at the end, announced as it loads, keeping the reader's place in both columns; it also appears mid-LIVE once older events scroll off. Viewers' display pictures are now saved with the creator's account as links on EulerStream's permanent image CDN for 30 days after each viewer was last seen, so pictures follow a creator to any computer instead of living in one browser; image files are never stored. The AI assistant now runs songs and moderation by push to talk (PR #66, merged dd54e77, deployed and verified on production 2026-10-12, beta accounts): "Kit play / queue / remove / wrong one", skip and pause, mute on a ladder of 5 m, 10 m, 30 m, 1 h, then the rest of the LIVE (shared with the Mute button, which now starts at 5 minutes instead of the whole LIVE), block, and U to undo; every AI mute and block is asked first, naming the real @handle, after security review showed lookalike names could not be filtered reliably. After a song request or Kit's play ends, the host's own Spotify playlist now carries on at its next song instead of stopping (PR #67, merged 4f0cab8, deployed and verified on production 2026-10-12); requests stay manual, and with no playlist playing Spotify's Autoplay fills the gap. Premium voices step 2 is live (merged 59ce2ef, deployed and verified on production 2026-10-14, admin accounts only while the ElevenLabs key is free tier): a Premium voices page at ttlk.live/premium-voices where the creator picks the AI's ElevenLabs voice and sets Chat and Announcements rules giving viewer groups (one named viewer, moderators, subscribers, Super Fans, fan club, followers, everyone) a premium voice, most specific first, with a preview of each of the 12 voices, its own on/off switch separate from browser speech, a Play on stream switch per kind (off by default), and a meter of characters used and left this month with a rough LIVE-hours estimate; Top up shows as coming soon and nothing is sold. Any line a premium voice can't speak is still read in the browser voice, even with browser speech off, and OBS now follows Pause, Resume and Stop on voice lines without touching sound alerts. Premium voices step 3 (languages) is live (merged 7585ae1, deployed and verified on production 2026-10-15): the AI can welcome a viewer in their own language and translate on request. "Kit, welcome @maria in Spanish" (or "in her language", judged from her comments in this LIVE) posts one tagged line in chat from the creator's account and says it in the AI's premium voice; "what did Maria say?" reads her comments back in English. A post only happens when the host's own words ask for one (moderators can too, by /kit, naming the viewer), never because of a viewer's comment, and never contains a mention, link or command. A line in another language is never read in the browser voice: without a premium voice (everyone but admins while the ElevenLabs key is free tier) it is posted in chat only and the host hears "Posted in chat for @maria, in Spanish." Premium voices step 4 (conversations with a viewer) is live (merged 14ab214, deployed and verified on production 2026-10-15), completing the premium voices and languages plan: the host ("Kit, chat with @maria") or a moderator (/kit, naming the @handle) can open a chat; Maria's next comments each get one short reply in her language, posted in chat from the creator's account and tagged to her, written by the small fast model with look-ups only (now playing, top gifters, one web search) and no actions. Viewers can never start a chat. Caps: 3 replies a minute and 20 per chat, 3 chats at once, and 6 viewer turns a minute / 60 an hour per creator; a chat ends on "stop chatting with Maria", the end of the LIVE, 10 minutes without a message, or 20 replies (Kit tells whoever started it). A "Tell me each exchange" setting on the AI page (off by default) tells the host each exchange privately, never on stream; a summary is only ever spoken in the premium voice, otherwise a fixed English line. EulerStream's new Catalog Routes add-on is in use (merged c12ffa3, deployed and verified on production 2026-10-15): Rankings search now also finds creators who have never been on a leaderboard, with their follower count; a creator's rankings name them even when no board does and show their TikTok LIVE agency ("Your agency" on Analytics); and @handle-to-TikTok-number lookups use Euler's stored users catalog first, which does not count against TikTalk's Euler limits. The rankings now cover 85 countries, with leagues in 15 including the UK and US. A voice browser is live on the Premium voices page (merged 21c8c56, deployed and verified on production 2026-10-15, admin accounts only like the rest of premium voices): "Find more voices" searches ElevenLabs' own 893 Voice Library voices in 82 languages by name, language, accent, gender and age, plays each voice's own sample, and adds up to 30 to the creator's voices for the AI or any rule. ElevenLabs switches off its Default voices, which are TikTalk's 12, on 31 December 2026; each now has a named replacement (George to Eldrin, Lily to Helen and so on) that takes over automatically once the ElevenLabs plan is paid, with no settings to move. The host's AI now sees and runs all of TikTalk (merged 8b106db, deployed and verified on production 2026-10-17, beta accounts): its system prompt explains every page and key; it can read what the LIVE page is doing (connection, figures, top viewers, speech queue, comments) and every setting, change any setting a page sets (reading, voice speed, sound alerts, like goal, playlist rules and overlay, premium voice switches) with U to undo, and press the LIVE page's controls (connect, disconnect, skip, hold, release, clear speech, comments on or off, read a line aloud). Host voice only: moderators' /kit gets none of it, a question never changes anything, and any words viewers will hear must be the host's own. The AI's answers now show in the chat column, marked ONLY YOU and never sent, and every comment from the creator's account is marked YOU, AI or TIKTALK AUTO REPLY. Push to talk keeps words Chrome is slow to finish and says why nothing was heard (no speech, no microphone, network, or a tap instead of a hold). The AI can now read the whole saved history too (c228934, deployed and verified on production 2026-10-17): every chat message and interaction TikTalk read in the last 30 days, searchable by kind, words, viewer and time, with totals (comments, gifts, diamonds, viewers, top chatters and gifters), and every song request with who asked and whether it was played, skipped or removed, plus the host's own music. Host voice only. Since 3e08896 (deployed 2026-10-17): history times are UK time; a moderator's /kit answers are posted in chat and no longer read aloud; and when the host asks for a message in chat in any language, Kit says "OK, I'll send the message to @viewer now", posts it a moment later, and never reads the foreign words (replacing the step 3 behaviour of saying the post in the AI's premium voice). Since 76c8a3b (deployed 2026-10-17): only comments the host sends themselves are read aloud; posts from their account by the AI or TikTalk (song-request replies, moderator command replies, the follow message) show in chat tagged NOT READ ALOUD. A moderator's mute, block, unmute or unblock by chat command is read aloud again, naming them ("@amy muted @dave for 5 minutes"), while the reply posted in chat stays unread. /help from the host or a moderator now posts the whole guide in chat (how to request with the gift, free requests, boosting, /remove, /skip when skips are on, and the moderator commands) and reads it aloud once; a viewer's /help is still their own short menu. The whole site now moves on one motion scale (merged and deployed 43de4b2c, 2026-10-22, web only, no version bump), built with the newly installed skills (impeccable, Motion, GSAP, react-bits and transitions.dev): every duration and easing comes from one set of tokens that a test enforces, and reduced motion gives a still, finished page everywhere. The public site's chapters rise into place on scroll, the AI feature page's examples draw themselves in, and a failed sign-in shakes beside its written error. In the app, menus, dialogs, switches, checkboxes and loading figures have short, consistent transitions, the playlist queue slides when it reorders, and nothing on the LIVE page moves more than twice a second. The OBS overlays' alert, captions, now-playing, queue and like goal have new entrances, with the hype train's timings unchanged. The public marketing site was redesigned with the new design skills (live 2026-10-25, 91bf1839, web only): a masthead header, a shorter hero beside the LIVE page, a "patch bay" where visitors switch each kind of LIVE activity on and hear TikTalk read it, the three features as a pinned run beside their screenshots, plans as a table on the home page and three equal columns on Pricing, the Features page with a contents rail that follows you down, and the header button now says Sign in. The rest of the marketing pages now match it, and the site and the app share one footer (live 2026-10-26, c01b48b5, web only): questions are plain rows instead of coloured bands, How it works shows numbered steps, examples no longer sit in drawn browser windows, the same footer closes every public page and every app page (app pages lead with LIVE, Analytics, Viewers and Rankings, and both link to How it works, FAQs and Accessibility), and a signed-in creator on a public page is offered Open TikTalk instead of Sign in. The signed-in app then followed (live 2026-10-26, 98612fb2, web only): Analytics, Rankings, the Activity log, Plan and billing, Admin and Bio link lost their boxed cards, so each section opens under a thin line like the settings pages and the public site, and only tables, figures and previews keep a box; the LIVE page is unchanged. Analytics, Viewers and Rankings now keep to the same 1440px grid as every other page (live 2026-10-26, 8fa50881). A public Roadmap and updates page is live at ttlk.live/roadmap (2026-10-26, 5c970bbe, web only): what is coming next (only what the site already says is coming soon: the AI with premium voices plan, premium voices for every AI plan, character top-ups), every update since 20 September with its date, and the full changelog, linked from every footer. Signed-in members using the feedback forum now keep the app's own bar, Settings menu and footer, with the forum laid out on the app's grid. A diamond check the same day found the money rate right (about US$0.005 a diamond at £0.74 to the dollar, shown only on the daily board, whose score is diamonds) but the diamond counts inflated: TikTok sometimes sends a gift streak's final count twice, and TikTalk counted and read both, about 9% of all diamonds over the last 30 days (160 of 437 gifts). Fixed and live in the API (f85cd15e, 2026-10-26): each streak is counted once, by TikTok's streak id. Totals already saved from earlier LIVEs still include the doubles. The same evening (f0e77cfa, 2026-10-26) Rankings became Leaderboards at ttlk.live/leaderboards (/rankings redirects): it opens with where you stand today as three cards (your league, the daily ranking, the fan club ranking), each with your place, how many points or diamonds it takes to pass the place above or reach number 99, and the creators around you. Your league is found by checking every league board in your country; if you are below number 99 in all of them you pick your league once and it is remembered. Your past days and every other board, league, day and creator look-up sit below. Analytics now shows the leaderboards in one line linking there, and Viewers' Top viewers heading matches the other pages. Later that evening (a77e0691): a creator who isn't in the top 99 of any league now starts in League D5, with what it takes to reach its top 99 and the next league up, and can still choose another league. TikTok doesn't give a creator's league to the LIVE connection in normal play (a four-minute check on four LIVE league creators saw none), so TikTalk now also listens for it during the creator's own LIVE and saves it if TikTok ever sends it. Viewer points went live the same night (33862289): every like, diamond, comment, share, song request and LIVE a viewer comes to is a point; points start again daily, weekly or monthly (UK time, monthly by default, set on a new Viewer points settings page); any viewer can type /points in chat and gets a reply posted as the creator with their points, place and breakdown, and the creator's own /points gives the top three; Viewers shows this period's points with a new Requests column and a Top requester leader, plus a Points history of past periods kept 13 months (terms updated). The bio link page can now show a points leaderboard too (2b296898): a "Show points leaderboard" switch in Bio link settings, off by default, puts this period's top 10 fans (name, @handle, points) under the links on ttlk.live/@handle. Browser zoom now grows text only: gaps, paddings and margins keep their 100% size on every app and site page (36abfadf, 2026-10-27). LIVE games are live (1c35e7c3, 2026-10-27): a server-run games engine with 21 (lobby with /join, turns read aloud with whose turn is next, per-turn timer, whoever reaches 21 is out, last left wins, winner screen with tonight's top 5, Play again), a countdown timer (standalone, subathon where gifts/shares/follows/subs add time, Last Gifter Wins) and Quick Poll (😊/😢 votes, Cmd+P, TikTok polls mirrored); a Games tab on the LIVE page, 1/2/3 keys, Stream Deck links, mod chat commands (/game, /timer, /poll), a secret mod link page and /remote controls; three OBS sources (game, timer, poll); game wins earn viewer points (25 a win, settable); game lines speak in the AI's ElevenLabs voice on stream with a spoken '10 seconds remaining, 5, 4, 3, 2, 1'; five countdown music beds made in code (Tick-tock, Game show, Drum roll, Synth pulse, Chill) with previews; a Games settings page at /games-settings. LIVE games projects 2-4 are live (ff8781a5, 2026-10-27): chat games Word Feud (survey-says from chat), Guess the Song (Spotify clips of past requests), Finish the Lyric (public-domain + the creator's own lines), Hot Potato and Emoji Bingo; team games Like Race, Tug of War and Boss Fight driven by likes, gifts and shares; and Share-a-thon with reward tiers -- all spoken, on OBS, run from the Games tab, /remote, the mod link, mod chat and Stream Deck. TikTalk now reads every LIVE through Euler's WebSocket server instead of opening TikTok's connection itself (d52dc4dd + gift list fix 2c1ec32d, 2026-10-27): same chat, gifts, follows, battles and speech as before, the old connection kept as an automatic fallback and a one-setting rollback, and every one of the ~250 event types TikTalk doesn't use yet (fan club, subscribers, super fans, co-host, multi-guest, TikTok Shop) counted and sampled with viewers' details blanked, ready for the next steps: who's in the room, fan club/subscriber/super fan detail, co-host and multi-guest, TikTok's AI summary. The game, countdown timer and Quick Poll now share one full-screen 1080x1920 portrait OBS source (/obs/<key>/games, a6f2b05f, 2026-10-27): the cards sit in one centred column clear of TikTok's own screen; the old separate links still work; the playlist stays separate. Game, timer and poll cards are now half see-through so the camera shows behind them, and the playlist cards default to 50% (slider now goes down to 30%); visual alerts stay solid so they can always be read (29a234ce, 2026-10-27). The games column now sits in the vertical middle of the screen (d0070704).
- Goal
- next_action: On the next LIVE, check TikTalk still reads everything now it connects through Euler's WebSocket (live 2026-10-27): chat, gifts with names, follows, shares, battles, treasure boxes and the AI; if anything goes quiet, set LIVE_SOURCE=connector on the API in Railway to switch back. Then: On the next LIVE, check the colour code redesign, the taste review and the new motion (all live 2026-10-22): the coloured feed rows, the OBS alerts and the phone remote at a glance and at 200% zoom; that new feed rows rise in gently without the feed feeling busy, the sliding Control/Playlist/Viewers tab, and that Shares, Diamonds and Followers pop only the digits that changed. Refresh each OBS browser source once, then watch the alert card, the like goal's digits, the now-playing card on a song change and the playlist's Added card in OBS itself, since none of them has been seen there yet. Then: On the next LIVE, check super fan and fan club banners are now read (they were silently dropped until 2026-10-19), and that single gifts are now read at once (until 2026-10-19 every gift waited 2.5 seconds); also download your data once from the Account page to see it works. Then: Open ttlk.live/remote on your phone with VoiceOver while the LIVE page is open on the computer, and try Hold, Skip and What just happened; submit https://ttlk.live/sitemap.xml in Google Search Console; add real creator quotes to apps/web/lib/quotes.ts when you have them. Then: On the next LIVE try the new tools: push to talk with "skip" and "what just happened" (T), W and R, the Captions switch with headphones, and add the new Captions and Visual alerts browser sources from the OBS output page; set up the Stream Deck page links if you have one. Then: Try a real checkout on ttlk.live/pricing (Standard with AI) and cancel in the trial, to prove the three plans end to end; reload any open LIVE page once, since the LIVE stream now opens with a ticket. Then: On the next LIVE: "Kit, welcome @<viewer> in Spanish" -- you should hear only "OK, I'll send the message to @<viewer> now" and then see it in chat; have a moderator /kit something and check the answer appears in chat but isn't read out. Then: Ask the AI on the next LIVE "what did <viewer> say yesterday?", "who gifted most this week?" and "which songs got skipped today?". Then: On the next LIVE, hold T and check it now hears you; if it still says it didn't hear, read the exact sentence it says (it now names the cause), and the browser console line "[TikTalk AI] nothing heard". Then try "Kit, turn gifts on", "make the reading faster", "turn sound alerts off", U to undo, "hold", "read out welcome everyone" and "turn comments off", and check the AI's answers sit in chat marked ONLY YOU while your own comments say YOU. Then: Upgrade the existing ElevenLabs account to a paid plan (Creator or above; not a new account, which would have no Default voices) and rotate the key in Railway; within an hour the 12 premium voices switch to their replacements and voices added in the browser start speaking. Then on /premium-voices try Find more voices with a screen reader: search, filters, Preview, Add, Show more, and Remove from Voices you added. Then: On the next real LIVE with the admin account, try a chat: "Kit, chat with @<viewer>" and have them comment (ideally in another language) -- each comment gets one short tagged reply in chat in their language; ask a moderator to /kit chat with someone by @handle; say "stop chatting with <viewer>" and check no more replies come; turn on Tell me each exchange on the AI page and check the exchanges are heard by you but not on stream. Watch AI cost for the first few chats (viewer turns are capped at 60 an hour). Then (step 3): On the next real LIVE with the admin account, try the languages: "Kit, welcome @<viewer> in Spanish" -- the line appears in chat tagged to them, is heard in the AI's voice on the page and on stream, and its echo in chat is shown but not read again; "welcome <viewer> in her language" for someone commenting in another language; "what did <viewer> say?" answers in English and posts nothing; a moderator's "/kit welcome @<viewer> in Portuguese" posts and the moderator's reply names them without an @. Then on a non-admin account, check the welcome is posted in chat only and nothing foreign is read aloud. Then (step 2): Refresh the OBS browser source once (until then OBS plays premium voice lines the old way and ignores pause and stop), then on the next real LIVE with the admin account check Premium voices: a Chat rule (Followers to Lily) is heard and non-followers stay in the browser voice; a named-viewer rule beats a group rule; with Browser speech off only the rule-covered viewers are read, and still read in the browser voice once the month's characters run out; with Play on stream on for Chat, Pause, N and a rail Read button stop the line on OBS too and the re-read after a Read button is heard once; the meter's chat-and-announcements figure rises after the LIVE and its hours estimate looks believable; previews play on first press and again without a network request. Before widening premium voices to beta, move ElevenLabs to a paid plan and rotate the key. Then: On the next real LIVE, try Kit's new actions: play, queue, "wrong one", a mute confirmed with Enter, a block confirmed with Enter, U after each, and the Mute button twice on one viewer (expect 5 then 10 minutes), and let a request finish while on a playlist (the playlist should carry on at the next song). Those prove TikTok accepts the mute lengths and that Undo can lift a mute and a ban. Then: Sign in on a second computer after a LIVE and check viewers' pictures appear in the history, and that Load earlier activity reads back through the day with a screen reader. Then: Try the new Rankings page and Your rankings on Analytics with a screen reader on production -- in particular that changing the period announces the result and that opening a creator moves to their name. Then: Sign in on ttlk.live to confirm the EulerStream callback moved cleanly -- it is the one part of the domain move no test can prove, since the redirect_uri now says ttlk.live on both the authorize call and the token exchange and the two must agree. Once the old domain is detached from the web service, drop tiktalk.blinddrummer.uk from the allowed origins in apps/api/server.mjs, which is the only thing still holding it open. Then: Check Demo mode on a real account now it is live (v2.6.0.0) -- in particular that entering and leaving are both announced, since the banner is deliberately silent, and that a demo gift plays the real alert through whatever routing is configured. Two known follow-ups ride with it: settings tuned during a demo entered by deep link or survived across a refresh are reverted on exit, which contradicts both the spec and the changelog and needs a decision about where settings loading belongs; and a pre-existing accessibility fault the demo exposed rather than caused -- the LIVE page puts role="log" on an <ol>, which strips the list role and orphans every <li>, and no axe pass had ever run against a populated log before. Then: Check on a real LIVE that it still reads aloud, that a comment posts, that viewers' faces appear rather than initials (the avatar path depends on the CDN mirror priming in time and is the one thing tests cannot prove), and that a busy room's gifts and joins land in the new second column at a readable pace with the new colour coding telling the kinds apart at a glance. Watch a real hype train too -- whether one viewer taking all four carriages flashes for a readable three seconds and clears, and whether a solo viewer re-winning from empty fires the barge-in alert more often than is welcome in a quiet room. Check the chat Actions menu opens over the feed on a real screen too -- the popover needs Firefox 125+ or Safari 17+, and anything older quietly falls back to the old in-flow panel. Give the merged Account page a screen reader pass too -- three panels with their own live regions on one page is the part axe cannot judge. Give the three themes a real read too -- the contrast numbers are proven per theme and axe passes on every page in each, and 200% text and a 320px reflow are now held by their own suite, but whether light and high contrast are comfortable across a whole broadcast is not something a test answers, and the switch state, tone icons and dashed disabled controls want a screen reader pass. The eight event tone chips are the one part that did not cross to the light theme: they stay a fixed sub-palette because Waveform names only four status tones, and on white they read as heavy inverted blobs. Then the forum work: admin smoke test, screen reader passes for phases 1 and 2 (checklist in PR #21), seed the roadmap, build phase 3 email updates before setting FORUM_ENABLED=true. LIVE games (live 2026-10-27): confirm the 21 rules (built as: reach 21 = out, count back to 0, last left wins); add the one games OBS source (1080x1920, stretched over the whole portrait scene) from /games-settings and refresh the OBS audio source; play a real game of 21 on a LIVE with voice guests and check the turn order, timer, spoken countdown and that numbers land on time; listen to each countdown bed Preview; try the mod link on a phone; check Quick Poll mirrors a TikTok poll (shape unverified) Then play each new game on a real LIVE (Guess the Song needs Spotify open on the streaming computer) and check the OBS game source shows each screen.
- Next action
- not set
- Key number
- key_number:: not set
How it's going: 1. Decide on the beta-testers letter. The letter is drafted (JAM-52), but its approval prompt expired on 30 October, so nothing has been cleared to send. Testers' AI access ends on 30 November, so it needs a yes or no before then.