Commit Graph
100 Commits
Author SHA1 Message Date
makiolaj 3144d290d4 docs(phase-27): evolve PROJECT.md after phase completion 2026-04-10 23:52:48 +02:00
makiolaj acb4672aed docs(phase-27): complete phase execution 2026-04-10 23:52:28 +02:00
makiolaj 2b27309b23 docs(27-03): complete root layout integration plan
- SUMMARY.md: TopNav/BottomTabBar wired, hero removed, /setups public route
- STATE.md: progress 100%, session recorded
- ROADMAP.md: phase 27 marked Complete (4/4 plans)
2026-04-10 23:48:43 +02:00
makiolaj c628d6b79c feat(27-03): remove hero section from landing page
- Delete HeroSection function (Discover Gear heading, search bar, Go to Collection link)
- Remove unused imports: Link, Search (lucide-react), useAuth, useUIStore
- LandingPage now starts directly with PopularSetupsSection
- Search now exclusively in TopNav bar
2026-04-10 23:47:50 +02:00
makiolaj d99ebbd8be feat(27-03): wire TopNav, BottomTabBar, and FAB changes into __root.tsx
- Replace TotalsBar import with TopNav and BottomTabBar imports
- Remove isDashboard and totalsBarProps variables
- Render TopNav instead of TotalsBar
- Add /setups to isPublicRoute for anonymous direct navigation
- Wrap FabMenu in hidden md:block for mobile hiding
- Add BottomTabBar after FAB block (md:hidden in component itself)
- Add pb-16 md:pb-0 to root div to prevent content occlusion by bottom tab bar
2026-04-10 23:47:30 +02:00
makiolaj 83b760a6d6 docs(27-01): complete TopNav and BottomTabBar plan
- SUMMARY.md: two components created, house icon deviation documented
- STATE.md: advanced to plan 4/4, progress 91%, decision recorded
- ROADMAP.md: phase 27 updated (3/4 summaries)
2026-04-10 23:45:56 +02:00
makiolaj 5984aabd40 docs(27-00): complete wave 0 E2E scaffolding plan
- Create 27-00-SUMMARY.md with test changes documentation
- Update STATE.md: advance plan to 3/4, add decisions, update session
- Update ROADMAP.md: reflect 2/4 summaries complete for phase 27
2026-04-10 23:45:01 +02:00
makiolaj 24ed71975f feat(27-01): create BottomTabBar component
- Fixed bottom tab bar for mobile (md:hidden) with z-20 stacking
- 4 tabs: Home, Collection, Setups, Search with Lucide icons
- Collection and Setups fire openAuthPrompt for anonymous users
- Search tab calls openCatalogSearch('collection') to open overlay
- Active route highlighting via useMatchRoute
- Framer Motion entry animation (y slide + fade)
- iOS safe area padding with env(safe-area-inset-bottom)

[Rule 1 - Bug] Used 'house' icon instead of 'home': lucide-react has no 'Home' icon (only 'House')
2026-04-10 23:44:56 +02:00
makiolaj be3759b53a docs(27-02): complete setups-elevation plan 2026-04-10 23:44:36 +02:00
makiolaj dccb1f8d3f feat(27-01): create TopNav component
- Sticky top nav bar replacing TotalsBar with full navigation
- Logo, Home/Collection/Setups links, search bar, and user avatar
- NavLinkOrButton helper: button for anon users on protected routes, Link for authenticated
- Active route highlighting via useMatchRoute
- Desktop search bar triggers openCatalogSearch('collection')
- Desktop nav links hidden on mobile (hidden md:flex)
- Uses LucideIcon wrapper, not direct lucide-react imports

[Rule 1 - Bug] Used 'house' icon fallback check: plan specified 'home' which does not exist in lucide-react; 'search' and 'layers' verified present
2026-04-10 23:44:31 +02:00
makiolaj 94e2094b9b test(27-00): wave 0 E2E scaffolding for Phase 27 nav restructure
- Update dashboard.spec.ts: replace old card heading tests with discovery section tests
- Add TopNav presence test (Home/Collection/Setups links in nav)
- Add mobile bottom tab bar test with 375px viewport
- Mark removed dashboard card tests as test.fixme with explanatory comments
- Update collection.spec.ts: replace setups tab test with fallback-to-gear test
- Add standalone /setups route test in new Setups page describe block
- All tests expected to fail until Plans 01-03 implement the new UI
2026-04-10 23:44:10 +02:00
makiolaj 7fd9845c13 feat(27-02): remove Setups tab from Collection page
- TAB_ORDER reduced to [gear, planning]
- searchSchema z.enum updated; .catch("gear") handles old ?tab=setups URLs
- SetupsView import and render branch removed
- AnimatePresence, slide variants, CollectionView/PlanningView unchanged
2026-04-10 23:43:49 +02:00
makiolaj 329bfce379 feat(27-02): add /setups top-level route page
- Creates src/client/routes/setups/index.tsx
- Renders SetupsView inside standard max-w-7xl page container
- Follows existing createFileRoute pattern from $setupId.tsx sibling
2026-04-10 23:43:33 +02:00
makiolaj 2286e428a0 fix(27): revise plans based on checker feedback 2026-04-10 23:40:11 +02:00
makiolaj 0f3e85f7c4 docs(27): create phase plan 2026-04-10 23:32:19 +02:00
makiolaj 078694c124 docs(phase-27): add validation strategy 2026-04-10 23:27:04 +02:00
makiolaj 9bb8f8faa2 docs(27): research phase — top nav restructure and search bar rethink 2026-04-10 23:26:18 +02:00
makiolaj c5b4dacc1a docs(27): add phase 27 to roadmap 2026-04-10 23:22:24 +02:00
makiolaj d6ed015b85 docs(state): record phase 27 context session 2026-04-10 23:20:30 +02:00
makiolaj 510ef9fce3 docs(27): capture phase context 2026-04-10 23:20:21 +02:00
makiolaj fbf6fd449a docs: remove backlog 999.3 — public access already shipped in phase 24 2026-04-10 23:14:21 +02:00
makiolaj e367e152e0 docs: add backlog item 999.11 — marketing website (www vs app split) 2026-04-10 23:11:04 +02:00
makiolaj 24a2725e2c docs: add backlog items 999.5–999.10 — legal pages, admin panel, feedback, analytics, mobile app, monetization 2026-04-10 23:10:40 +02:00
makiolaj 2a00b2d31f docs: add backlog item 999.4 — top nav restructure and search bar rethink
CI / ci (push) Successful in 1m11s
CI / e2e (push) Has been skipped
CI / deploy (push) Successful in 7s
2026-04-10 17:21:51 +02:00
makiolajandClaude Opus 4.6 6e3ce4a31f fix: resolve biome lint errors in discovery files
CI / ci (push) Successful in 1m8s
CI / e2e (push) Has been skipped
CI / deploy (push) Successful in 14s
Remove unused functions and imports from route tests, fix array index key
warnings in skeleton components, apply biome formatting.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-10 15:15:58 +02:00
makiolaj c98995288b docs(phase-26): evolve PROJECT.md after phase completion
CI / ci (push) Failing after 10s
CI / deploy (push) Has been skipped
CI / e2e (push) Has been skipped
2026-04-10 15:08:50 +02:00
makiolaj c892800969 docs(phase-26): complete phase execution 2026-04-10 15:08:18 +02:00
makiolaj 31a72c68f3 docs(26-03): complete discovery landing page plan
- 26-03-SUMMARY.md: landing page rewrite and PublicSetupCard enhancement
- STATE.md: advanced to phase complete, recorded decisions
- ROADMAP.md: phase 26 marked complete (3/3 plans)
- REQUIREMENTS.md: DISC-01 through DISC-05 marked complete
2026-04-10 15:03:00 +02:00
makiolaj 8aaf4352ed feat(26-03): rewrite landing page as public discovery page
- Replace DashboardPage with LandingPage using discovery hooks
- Add HeroSection with Discover Gear heading and catalog search trigger
- Add PopularSetupsSection using useDiscoverySetups with PublicSetupCard
- Add RecentItemsSection using useDiscoveryItems with GlobalItemCard
- Add TrendingCategoriesSection using useDiscoveryCategories with pills
- Conditional Go to Collection CTA for authenticated users
- Loading skeletons with animate-pulse for all three sections
- Empty state handling: sections return null when no data
- SectionSkeleton helper for consistent loading states
- All clickable elements have cursor-pointer
2026-04-10 15:01:49 +02:00
makiolaj 0bf1c68043 feat(26-03): enhance PublicSetupCard with itemCount and creatorName
- Add optional itemCount and creatorName fields to PublicSetupCardProps
- Render item count badge (blue pill) when itemCount > 0
- Render creator attribution line when creatorName is present
- Reorder card layout: name, creator, then count/date row
- Add cursor-pointer to Link className
- Backward compatible: existing usages passing only id/name/createdAt unaffected
2026-04-10 15:00:57 +02:00
makiolaj 0b2e355bf8 docs(26-02): complete discovery routes and hooks plan 2026-04-10 14:59:58 +02:00
makiolaj 747a1c3727 feat(26-02): React Query hooks for discovery data
- Create useDiscoverySetups, useDiscoveryItems, useDiscoveryCategories hooks
- Export DiscoverySetup and DiscoveryCategory interfaces
- Set staleTime 2min for setups/items, 5min for categories
2026-04-10 14:57:53 +02:00
makiolaj 0323e0cd33 feat(26-02): discovery HTTP routes, server registration, and route tests
- Create src/server/routes/discovery.ts with GET /setups, /items, /categories handlers
- Register discoveryRoutes in src/server/index.ts with browseTier rate limiting
- Add auth skip for /api/discovery/* GET requests in auth middleware
- Create tests/routes/discovery.test.ts with 10 tests covering all endpoints and pagination
2026-04-10 14:57:35 +02:00
makiolaj a00b90d97a docs(26-01): complete discovery service plan
- SUMMARY.md: discovery service with cursor pagination
- STATE.md: advanced to plan 2, added decisions, updated progress to 71%
- ROADMAP.md: phase 26 in progress (1/3 plans)
- REQUIREMENTS.md: DISC-02, DISC-03, DISC-04, INFR-02 marked complete
2026-04-10 14:55:15 +02:00
makiolaj d1f8a7aa4c feat(26-01): implement discovery service with cursor pagination
- getPopularSetups: public setups ordered by item count desc, composite cursor pagination
- getRecentGlobalItems: global items ordered by createdAt desc, ISO timestamp cursor
- getTrendingCategories: category counts ordered desc, null categories excluded, simple limit
- Shared CursorPage<T> response shape with hasMore and nextCursor fields
2026-04-10 14:54:13 +02:00
makiolaj 06b6e935f2 test(26-01): add failing tests for discovery service
- getPopularSetups: ordering, privacy filter, cursor pagination, creatorName
- getRecentGlobalItems: ordering, cursor pagination, second page deduplication
- getTrendingCategories: ordering by count desc, null category exclusion, empty state
2026-04-10 14:53:09 +02:00
makiolaj 2f88ead599 fix(26): revise plans based on checker feedback 2026-04-10 14:48:44 +02:00
makiolaj 9226dd3d90 docs(26): create phase plan 2026-04-10 14:45:38 +02:00
makiolaj 9336cd80ed docs(phase-26): add research and validation strategy 2026-04-10 14:38:53 +02:00
makiolajandClaude Sonnet 4.6 6b446033b5 docs(phase-26): research discovery landing page
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-10 14:38:10 +02:00
makiolaj 274bced96d docs(state): record phase 26 context session 2026-04-10 14:33:04 +02:00
makiolaj dbab91a3c7 docs(26): capture phase context 2026-04-10 14:32:56 +02:00
makiolaj b01625473f docs: capture 4 todos - storage tests, image bugs, manufacturer entity
CI / ci (push) Successful in 1m5s
CI / deploy (push) Has been skipped
CI / e2e (push) Has been skipped
2026-04-10 11:24:26 +02:00
makiolaj 77b84dd208 docs: capture todo - Add cursor pointer to all clickable links 2026-04-10 11:17:56 +02:00
makiolaj 6a1572a817 docs(phase-25): evolve PROJECT.md after phase completion
CI / ci (push) Successful in 1m18s
CI / e2e (push) Has been skipped
CI / deploy (push) Has been skipped
2026-04-10 11:13:50 +02:00
makiolaj 1789ee9093 docs(phase-25): complete phase execution 2026-04-10 11:13:18 +02:00
makiolaj aeb3402576 docs(25-02): complete HTTP routes, MCP catalog tools, and attribution display plan 2026-04-10 11:08:16 +02:00
makiolaj fc9a9134e8 chore(25-02): apply biome formatter to task 1 and 2 files 2026-04-10 11:06:11 +02:00
makiolaj e4a65314bd feat(25-02): add attribution display on catalog detail page
- GlobalItem interface extended with sourceUrl, imageCredit, imageSourceUrl fields
- Attribution block below image: Photo credit and source link when present
- Product page link (sourceUrl) at bottom of detail page
- Image div mb-6 moved to attribution paragraph for consistent spacing
2026-04-10 11:05:52 +02:00
makiolaj df6c75f164 feat(25-02): add MCP catalog tools upsert_catalog_item and bulk_upsert_catalog
- New catalog.ts with catalogToolDefinitions and registerCatalogTools
- upsert_catalog_item: single item upsert with full attribution fields (SEED-03)
- bulk_upsert_catalog: batch upsert up to 100 items with created/updated counts
- Registered in createMcpServer after image tools
- 6 new MCP catalog tool tests passing
2026-04-10 11:03:50 +02:00
makiolaj 6491615b1d feat(25-02): add POST single and bulk upsert routes for global items
- POST /api/global-items upserts single item via upsertGlobalItem service
- POST /api/global-items/bulk upserts up to 100 items via bulkUpsertGlobalItems service
- Zod validation via @hono/zod-validator with upsertGlobalItemSchema and bulkUpsertGlobalItemsSchema
2026-04-10 11:02:49 +02:00
makiolaj 25f590247c test(25-02): add failing tests for POST single and bulk upsert routes 2026-04-10 11:02:28 +02:00
makiolaj 9dbf019466 docs(25-01): complete catalog enrichment data layer plan
- SUMMARY.md: attribution columns, upsert service, Zod schemas
- STATE.md: advance to plan 2, add decisions
- ROADMAP.md: update phase 25 progress
- REQUIREMENTS.md: mark CATL-01, CATL-02, CATL-05 complete
2026-04-10 10:59:58 +02:00
makiolaj c8ebbf8139 feat(25-01): Zod schemas, upsert service functions, passing tests
- Add upsertGlobalItemSchema and bulkUpsertGlobalItemsSchema to schemas.ts
- Add UpsertGlobalItemInput and BulkUpsertGlobalItemsInput types to types.ts
- Implement upsertGlobalItem with onConflictDoUpdate and tag sync
- Implement bulkUpsertGlobalItems processing array in single transaction
- Fix migration 0003 to only add new columns + unique constraint
- All 21 tests pass including 8 new upsert operation tests
2026-04-10 10:58:36 +02:00
makiolaj 9093a2c8f6 test(25-01): add failing tests for upsertGlobalItem and bulkUpsertGlobalItems
- Import upsertGlobalItem and bulkUpsertGlobalItems (not yet exported)
- Tests cover: create, conflict update, attribution fields, tag sync
- Tests cover: empty tags clear, tags omitted leaves untouched
- Tests cover: bulk upsert counts (created vs updated)
2026-04-10 10:56:54 +02:00
makiolaj 39ef9cc433 feat(25-01): add attribution columns and unique constraint to globalItems
- Add sourceUrl, imageCredit, imageSourceUrl nullable columns
- Add unique constraint on (brand, model) pair
- Generate migration 0003_loving_serpent_society.sql
2026-04-10 10:55:55 +02:00
makiolaj b6970c9a04 fix(25): revise plans based on checker feedback 2026-04-10 10:51:30 +02:00
makiolaj d9d9532399 docs(25): create phase plan for catalog enrichment and agent tools 2026-04-10 10:45:22 +02:00
makiolaj 6c0c31350e docs(phase-25): add validation strategy 2026-04-10 10:39:10 +02:00
makiolaj bc2a532238 docs(25): research catalog enrichment and agent tools phase 2026-04-10 10:38:26 +02:00
makiolaj e805269485 docs(state): record phase 25 context session 2026-04-10 10:33:15 +02:00
makiolaj 56bea00e61 docs(25): capture phase context 2026-04-10 10:33:06 +02:00
makiolaj e7a9cdb71a docs(phase-24): evolve PROJECT.md after phase completion 2026-04-10 10:18:03 +02:00
makiolaj a28ff90b35 docs(phase-24): complete phase execution 2026-04-10 10:17:40 +02:00
makiolajandClaude Opus 4.6 e1afd542ac fix(24): add withImageUrls to public setup endpoint
Public setup view was missing image URL enrichment, causing item images
to be absent for anonymous visitors. Matches the private endpoint pattern.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-10 10:17:32 +02:00
makiolaj 9177296223 docs(24-02): complete public access client layer plan
- SUMMARY.md created for 24-02 (auth prompt modal, render-first root, public setup viewing)
- STATE.md updated: plan advanced, progress 100%, decisions recorded
- ROADMAP.md updated: phase 24 complete (2/2 plans with SUMMARYs)
- REQUIREMENTS.md: PUBL-01 through PUBL-05 marked complete
2026-04-10 10:11:17 +02:00
makiolaj 7b0efae0c4 feat(24-02): render-first root layout, guarded write actions, public setup viewing
- Remove authLoading spinner gate — app renders immediately for all visitors
- Expand isPublicRoute to include /, /global-items/*, /setups/*, /users/, /login
- Replace hard window.location.href redirect with soft navigate() after auth resolves
- Remove onboarding loading spinner — pass isAuthenticated as enabled to guard query
- Add AuthPromptModal to root JSX for global availability
- Guard Add to Collection and Add to Thread buttons with isAuthenticated check
- Rework setup detail page to use usePublicSetup for anonymous visitors
- Wrap all write action UI (Add Items, Delete, Public toggle, remove/classify) in isAuthenticated guards
2026-04-10 10:09:41 +02:00
makiolaj 50f9629707 docs(24-01): complete rate limiter factory and tiered public endpoint limits plan
- Add 24-01-SUMMARY.md with execution results
- Advance plan counter to 2/2
- Update progress to 50% (1 of 2 plans complete)
- Mark INFR-01 requirement complete
- Add factory pattern and tier decisions to STATE.md
2026-04-10 10:08:50 +02:00
makiolaj 5619016e41 feat(24-01): apply tiered rate limits to public GET endpoints
- Import createRateLimit in server index
- Create browseTier (120 req/min) for list/search endpoints
- Create detailTier (60 req/min) for individual resource endpoints
- Apply browseTier to /api/global-items and /api/tags GET routes
- Apply detailTier to /api/global-items/:id, /api/setups/:id/public, /api/users/:id/profile GET routes
- Rate limits placed before auth middleware per D-07, D-08
2026-04-10 10:07:38 +02:00
makiolaj cd85715d05 feat(24-02): add auth prompt state, modal, usePublicSetup hook, guard onboarding
- Extend uiStore with showAuthPrompt/openAuthPrompt/closeAuthPrompt state
- Create AuthPromptModal component with sign in/sign up CTAs pointing to /login
- Add usePublicSetup hook to useSetups for anonymous setup viewing via public API
- Rework useOnboardingComplete to accept enabled param (guards auth-gated call)
2026-04-10 10:06:59 +02:00
makiolaj afab8175f9 feat(24-01): refactor rateLimit to factory pattern with createRateLimit
- Add createRateLimit(maxAttempts, windowMs) factory function
- Rewrite rateLimit export to delegate to factory (backward compatible)
- Keep shared store, getClientIp, cleanup, and _resetForTesting unchanged
- Add createRateLimit factory test suite with 5 test cases
- All existing rateLimit middleware tests still pass
2026-04-10 10:06:19 +02:00
makiolaj 08ff7d59bf docs(24): create phase plan 2026-04-10 10:02:35 +02:00
makiolaj 2a8a479012 docs(24): add validation strategy 2026-04-10 09:57:52 +02:00
makiolaj 2a55b282cb docs(24): research public access and infrastructure phase 2026-04-10 09:57:11 +02:00
makiolaj 01373260bd Graphify output
CI / ci (push) Successful in 1m17s
CI / e2e (push) Has been skipped
CI / deploy (push) Successful in 14s
2026-04-09 15:18:36 +02:00
makiolaj 87ad09167d docs(state): record phase 24 context session 2026-04-09 15:13:42 +02:00
makiolaj a2d435bbeb docs(24): capture phase context 2026-04-09 15:13:34 +02:00
makiolaj 9a69671718 docs: create milestone v2.1 roadmap (3 phases) 2026-04-09 14:53:25 +02:00
makiolaj 8acb155cf1 docs: define milestone v2.1 requirements 2026-04-09 14:48:31 +02:00
makiolaj c4ad5c1b2a docs: complete project research 2026-04-09 14:44:12 +02:00
makiolaj f9c69a1366 docs: start milestone v2.1 Public Discovery 2026-04-09 14:33:19 +02:00
makiolaj f564e8cb54 docs: archive v1.3 and v2.0 milestones with roadmap, requirements, and retrospective
CI / ci (push) Successful in 1m7s
CI / e2e (push) Has been skipped
CI / deploy (push) Successful in 7s
2026-04-08 23:10:50 +02:00
makiolaj cc0bafe754 docs: mark phase 13 and v1.3 milestone as complete 2026-04-08 22:57:26 +02:00
makiolaj 9054938d88 docs: add backlog item 999.3 — public access auth model 2026-04-08 22:54:21 +02:00
makiolaj 8b8a8868d1 docs: add backlog item 999.2 — revamp onboarding flow 2026-04-08 22:53:23 +02:00
makiolajandClaude Opus 4.6 570be6fcc1 fix: prevent crash on login when user has no active threads
CI / ci (push) Successful in 1m4s
CI / e2e (push) Has been skipped
CI / deploy (push) Successful in 13s
activeThreads[0].id in useEffect dependency array threw when the array
was empty. Use optional chaining to safely handle the empty case.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-08 22:48:29 +02:00
makiolajandClaude Opus 4.6 a153b3c199 ci: pass Coolify token via env var to avoid pipe character shell issue
CI / ci (push) Successful in 1m4s
CI / e2e (push) Has been skipped
CI / deploy (push) Successful in 8s
The | in Laravel Sanctum tokens gets interpreted as a shell pipe when
injected inline. Using env vars ensures proper quoting.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-08 22:38:05 +02:00
makiolajandClaude Opus 4.6 b9c3bf5b5f fix: update auth test to expect numeric user ID from /me endpoint
CI / ci (push) Successful in 1m4s
CI / e2e (push) Has been skipped
CI / deploy (push) Successful in 13s
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-08 22:34:07 +02:00
makiolajandClaude Opus 4.6 eca733193d ci: use Coolify webhook URL from variable with auth header
CI / ci (push) Failing after 59s
CI / deploy (push) Has been skipped
CI / e2e (push) Has been skipped
Set COOLIFY_WEBHOOK variable to the full deploy URL from Coolify.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-08 22:31:45 +02:00
makiolajandClaude Opus 4.6 7c513257ec ci: use Gitea variables for Coolify URL and app UUID
CI / deploy (push) Has been cancelled
CI / e2e (push) Has been cancelled
CI / ci (push) Has been cancelled
Move hardcoded values to repo variables:
- COOLIFY_URL: Coolify instance base URL
- COOLIFY_APP_UUID: application UUID to deploy

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-08 22:31:20 +02:00
makiolajandClaude Opus 4.6 eaf9ad80b5 ci: use Coolify API with auth token for deploy trigger
CI / ci (push) Failing after 1m1s
CI / deploy (push) Has been skipped
CI / e2e (push) Has been skipped
Replace simple webhook GET with authenticated POST to Coolify deploy API.
Requires COOLIFY_TOKEN secret in Gitea with deploy permissions.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-08 22:28:44 +02:00
makiolajandClaude Opus 4.6 e7caa40104 ci: restore Coolify webhook trigger after Docker image push
CI / deploy (push) Has been cancelled
CI / e2e (push) Has been cancelled
CI / ci (push) Has been cancelled
Gitea's built-in webhook wasn't triggering Coolify deploys reliably.
Restore the explicit curl call to COOLIFY_WEBHOOK after image push.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-08 22:28:10 +02:00
makiolajandClaude Opus 4.6 3b29248845 fix: return database user ID from /api/auth/me instead of Logto sub
CI / ci (push) Failing after 1m8s
CI / deploy (push) Has been skipped
CI / e2e (push) Has been skipped
The /me endpoint was returning auth.sub (Logto's opaque string) as the
user ID, but the frontend and other API endpoints expect numeric DB IDs.
This caused "can't access property 'id', w[0] is undefined" after login.

Also documents Logto OIDC setup requirements (scopes, env vars) in
CLAUDE.md.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-08 22:16:59 +02:00
makiolajandClaude Opus 4.6 9dca657ab1 fix: add OIDC startup diagnostic and fix HTTPException handling
CI / ci (push) Successful in 1m4s
CI / e2e (push) Has been skipped
CI / deploy (push) Successful in 25s
The @hono/oidc-auth middleware catches all errors and rethrows as
"Invalid session", hiding the real cause. This adds a startup probe
to OIDC discovery endpoint so the actual error appears in logs.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-08 21:33:59 +02:00
makiolajandClaude Opus 4.6 e63b3876c1 ci: restore deploy job, remove only Coolify webhook step
CI / deploy (push) Successful in 14s
CI / ci (push) Successful in 1m6s
CI / e2e (push) Has been skipped
Deployment trigger is now handled by Gitea webhooks. The Docker
build+push step stays so the image is available in the registry.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-08 21:17:33 +02:00
makiolajandClaude Opus 4.6 1858a3970e fix: exclude graphify-out from Biome linting
CI / ci (push) Successful in 59s
CI / e2e (push) Has been skipped
Generated HTML and JSON in graphify-out/ was triggering lint errors.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-08 21:16:07 +02:00
makiolajandClaude Opus 4.6 fbb61f37f2 ci: remove deploy job from CI pipeline
CI / ci (push) Failing after 47s
CI / e2e (push) Has been skipped
Deployment is now handled by Gitea webhooks triggering Coolify
directly, replacing the manual Docker build + webhook approach.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-08 21:14:25 +02:00
makiolajandClaude Opus 4.6 646fcd558a chore: add graphify knowledge graph outputs
CI / ci (push) Failing after 54s
CI / deploy (push) Has been skipped
CI / e2e (push) Has been skipped
Add generated knowledge graph (538 nodes, 664 edges) for codebase
navigation. Outputs are committed for portability across devices;
cache and cost tracking are gitignored.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-08 21:05:57 +02:00
makiolajandClaude Opus 4.6 620c6598cf ci: add registry-based layer caching for Docker builds
CI / ci (push) Successful in 1m10s
CI / e2e (push) Has been skipped
CI / deploy (push) Failing after 6s
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-07 15:41:33 +02:00
makiolajandClaude Opus 4.6 99192fe32f ci: switch from legacy docker build to buildx
CI / ci (push) Successful in 1m6s
CI / e2e (push) Has been skipped
CI / deploy (push) Failing after 1m14s
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-07 15:38:06 +02:00