114 Commits

Author SHA1 Message Date
opencode d244a537ea feat(toolrate): light/dark/system theme toggle with FOUC guard
Build & Push Docker Image / build (push) Successful in 2m30s
- use-theme hook: localStorage (toolrate-theme, default system), matchMedia
  change listener, shared singleton listener, sets .dark + color-scheme
- ThemeToggle: lightbulb quick toggle (light/dark) + dropdown (light/dark/system)
- Sidebar footer + mobile header + standalone login page
- inline script in index.html to apply theme pre-render (no FOUC)
- recharts axis ticks use hsl(var(--foreground)) for dark-mode readability
2026-08-01 19:47:39 +02:00
opencode db397a14bc fix: security hardening, validation, cache and analytics fixes
Build & Push Docker Image / build (push) Successful in 4m32s
Backend security:
- Admin-gate /admin/redundancy (GET+POST) with zod validation and tool existence checks
- Restrict CORS to same-origin (plus CORS_ORIGIN allowlist) and SameSite=Lax cookie
- Validate returnTo to prevent open redirect in the OIDC flow
- Validate/coerce relations body, reject self-relations and non-admin 'recommended'
- Add central JSON error middleware (no more Express HTML 500s)
- Fail fast at startup when SESSION_SECRET/VOTER_SECRET missing in production

Backend correctness:
- Stop leaking voterToken in the create-rating response
- Allow clearing websiteUrl/iconUrl (nullable in UpdateToolBody, frontend sends null)
- Regenerate session after login/callback (session fixation) and add OIDC state check
- Block self-demotion and last-admin demotion in user PATCH
- Set created_by to NULL on user delete (FK-safe)
- Validate cost create/update bodies with zod
- Unique index (tool_id, voter_token) + 409 on race duplicate ratings
- Clamp audit limit, escape ilike wildcards in search, O(N) analytics queries

Frontend:
- tools-browse reads and syncs URL query params (fixes home 'View all' links)
- Invalidate analytics/top-tools/categories/features caches after mutations
- Sync category combobox input when the value changes externally
- Hide Write a Review for anonymous users, drop unreachable rating guard
2026-08-01 19:11:00 +02:00
opencode 0c6a35e841 fix: category cache refresh, API 404, redundancy mapping, cost/relation authz, voterToken exposure
Build & Push Docker Image / build (push) Successful in 8m33s
- Invalidate categories/features queries after creating/editing tools so new
  categories appear immediately in search, browse dropdown and tool form
- Always refetch categories/features when the combobox/suggestion inputs mount
- Return JSON 404 for unmatched /api routes instead of the SPA index.html
- Read the manually confirmed 'better tool' from the recommendation notes
  instead of using the min tool id in the redundancy dashboard
- Require admin for cost/relation update+delete endpoints
- Stop exposing the voter token in the ratings list response
- Fix parseInt type error on user id params (Express 5 params typing)
2026-08-01 15:25:06 +02:00
henry 2b5f074a63 Update Dockerfile
Build & Push Docker Image / build (push) Successful in 4m8s
2026-07-31 18:11:46 +00:00
henry 81ae8ca140 Update .gitea/workflows/build.yaml
Build & Push Docker Image / build (push) Successful in 2m34s
2026-07-31 18:07:50 +00:00
henry 8ba59ce3b9 Update .gitea/workflows/build.yaml
Build & Push Docker Image / build (push) Failing after 1m45s
2026-07-31 17:57:13 +00:00
henry bc9effd665 Update Dockerfile
Build & Push Docker Image / build (push) Failing after 1m53s
2026-07-31 17:49:44 +00:00
henry fd51146049 Update artifacts/api-server/src/app.ts
Build & Push Docker Image / build (push) Successful in 1m48s
2026-07-31 17:32:00 +00:00
henry 047b782797 Update .gitea/workflows/build.yaml
Build & Push Docker Image / build (push) Successful in 1m56s
2026-07-31 17:21:39 +00:00
henry b4aaf23a75 Update Dockerfile
Build & Push Docker Image / build (push) Successful in 3m6s
2026-07-31 12:19:09 +00:00
henry fd003ad7c9 Update docker-compose.yml
Build & Push Docker Image / build (push) Failing after 10s
2026-07-31 12:18:52 +00:00
henry 6157e39c14 Update Dockerfile
Build & Push Docker Image / build (push) Failing after 1m33s
2026-07-31 12:11:40 +00:00
henry 6031491347 Update Dockerfile
Build & Push Docker Image / build (push) Failing after 2m1s
2026-07-31 12:08:11 +00:00
henry bb6b739e37 Update Dockerfile
Build & Push Docker Image / build (push) Failing after 1m19s
2026-07-31 11:59:14 +00:00
henry 0f611e8a44 Update Dockerfile
Build & Push Docker Image / build (push) Failing after 1m53s
2026-07-31 11:55:13 +00:00
henry 634e7c633d Update Dockerfile
Build & Push Docker Image / build (push) Failing after 1m20s
2026-07-31 11:49:50 +00:00
henry 3a1eb1dffa Update .gitea/workflows/build.yaml
Build & Push Docker Image / build (push) Failing after 54s
2026-07-31 11:46:04 +00:00
henry 4c48e7b9f6 Update Dockerfile
Build & Push Docker Image / build (push) Failing after 52s
2026-07-31 11:34:40 +00:00
henry ec7c874d5b Update Dockerfile
Build & Push Docker Image / build (push) Failing after 55s
2026-07-30 21:26:23 +00:00
henry c956b0a104 Update .gitea/workflows/build.yaml
Build & Push Docker Image / build (push) Failing after 1m6s
2026-07-30 21:19:35 +00:00
henry 2f6a3a05d6 Update Dockerfile
Build & Push Docker Image / build (push) Failing after 3m55s
2026-07-30 21:12:55 +00:00
henry a16ec18684 Update package.json
Build & Push Docker Image / build (push) Failing after 39s
2026-07-30 21:08:55 +00:00
root 1b05645c15 fix: exclude mockup-sandbox from Docker build
Build & Push Docker Image / build (push) Failing after 30s
2026-07-30 09:18:40 +02:00
root e7727e78c4 fix: skip typecheck in Docker build, use pnpm -r build
Build & Push Docker Image / build (push) Failing after 49s
2026-07-30 09:17:08 +02:00
root 8d3bd07efc fix: copy scripts/package.json for typecheck in Docker build
Build & Push Docker Image / build (push) Failing after 4m10s
2026-07-30 09:11:55 +02:00
root 854d082519 ci: trigger re-run with secrets set
Build & Push Docker Image / build (push) Failing after 1m12s
2026-07-30 09:05:41 +02:00
root 392772ebf7 ci: use REGISTRY_USER/REGISTRY_TOKEN secrets
Build & Push Docker Image / build (push) Failing after 27s
2026-07-30 09:03:17 +02:00
root b1ed1ab950 ci: use built-in GITHUB_TOKEN, fix registry URL
Build & Push Docker Image / build (push) Failing after 26s
2026-07-30 08:57:22 +02:00
root 3f8d6b1613 ci: replace buildx with docker CLI directly
Build & Push Docker Image / build (push) Failing after 29s
2026-07-30 08:54:35 +02:00
root e9037c2260 ci: fix sed pattern for Kustomize images.newTag 2026-07-30 08:22:40 +02:00
root f80ccbaf4e fix: CI sed pattern for Kustomize images.newTag
Build & Push Docker Image / build (push) Failing after 7s
2026-07-30 08:22:33 +02:00
root bd0b2c0b4f ci: update workflow to auto-patch admin/apps after build
Build & Push Docker Image / build (push) Failing after 7s
2026-07-30 08:21:57 +02:00
root 77c44c44ce feat: Gitea Actions + k8s manifests + ArgoCD for k3s deploy
Build & Push Docker Image / build (push) Failing after 42s
2026-07-30 07:18:02 +02:00
root 5d71e60e7d feat: Docker Compose support 2026-07-30 00:19:31 +02:00
root fc5f9e9bf5 revert: remove packageManager field (causes pnpm install hang on Replit) 2026-07-30 00:09:05 +02:00
root 361a51f1d6 chore: pin pnpm@11.18.0 via packageManager field 2026-07-29 23:54:55 +02:00
root 857d2e11a8 feat: automatic recommendations + manual evaluation in redundancy analysis 2026-07-29 23:51:28 +02:00
root 44cc29b8fe feat: billing period for subscriptions, costs in redundancy analysis 2026-07-29 23:46:58 +02:00
root deabe36727 fix: customFetch returns parsed body, not Response object 2026-07-29 23:38:39 +02:00
root 331bdd0957 fix: clean login page, avoid esbuild regex parse error 2026-07-29 23:33:19 +02:00
root 5115d13616 fix: use ArrowLeft icon instead of HTML entity in login page 2026-07-29 23:28:04 +02:00
root 7bda8f95f3 feat: back-to-home links on login and 404 pages 2026-07-29 23:19:27 +02:00
root 45f0b80055 feat: costs UI on tool detail + tier badge in sidebar 2026-07-29 23:18:19 +02:00
root ba413f5ee9 fix: use static SQL for user column migration 2026-07-29 23:08:22 +02:00
root 7bfdac6104 fix: add migration for new user columns (tier, auth_provider, etc.) 2026-07-29 22:50:15 +02:00
root 59badeaa48 feat: auth foundation, similar tools, costs, redundancy, anonymous voting 2026-07-29 21:59:29 +02:00
root 8b3b7c9955 remove Replit branding (meta description, dev banner) 2026-07-29 20:18:10 +02:00
root 612ada8849 fix: tool card category badge overflow on narrow viewports 2026-07-29 20:17:39 +02:00
Replit Agent fb9a41c664 Published your App
Replit-Commit-Author: Deployment
Replit-Commit-Deployment-Build-Id: 38a9c1cb-0021-43bb-a484-96c90077a0a9
2026-07-29 18:09:26 +00:00
Replit Agent bfd20e30b7 Update dependencies and workspace configuration
Replit-Commit-Author: Agent
2026-07-29 18:06:00 +00:00