e3cc2df45c
fix missing promotions field in weapon edit data
2025-12-03 12:36:02 -08:00
b2a606554f
simplify weapon series page to read-only list with styled table
2025-12-03 12:33:53 -08:00
108b662e33
make weapon series flags non-optional in type
2025-12-03 12:33:46 -08:00
ab4c8058f4
add ... dropdown to database nav with weapon series link
2025-12-03 12:33:42 -08:00
0259a8ad68
update test mocks to use WeaponSeriesRef
2025-12-03 11:59:40 -08:00
2e2574f749
add weapon series admin CRUD page
2025-12-03 11:59:36 -08:00
166ef8ff6f
update conflict dialog and database pages for series objects
2025-12-03 11:59:31 -08:00
139e602808
fetch weapon series from API in collection filters
2025-12-03 11:59:26 -08:00
a251240331
complete handleSave for weapon modifiers, update key select to use slug
2025-12-03 11:59:16 -08:00
c5f6963ca7
update search and party schemas for weapon series objects
2025-12-03 11:59:12 -08:00
23a2481190
update entity adapter to use seriesSlug, add weapon series CRUD methods
2025-12-03 11:59:07 -08:00
745c162529
remove legacy integer series fallbacks from utils
2025-12-03 11:59:02 -08:00
a8d97479ff
update Weapon.series to use WeaponSeriesRef, remove unused type files
2025-12-03 11:58:58 -08:00
58d8899075
add WeaponSeriesRef type definitions
2025-12-03 11:58:54 -08:00
a580f179e1
clean up error handling in add modal
2025-12-03 10:51:17 -08:00
a4572df406
refactor characters page to use card/row components
...
- use CollectionCharacterCard and CollectionCharacterRow
- add grid/list view toggle with viewMode store
2025-12-03 10:51:13 -08:00
5db9181afc
left-align uncap indicators in cells
2025-12-03 10:50:41 -08:00
f54c5f012e
improve collection row layouts
...
- wrap thumbnail + name in core-info container
- use layout tokens for border radius
- add proficiency column to weapon rows
- wider thumbnails, consistent sizing
2025-12-03 10:50:36 -08:00
6d8e1849eb
add viewMode store for grid/list toggle persistence
2025-12-03 10:50:29 -08:00
b7fdde2025
add list cell background color tokens
2025-12-03 10:50:25 -08:00
e0a41102fd
fix infinite scroll pagination in collection queries
...
use pageParam instead of response.page (which was undefined)
2025-12-03 09:03:52 -08:00
debf502a6c
use batch endpoints for collection add operations
...
single request instead of one per item
2025-12-03 09:03:47 -08:00
c37c4f0101
fix request cancellation issue in batch add weapons/summons
...
The addWeapons/addSummons methods were using Promise.all with Array.fill()
which created arrays where all elements referenced the same object. This
caused the request deduplication logic in BaseAdapter to cancel previous
requests since they all had the same body/requestId.
Fix:
- Use Array.from() with spread to create unique object instances
- Execute requests sequentially to avoid deduplication conflicts
- Improve error handling in AddToCollectionModal to filter CancelledErrors
2025-12-03 07:37:03 -08:00
d9dd8f58ee
fix Svelte 5 event modifier syntax in selectable components
...
Replace deprecated onclick|stopPropagation with onclick={(e) => e.stopPropagation()}
2025-12-03 07:31:32 -08:00
d11362ff57
add weapons and summons collection routes with layout updates
...
- Create weapons route with page, server load, and grid/list views
- Create summons route with page, server load, and grid/list views
- Enable weapons/summons tabs in collection layout (remove disabled)
- Add dynamic "Add" button text based on active entity type
- Pass entityType to AddToCollectionModal based on current route
2025-12-03 07:29:38 -08:00
60947a7911
add detail and edit panes for weapon/summon collections
...
- WeaponEditPane: edit component with uncap, transcendence, element,
weapon keys, AX skills, and awakening support
- SummonEditPane: simple edit component with uncap and transcendence
- CollectionWeaponPane: full detail pane with Info/My Collection tabs
- CollectionSummonPane: full detail pane with Info/My Collection tabs
2025-12-03 07:26:53 -08:00
033bc1c8f7
add collection display components for weapons and summons
...
- CollectionWeaponCard: grid view with uncap indicator and transcendence
- CollectionWeaponRow: list view with element, uncap, and awakening/keys info
- CollectionSummonCard: grid view with uncap indicator
- CollectionSummonRow: list view with element and uncap info
2025-12-03 07:21:53 -08:00
957dd16e5e
add quantity counter and selectable components for weapons/summons
...
- QuantityCounter: +/- buttons for multi-copy selection
- SelectableWeaponCard/Row: weapon selection with quantity
- SelectableSummonCard/Row: summon selection with quantity
- AddToCollectionModal: support entityType prop, Map for quantities
- CollectionFilters: entityType-aware filter visibility
2025-12-03 07:19:04 -08:00
13a3905776
add batch weapon/summon methods to collection adapter and mutations
2025-12-03 07:14:30 -08:00
a2e0015a85
minor cleanup: remove unused import, add font-tiny variable
2025-12-02 17:19:49 -08:00
5e5d9e93ec
refactor CollectionCharacterPane: use DetailSections, fix reactivity on char switch
2025-12-02 17:19:45 -08:00
0f46960de6
add uncap level editing to CharacterEditPane
2025-12-02 17:19:41 -08:00
2a4789c72a
add empty state support to DetailsSection
2025-12-02 17:19:38 -08:00
000cfd2332
add setAction/clearAction to sidebar store for dynamic header buttons
2025-12-02 17:19:34 -08:00
cc2b2c1f95
convert collection filters from buttons to dropdowns
2025-12-02 17:19:31 -08:00
9f18ff0a4d
add small size variant to segmented control
2025-12-02 17:19:22 -08:00
6f21018bca
add MultiSelect component, refactor Select for consistency
2025-12-02 17:19:19 -08:00
d053a9377e
add race/proficiency/gender to CollectionFilters type
2025-12-02 15:32:11 -08:00
4bbe2ed188
simplify collection page to single code path
...
- use unified api for all users (no owner/viewer branching)
- remove client-side filtering (api handles it)
- pass userId to AddToCollectionModal
2025-12-02 15:31:58 -08:00
b8a48771dd
update collection adapter/queries for unified api
...
- add userId param to list methods
- remove public collection methods (now unified)
- update query keys to include userId
2025-12-02 15:31:46 -08:00
35b0560749
add ProfileHeader component, add collection link to profile nav
2025-12-02 15:07:01 -08:00
9ed505623e
fix collection page grid: use correct 280x160 aspect ratio for character images
2025-12-02 15:06:56 -08:00
a6a0a38d75
fix collection modal search: use query factory pattern, remove broken debounce
2025-12-02 15:06:47 -08:00
491026399f
fix search api: wrap body in search key, use X-Per-Page header, 50 per page
2025-12-02 15:06:38 -08:00
7808c75452
fix cache key generation for POST requests with object bodies
2025-12-02 15:06:33 -08:00
3b071a1864
fix collection page width to match teams page
...
Remove explicit max-width: 1400px so the collection page uses the
default --main-max-width (820px) like the teams page.
2025-12-02 11:46:38 -08:00
a664d41e63
fix character card aspect ratio to match actual image dimensions
...
Character grid images are 280x160 (7:4 ratio, wider than tall).
The previous ratio was inverted. Now using 100px width with correct
aspect-ratio: 280/160.
2025-12-02 11:35:00 -08:00
408f729976
switch modal results grid to flexbox for better layout
...
Use flexbox with fixed-width cards (70px) instead of CSS Grid. This
prevents excessive vertical spacing when using tall aspect ratio items.
2025-12-02 11:32:04 -08:00
7de75ec8d0
fix character card aspect ratio and duplicate key error
...
- Use proper 16:33 aspect ratio for character cards instead of square
- Change object-fit from cover to contain to prevent cropping
- Deduplicate search results across pages to prevent duplicate key errors
2025-12-02 11:31:09 -08:00
d107d56f82
fix collection nav link to point to user's collection
...
The Collection nav link now points to /{username}/collection/characters
instead of /collection. Also updates isNavSelected to properly detect
when on any collection page.
2025-12-02 11:29:09 -08:00
2aa961b5e6
refactor EditCharacterSidebar to use shared CharacterEditPane
...
Reduces ~240 lines to ~85 lines by using the shared CharacterEditPane
component for edit controls. Both party grid and collection character
editing now use the same underlying UI component.
2025-12-02 11:26:23 -08:00
dea784780a
add collection page route and character pane components
...
- Add collection route structure at [username]/collection/characters
- Create CharacterEditPane as shared component for character customizations
- Create CollectionCharacterPane with Info and My Collection tabs
- Add character grid with filters and infinite scroll
- Fix CollectionFilters a11y warnings
2025-12-02 09:43:31 -08:00
a9de4a60c0
add AddToCollectionModal and SelectableCharacterCard
...
Large modal for batch-selecting characters to add to collection.
Features server-side search, filtering, multi-select with visual
feedback, and "X selected" link to filter to selection only.
2025-12-02 09:32:28 -08:00
8f28ad8d8f
add Dialog large size variant and CollectionFilters
...
Dialog now supports size='large' for 90vw/85vh modals.
CollectionFilters provides reusable filter controls for
element, rarity, season, series, race, proficiency, gender.
2025-12-02 09:30:31 -08:00
60ac5d4ab2
add collection API layer
...
Types, adapter, queries, and mutations for managing user collections
(characters, weapons, summons, job accessories). Supports both private
collection management and public collection viewing with privacy.
2025-12-02 09:28:22 -08:00
51db7f7604
remove redundant settings page
2025-12-02 08:52:08 -08:00
8912696a08
add element selector to user settings modal
2025-12-02 08:52:02 -08:00
be92eba4aa
fix user settings API to match rails backend params
2025-12-02 08:51:57 -08:00
919eee8cde
replace Goalking with AGrot font
2025-12-02 08:39:32 -08:00
13f78e4bf8
switch to dynamic font loading from env
...
loads fonts from AWS S3 when PUBLIC_SIERO_IMG_URL is set,
otherwise falls back to local /fonts directory
2025-12-02 08:39:28 -08:00
7471901fee
fix userAdapter instantiation in auth endpoints
2025-12-02 08:11:16 -08:00
579691aeef
fix secure cookie flag behind reverse proxy
2025-12-02 07:54:36 -08:00
513c7660f5
add svelte-sonner for toast notifications
2025-12-02 06:54:12 -08:00
1933f3d8e9
add new fields to batch import pages
2025-12-02 05:26:10 -08:00
23ae7f70ba
add promotions to summon database views
2025-12-02 05:25:56 -08:00
8c45c21939
add promotions to weapon database views
2025-12-02 05:25:49 -08:00
cf694bb1ce
add season, series, gacha_available, recruited_by to character database views
2025-12-02 05:25:43 -08:00
96f040a91b
add CheckboxGroup component for multiselect fields
2025-12-02 05:25:35 -08:00
f26d3e3883
add season, series, promotions filters to search adapter
2025-12-02 05:25:29 -08:00
67b87c7d1b
add season, series, promotions to entity types
2025-12-02 05:25:23 -08:00
b6db09bcc4
add formal promotion to enums
2025-12-02 05:25:10 -08:00
afb81e0f55
add nicknames, links sections to entity detail pages; show recruits in weapon metadata
2025-12-02 02:15:03 -08:00
4fdc859941
add scroll-triggered gradient to nav background
2025-12-02 01:45:16 -08:00
c8c076e707
add calendar icon for DatePicker
2025-12-02 01:37:38 -08:00
69395672af
move dates section before skills/auras on detail pages
2025-12-02 01:28:23 -08:00
28aa547c89
fix: summon granblueId binding in edit mode
2025-12-02 01:28:16 -08:00
6683a9e53a
import pages: add wiki_raw to payload, misc fixes
2025-12-02 01:25:28 -08:00
5edcf6473a
cleanup: remove unused CharacterImagesSection, tweak metadata
2025-12-02 01:25:23 -08:00
38762c8946
add image download buttons to detail scaffold
2025-12-02 01:25:18 -08:00
2771e202cb
add CopyableText component for raw data tab
2025-12-02 01:25:14 -08:00
dea02ef359
fix ougiRatio display - access nested object properties
2025-12-02 01:24:57 -08:00
1b8232ed5a
show dates on entity detail pages
2025-12-02 01:24:53 -08:00
6f1f0c60a2
add date fields to entity edit pages
2025-12-02 01:24:48 -08:00
da26645df0
add DatePicker component with type='date' support
2025-12-02 01:24:36 -08:00
9ace2eb1e2
fix type errors in import pages
2025-12-02 00:08:55 -08:00
64e50e1b50
add batch import button to database index pages
2025-12-02 00:08:47 -08:00
2dd643e92e
add batch import pages for characters/weapons/summons
2025-12-02 00:00:41 -08:00
1ea0eee86c
add suggestion props to all database section components
2025-12-01 23:52:06 -08:00
bba78d5781
feat: add suggestion UI components for batch import
...
- SuggestionBadge: sparkle icon with tooltip for accept/dismiss actions
- SuggestionDetailItem: detail item wrapper with suggestion badge support
- TabbedEntitySelector: entity image grid for batch selection
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-01 23:43:56 -08:00
b28ba551de
add batch preview adapter methods
2025-12-01 23:40:55 -08:00
c8c4693e08
Switch font from Goalking to AGrot
...
- Import fonts.css in app.html
- Update --font-family CSS variable to use AGrot
- Adjust $bold weight from 600 to 700 to match AGrot's available weights
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-01 13:52:55 -08:00
7a639effaa
database: add entity edit page scaffolds
2025-12-01 09:57:53 -08:00
1cbcd91f94
entity adapter: add raw data fetch methods
2025-12-01 09:54:39 -08:00
be75fcbcbd
database detail pages: add Info/Images/Raw tabs
2025-12-01 09:54:35 -08:00
395a5c166f
SegmentedControl: add size prop (default/small)
2025-12-01 09:54:06 -08:00
7a57680ec1
use ElementLabel/ProficiencyLabel, show all fields in detail pages
2025-12-01 08:35:34 -08:00
371cb7d102
fix: use camelCase granblueId in view mode
2025-12-01 08:35:30 -08:00
20705cc3b2
SegmentedControl: only fire onValueChange on actual changes
...
Prevents onValueChange from firing during initialization, which
caused pushState errors before router was ready.
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-01 05:02:56 -08:00
83b18645c8
fix: guard pushState until router is initialized
2025-12-01 04:59:16 -08:00
4fda863339
fix: use pushState + popstate for instant tab switching
2025-12-01 04:57:22 -08:00
21bda28910
fix: always use explicit tab path in URL
2025-12-01 04:36:17 -08:00
5063e8e73c
fix: use goto() instead of pushState for tab URL sync
2025-12-01 04:33:28 -08:00
af27f0fbbc
add URL-based tab routing with pushState sync
2025-12-01 04:29:21 -08:00
5b0d41a020
move teams/[id] route into [[tab=tab]] optional segment
2025-12-01 04:27:42 -08:00
6ab74b43b1
add tab param matcher for URL routing
2025-12-01 04:27:01 -08:00
a9dcbd18f8
DetailItem: adjust padding and remove hover styles
2025-12-01 04:11:22 -08:00
ef534164f0
database/[id]: add page wrapper styles
2025-12-01 04:11:11 -08:00
3df5564772
database/new: remove newSeries, use contained TagInput
2025-12-01 04:11:07 -08:00
068d9f0991
weapons: auto-update max level/skill based on uncap
2025-12-01 04:10:45 -08:00
dea8a3bc24
weapons: move extra/limit/ax to taxonomy, fix uncap stars
2025-12-01 04:10:41 -08:00
c2b2de9e96
TagInput: add contained prop with max-width
2025-12-01 04:10:36 -08:00
6409de0c29
feat(weapons): add edit mode to weapon detail page
...
- Add edit mode state management (editMode, editData, isSaving)
- Use DetailScaffold wrapper for consistent edit UI
- Import and integrate section components:
- WeaponMetadataSection, WeaponUncapSection
- WeaponTaxonomySection, WeaponStatsSection
- Add Nicknames, Dates, Links, Character (recruits) sections in edit mode
- Connect saveChanges to entityAdapter.updateWeapon()
- Invalidate TanStack Query cache after successful save
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-01 03:29:47 -08:00
fda2b3188f
feat(summons): add edit mode to summon detail page
...
- Add edit mode state management (editMode, editData, isSaving)
- Use DetailScaffold wrapper for consistent edit UI
- Import and integrate section components:
- SummonMetadataSection, SummonUncapSection
- SummonTaxonomySection, SummonStatsSection
- Add Nicknames, Dates, Links sections in edit mode
- Connect saveChanges to entityAdapter.updateSummon()
- Invalidate TanStack Query cache after successful save
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-01 03:28:01 -08:00
3e23585ee7
characters: connect edit page to real API
...
Replace simulated save with actual API call to updateCharacter().
Invalidates TanStack Query cache on successful update.
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-01 03:25:14 -08:00
179cc13725
adapters: add update methods for characters, weapons, and summons
...
Add updateCharacter(), updateSummon(), and updateWeapon() methods to
entity adapter. Each method uses PATCH and clears the entity cache
after successful update.
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-01 03:24:15 -08:00
7a86790670
weapons: add recruits character search field
...
Add CharacterTypeahead component for async character search using Svelecte.
The component debounces input and queries the search API for matching
characters. Added recruits field to weapon creation page.
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-01 03:17:17 -08:00
0d0163edec
characters: add nicknames to creation page
...
Backfill nicknames support to character creation page:
- Add nicknamesEn and nicknamesJp fields to editData
- Import and use TagInput component for nickname entry
- Add nicknames section to form UI
- Update CreateCharacterPayload interface with nickname fields
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-01 03:10:31 -08:00
fdc50906dc
weapons: add creation page and update section components
...
Create /database/weapons/new route with full weapon creation form:
- Granblue ID validation
- Basic info (name, rarity)
- Uncap settings with cascade logic (Transcendence → ULB → FLB)
- Taxonomy (element, proficiency, series, new_series)
- Stats (HP/ATK with FLB/ULB variants)
- Caps (max_level, max_skill_level, max_awakening_level)
- Nicknames via TagInput
- Dates and external links
Update section components:
- WeaponUncapSection: Add cascade logic, extra/limit/ax fields
- WeaponTaxonomySection: Add series dropdowns with options
- WeaponStatsSection: Add ULB stats, caps section
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-01 03:08:52 -08:00
d1c40ee38d
use dynamic image path for auth background
2025-12-01 03:08:11 -08:00
901fd5a157
weapons: add frontend adapter methods and interfaces
...
Add weapon creation infrastructure to entity adapter:
- WeaponValidationResult interface for validation response
- CreateWeaponPayload interface for weapon creation
- WeaponDownloadStatus interface for download status
- validateWeaponGranblueId() method
- createWeapon() method
- downloadWeaponImages() method
- getWeaponDownloadStatus() method
Also add getWeaponSeriesOptions() utility function.
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-01 03:06:04 -08:00
1fa6429749
summons: add creation page and section components
...
- /database/summons/new route with full form
- UncapSection with FLB/ULB/Transcendence cascade
- TaxonomySection with element and series
- StatsSection with HP/ATK at all uncap levels
- Nicknames via TagInput component
- getSummonMaxUncapLevel() utility function
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-01 03:00:58 -08:00
4973643ee6
entity adapter: add summon creation methods
...
- SummonValidationResult, CreateSummonPayload, SummonDownloadStatus types
- validateSummonGranblueId(), createSummon(), downloadSummonImages(), getSummonDownloadStatus()
- Matches character creation pattern
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-01 02:44:45 -08:00
fbe43490d7
ui: add TagInput component for nicknames
...
- Chip/tag style input for string arrays
- Add/remove tags with Enter or comma
- Backspace removes last tag when input empty
- Supports label, error, maxTags, disabled
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-01 02:43:44 -08:00
39b1ed9f64
nav: context-aware New button for database routes
...
- Show "New character/weapon/summon" pill button on database pages
- Keep existing circular + button for team creation elsewhere
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-01 02:27:47 -08:00
43c291327c
components: use centralized image URL helpers
2025-12-01 02:26:29 -08:00
e9463ae5ba
api config: add getImageBaseUrl, fix api path for prod/dev
2025-12-01 02:26:16 -08:00
19a2b9e77f
utils: use getBasePath for image URLs
2025-12-01 02:26:08 -08:00
220432b40a
entity adapter: expand CreateCharacterPayload with all fields
2025-12-01 02:25:52 -08:00
754d5a633c
new character page: add all fields, uncap cascade logic, validation
2025-12-01 02:25:46 -08:00
28ad2fb37e
DetailItem: add sublabel, width, onchange props; Input: add validation state
2025-12-01 02:25:41 -08:00
e9ba90d656
add image download section to character edit page
...
- new CharacterImagesSection component
- download button with progress polling
- force re-download option
- status display with progress bar
2025-12-01 00:57:03 -08:00
5f5b579ff0
add /database/characters/new page + API methods
...
- new page with granblue_id validation
- role check (>= 7) on server
- API methods: validate, create, download images
- permanent edit mode with create button
2025-12-01 00:55:53 -08:00
b58cbbe72f
refactor character edit page to use section components
...
- use DetailScaffold wrapper
- extract metadata, uncap, taxonomy, stats sections
- standardize field naming (camelCase)
- add element-themed checkboxes
2025-12-01 00:52:12 -08:00
817084cee5
teams/new: fix css leak on prefetch, remove open search button
2025-12-01 00:22:52 -08:00
1024e155c3
fix button: no translate on circular, fix elemental hover colors
2025-12-01 00:22:52 -08:00
a262388fc7
fix api path for prod (/v1) vs dev (/api/v1)
2025-11-30 23:34:32 -08:00
e50ba8ffad
Fix auth titles
2025-11-30 23:22:04 -08:00
07f57d20fb
routes: redirect root to /teams/explore
2025-11-30 23:16:07 -08:00
d412e760ab
nav: show register/login when logged out, move guides/collection to menu
2025-11-30 23:16:04 -08:00
7e02884941
input: add no1password prop, tweak counter styling
2025-11-30 23:16:00 -08:00
de616755f5
auth: use placeholders instead of labels, add username note
2025-11-30 23:15:56 -08:00
e3e9ccdd6c
auth: add port-breeze background and back-to-home link
2025-11-30 23:15:52 -08:00
4b96633f69
simplify root layout for route group structure
2025-11-30 22:29:08 -08:00
f79e3f2a10
update auth store redirect to /auth/login
2025-11-30 22:29:08 -08:00
a1bcb0e523
update Navigation login link to /auth/login
2025-11-30 22:29:08 -08:00
0f50d9fd73
remove old login route (moved to /auth/login)
2025-11-30 22:28:59 -08:00
9ace6f0862
remove old routes (moved to app group)
2025-11-30 22:28:59 -08:00
b78ee7ca20
move routes to (app) route group
2025-11-30 22:28:17 -08:00
3498b7d966
add signup redirect to register
2025-11-30 22:28:13 -08:00
93efc9946a
add registration page with validation
2025-11-30 22:26:32 -08:00