Commit Graph
100 Commits
Author SHA1 Message Date
makiolajandClaude Opus 4.6 6108db3dab debug: add detailed error logging for Logto M2M token request failures
CI / ci (push) Successful in 1m10s
CI / e2e (push) Has been skipped
CI / deploy (push) Successful in 13s
Logs the URL, resource, app ID prefix, and response body when the
token request fails — helps diagnose 400 errors from Logto.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-12 23:18:05 +02:00
makiolajandClaude Opus 4.6 af58145fe1 feat: show avatar image in top nav when user has one
CI / ci (push) Successful in 1m13s
CI / e2e (push) Has been skipped
CI / deploy (push) Successful in 14s
UserMenu now fetches the user's profile and displays their avatar
image in the nav button instead of the default circle-user icon.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-12 23:07:28 +02:00
makiolajandClaude Opus 4.6 b647e23f91 fix: use presigned S3 URLs for avatar images instead of /uploads/ paths
CI / ci (push) Successful in 1m11s
CI / e2e (push) Has been skipped
CI / deploy (push) Successful in 14s
Avatar images were rendered via /uploads/ which doesn't exist since
the S3 migration. Now the server enriches profile responses with
avatarImageUrl (presigned S3 URL) and the frontend uses it directly.
Also fixed the public profile page at /users/:id.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-12 23:02:45 +02:00
makiolajandClaude Opus 4.6 62916a8397 fix(F-08): stronger selected state on hobby picker cards + biome formatting
CI / ci (push) Successful in 1m13s
CI / deploy (push) Successful in 13s
CI / e2e (push) Has been skipped
Selected hobby cards now use dark gray fill with inverted white
text/icon for clear visual distinction. Also fixes biome formatting
across all changed files.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-12 22:37:19 +02:00
makiolajandClaude Opus 4.6 596872d942 fix(F-05): use icon button for crop trigger and trash icon for image removal
Changed "Adjust framing" text to a crop icon button visible only in
edit mode. Replaced the X icon on the image remove button with a
trash icon for clearer semantics.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-12 22:36:40 +02:00
makiolajandClaude Opus 4.6 da5ce7da1d fix(F-06): auto-open crop editor after image upload on item detail
Added onCropChange and dominantColor props to ImageUpload in the item
detail page, so the crop editor opens automatically after uploading
a new image.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-12 22:35:59 +02:00
makiolajandClaude Opus 4.6 452928760a fix(F-01): fix avatar upload persistence on profile page
Replaced the one-shot initialized flag with a dirty flag that allows
the useEffect to re-sync local state from server data after a
successful save. Previously, once initialized was set to true, the
effect never ran again so avatar changes were lost on refetch.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-12 22:35:35 +02:00
makiolajandClaude Opus 4.6 957d661567 fix(F-03): pass imageUrl and crop/color props to ItemCard in CollectionView
The flat list was missing dominantColor/crop props, and the grouped
view was also missing imageUrl entirely — causing images not to render
on collection cards.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-12 22:34:47 +02:00
makiolajandClaude Opus 4.6 e3124e49c9 fix(F-04): include crop/color fields in item queries and use dominantColor in GearImage
getAllItems and getItemById were not selecting dominantColor, cropZoom,
cropX, cropY from the database. GearImage was ignoring the dominantColor
prop. Now the fields flow end-to-end from DB to UI background fill.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-12 22:34:19 +02:00
makiolajandClaude Opus 4.6 581872b534 fix(F-07): add crop/color fields to updateItem service type
The updateItem function's TypeScript type was missing dominantColor,
cropZoom, cropX, and cropY fields, causing crop settings to silently
fail to save despite the Zod schema and DB schema supporting them.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-12 22:33:28 +02:00
makiolaj ce48121b2b test(31): complete UAT - 2 passed, 0 issues 2026-04-12 22:23:46 +02:00
makiolaj 2948cc5848 test(30): complete UAT - 3 passed, 1 cosmetic, 3 blocked 2026-04-12 22:22:03 +02:00
makiolajandClaude Opus 4.6 9318bc56ac style: fix biome formatting in logout redirect
CI / ci (push) Successful in 1m11s
CI / e2e (push) Has been skipped
CI / deploy (push) Successful in 14s
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-12 22:06:58 +02:00
makiolajandClaude Opus 4.6 4241023950 fix: use GEARBOX_URL for post-logout redirect URI
CI / ci (push) Failing after 12s
CI / e2e (push) Has been skipped
CI / deploy (push) Has been skipped
Behind a reverse proxy, c.req.url resolves to internal URL which
doesn't match the registered post_logout_redirect_uri in Logto.
Use GEARBOX_URL env var (already required for OAuth) as the
redirect target.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-12 22:05:53 +02:00
makiolajandClaude Opus 4.6 cba3804b31 fix: include client_id in Logto end-session redirect
CI / ci (push) Successful in 1m13s
CI / e2e (push) Has been skipped
CI / deploy (push) Successful in 13s
Logto needs client_id to validate the post_logout_redirect_uri and
auto-redirect back to the app. Without it, user gets stuck on
Logto's end-session success page.

Note: post_logout_redirect_uri must be registered in Logto Console
under the app's "Post sign-out redirect URIs".

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-12 21:58:27 +02:00
makiolajandClaude Opus 4.6 23cfbf7e4b fix: redirect to Logto end-session endpoint on logout
CI / ci (push) Successful in 1m12s
CI / e2e (push) Has been skipped
CI / deploy (push) Successful in 20s
After revoking the local session, redirect to Logto's /session/end
so the OIDC session is cleared too. Previously redirected to /login
which immediately re-authenticated via the still-valid Logto session.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-12 21:54:49 +02:00
makiolajandClaude Opus 4.6 ddb76fd229 fix: destructure useLogout correctly in UserMenu
CI / ci (push) Successful in 1m13s
CI / e2e (push) Has been skipped
CI / deploy (push) Successful in 14s
useLogout() returns { logout } but was assigned directly, causing
"r is not a function" when clicking sign out.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-12 21:47:55 +02:00
makiolaj 84205563a7 test(29): complete UAT - 2 passed, 4 issues 2026-04-12 21:41:24 +02:00
makiolaj 094301cc92 test(28): complete UAT - 4 passed, 1 issue, 3 blocked 2026-04-12 21:30:53 +02:00
makiolajandClaude Opus 4.6 d749e41f7b fix: allow null avatarUrl in updateProfileSchema
CI / ci (push) Successful in 1m13s
CI / e2e (push) Has been skipped
CI / deploy (push) Successful in 15s
The Zod schema rejected null for avatarUrl, but the client sends null
when the avatar is removed. Changed to z.string().nullable().optional().

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-12 21:24:11 +02:00
makiolajandClaude Opus 4.6 a0c01d388c fix: remove duplicate statements from migration 0004 and orphan migration file
CI / ci (push) Successful in 1m9s
CI / e2e (push) Has been skipped
CI / deploy (push) Successful in 1m19s
Migration 0004 contained CREATE TABLE and ALTER TABLE statements already
applied in migrations 0002 and 0003, causing PGlite test DB initialization
to fail (311 test failures). Stripped to only the new dominant_color and
crop_* columns. Also removed orphan 0000_fuzzy_shiva.sql.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-12 21:07:18 +02:00
makiolajandClaude Opus 4.6 15c9f94d67 docs(phase-30): complete phase execution — onboarding redesign
CI / ci (push) Failing after 17s
CI / e2e (push) Has been skipped
CI / deploy (push) Has been skipped
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-12 20:50:09 +02:00
makiolajandClaude Opus 4.6 3870662dc6 docs(30): complete plan execution summaries for plans 02 and 03
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-12 20:48:59 +02:00
makiolajandClaude Opus 4.6 115766cf60 feat(30-03): replace OnboardingWizard with catalog-driven OnboardingFlow
Swap old 4-step modal wizard with new full-screen, hobby-personalized
onboarding experience. Delete OnboardingWizard.tsx.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-12 20:48:41 +02:00
makiolajandClaude Opus 4.6 0db8771574 fix(30-02): fix biome formatting in onboarding components
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-12 20:47:47 +02:00
makiolajandClaude Opus 4.6 5c18a3cd6c feat(30-02): build full-screen catalog-driven onboarding flow UI
Implements 5-step onboarding: Welcome, Hobby Picker, Item Browser,
Review, and Done. Includes hobby card selection, popular item grid
with check/uncheck, review list with remove, CSS step transitions,
and responsive grid layout.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-12 20:46:55 +02:00
makiolajandClaude Opus 4.6 1de91bc024 docs(30-01): complete plan execution summary
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-12 20:44:42 +02:00
makiolajandClaude Opus 4.6 9448571993 fix(30-01): fix import ordering for biome lint compliance
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-12 20:44:13 +02:00
makiolajandClaude Opus 4.6 5b35e60477 feat(30-01): create onboarding route with Zod validation and register
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-12 20:43:29 +02:00
makiolajandClaude Opus 4.6 9da4c8435c feat(30-01): create onboarding service with batch item creation
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-12 20:42:59 +02:00
makiolajandClaude Opus 4.6 d64708056f feat(30-01): add popular-items-by-tags endpoint to discovery routes
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-12 20:42:29 +02:00
makiolajandClaude Opus 4.6 2347d49b69 feat(30-01): add popular-items-by-tags query to discovery service
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-12 20:41:03 +02:00
makiolajandClaude Opus 4.6 d37e64e71c feat(30-01): add shared hobby configuration with tag mappings
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-12 20:40:43 +02:00
makiolajandClaude Opus 4.6 edd1cdde68 docs(30): create onboarding redesign plans (3 plans, 2 waves)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-12 20:38:14 +02:00
makiolaj 3906273a10 docs: update authentication.md with Logto setup checklist
CI / ci (push) Failing after 18s
CI / e2e (push) Has been skipped
CI / deploy (push) Has been skipped
2026-04-12 20:31:45 +02:00
makiolaj b355c333e5 docs(phase-31): complete phase execution and verification 2026-04-12 20:19:10 +02:00
makiolaj ff01410183 docs(31): add code review report 2026-04-12 20:18:11 +02:00
makiolaj 02319baaf5 docs(31): add execution summaries for plans 01 and 02 2026-04-12 20:17:25 +02:00
makiolaj 97b1936148 style(31-01): fix biome lint formatting for JSX expressions 2026-04-12 20:16:29 +02:00
makiolaj f69861d449 feat(31-02): add responsive icon buttons to global item detail page
Replace text action buttons (Add to Collection, Add to Thread) with
icon-only buttons on mobile. Uses plus and message-square-plus icons.
All icon buttons have aria-label and 44px touch targets.
2026-04-12 20:16:08 +02:00
makiolaj 410a6491fe feat(31-02): add responsive icon buttons to setup detail page
Replace text action buttons (Add Items, Public/Private toggle, Delete
Setup) with icon-only buttons on mobile. Migrate inline SVGs to
LucideIcon component (plus, globe, trash-2). All icon buttons have
aria-label and 44px touch targets.
2026-04-12 20:15:33 +02:00
makiolaj b6f12fa93d feat(31-01): add responsive icon buttons to candidate detail page
Replace text action buttons (Edit, Pick as winner, Delete) with
icon-only buttons on mobile viewports (below md: breakpoint). Desktop
retains full text+icon buttons. All icon buttons have aria-label and
44px touch targets.
2026-04-12 20:14:58 +02:00
makiolaj 7effedea3f feat(31-01): add responsive icon buttons to item detail page
Replace text action buttons (Duplicate, Delete, Edit) with icon-only
buttons on mobile viewports (below md: breakpoint). Desktop retains
full text buttons. All icon buttons have aria-label and 44px touch targets.
2026-04-12 20:14:28 +02:00
makiolaj 8a01930de1 docs(31): create execution plans for mobile icon buttons 2026-04-12 20:12:37 +02:00
makiolajandClaude Opus 4.6 6c76dbbee3 docs(phase-29): complete phase execution
Phase 29 Image Presentation verified and marked complete.
14/14 must-haves passed. Next: Phase 30 Onboarding Redesign.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-12 20:11:10 +02:00
makiolaj c57e260e59 docs(31): add validation strategy 2026-04-12 20:10:22 +02:00
makiolaj 9721fbb5cc docs(31): research mobile icon button implementation 2026-04-12 20:09:53 +02:00
makiolajandClaude Opus 4.6 dd3cee1a64 docs(29): add execution summaries for plans 03 and 04
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-12 20:09:30 +02:00
makiolajandClaude Opus 4.6 6509b33501 feat(29-04): create backfill script for dominant colors
One-time migration script processes items, globalItems, and
threadCandidates to extract dominant colors via Sharp. Idempotent,
batched (10 concurrent), with progress logging.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-12 20:09:17 +02:00
makiolaj 9817a80f32 docs(31): UI design contract for mobile icon buttons 2026-04-12 20:08:44 +02:00
makiolajandClaude Opus 4.6 a18b9d37bd feat(29-03): add crop editor to item and candidate detail pages
Add "Adjust framing" button to item detail and candidate detail
pages. Crop editor appears inline, persists via update mutations.
Fix lint issues in ImageCropEditor import ordering.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-12 20:08:08 +02:00
makiolajandClaude Opus 4.6 78a097cba2 feat(29-03): integrate crop editor into ImageUpload
Show ImageCropEditor after successful upload when onCropChange
callback is provided. Editor replaces image preview temporarily.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-12 20:04:29 +02:00
makiolajandClaude Opus 4.6 23f62fde3d feat(29-03): create ImageCropEditor component
Zoom+pan editor using react-easy-crop with zoom slider, save/cancel
buttons, and dominant color background. Returns crop coordinates
for persistence.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-12 20:03:34 +02:00
makiolajandClaude Opus 4.6 6f4fd78b8b feat(29-03): install react-easy-crop for image framing editor
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-12 20:03:13 +02:00
makiolajandClaude Opus 4.6 9636033361 fix(29-02): lint fixes for GearImage integration
Fix unused parameter warning and formatting issues across all
updated components.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-12 20:02:38 +02:00
makiolajandClaude Opus 4.6 66d9c4157b feat(29-02): update detail pages and LinkToGlobalItem to use GearImage
Replace object-cover on item detail, global item detail, candidate
detail, global items index, and LinkToGlobalItem. Detail pages use
dominant color backgrounds. LinkToGlobalItem uses cover mode for
32px thumbnails.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-12 20:02:12 +02:00
makiolaj febc43a074 docs(30): UI design contract 2026-04-12 20:01:24 +02:00
makiolaj fd0a7eef47 docs(state): record phase 31 context session 2026-04-12 20:01:20 +02:00
makiolaj 240aed266c docs(31): capture phase context 2026-04-12 20:01:20 +02:00
makiolajandClaude Opus 4.6 91846b5ca2 feat(29-02): update ComparisonTable, CatalogSearchOverlay, ImageUpload
Replace object-cover with GearImage across ComparisonTable,
CatalogSearchOverlay (2 instances), and ImageUpload preview.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-12 20:00:46 +02:00
makiolajandClaude Opus 4.6 05c09182fd feat(29-02): update CandidateCard and CandidateListItem to use GearImage
Replace object-cover with GearImage for fit-within rendering on
candidate cards and list items.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-12 19:59:44 +02:00
makiolaj d8ede7a942 docs(phase-30): add validation strategy 2026-04-12 19:59:41 +02:00
makiolaj 673d3db06a docs(30): research onboarding redesign phase 2026-04-12 19:59:11 +02:00
makiolajandClaude Opus 4.6 2865e657d0 feat(29-02): update ItemCard and GlobalItemCard to use GearImage
Replace object-cover with GearImage component for fit-within rendering.
Add dominantColor and crop props to both card components.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-12 19:58:39 +02:00
makiolajandClaude Opus 4.6 06d3984161 feat(29-02): create GearImage component for fit-within rendering
Renders images with object-contain by default (letterbox/pillarbox),
object-cover when cover prop is set, or CSS transform when crop
values are present. Parent container uses dominant color background.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-12 19:57:54 +02:00
makiolajandClaude Opus 4.6 34804731a1 feat(29-01): add image presentation fields to Zod schemas
Add dominantColor, cropZoom, cropX, cropY to createItemSchema,
createCandidateSchema, and upsertGlobalItemSchema.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-12 19:56:56 +02:00
makiolajandClaude Opus 4.6 2696b78f9e feat(29-01): extract dominant color in image upload endpoints
Both POST /api/images and POST /api/images/from-url now return
dominantColor in their response body.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-12 19:56:34 +02:00
makiolajandClaude Opus 4.6 e305fa7ae5 feat(29-01): add dominant color extraction via Sharp
extractDominantColor() resizes image to 1x1 pixel for weighted average
color. Integrated into fetchImageFromUrl to return dominantColor.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-12 19:56:21 +02:00
makiolajandClaude Opus 4.6 b637b105fb feat(29-01): generate migration for image presentation fields
Migration adds dominant_color, crop_zoom, crop_x, crop_y to items,
global_items, and thread_candidates. Run db:push to apply.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-12 19:56:01 +02:00
makiolaj 11cc082f40 docs(state): record phase 30 context session 2026-04-12 19:55:50 +02:00
makiolaj b2cb6451b0 docs(30): capture phase context 2026-04-12 19:55:50 +02:00
makiolajandClaude Opus 4.6 36363a8ca3 feat(29-01): add dominantColor and crop fields to schema
Add dominant_color, crop_zoom, crop_x, crop_y columns to items,
global_items, and thread_candidates tables.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-12 19:55:47 +02:00
makiolajandClaude Opus 4.6 cee15002ae feat(29-01): install Sharp for image processing
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-12 19:55:23 +02:00
makiolajandClaude Opus 4.6 718b118fb8 docs(29): fix plan file naming convention
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-12 19:52:37 +02:00
makiolajandClaude Opus 4.6 7064c6cdf1 docs(29): research, validation, and 4 plans for image presentation
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-12 19:51:36 +02:00
makiolaj eac7cea0c8 docs(29): UI design contract 2026-04-12 19:47:13 +02:00
makiolaj 1e1f49fc01 docs(state): record phase 29 context session 2026-04-12 19:42:16 +02:00
makiolaj b1ffd62ee3 docs(29): capture phase context 2026-04-12 19:42:11 +02:00
makiolaj 40e7f94c52 docs(phase-28): complete phase execution 2026-04-12 17:51:49 +02:00
makiolaj c7fa80bd66 docs(28): add plan summaries for all three plans 2026-04-12 17:51:03 +02:00
makiolajandClaude Opus 4.6 1b0013422f feat(28-03): add profile navigation link and extend /me with createdAt
Adds Profile link to UserMenu dropdown (above Settings), extends /me
endpoint to return user's createdAt for member-since display, and
updates AuthState interface with optional createdAt field.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-12 17:50:36 +02:00
makiolajandClaude Opus 4.6 23692514cb feat(28-02): create profile page with account management, separate from settings
Adds /profile route with four sections: profile info (reuses ProfileSection),
account info (email + member since), security (password change/set), and
danger zone (account deletion with typed confirmation). Removes ProfileSection
from settings page per D-01.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-12 17:49:10 +02:00
makiolajandClaude Opus 4.6 e8207a33f9 feat(28-01): add account management routes for password, email, and deletion
Creates /api/account routes with password change (verifies current first),
email update, has-password check, and account deletion with public setup
anonymization. Adds Zod validation schemas and registers routes in index.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-12 17:47:17 +02:00
makiolajandClaude Opus 4.6 fcd8279d79 feat(28-01): create Logto Management API client service with M2M auth
Implements LogtoManagementClient with token caching, password verification,
password update, email update, user deletion, and has-password check.
All methods proxy to Logto Management API via M2M credentials.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-12 17:45:48 +02:00
makiolaj 37030c397e docs(28): create phase plans for profile and Logto integration 2026-04-12 17:42:49 +02:00
makiolaj 7d8e196571 docs(28): UI design contract 2026-04-12 17:39:27 +02:00
makiolaj 18fa93dd01 docs(phase-28): add validation strategy 2026-04-12 17:37:57 +02:00
makiolaj 28218ad9e6 docs(28): research Logto Management API integration for profile and account management 2026-04-12 17:37:31 +02:00
makiolaj a3ccffd5f4 docs: ship v2.1, add v2.2 and v2.3 milestones to roadmap 2026-04-12 17:33:14 +02:00
makiolaj b71900efbd docs(state): record phase 28 context session 2026-04-12 17:33:06 +02:00
makiolaj 631fe3e6b5 docs(28): capture phase context 2026-04-12 17:32:58 +02:00
makiolaj b234988db2 docs(quick-260411-1h2): update STATE.md with quick task completion
CI / ci (push) Successful in 1m24s
CI / e2e (push) Has been skipped
CI / deploy (push) Successful in 15s
2026-04-11 01:13:40 +02:00
makiolaj 770c5128b7 docs(quick-260411-1h2): complete rebuild global items page with sticky toolbar plan 2026-04-11 01:13:28 +02:00
makiolaj ee3b6f74e3 feat(quick-260411-1h2): rebuild global items page with sticky toolbar and inline filters
- Two-row sticky toolbar: search input + view toggle (Row 1), tag/weight/price filter pills (Row 2)
- Tag filter popover with click-outside close via useRef/useEffect
- Weight and price range filter popovers with min/max sliders
- Active filter removable pills + Clear all button
- Grid view uses existing GlobalItemCard, list view uses Link-based GlobalItemListRow
- SkeletonGrid and SkeletonList loading states
- Empty state with context-aware message (query vs no catalog items)
- Search input pre-fills from ?q= URL param, debounces 300ms
- No framer-motion, no manual entry mode, no Add buttons
2026-04-11 01:12:55 +02:00
makiolaj deb10ed359 docs(quick-260411-0zq): search UX redesign plan and gitignore tmp/
CI / ci (push) Successful in 1m10s
CI / e2e (push) Has been skipped
CI / deploy (push) Successful in 13s
2026-04-11 00:50:15 +02:00
makiolaj c56850954c docs(quick-260411-0zq): complete redesign search UX plan
- Add SUMMARY.md for quick task 260411-0zq
- Update STATE.md with completed quick task entry
2026-04-11 00:49:19 +02:00
makiolaj 467eb8737d chore(quick-260411-0zq): regenerate route tree with updated search params
- Route tree picks up validateSearch for /global-items/ route
- Also adds /setups/ route entry that was missing from previous generation
2026-04-11 00:47:41 +02:00
makiolaj 334bf334f6 feat(quick-260411-0zq): global items page reads query from URL search params
- Add validateSearch with z.object({ q }) to route definition
- Use Route.useSearch() to get q param instead of local state
- Remove duplicate search input UI, debounce state and useEffect
- Show "Showing results for X" label when q is present
- Update empty state text based on whether q param exists
2026-04-11 00:47:23 +02:00
makiolaj 04e32c2017 feat(quick-260411-0zq): convert TopNav search button to real input with navigation
- Replace fake button with real text input and search icon
- Navigate to /global-items?q=query on Enter or icon click
- Clear input after navigation
- Remove openCatalogSearch usage from TopNav (FAB/BottomTabBar flows unchanged)
2026-04-11 00:46:54 +02:00
makiolajandClaude Opus 4.6 e9d8ddc418 fix: strip whitespace from Coolify token in deploy step
CI / ci (push) Successful in 1m10s
CI / e2e (push) Has been skipped
CI / deploy (push) Successful in 7s
Root cause: COOLIFY_TOKEN secret had a leading space (0x20) causing
401 Unauthenticated. Strip whitespace with tr before passing to curl.
Also removes debug diagnostics.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-11 00:31:57 +02:00