689c616e44
When a username like 'christianlouis.de' (containing a dot) was submitted on the signup page, FastAPI returned a 422 with detail as an array of Pydantic validation error objects. The JS code assigned that array directly to `this.error`, causing Alpine.js x-text to render '[object Object]'. Two fixes applied in signup.html: 1. Client-side validation: check username length and pattern in submit() before the API call, with clear human-readable error messages. 2. Server error handling: detect when data.detail is an Array and extract each entry's .msg field, joining them into a readable string. Also adds a regression test to confirm the 422 response format for an invalid username (with dot) includes a list detail with msg fields. Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com>