Skip to content

Add user profiles - #175

Merged
llbbl merged 2 commits into
masterfrom
feature/issue-126-user-profiles
Sep 15, 2026
Merged

llbbl merged 2 commits into
masterfrom
feature/issue-126-user-profiles

Conversation

@llbbl

@llbbl llbbl commented Sep 15, 2026 •

Copy link
Copy Markdown
Owner

Summary

  • Add authenticated user profile settings, avatars, themes, and notification preferences.
  • Broadcast presence through the WebSocket server and expose public profile lookup APIs.
  • Provide matching Vue and Svelte profile panels with integration coverage.

Changes

Backend

  • app/Controllers/Profile.php: Add HTML and API profile, avatar, and public-profile endpoints.
  • app/Models/UserModel.php: Persist profile fields, presence, and trimmed public-profile lookups.
  • app/Libraries/ChatWebSocketServer.php: Track authenticated presence across multiple connections.
  • app/Database/Migrations/2026-09-15-000000_add_user_profile_fields.php: Add profile columns to users.

Frontend

  • src/vue/ProfilePanel.vue: Add Vue profile editing and presence controls.
  • src/svelte/ProfilePanel.svelte: Add Svelte profile editing and presence controls.
  • src/js/profile.js: Share profile API, CSRF, theme, and avatar helpers.
  • src/css/chat.scss: Style profile panels, avatars, themes, and presence state.

Documentation and tests

  • docs/user-profiles.md: Document profile behavior and API usage.
  • tests/Tests/Integration/ProfileIntegrationTest.php: Cover profile and avatar endpoints.
  • tests/Tests/Integration/UserProfileRepositoryIntegrationTest.php: Cover profile persistence and lookup trimming.
  • tests/Tests/Integration/WebSocketFlowIntegrationTest.php: Cover multi-connection presence lifecycle.

Review follow-ups

  • Frontend profile lookups now avoid repeated fetches.
  • Server profile username lookups now trim and normalize input before querying.
  • Legacy Chromium E2E selectors are scoped away from DebugBar controls, and scenario data is isolated.

Validation

  • composer test:integration: OK (25 tests, 139 assertions)
  • composer test:integration:websocket: OK (5 tests, 33 assertions)
  • composer test:all: OK (204 tests, 692 assertions)
  • ./vendor/bin/phpstan analyse --memory-limit=256M --debug --no-progress: OK
  • pnpm check: OK
  • pnpm e2e: PASS (6 tests; local Chromium validation)
  • ./vendor/bin/php-cs-fixer fix --dry-run --diff --sequential: OK (composer cs-check parallel mode hit local EPERM, sequential check passed)
  • pnpm build: OK (required normal pnpm store/cache access after sandboxed run reported unable to open database file)
  • Biome: PASS
  • Mutation testing: Not run because the mutation workflow is manual-only by user request.

Closes #126

@llbbl
llbbl merged commit e7ac650 into master Sep 15, 2026
8 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

User profiles: avatars, preferences, presence status

1 participant