opencode
743b177c89
fix(auth): password min length 6 + show/hide toggle on password inputs
Build & Push Docker Image / build (push) Successful in 2m21s
2026-08-03 08:01:52 +02:00
opencode
68a81ec775
feat(auth): password change (self + admin reset) with rate limiting; dedupe watchlist to user menu
Build & Push Docker Image / build (push) Successful in 2m19s
2026-08-03 07:43:24 +02:00
opencode
4648614556
docs: replace Replit config/docs with README; drop Replit files
Build & Push Docker Image / build (push) Successful in 2m29s
2026-08-03 05:43:13 +02:00
opencode
95bf49509c
fix: white home page - coerce pg numeric strings for top-tools ratings
Build & Push Docker Image / build (push) Successful in 2m32s
2026-08-02 13:10:28 +02:00
opencode
d033b20dfb
feat: watchlist (premium), mobile bottom nav
Build & Push Docker Image / build (push) Successful in 2m35s
2026-08-02 13:00:10 +02:00
opencode
c77610786b
feat: compare (premium), rating-history trend, hover previews
Build & Push Docker Image / build (push) Successful in 2m47s
2026-08-02 12:48:02 +02:00
opencode
0c27982098
ci: dev version includes UTC time (dev-YYYYMMDD-HHmm)
...
Build & Push Docker Image / build (push) Successful in 2m36s
Phase 1: browse power-up
- faceted filters: tags + features (array containment) and min rating
on listTools; new ?tags=?features=?minRating= URL params with chips
- global Cmd+K command palette (cmdk) with tool search + navigation
- mini usefulness/usability bars on grid cards, wide cards and table rows
2026-08-02 11:51:25 +02:00
opencode
78244c3197
feat: user-chosen browse views with grid/list toggle and profile sync
...
Build & Push Docker Image / build (push) Successful in 2m25s
- view modes grid | table | rows + density cozy/compact, persisted via
localStorage and shareable ?view=?density= URL params (URL wins)
- table view: sortable columns (name, rating, reviews), new sort options
name_asc/name_desc/recently_updated (backend enum + handler)
- live debounced search, removable filter chips, '/' focuses search
- virtualization via @tanstack/react-virtual for table and rows views
- profile sync: users.preferences jsonb + GET/PUT /api/auth/me/preferences;
preference precedence URL > server profile > localStorage > default
- add local rollup/lightningcss/tailwindcss oxide native binaries for macos dev
2026-08-02 09:34:53 +02:00
opencode
803802a5b6
feat: show live build version in web UI
...
Build & Push Docker Image / build (push) Successful in 2m36s
- /api/version returns version, commitSha, buildDate, trashRetentionDays
- CI passes COMMIT_SHA (full), BUILD_DATE and VERSION (git tag) as
docker build args; Dockerfile bakes them as env
- sidebar footer shows version/sha linked to the Gitea commit
- admin System tab shows version, commit link, build date, trash retention
2026-08-02 02:13:27 +02:00
opencode
2f20b1e5c2
feat: trash (soft delete) with admin tool management
...
Build & Push Docker Image / build (push) Successful in 2m15s
- tools: add deletedAt/deletedBy, soft delete via DELETE /tools/:id when
actor has trash entitlement, else immediate hard delete
- trash endpoints: GET /tools/trash, POST /tools/trash (admin bulk),
POST /tools/trash/restore, DELETE /tools/trash, POST /tools/trash/empty
- trash feature for premium/enterprise; exclude trashed from all public
surfaces (browse, categories, features, tags, similar, ratings, costs,
analytics, redundancy)
- TRASH_RETENTION_DAYS env (0 = keep forever) with hourly purge job
- frontend: /trash page (premium+, restore for all, permanent delete +
empty for admin), admin Tools tab with multi-select bulk trash,
sidebar Trash link, tool-detail delete hint
2026-08-02 02:02:16 +02:00
opencode
32df998399
fix: return existing cost on empty PATCH body instead of 500
Build & Push Docker Image / build (push) Successful in 2m14s
2026-08-02 01:31:55 +02:00
opencode
6b8ca92c37
feat: allow premium+ users to manage costs
...
Build & Push Docker Image / build (push) Successful in 2m19s
- costs routes drop requireAdmin, keep auth + costs feature check
- useAuth exposes hasFeature(feature) based on entitlements
- tool-detail costs section gated by hasFeature('costs') instead of isAdmin
2026-08-02 01:27:28 +02:00
opencode
01c70085db
feat: tiered costs feature + admin tier management + tag selection
...
Build & Push Docker Image / build (push) Successful in 6m52s
- costs: nullable notes (fix create without notes), drop renewalDate
(schema + API + UI), gate POST/PATCH/DELETE to admin + costs feature
- feature middleware: admin-aware hasFeature + getEntitlements union;
/auth/me and login return resolved entitlements
- users: tier enum (free/premium/enterprise) in create/update/list,
admin UI tier select + tier badge
- tags: GET /tags/all, TagInput autocomplete in new/edit tool forms,
feature suggestions on focus, query invalidation on create/update
- openapi: nullable ToolUpdate urls, ToolUpdate tier fields, listAllTags
- Dockerfile: push-force to drop renewal_date column
2026-08-02 01:10:47 +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
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
root
5d71e60e7d
feat: Docker Compose support
2026-07-30 00:19:31 +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
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
bdab4c3198
fix: create sessions table before server listens to avoid race condition
2026-07-29 20:05:28 +02:00
root
a569bba5e1
fix: add sessions table to Drizzle schema + auto-create at startup
2026-07-29 20:04:15 +02:00
cheffe01
655adf87c0
Add Zod dependency to enable user API functionalities
...
Adds `zod` as a direct dependency to the `api-server` package, resolving the import error in `users.ts` and enabling user-related API functionalities.
Replit-Commit-Author: Agent
Replit-Commit-Session-Id: 0edbd41f-69af-4bb4-88a4-f5fecc8b2778
Replit-Commit-Checkpoint-Type: full_checkpoint
Replit-Commit-Event-Id: 00bfe0e8-1c2f-4283-95aa-5bc19de2c811
Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/0683fb79-a27c-485c-9333-5f4b288c4567/0edbd41f-69af-4bb4-88a4-f5fecc8b2778/4wtolMS
Replit-Helium-Checkpoint-Created: true
2026-05-26 05:47:52 +00:00
cheffe01
c5ca3ca992
Add local user authentication and admin capabilities
...
Implement local user authentication with password hashing, add admin roles for user management and audit log viewing, and introduce audit logging for critical actions.
Replit-Commit-Author: Agent
Replit-Commit-Session-Id: 776963d0-f75d-42e2-a57b-cc36bdff8495
Replit-Commit-Checkpoint-Type: full_checkpoint
Replit-Commit-Event-Id: 832a44ff-12ae-4096-8a0d-666ec083d536
Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/0683fb79-a27c-485c-9333-5f4b288c4567/776963d0-f75d-42e2-a57b-cc36bdff8495/1p7jhzu
Replit-Helium-Checkpoint-Created: true
2026-05-25 14:11:02 +00:00
cheffe01
b8ba53598d
Add icon support for tools and improve analytics chart display
...
Update API, database schema, and frontend components to allow optional icons for tools, and adjust analytics chart rendering for better visibility.
Replit-Commit-Author: Agent
Replit-Commit-Session-Id: 776963d0-f75d-42e2-a57b-cc36bdff8495
Replit-Commit-Checkpoint-Type: full_checkpoint
Replit-Commit-Event-Id: 0ad0b686-eebd-46d2-8314-67e9e874e224
Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/0683fb79-a27c-485c-9333-5f4b288c4567/776963d0-f75d-42e2-a57b-cc36bdff8495/1p7jhzu
Replit-Helium-Checkpoint-Created: true
2026-05-25 13:28:34 +00:00
cheffe01
7abb048edc
Add user authentication and dynamic feature/category inputs
...
Implement Keycloak authentication, protected routes, and add combobox and autocomplete components for tool categories and features.
Replit-Commit-Author: Agent
Replit-Commit-Session-Id: 776963d0-f75d-42e2-a57b-cc36bdff8495
Replit-Commit-Checkpoint-Type: full_checkpoint
Replit-Commit-Event-Id: 0b145113-c016-4f54-b000-13bd3b0ba8f0
Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/0683fb79-a27c-485c-9333-5f4b288c4567/776963d0-f75d-42e2-a57b-cc36bdff8495/z4uWN6A
Replit-Helium-Checkpoint-Created: true
2026-05-25 13:20:15 +00:00
cheffe01
036973ea32
Add API endpoints and frontend components for tool management and analytics
...
Implement CRUD operations for tools and ratings, introduce analytics endpoints, and develop frontend components for displaying tools, ratings, and analytics data.
Replit-Commit-Author: Agent
Replit-Commit-Session-Id: 776963d0-f75d-42e2-a57b-cc36bdff8495
Replit-Commit-Checkpoint-Type: full_checkpoint
Replit-Commit-Event-Id: feaa4ce1-5aed-4cc0-bcea-47855b615b48
Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/0683fb79-a27c-485c-9333-5f4b288c4567/776963d0-f75d-42e2-a57b-cc36bdff8495/rx9K7bW
Replit-Helium-Checkpoint-Created: true
2026-05-25 13:04:53 +00:00
agent
1de22a6979
Initial commit
2026-05-14 20:25:38 +00:00