Eric Gullickson
5c93150a58
fix: add TCO unit tests and fix blocking issues (refs #15 )
...
Deploy to Staging / Build Images (pull_request) Successful in 4m34s
Deploy to Staging / Deploy to Staging (pull_request) Successful in 28s
Deploy to Staging / Verify Staging (pull_request) Successful in 7s
Deploy to Staging / Notify Staging Ready (pull_request) Successful in 6s
Deploy to Staging / Notify Staging Failure (pull_request) Has been skipped
Quality Review Fixes:
- Add comprehensive unit tests for getTCO() method (12 test cases)
- Add tests for normalizeRecurringCost() via getTCO integration
- Add future date validation guard in calculateMonthsOwned()
- Fix pre-existing unused React import in VehicleLimitDialog.test.tsx
- Fix pre-existing test parameter types in vehicles.service.test.ts
Test Coverage:
- Vehicle not found / unauthorized access
- Missing optional TCO fields handling
- Zero odometer (costPerDistance = 0)
- Monthly/semi-annual/annual cost normalization
- Division by zero guard (new purchase)
- Future purchase date handling
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com >
2026-01-12 20:32:15 -06:00
Eric Gullickson
20189a1d37
feat: Add tier-based vehicle limit enforcement (refs #23 )
...
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
f494f77150
feat: Implement user tier-based feature gating system (refs #8 )
...
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
ffd8ecd1d0
fix: OS Detection of theme removed.
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
69171f7778
fix: post Dark mode fixes
2025-12-27 20:00:51 -06:00
Eric Gullickson
bfb0c23ae1
fix: Fix imports and database bugs. Removed legacy ETL code.
2025-12-27 12:07:24 -06:00
Eric Gullickson
0d9edbe761
fix: UX Issues fixed
2025-12-26 21:00:53 -06:00
Eric Gullickson
780949cd62
fix: UX dark/light fixes. Still blue
2025-12-26 20:29:21 -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
50baec390f
feat: dark / light theme almost complete
2025-12-25 20:32:38 -06:00
Eric Gullickson
c017b8816f
Mobile Fixes
2025-12-21 20:27:25 -06:00
Eric Gullickson
c13e17f0eb
Mobile UX fixes
2025-12-17 21:46:44 -06:00
Eric Gullickson
b611b56336
Initial Commit
2025-12-17 15:43:32 -06:00
Eric Gullickson
b534e92636
Modernization Project Complete. Updated to latest versions of frameworks.
2025-08-24 09:49:21 -05:00
Eric Gullickson
d60c3ec00e
MVP with new UX
2025-08-09 17:45:54 -05:00
Eric Gullickson
8f5117a4e2
MVP Build
2025-08-09 12:47:15 -05:00