BlazerBot in the workspace, booked mock interviews, and a test case grid
- changelog
BlazerBot
A new button in the header opens BlazerBot, a chat drawer. On a problem page it can see the statement, your code, your editor selection and your last run; on a category page it sees the primer, the ladder and which rungs you have cleared. The "Looking at:" chip says what it is reading, and a Detach switch lets you ask a general question without sending your code. Type @ to mention a problem by name.
It teaches Socratically. Ask "is my approach good?" and you get one question back, such as "Trace your code on nums = [3, 3], target = 6. What does it return?", not a list of pitfalls and a complexity analysis. It escalates one step at a time only when the last step did not land. Two tools let it act in the workspace: it can highlight one to five line ranges in your editor (cleared on your next edit) and drop a test case into the Custom band of the results grid; you still press Run. A deep code review is available and spends one of your daily hints.
The drawer keeps 30 messages a day, shown in the composer footer with the reset time. Every reply has Copy, the last one has Regenerate, and thumbs up or down on a reply help tune the voice. The drawer stays mounted while you navigate, so a streaming answer survives a page change, and history persists in your browser.
Mock interview booking
Until now a mock interview started when two people happened to be online. You can now book one.
- Offer times at /interview/availability. Pick a day on the month calendar, choose a start (quick-pick chips or a time input), a length, and optionally a weekly repeat, which expands in your browser on your local wall clock so a Tuesday 18:00 stays a Tuesday 18:00 across DST.
- Browse and book at /interview/book. The calendar marks days with open slots; the selected day's slots list in a side panel by morning, afternoon and evening, in your time zone. A "people I follow" filter narrows the list, and a profile's "Book a mock interview" pill (shown beside Follow when that person has open slots) opens the browser filtered to them. Booking is instant; two candidates can never both win a slot.
- Upcoming bookings lead the /interview page as cards with a date tile and a live pulse when the join window is open. Join switches on 10 minutes before the start and mints the room for both of you. Cancel confirms inline and notifies the other side, as does every booking. Every card carries a Google Calendar link and an .ics file.
- The dashboard interview tile leads with your next booking when you have one.
- Booking sends both of you an email with the time in your own time zone, the other person's profile, a Google Calendar link and an .ics attachment, and a reminder arrives about an hour before the start. Cancelling still notifies in the app only.
- Every time names its zone. Book, Offer and the upcoming list say which zone the times are in ("Times are shown in your timezone — Central Daylight Time (CDT, UTC-5)"), and the selected day's panel carries a zone chip with the full name as a tooltip. An open slot also shows the host's own clock time when it differs from yours ("1:00 PM for @ada (CDT)"), and an upcoming card does the same for the other person. The dashboard tile, the booking confirmation and the emails spell the zone out too, so a host in Chicago and a candidate in London can both tell whose 6:00 PM it is.
The /interview hub was restyled to match the calendar pages: Book and Offer are action tiles, Start now and Join by code sit side by side, active rooms get a live dot, and past interviews collapse into one list.
Test case grid
The pane under the editor was two stacked cards: a "Custom test cases" card with a raw JSON textarea per case, above a results list that numbered the same cases differently. Both are gone. Every case is now a square in one row with one numbering: samples, your custom cases and, after a Submit, the hidden cases, each coloured by the last run. Click a square to open it underneath.
Three modes, remembered across problems: Compact is one strip so the pane hugs it, Detailed adds bands, the open case and a legend, and History shows the last eight runs as rows, kept in your browser per problem, so you can watch a case flip from red to green across attempts.
Custom cases are edited inside the open case with one field per parameter. Each field is validated against the harness type, so a wrong shape says "expects int[]" instead of "not valid JSON" for the whole blob. Problems without a declared signature read the parameter names and types off the first sample.
Restore to editor
The Submissions tab could show a past submission read-only; getting that code back into the editor meant select-all, copy, paste. The viewing banner now has a Restore to editor button. A submission in another language switches the editor language first. Within the current language the restore is an undoable Monaco edit, and you are asked to confirm only when it would replace real work: edits beyond the starter and different from the submission itself.
Learn
Six more category primers, the short topic lesson above the ladder, to the same blueprint as the earlier ones. These are first drafts: the text is in place, but none has the animated walkthrough the Two Pointers or Binary Search primers have yet, and the wording will be revised as they get read. The six: Backtracking, Kadane's Algorithm, Bit Manipulation, Topological Sort, 1D Linear DP and Math & Number Theory. The math primer includes a per-language table for gcd, modular power and the sieve.
Binary Tries is a new Tier III category. The Tries ladder switched from characters to the bits of an integer for its last two rungs, and stacking the XOR greedy onto an Intermediate ladder made the jump abrupt. Maximum XOR Pair and Maximum XOR Under a Limit now form their own Advanced category with Trie and Bit Manipulation as prerequisites; Tries keeps its three character rungs.
Problem wording
Minimum Day for Adjacent Groups was reported as confusing. The statement never said an item stays ready after its day, never spelled out that a group is k consecutive positions, and buried the no-overlap rule in a subordinate clause; the example explanations were one-liners that did not show why that day was the answer. It is rewritten around a row of n parking spaces being repaved: readyDay[i] is the day space i is finished and a finished space stays finished, m buses each take k consecutive finished spaces, no two buses share a space, and the -1 case is tied to n < m * k. Each example now walks day by day. Tests, constraints and the function signature are unchanged.
Public pages
The signed-out homepage is now the Learn map under a short introduction, with the "Added recently" rail and the guide list. The four rotating landing pages, with their fake editor and a different pitch on every refresh, are gone.
/study-groups no longer sends signed-out visitors to the login page. They see the open rooms, with a log-in prompt in place of Create and Join, and a new Recent sessions section listing finished public rooms site-wide: the host, who took part, the problems and how many solved each. It never links to a room or shows an invite code. Signed-in viewers keep their own history above it, retitled Your past sessions. /interview likewise shows a short introduction when signed out. Study Groups and Mock Interview appear in the header for everyone.
The header now shows the Algo Blazer mark beside the wordmark, and the favicon is the same rank insignia in brand orange.
Judge errors
Five changes to the messages the execution path produces, each checked against the production judge with a broken program.
- Judge faults are not your fault. A compile-step timeout arrived as a compile error reading "Compilation time limit exceeded.", and an internal judge error showed test case 1 as "Program exited before this test case was reported". A run that hits any of these now retries once, and if the judge fails again you see that the judge was busy and your code is not at fault; nothing is recorded.
- Crashes explain themselves. "Process crashed (SIGSEGV)" is followed by the mistakes that raise it: null pointer, raw array overrun, stack overflow. SIGFPE, SIGABRT, SIGBUS and SIGILL get the same treatment.
- Python and JavaScript syntax errors are compile errors. The interpreter rejects the file before running it, but the report arrived as a runtime error on case 1 with the sandbox path and, for Node, its module-loader frames. It is now the compile-error row every other language produces: every case fails, the filename is neutral, the frames are dropped.
- Verdict labels come from one place. The results panel, submission history, the collab output panel and the interview replay each had their own spelling of "Compile Error" and "Time Limit Exceeded". They now match.
Rank insignia
The problem page's Activity tab (threads, comments and shared solutions) and a room's activity feed named people without a rank. Both now draw the rank insignia in front of the name, the same mark chat uses.
Chat itself stamped the sender's level on each message at send time and kept it for the message's 30-day life, so a level-up left your old insignia on everything already in the backlog, and on new messages until you reconnected. Every line now shows the sender's current rank, and a level-up re-ranks earlier messages the moment a newer one arrives.
Vim and Emacs in shared rooms
The Keybindings setting (Default, Vim, Emacs) applied to the problem editor and nowhere else: the mock interview and collab rooms use a separate shared editor that ignored it. Both rooms now honour the setting, and their settings menu gains the same Keybindings row, so you can switch inside the room. The mode indicator sits in a status bar under the editor as it does on the problem page.
Undo needed care. Vim's u and Ctrl+R and Emacs' C-/ reach for the editor's own undo stack, which in a shared buffer holds everyone's keystrokes, so pressing u would have unwound a peer's edit. In a room those keys now undo and redo only your own edits, the same as the toolbar's undo.
Small fixes
- C# compile errors pointed at the wrong line. The compiler sees your code below a header of
usinglines, and itsmain.cs(13,13)diagnostics were shown as-is, so a typo on editor line 4 was reported as line 13. The line is now remapped to the editor, as it already was for the other languages. - Results pane stuck at one size. The drag handle between the editor and the results pane only switched on after a run. Custom test cases come back from storage when you return to a problem, so the Custom band was there with no way to resize it until you pressed Run or Submit. Saved cases now count as content and the handle appears with them.
- User hover card off-screen. Hovering a name near the right or bottom edge of a practice room pushed the card past the edge. It now shifts left, flips above the name when there is no room below, and follows the name on scroll.
- Chat raced to the bottom on open. When a chat's backlog arrived, the list smooth-scrolled from the first message to the newest, so every open began with a visible sprint down the history. It now lands on the newest message instantly and keeps the smooth scroll for messages that arrive while you watch.