- Added menu generator page with existing menu loading and selection.
- Enhanced menus management page with editing capabilities and improved table layout.
- Updated booking page to allow for menu and package data fetching.
- Integrated Tailwind CSS line-clamp plugin for better text handling.
- Created a migration script for initializing ingredients database.
- Developed ingredients management page with search, filter, and CRUD operations.
- Implemented API routes for ingredients with proper error handling and logging.
- Updated package.json to include new test scripts for API testing.
- Modified postcss.config.mjs to correctly configure Tailwind CSS and autoprefixer.
- Enhanced MenuGeneratorPage component to accept starter, main, and dessert requests.
- Updated API route to handle new menu generation parameters and log requests.
- Created LOGIN_CREDENTIALS.md for admin login information and user management instructions.
- Implemented test-api.mjs script to automate API endpoint testing and validate responses.
- Implemented tests for debugging browser cache vs server response.
- Verified calendar displays correct dates for November 2025.
- Added visual inspection screenshot for calendar layout.
- Created tests to ensure calendar fits within its container.
- Checked for correct styling of available and blocked dates.
- Debugged login form behavior and cookie handling.
- Added tests for forced browser refresh and cache verification.
- Conducted visual tests to compare actual calendar layout with expected.
- Enhanced logging for better traceability during test execution.
- Renamed `sampleData` to `data` in `src/config/sample-data.ts` and updated references in components.
- Added ingredients to menu items in `sample-data.ts` for detailed ingredient lists.
- Updated `USPList` component to reflect changes in data structure.
- Modified `Menu` interface in `models.ts` to include optional ingredients property.
- Implemented new `MenuGeneratorPage` for AI-driven menu creation with user input.
- Created `MenuIngredientsPage` for managing and calculating ingredient costs.
- Developed API route for menu generation using OpenAI API.
- Enhanced navigation component to exclude admin pages and login from display.
- Comprehensive logging and error handling added to API route.
- Implemented a script to add an 'address' column to the 'bookings' table if it doesn't exist.
- Created a script to add 'include_service', 'include_cleanup', and 'total_price' columns to the 'bookings' table.
- Set up a 'users' table with an admin user and password hashing using bcrypt.
- Developed login and logout API routes with JWT authentication.
- Created a login page with form handling and error display.
- Designed a profile page for Christian Wärme showcasing skills and experience.
- Added a logout button component for admin interface.
- Implemented tests for login functionality and visual calendar layout.
- Implemented image upload feature in MenuForm with file size validation and preview.
- Updated the API response for blocked dates to include block_date and note.
- Enhanced booking page to handle URL parameters for date and guests.
- Improved date picker component with better styling and functionality.
- Added CSS styles for a more user-friendly calendar interface.
- Created scripts to alter the image column in the database and embed images as base64.
- Add search input field to filter blocked dates
- Search works on both date and note fields
- Show count: 'Viser X af Y blokeringer'
- Max height with scroll for long lists (max-h-96)
- Hover effect on list items for better UX
- Empty state when no matches found
Breaking change: Weekly schedule is now reference-only
- Remove nonWorking modifier and gray styling
- All calendar days show as green (available) by default
- Only manually blocked dates show as red
- Remove confirmation prompts about work schedule
- Update UI text to clarify: 'all days are open unless manually blocked'
- Weekly schedule section now explains it's reference information only
This aligns with the actual business logic: Christian sets his normal
work hours for 2-3 weeks at a time, and the calendar should be open
for bookings on all days unless he manually blocks specific dates
(vacation, sick days, etc.)
- Clear pendingDates after successful blocking
- Add key props to DayPicker to force re-render on state change
- Improve error handling with revert on failure
- Call fetchAll() after batch operations to get real IDs
- Add modifiersClassNames to both DayPicker modes (single and multiple)
- Blocked dates now show with rdp-day_blocked class (red background)
- NonWorking and pending modifiers also properly styled
- Improve layout: single column with centered calendar
- Better spacing and hover effects on buttons
Features:
- Toast notifications system (replaces alerts/confirms)
- Shift+click range selection for blocking dates
- Ctrl/Cmd+click for non-contiguous multi-date selection
- Progress indicators for all async operations
- Improved blocked dates list with formatted dates
- Red styling for blocked dates in calendar
- Blue styling for pending dates (Ctrl+click)
- Weekly schedule awareness (confirm before blocking work days)
- Non-working day styling (gray, dashed border)
Other improvements:
- Featured flag for menus (DB migration script included)
- Image handling fixes (renamed PNG files, updated references)
- Optimistic UI updates for better UX
- Multi-select bulk delete for blocked dates
- Show-only-blocked filter mode
Components:
- src/components/ui/toast.tsx (new)
- scripts/add-featured-column.mjs (new DB migration)
- scripts/README.md (migration documentation)