- Reformatted empty arrow function bodies in autoCompletions to use block syntax
- Removed unused properties (previousValue, lastChange, changed) from ChatInputComponent
- Added expiryTimer property and removed redundant constructor assignments
- Simplified set value method by removing fallback to empty string
- Refactored resolveAutoComplete to use for-of loop and early return on duplicate matches
- Updated starsRender call formatting for consistency
Introduce an asyncio.Semaphore(1) and a run_in_executor method in BaseMapper, wrapping synchronous table operations (find_one, exists, count, upsert) to prevent blocking the event loop. Add a loop property returning the current event loop.
The bug was in `embed_youtube` function in `src/snek/system/template.py` where the variable `start_time` was being sliced instead of the loop variable `t` when stripping trailing 's' characters from time values. This caused incorrect start time parsing for all entries after the first in multi-start queries.
Add `time_start` initialization and `uptime_seconds`/`uptime` properties to the Application class, including a `_format_uptime` helper that converts seconds into a human-readable string with days, hours, minutes, and seconds. Introduce a new `DumbTerminal` custom element in `dumb-term.js` with a retro terminal UI, command history navigation, and a shadow DOM-based layout. Additionally, reformat multiple JavaScript files (app.js, chat-input.js, chat-window.js, event-handler.js, fancy-button.js) to use consistent 2-space indentation and double quotes, and remove trailing whitespace from license comments.
Add `uptime_seconds` and `uptime` properties to the Application class in `src/snek/app.py`, tracking server runtime from `datetime.now()` on startup. Introduce a new `DumbTerminal` custom element in `src/snek/static/dumb-term.js` providing a retro terminal UI with command history. Reformat multiple JS files (app.js, chat-input.js, chat-window.js, event-handler.js, fancy-button.js) from 4-space to 2-space indentation and unify quote style to double quotes.
Introduce a twinkling starfield effect on the app page by creating a new `sandbox.css` stylesheet with `.star` positioning and `twinkle` keyframes, and a `sandbox.html` template that generates 200 randomized star elements with varying size, animation duration, and delay. Wire both into `app.html` by linking the stylesheet and including the template before the closing body tag.
- Introduce UIDNS class and uid() function in security.py for deterministic UUID5 generation
- Refactor hash() and verify() with type hints, docstrings, and string-based salt handling
- Replace global UPLOAD_DIR constant in upload.py with dynamic per-user upload folder derived from session uid
- Update file path handling to use user-specific upload directory instead of hardcoded ./drive path
Replace the plain list-based user search results with a rich thread-style card layout
featuring avatar, nick, color-coded author, and last ping timestamp. Update the backend
view to pass user record objects and current_user context to the template.