Skip to content

feat: user form#118

Merged
danielhe4rt merged 19 commits into
3.xfrom
feat/user-form
Nov 23, 2025
Merged

feat: user form#118
danielhe4rt merged 19 commits into
3.xfrom
feat/user-form

Conversation

@Clintonrocha98
Copy link
Copy Markdown
Collaborator

@Clintonrocha98 Clintonrocha98 commented Nov 22, 2025

This pull request refactors the Filament user admin resource by removing the individual relation manager classes for user-related models (address, character, information, providers) and consolidating their functionality into a new tabbed form interface within the EditUser page. Additionally, it updates user form field configurations and expands provider seeding. These changes simplify the codebase, improve maintainability, and enhance the user editing experience.

Refactoring and UI Consolidation:

  • Replaced the separate relation managers (AddressRelationManager, CharacterRelationManager, InformationRelationManager, ProvidersRelationManager) with a single tabbed form in EditUser.php, grouping user-related data (General, Address, Information, Gamefication, Providers) into tabs for easier navigation and editing.
  • Removed the getRelations method from UserResource.php, eliminating the registration of the now-deleted relation managers.
  • Deleted the four relation manager classes and their associated feature tests, further simplifying the codebase and test suite. [1] [2] [3] [4] [5] [6] [7]

User Form Improvements:

  • Updated the user form schema in UserForm.php to provide clearer labels, placeholders, and validation rules for username, name, email, and password fields.

Provider Model and Seeding:

  • Expanded the provider types in the ProviderFactory.php to include both 'discord' and 'twitch'.
  • Modified the base seeder to create four provider records per user, ensuring more comprehensive test data.

These changes streamline the admin resource, improve usability, and reduce maintenance overhead.

Summary by CodeRabbit

  • New Features

    • Multi‑tab user edit interface (General, Address, Information, Gamification, Providers)
  • Refactor

    • Simplified user form fields and validation
    • Navigation shows user count badge
    • Provider handling moved to typed enum throughout app (models, auth flow, tests)
    • Message admin shows provider label via related record and displays as badge
  • Removed

    • Several admin relation managers for addresses, characters, information, and providers
  • Tests

    • Removed obsolete Filament relation manager tests; updated tests to use provider enum
  • Chores

    • Seeder now creates provider records

✏️ Tip: You can customize this high-level summary in your review settings.

@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented Nov 22, 2025

Walkthrough

Reworks the User admin UI by adding a tabbed EditUser form and removing four Filament RelationManager classes and their tests; introduces Provider enum casting and factory changes; updates seeders and authentication to persist ProviderEnum; adjusts multiple tests and message UI to use ProviderEnum values.

Changes

Cohort / File(s) Summary
Relation managers removed
app-modules/user/src/Filament/Admin/Resources/Users/RelationManagers/AddressRelationManager.php, app-modules/user/src/Filament/Admin/Resources/Users/RelationManagers/CharacterRelationManager.php, app-modules/user/src/Filament/Admin/Resources/Users/RelationManagers/InformationRelationManager.php, app-modules/user/src/Filament/Admin/Resources/Users/RelationManagers/ProvidersRelationManager.php
Deleted four Filament RelationManager classes with their form/table definitions and imports.
EditUser form added
app-modules/user/src/Filament/Admin/Resources/Users/Pages/EditUser.php
Added public function form(Schema $schema): Schema implementing a Tabs-based edit UI (General, Address, Information, Gamefication, Providers) with nested sections, fields, and a Providers repeater.
User resource & form refactor
app-modules/user/src/Filament/Admin/Resources/Users/UserResource.php, app-modules/user/src/Filament/Admin/Resources/Users/Schemas/UserForm.php
Removed relation manager registrations from UserResource; added getNavigationBadge(); simplified UserForm by replacing Section wrapper with explicit TextInput fields and validations.
Tests removed
app-modules/user/tests/Feature/Filament/Admin/Resources/User/RelationManagers/AddressRelationManagerTest.php, .../CharacterRelationManagerTest.php, .../InformationRelationManagerTest.php
Deleted three Pest test files that covered the removed relation managers.
Provider enum casting & factory
app-modules/provider/src/Models/Provider.php, app-modules/provider/database/factories/ProviderFactory.php
Provider model now casts provider to ProviderEnum; factory updated to choose provider using ProviderEnum::cases().
Seeder update
database/seeders/BaseSeeder.php
Added Provider import and seeding step creating Provider records (using factory recycle with user/tenant and user email).
Authentication updates
app-modules/authentication/src/Actions/AuthenticateAction.php
When creating/updating provider records, now uses ProviderEnum::from(...) to persist a typed enum.
Tests & message UI enum adjustments
app-modules/authentication/tests/...AuthenticateActionTest.php, app-modules/character/tests/.../ClaimCharacterBadgeTest.php, app-modules/message/tests/..., app-modules/message/src/Filament/...
Tests updated to use ProviderEnum values; message Filament form/table adjusted to use provider relation/label and tests changed to use enum value in payloads/routes.

Sequence Diagram(s)

sequenceDiagram
    autonumber
    actor Admin
    participant EditUser as EditUser Page
    participant Tabs as Tabs Form
    participant Backend as Backend / Models
    note over Tabs,Backend `#E6F5FF`: New tabbed form persists nested relations

    Admin->>EditUser: Open EditUser
    EditUser->>Tabs: Build form() (General, Address, Information, Gamefication, Providers)
    Admin->>Tabs: Fill fields & submit
    Tabs->>Backend: Persist User + nested relations (providers repeater)
    Backend->>Backend: Provider attribute cast/stored as ProviderEnum
    Backend-->>Tabs: Save result
    Tabs-->>Admin: Show success or validation errors
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~50 minutes

  • Review migration of relation UIs into EditUser for persistence, validation, permissions, and UI constraints.
  • Verify Provider enum consistency across model casts, factory, AuthenticateAction, seeders, and all updated tests.
  • Confirm removed tests do not remove required coverage and update or add tests if needed.

Possibly related PRs

Suggested reviewers

  • danielhe4rt
  • gvieira18
  • PilsAraujo

Poem

🐰 Tabs aligned, four managers hopped away,
Enums snug in models, factories now play.
Seeders plant providers, tests follow the trail,
A tidy form, a rabbit's neat detail. 🥕

Pre-merge checks and finishing touches

❌ Failed checks (1 warning)
Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 8.33% which is insufficient. The required threshold is 80.00%. You can run @coderabbitai generate docstrings to improve docstring coverage.
✅ Passed checks (2 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title 'feat: user form' aligns with the primary objective of refactoring the Filament user admin form by consolidating relation managers into a tabbed form interface on the EditUser page.
✨ Finishing touches
  • 📝 Generate docstrings
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch feat/user-form

📜 Recent review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between b90d8fb and e5f92c3.

📒 Files selected for processing (2)
  • app-modules/user/src/Filament/Admin/Resources/Users/UserResource.php (1 hunks)
  • database/seeders/BaseSeeder.php (2 hunks)
🚧 Files skipped from review as they are similar to previous changes (2)
  • app-modules/user/src/Filament/Admin/Resources/Users/UserResource.php
  • database/seeders/BaseSeeder.php

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

🧹 Nitpick comments (5)
app-modules/user/src/Filament/Admin/Resources/Users/Schemas/UserForm.php (1)

16-41: User field schema is clear; watch for duplication with EditUser::form

The field setup (labels, placeholders, validation) looks good in isolation, but these four inputs are now also defined separately in EditUser::form (General tab) with different rules (e.g., name/email not marked required there, no min/max lengths, different UX). This divergence can easily drift and cause inconsistent validation between create and edit. Consider centralizing these field definitions (or at least sharing the validation rules) so UserForm and EditUser stay in sync, and double‑check that making password required here matches where this schema is actually used (create vs edit).

app-modules/provider/database/factories/ProviderFactory.php (1)

26-26: Factory provider values now match validation; consider deriving from ProviderEnum

Including both 'discord' and 'twitch' here is consistent with CreateProviderRequest and ProviderEnum, but the literals are now duplicated in three places. To avoid future drift, consider pulling from the enum, e.g.:

+use He4rt\Provider\Enums\ProviderEnum;
...
-            'provider' => fake()->randomElement(['discord', 'twitch']),
+            'provider' => fake()->randomElement(
+                array_map(fn (ProviderEnum $case) => $case->value, ProviderEnum::cases()),
+            ),

This keeps the factory automatically in sync if new providers are added.

app-modules/user/src/Filament/Admin/Resources/Users/Pages/EditUser.php (3)

25-40: General tab duplicates core user fields with weaker validation than UserForm

Here you redefine username, name, email, and password instead of reusing the configuration in UserForm::configure(). That leads to several practical differences on edit vs create (e.g., only username is required here, no min/max length constraints, no localized labels/placeholders), which can create inconsistent behavior and UX across pages. It may be worth either pulling the shared config from UserForm or at least mirroring the same validation rules and labels on this General tab, and explicitly deciding whether password should behave differently on edit (typically nullable and only persisted when filled, to avoid forcing resets or mishandling hashed values).


70-85: Gamefication tab read‑only fields and date formatting

Using TextEntry to present character/tenant data read‑only in the edit form makes sense for a “profile overview” style tab. Two small points to consider:

  • The tab label "Gamefication" looks like a typo of "Gamification" if that’s what you intend user‑facing.
  • For character.daily_bonus_claimed_at, confirm that $state is always a value Date::parse() can handle (e.g., string/Carbon or null); if it can ever be an unexpected type, you may want a stricter guard or explicit cast before parsing.

86-103: Providers tab is effectively read‑only; confirm that’s intentional and that the API matches your Filament/Schemas version

The Providers tab uses a Repeater bound to the providers relationship but only contains TextEntry components and has both adding and deleting disabled, which makes this section a read‑only listing rather than a management UI. That’s fine if provider creation/updates are handled elsewhere (e.g., dedicated provider flows), but if admins are expected to manage providers here, you’ll likely want editable form components instead. Also, ensure that addable(false) / deletable(false) and embedding TextEntry inside a Repeater are supported patterns for the Filament/Schemas version you’re on, as those APIs differ slightly between releases.

📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 80c1170 and 13f34ba.

📒 Files selected for processing (12)
  • app-modules/provider/database/factories/ProviderFactory.php (1 hunks)
  • app-modules/user/src/Filament/Admin/Resources/Users/Pages/EditUser.php (1 hunks)
  • app-modules/user/src/Filament/Admin/Resources/Users/RelationManagers/AddressRelationManager.php (0 hunks)
  • app-modules/user/src/Filament/Admin/Resources/Users/RelationManagers/CharacterRelationManager.php (0 hunks)
  • app-modules/user/src/Filament/Admin/Resources/Users/RelationManagers/InformationRelationManager.php (0 hunks)
  • app-modules/user/src/Filament/Admin/Resources/Users/RelationManagers/ProvidersRelationManager.php (0 hunks)
  • app-modules/user/src/Filament/Admin/Resources/Users/Schemas/UserForm.php (1 hunks)
  • app-modules/user/src/Filament/Admin/Resources/Users/UserResource.php (0 hunks)
  • app-modules/user/tests/Feature/Filament/Admin/Resources/User/RelationManagers/AddressRelationManagerTest.php (0 hunks)
  • app-modules/user/tests/Feature/Filament/Admin/Resources/User/RelationManagers/CharacterRelationManagerTest.php (0 hunks)
  • app-modules/user/tests/Feature/Filament/Admin/Resources/User/RelationManagers/InformationRelationManagerTest.php (0 hunks)
  • database/seeders/BaseSeeder.php (2 hunks)
💤 Files with no reviewable changes (8)
  • app-modules/user/src/Filament/Admin/Resources/Users/RelationManagers/ProvidersRelationManager.php
  • app-modules/user/src/Filament/Admin/Resources/Users/RelationManagers/InformationRelationManager.php
  • app-modules/user/src/Filament/Admin/Resources/Users/RelationManagers/CharacterRelationManager.php
  • app-modules/user/tests/Feature/Filament/Admin/Resources/User/RelationManagers/AddressRelationManagerTest.php
  • app-modules/user/src/Filament/Admin/Resources/Users/RelationManagers/AddressRelationManager.php
  • app-modules/user/tests/Feature/Filament/Admin/Resources/User/RelationManagers/InformationRelationManagerTest.php
  • app-modules/user/tests/Feature/Filament/Admin/Resources/User/RelationManagers/CharacterRelationManagerTest.php
  • app-modules/user/src/Filament/Admin/Resources/Users/UserResource.php
🧰 Additional context used
🧬 Code graph analysis (3)
database/seeders/BaseSeeder.php (4)
app-modules/provider/src/Models/Provider.php (2)
  • Provider (26-85)
  • newFactory (59-62)
database/migrations/2023_01_18_210724_create_providers_table.php (2)
  • Blueprint (17-24)
  • up (14-26)
app-modules/provider/tests/Feature/NewAccountByProviderTest.php (2)
  • provider (34-51)
  • provider (8-33)
app-modules/feedback/tests/Feature/CreateFeedbackTest.php (1)
  • providerSender (8-27)
app-modules/provider/database/factories/ProviderFactory.php (4)
app-modules/provider/src/Enums/ProviderEnum.php (1)
  • ProviderEnum (7-11)
app-modules/authentication/src/Enums/OAuthProviderEnum.php (1)
  • OAuthProviderEnum (10-20)
app-modules/provider/src/Http/Requests/CreateProviderRequest.php (1)
  • rules (16-23)
tests/Unit/Message/Application/NewMessageTest.php (1)
  • fn () => [ (16-28)
app-modules/user/src/Filament/Admin/Resources/Users/Pages/EditUser.php (1)
app-modules/user/src/Filament/Admin/Resources/Users/UserResource.php (2)
  • UserResource (20-48)
  • form (30-33)
🔇 Additional comments (1)
database/seeders/BaseSeeder.php (1)

10-11: Provider seeding is consistent with the factory setup

Using recycle($user) and recycle($tenant) against the current ProviderFactory definition correctly ties the 4 seeded providers back to the existing admin user and tenant without creating extra records. Overriding email with $user->email is fine for baseline seed data, assuming there’s no unique constraint on providers.email.

Also applies to: 75-79

Comment thread app-modules/provider/database/factories/ProviderFactory.php Outdated
Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

🧹 Nitpick comments (1)
app-modules/provider/src/Models/Provider.php (1)

9-9: Enum cast is appropriate; align PHPDoc and double‑check downstream usages

The new enum cast for provider looks correct and consistent with ProviderEnum and the updated factory/seeder. Two follow‑ups to consider:

  • The docblock still declares @property string $provider (Line 25). With the cast in place, $provider->provider will now be a ProviderEnum instance. Updating the annotation will help IDEs and static analysis:
- * @property string $provider
+ * @property ProviderEnum $provider
  • Verify any existing code that treats provider as a raw string (comparisons, type hints, JSON casting outside Eloquent, etc.) to ensure it either expects an enum or calls $provider->provider->value where a string is required.

Also applies to: 25-25, 82-87

📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 13f34ba and e3ade84.

📒 Files selected for processing (2)
  • app-modules/provider/database/factories/ProviderFactory.php (2 hunks)
  • app-modules/provider/src/Models/Provider.php (2 hunks)
🚧 Files skipped from review as they are similar to previous changes (1)
  • app-modules/provider/database/factories/ProviderFactory.php
🧰 Additional context used
🧬 Code graph analysis (1)
app-modules/provider/src/Models/Provider.php (2)
app-modules/provider/src/DTO/NewProviderDTO.php (1)
  • NewProviderDTO (10-24)
app-modules/provider/src/Enums/ProviderEnum.php (1)
  • ProviderEnum (7-11)

Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
app-modules/message/tests/Feature/NewMessageTest.php (1)

128-128: Missing .value on enum causes inconsistency.

Line 128 passes $provider->provider (the enum object) to the route, while lines 43 and 83 correctly pass $provider->provider->value (the string value). Routes typically expect string values, not enum objects. This inconsistency could cause runtime errors or unexpected behavior.

Apply this diff to fix the inconsistency:

-        ->postJson(route('messages.create', ['provider' => $provider->provider]), $payload)
+        ->postJson(route('messages.create', ['provider' => $provider->provider->value]), $payload)
🧹 Nitpick comments (4)
app-modules/message/src/Filament/Admin/Resources/Messages/Tables/MessagesTable.php (1)

19-23: Provider column now shows related provider instead of FK, which is good

Using TextColumn::make('provider.provider') with ->badge() is a nice improvement over showing provider_id; it aligns with the Provider model’s enum cast and keeps sort/search behavior on the provider value. If you prefer showing a more human-friendly label (e.g., ProviderEnum::getLabel() as used in MessageForm), you might wrap this in a formatStateUsing callback to render the enum label instead of the raw value, but that’s optional.

app-modules/message/src/Filament/Admin/Resources/Messages/Schemas/MessageForm.php (1)

12-24: Enum-based option labels for provider Select are correct

Importing Provider and using getOptionLabelFromRecordUsing(fn (Provider $record) => $record->provider->getLabel()) cleanly leverages the enum cast on provider to show a friendly label in the dropdown. This looks consistent with the rest of the enum integration; just ensure all ProviderEnum cases implement getLabel() so this never hits a missing-method/error path. If you expect many providers, you might optionally re-add ->searchable() for UX, but it’s not required.

app-modules/message/tests/Feature/NewVoiceMessageTest.php (1)

7-40: Voice message test aligns correctly with enum-backed providers

Using ProviderEnum::Discord when seeding and $provider->provider->value for the payload and voices.create route ensures the test follows the enum-casted provider column. This is consistent with the rest of the refactor; you may optionally update shared helpers like actingAsAdmin() to also rely on ProviderEnum to avoid any future mismatch between hard-coded strings and enum values.

app-modules/authentication/src/Actions/AuthenticateAction.php (1)

9-62: ProviderEnum usage in registration matches model casts; ensure DTO provider type/values stay aligned

Switching updateOrCreate to use 'provider' => ProviderEnum::from($userDTO->provider->value) correctly aligns persisted providers with the Provider model’s enum cast. This assumes that $userDTO->provider is a backed enum (or equivalent) whose value matches the ProviderEnum backing values. Since withOAuth() still performs the lookup via ->where('provider', $user->provider), it’s worth double‑checking that the DTO’s provider type / value is consistent in both places so an already-registered provider can be found instead of re-created.

📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between e3ade84 and b540309.

📒 Files selected for processing (9)
  • app-modules/authentication/src/Actions/AuthenticateAction.php (2 hunks)
  • app-modules/authentication/tests/Feature/Actions/AuthenticateActionTest.php (1 hunks)
  • app-modules/character/tests/Feature/ClaimCharacterBadgeTest.php (3 hunks)
  • app-modules/message/src/Filament/Admin/Resources/Messages/Schemas/MessageForm.php (2 hunks)
  • app-modules/message/src/Filament/Admin/Resources/Messages/Tables/MessagesTable.php (1 hunks)
  • app-modules/message/tests/Feature/Filament/Admin/Message/CreateMessageTest.php (2 hunks)
  • app-modules/message/tests/Feature/NewMessageTest.php (9 hunks)
  • app-modules/message/tests/Feature/NewVoiceMessageTest.php (3 hunks)
  • app-modules/provider/database/factories/ProviderFactory.php (2 hunks)
🚧 Files skipped from review as they are similar to previous changes (1)
  • app-modules/provider/database/factories/ProviderFactory.php
🧰 Additional context used
🧬 Code graph analysis (5)
app-modules/message/tests/Feature/NewMessageTest.php (1)
app-modules/provider/src/Models/Provider.php (1)
  • Provider (27-93)
app-modules/message/tests/Feature/Filament/Admin/Message/CreateMessageTest.php (4)
app-modules/provider/src/Models/Provider.php (1)
  • Provider (27-93)
app-modules/message/src/Models/Message.php (3)
  • tenant (46-49)
  • provider (38-41)
  • season (54-57)
app-modules/tenant/src/Models/Tenant.php (1)
  • Tenant (22-94)
app-modules/season/src/Models/Season.php (1)
  • Season (29-85)
app-modules/authentication/src/Actions/AuthenticateAction.php (2)
app-modules/provider/src/Models/Provider.php (1)
  • Provider (27-93)
app-modules/provider/src/Models/Token.php (1)
  • provider (37-40)
app-modules/character/tests/Feature/ClaimCharacterBadgeTest.php (1)
app-modules/provider/src/Models/Provider.php (1)
  • Provider (27-93)
app-modules/message/tests/Feature/NewVoiceMessageTest.php (4)
app-modules/provider/src/Models/Provider.php (1)
  • Provider (27-93)
app-modules/message/src/Models/Message.php (1)
  • provider (38-41)
app-modules/message/src/Models/Voice.php (1)
  • provider (27-30)
tests/TestCase.php (1)
  • actingAsAdmin (15-32)
🔇 Additional comments (7)
app-modules/character/tests/Feature/ClaimCharacterBadgeTest.php (1)

7-41: Badge-claim test is now consistent with ProviderEnum casting

Switching the factory to 'provider' => ProviderEnum::Discord and using $provider->provider->value for both route parameter and X-He4rt-Provider header matches the Provider model’s enum cast and keeps everything using a single source of truth for the provider identifier. Just ensure the enum’s backing value remains the same slug the route expects (e.g. 'discord').

app-modules/message/tests/Feature/Filament/Admin/Message/CreateMessageTest.php (1)

7-23: Factory setup for tenant / provider / season looks good; just confirm recycle wiring

Creating the Tenant first and then using Provider::factory()->recycle($tenant) and Season::factory()->recycle($tenant) is a clean way to ensure related records share the same tenant, and setting 'provider' => ProviderEnum::Discord keeps this test aligned with enum casting. Please just confirm that ProviderFactory and SeasonFactory are configured to respect recycle($tenant) (e.g., via foreignIdFor(Tenant::class) or appropriate for() relations) so tenant_id is actually populated as intended.

app-modules/authentication/tests/Feature/Actions/AuthenticateActionTest.php (1)

68-68: LGTM! Correctly accesses the enum value.

The change properly adapts to the provider field being cast to ProviderEnum in the Provider model. Accessing ->value retrieves the underlying string value of the enum.

app-modules/message/tests/Feature/NewMessageTest.php (4)

7-7: LGTM! Correct import for the enum.

The import of ProviderEnum is necessary for the enum-based provider handling introduced in this PR.


20-20: LGTM! Factory calls correctly use the enum.

The provider factories now properly use ProviderEnum::Discord instead of the string literal 'discord', aligning with the enum-based provider handling.

Also applies to: 61-61, 99-99


33-33: LGTM! Payload construction correctly accesses enum values.

The payload construction properly uses $provider->provider->value to extract the string value from the ProviderEnum, which is necessary since the Provider model now casts the provider field to an enum.

Also applies to: 73-73, 118-118


43-43: LGTM! Route parameters correctly use enum values.

The route generation correctly accesses $provider->provider->value to pass the string representation of the provider enum to the route.

Also applies to: 83-83

@danielhe4rt danielhe4rt merged commit 91f3e3a into 3.x Nov 23, 2025
6 checks passed
@danielhe4rt danielhe4rt deleted the feat/user-form branch November 23, 2025 23:08
@coderabbitai coderabbitai Bot mentioned this pull request Nov 25, 2025
@coderabbitai coderabbitai Bot mentioned this pull request Dec 8, 2025
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.

4 participants