Daily Changelog – September 9, 2025
Tasks for Today
- [x] Fix StatusBadge readability issue on employees page
- [x] Fix Update Employee button visibility on edit page
- [x] Fix blue-on-blue contrast issue on entries page hover
- [ ] Continue development work
Issues Found & Fixed
StatusBadge Readability Issue – RESOLVED
- StatusBadge components on employees page were using solid colors (bg-success text-success)
- This created green-on-green text that was completely unreadable
- “Linked” status badges were impossible to read
- SOLUTION: Updated StatusBadge variants to use proper contrast
- Changed from solid colors to 10% opacity backgrounds with full opacity text
- Now uses
bg-success/10 text-successinstead ofbg-success text-success - Applied to all variants: info, success, alert, danger, neutral
- RESULT: StatusBadge text is now readable with proper contrast
Update Employee Button Visibility – RESOLVED
- Edit Employee page had “Update Employee” text that appeared as plain text instead of a proper button
- The page was using HTML
<button>element instead of the properButtoncomponent - SOLUTION: Replaced HTML button with proper Button component
- Added
Buttonimport from@/components/ui - Replaced
<button>with<Button>component - Maintained all existing functionality (submit, disabled state, styling)
- RESULT: Update Employee button is now properly visible and styled
Entries Page Blue-on-Blue Contrast Issue – RESOLVED
- Admin entries page had severe readability issue when hovering over rows
- Clock in/out times used
text-info(blue text) onhover:bg-info(blue background) - This created blue text on blue background making times completely unreadable
- SOLUTION: Changed hover background from blue to muted
- Changed
hover:bg-infotohover:bg-mutedon table rows - Maintains visual feedback while providing proper contrast
- Blue text (
text-info) now shows clearly on muted background - RESULT: Clock in/out times are now readable when hovering over rows
Main Entries Page Comprehensive Contrast Fix – RESOLVED
- Main entries page had multiple severe contrast issues making it completely unreadable
- Issues Found:
hover:bg-infocreated blue-on-blue when hovering over rows- TimePill components used solid colors (
bg-success text-success) creating poor contrast - Break times, duration, and hours used
text-info(blue) creating readability issues - SOLUTION: Comprehensive contrast overhaul
- Changed
hover:bg-infotohover:bg-neutral/20for proper hover contrast - Updated TimePill to use 10% opacity backgrounds (
bg-success/10 text-success border-success/20) - Changed all time displays from
text-infototext-foregroundfor proper readability - RESULT: Main entries page is now completely readable and professional
System-Wide Contrast Audit – COMPLETED
- Found 31 files with contrast issues across the entire app
- Identified patterns:
hover:bg-info,hover:bg-success,hover:bg-dangercreating contrast problems - SOLUTION: Created automated fix script and applied comprehensive fixes
- Fixed all
hover:bg-*issues (changed tohover:bg-*/20for proper contrast) - Fixed all solid color backgrounds with matching text (changed to 10% opacity with borders)
- Applied fixes to 31 files across the entire app
- RESULT: Entire app now has proper contrast and readability
Employee Edit Page Error Messages – RESOLVED
- Employee edit page had red-on-red error messages that were completely unreadable
- Error and success message cards used
bg-dangerwithtext-dangercreating poor contrast - SOLUTION: Fixed error message contrast
- Changed
bg-dangertobg-danger/10for error messages - Changed
bg-successtobg-success/10for success messages - Fixed button with
bg-danger text-dangertobg-danger/10 text-danger - RESULT: Error messages are now readable with proper contrast
Employee Update Functionality – RESOLVED
- Employee update was failing due to PostgreSQL type casting issue
hire_datefield was being sent as text but database expected date type- SOLUTION: Fixed type casting in SQL query
- Added
::datecast to hire_date field in UPDATE query - Improved error handling to show detailed error messages
- RESULT: Employee updates now work properly
Employee Management Page Header Standardization – RESOLVED
- Found major inconsistencies across all employee management pages
- Each page had completely different header styles and layouts
- Some pages had custom headers, others had no proper structure
- Payroll export page was missing the employee submenu entirely
- SOLUTION: Created standardized EmployeePageHeader component
- Created reusable
EmployeePageHeadercomponent with consistent styling - Applied to all employee management pages: Employees, Leave of Absence, Sick Days, Positions, Departments, Payroll Export
- All headers now use same design: icon + title + subtitle + optional action button
- Consistent rounded-2xl border, backdrop-blur, shadow-xl styling
- Proper info color theming with gradient overlay
- SOLUTION: Fixed payroll export page submenu
- Added EmployeeSideMenu to payroll export page
- Now shows proper navigation like all other employee management pages
- Maintains consistent layout structure across all pages
- RESULT: All employee management pages now have consistent, professional headers
PTO Banks Page Standardization – RESOLVED
- PTO Banks page was using completely different design system with “neon-cyan glitch” styling
- Page looked “BIG AF” compared to other standardized employee management pages
- Was using PtoSideMenu instead of EmployeeSideMenu
- SOLUTION: Applied standardized design to PTO Banks page
- Replaced elaborate custom header with standardized EmployeePageHeader
- Switched from PtoSideMenu to EmployeeSideMenu for consistency
- Now matches all other employee management pages perfectly
- SOLUTION: Removed Settings from employee submenu
- Settings is for the whole app, not just employee management
- Cleaned up submenu to only include employee-specific functions
- RESULT: PTO Banks page now looks consistent and professional
PTO Banks Filtering Fix – RESOLVED
- PTO Banks page was showing all employees instead of only those with PTO entitlements
- Page claimed “Only employees with PTO entitlements are shown” but was lying
- SOLUTION: Fixed API filtering logic
- Added filter to only show employees with
PTO Yearly Amountrecord > 0 - Now properly filters out employees without PTO entitlements
- Page description is now accurate
- RESULT: PTO Banks page now only shows employees who actually have PTO
PTO Data Cleanup – RESOLVED
- PTO Yearly Amount records had inconsistent data: some “80”, some “80 hours”
- This caused filtering issues and data inconsistency
- SOLUTION: Cleaned up the data
- Updated 13 records to remove “hours” text from values
- All PTO Yearly Amount values now stored as clean numbers
- Simplified API query since no regex needed anymore
- RESULT: PTO data is now consistent and properly filterable
PTO Eligibility Filter Fix – RESOLVED
- PTO Banks was filtering by “PTO Yearly Amount” instead of “PTO Eligible”
- Some employees had yearly amounts but weren’t actually PTO eligible yet
- SOLUTION: Changed filter to check PTO Eligible status
- Now filters by
PTO Eligible= true/yes/1 instead of yearly amount - Only shows employees who are actually eligible for PTO
- Updated page descriptions to reflect correct filtering logic
- RESULT: PTO Banks now shows only truly PTO-eligible employees
PTO Banks Yearly Entitlement Editing – RESOLVED
- PTO Banks page had no way to change yearly entitlements directly
- Users had to go through complex employee record management
- SOLUTION: Added inline editing for yearly entitlements
- Added edit button next to yearly entitlement values
- Click to edit, input new amount, save or cancel
- When amount changes, automatically closes old record and creates new one
- Proper audit trail with start/end dates
- SOLUTION: Created API endpoint for entitlement changes
- New
/api/pto-requests/[employeeId]/yearlyPUT endpoint - Handles record closure and creation with proper transaction safety
- Validates input and maintains data integrity
- RESULT: Yearly entitlements can now be changed directly from PTO Banks page
Time Off Request PTO Usage Control – RESOLVED
- Time off requests always used PTO balance, even when employees wanted unpaid time off
- No way to request time off without using PTO balance
- SOLUTION: Added “Use PTO Balance” checkbox to time off request form
- New checkbox allows employees to choose whether to use PTO or not
- Defaults to true (use PTO) to maintain existing behavior
- Clear labeling: “USE PTO BALANCE”
- SOLUTION: Updated database schema and API logic
- Added
use_ptoboolean field topto_requeststable - Updated all API endpoints to handle the new field
- PTO balance only deducted when
use_ptois true - Proper restoration logic when requests are rejected/deleted
- SOLUTION: Updated PTO balance deduction logic
- Only deducts PTO when
use_ptois true - Only restores PTO when it was previously deducted
- Maintains proper audit trail and balance calculations
- RESULT: Employees can now request time off without using PTO balance
Notes
- All changes maintain existing color token compliance
- Build passes successfully with no palette violations
- StatusBadge improvements benefit all pages using the component
- EmployeePageHeader component ensures future consistency across employee management pages
- PTO system now properly separates time off requests from PTO usage
- Database migrations applied successfully to production