Commit Graph

32 Commits

Author SHA1 Message Date
Eric Gullickson
20189a1d37 feat: Add tier-based vehicle limit enforcement (refs #23)
All checks were successful
Deploy to Staging / Build Images (pull_request) Successful in 4m37s
Deploy to Staging / Deploy to Staging (pull_request) Successful in 38s
Deploy to Staging / Verify Staging (pull_request) Successful in 6s
Deploy to Staging / Notify Staging Ready (pull_request) Successful in 6s
Deploy to Staging / Notify Staging Failure (pull_request) Has been skipped
Backend:
- Add VEHICLE_LIMITS configuration to feature-tiers.ts
- Add getVehicleLimit, canAddVehicle helper functions
- Implement transaction-based limit check with FOR UPDATE locking
- Add VehicleLimitExceededError and 403 TIER_REQUIRED response
- Add countByUserId to VehiclesRepository
- Add comprehensive tests for all limit logic

Frontend:
- Add getResourceLimit, isAtResourceLimit to useTierAccess hook
- Create VehicleLimitDialog component with mobile/desktop modes
- Add useVehicleLimitCheck shared hook for limit state
- Update VehiclesPage with limit checks and lock icon
- Update VehiclesMobileScreen with limit checks
- Add tests for VehicleLimitDialog

Implements vehicle limits per tier (Free: 2, Pro: 5, Enterprise: unlimited)
with race condition prevention and consistent UX across mobile/desktop.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-11 16:36:53 -06:00
Eric Gullickson
2aae89acbe feat: Add VIN decoding with NHTSA vPIC API (refs #9)
- Add NHTSA client for VIN decoding with caching and validation
- Add POST /api/vehicles/decode-vin endpoint with tier gating
- Add dropdown matching service with confidence levels
- Add decode button to VehicleForm with tier check
- Responsive layout: stacks on mobile, inline on desktop
- Only populate empty fields (preserve user input)

Backend:
- NHTSAClient with 5s timeout, VIN validation, vin_cache table
- Tier gating with 'vehicle.vinDecode' feature key (Pro+)
- Tiered matching: high (exact), medium (normalized), none

Frontend:
- Decode button with loading state and error handling
- UpgradeRequiredDialog for free tier users
- Mobile-first responsive layout

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-11 13:55:26 -06:00
Eric Gullickson
c98211f4a2 feat: Implement centralized audit logging admin interface (refs #10)
Some checks failed
Deploy to Staging / Build Images (pull_request) Successful in 4m42s
Deploy to Staging / Deploy to Staging (pull_request) Successful in 37s
Deploy to Staging / Verify Staging (pull_request) Failing after 6s
Deploy to Staging / Notify Staging Ready (pull_request) Has been skipped
Deploy to Staging / Notify Staging Failure (pull_request) Successful in 6s
- Add audit_logs table with categories, severities, and indexes
- Create AuditLogService and AuditLogRepository
- Add REST API endpoints for viewing and exporting logs
- Wire audit logging into auth, vehicles, admin, and backup features
- Add desktop AdminLogsPage with filters and CSV export
- Add mobile AdminLogsMobileScreen with card layout
- Implement 90-day retention cleanup job
- Remove old AuditLogPanel from AdminCatalogPage

Security fixes:
- Escape LIKE special characters to prevent pattern injection
- Limit CSV export to 5000 records to prevent memory exhaustion
- Add truncation warning headers for large exports

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-11 11:09:09 -06:00
Eric Gullickson
f494f77150 feat: Implement user tier-based feature gating system (refs #8)
All checks were successful
Deploy to Staging / Build Images (pull_request) Successful in 4m35s
Deploy to Staging / Deploy to Staging (pull_request) Successful in 27s
Deploy to Staging / Verify Staging (pull_request) Successful in 5s
Deploy to Staging / Notify Staging Ready (pull_request) Successful in 5s
Deploy to Staging / Notify Staging Failure (pull_request) Has been skipped
Add subscription tier system to gate features behind Free/Pro/Enterprise tiers.

Backend:
- Create feature-tiers.ts with FEATURE_TIERS config and utilities
- Add /api/config/feature-tiers endpoint for frontend config fetch
- Create requireTier middleware for route-level tier enforcement
- Add subscriptionTier to request.userContext in auth plugin
- Gate scanForMaintenance in documents controller (Pro+ required)
- Add migration to reset scanForMaintenance for free users

Frontend:
- Create useTierAccess hook for tier checking
- Create UpgradeRequiredDialog component (responsive)
- Gate DocumentForm checkbox with lock icon for free users
- Add SubscriptionTier type to profile.types.ts

Documentation:
- Add TIER-GATING.md with usage guide

Tests: 30 passing (feature-tiers, tier-guard, controller)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-04 14:34:47 -06:00
Eric Gullickson
b933329539 feat: update docs for token efficient usage
Some checks failed
Deploy to Staging / Build Images (push) Has started running
Deploy to Staging / Deploy to Staging (push) Has been cancelled
Deploy to Staging / Verify Staging (push) Has been cancelled
Deploy to Staging / Notify Staging Ready (push) Has been cancelled
Deploy to Staging / Notify Staging Failure (push) Has been cancelled
2026-01-03 11:59:47 -06:00
Eric Gullickson
7f278f6574 fix: Backup schedules and pruning
All checks were successful
Deploy to Staging / Build Images (push) Successful in 4m30s
Deploy to Staging / Deploy to Staging (push) Successful in 37s
Deploy to Staging / Verify Staging (push) Successful in 6s
Deploy to Staging / Notify Staging Ready (push) Successful in 5s
Deploy to Staging / Notify Staging Failure (push) Has been skipped
2026-01-01 11:40:49 -06:00
Eric Gullickson
d8ea0c7297 fix: Implement distribute locker in Redis for cron jobs
Some checks failed
Deploy to Staging / Build Images (push) Failing after 30s
Deploy to Staging / Deploy to Staging (push) Has been skipped
Deploy to Staging / Verify Staging (push) Has been skipped
Deploy to Staging / Notify Staging Ready (push) Has been skipped
Deploy to Staging / Notify Staging Failure (push) Successful in 6s
2026-01-01 11:02:54 -06:00
Eric Gullickson
ffd8ecd1d0 fix: OS Detection of theme removed.
All checks were successful
Deploy to Staging / Build Images (push) Successful in 4m34s
Deploy to Staging / Deploy to Staging (push) Successful in 37s
Deploy to Staging / Verify Staging (push) Successful in 6s
Deploy to Staging / Notify Staging Ready (push) Successful in 5s
Deploy to Staging / Notify Staging Failure (push) Has been skipped
2026-01-01 10:30:08 -06:00
Eric Gullickson
fb52ce398b feat: user export service. bug and UX fixes. Complete minus outstanding email template fixes. 2025-12-26 14:06:03 -06:00
Eric Gullickson
8c13dc0a55 feat: navigation and UX improvements complete 2025-12-26 09:25:42 -06:00
Eric Gullickson
0357ce391f feat: Backup & Restore - Manual backup tested complete. 2025-12-25 10:50:09 -06:00
Eric Gullickson
55cf4923b8 feat: onboarding pre-work 2025-12-22 21:34:05 -06:00
Eric Gullickson
4897f0a52c feat: delete users - not tested 2025-12-22 18:20:25 -06:00
Eric Gullickson
91b4534e76 feat: Scheduled Maintenance feature complete 2025-12-22 14:12:33 -06:00
Eric Gullickson
719c80ecd8 Notification updates 2025-12-21 19:56:52 -06:00
Eric Gullickson
1bde31247f Update dependencies and fix security vulnerabilities
Security fixes:
- get-jwks: 9.0.0 -> 11.0.3 (critical vulnerability)
- vite: 5.4.11 -> 6.0.0 (moderate vulnerability)
- patch-package: 6.5.1 -> 8.0.1 (low vulnerability)

Package updates:
- Backend: @fastify/cors 11.2.0, @fastify/helmet 13.0.2, @fastify/jwt 10.0.0
- Backend: supertest 7.1.4, @types/supertest 6.0.3, @types/node 22.0.0
- Frontend: @vitejs/plugin-react 5.1.2, zustand 5.0.0, framer-motion 12.0.0

Removed unused:
- minio (not imported anywhere in codebase)

TypeScript:
- Temporarily disabled exactOptionalPropertyTypes, noPropertyAccessFromIndexSignature,
  noUncheckedIndexedAccess to fix pre-existing type errors (TODO: re-enable)
- Fixed process.env bracket notation access
- Fixed unused React imports in test files
- Renamed test files with JSX from .ts to .tsx

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-20 14:18:41 -06:00
Eric Gullickson
0e85cf48c3 Updated packages. Changed date picker package to Day.JS and applied it across whole app. 2025-12-18 16:07:30 -06:00
Eric Gullickson
7a2e11953a Update config defs 2025-12-18 13:40:57 -06:00
Eric Gullickson
bb4a356b9e Google Maps Bug 2025-11-08 12:17:29 -06:00
Eric Gullickson
858cf31d38 Admin settings fixed 2025-11-06 14:07:16 -06:00
Eric Gullickson
8174e0d5f9 Admin User v1 2025-11-05 19:04:06 -06:00
Eric Gullickson
eeb20543fa Homepage Redesign 2025-11-03 14:06:54 -06:00
Eric Gullickson
3693ce5761 Docs Cleanup 2025-11-02 10:34:43 -06:00
Eric Gullickson
046c66fc7d Redesign 2025-11-01 21:27:42 -05:00
Eric Gullickson
775a1ff69e Added Documents Feature 2025-09-28 20:35:46 -05:00
Eric Gullickson
a052040e3a Initial Commit 2025-09-17 16:09:15 -05:00
Eric Gullickson
0cdb9803de Updated frameworks. 2025-08-25 12:40:27 -05:00
Eric Gullickson
e22d643ae3 Security Fixes 2025-08-24 14:39:50 -05:00
Eric Gullickson
b534e92636 Modernization Project Complete. Updated to latest versions of frameworks. 2025-08-24 09:49:21 -05:00
Eric Gullickson
5f67a904e0 fixed imports. Maybe. 2025-08-23 11:28:01 -05:00
Eric Gullickson
28ec351928 fix build, maybe 2025-08-23 11:08:23 -05:00
Eric Gullickson
8f5117a4e2 MVP Build 2025-08-09 12:47:15 -05:00