From 24b59c5755aff9e478bec90a869b39c0fe2693da Mon Sep 17 00:00:00 2001 From: myrmidex Date: Sun, 28 Sep 2025 17:57:24 +0200 Subject: [PATCH] Ignore claude files --- .claude/11/plan-of-attack.md | 149 ----------------------------------- .gitignore | 3 +- 2 files changed, 2 insertions(+), 150 deletions(-) delete mode 100644 .claude/11/plan-of-attack.md diff --git a/.claude/11/plan-of-attack.md b/.claude/11/plan-of-attack.md deleted file mode 100644 index 2e3ff8a..0000000 --- a/.claude/11/plan-of-attack.md +++ /dev/null @@ -1,149 +0,0 @@ -# Plannable Items Feature - Plan of Attack - -## Overview -Implement a plannable items feature for trips, with a simplified 3-table structure that allows users to create items and organize them into calendar slots. - -## Database Structure (3 tables) - -### 1. `plannable_items` table -- `id` (primary key) -- `trip_id` (foreign key to trips) -- `name` (string) -- `type` (enum: hotel/restaurant/attraction/transport/activity) -- `address` (string, nullable) -- `notes` (text, nullable) -- `metadata` (JSON for type-specific fields) -- `created_at`, `updated_at` - -### 2. `calendar_slots` table -- `id` (primary key) -- `trip_id` (foreign key to trips) -- `name` (string, e.g., "Monday", "Day 1", "Morning of Day 2") -- `datetime_start`, `datetime_end` -- `slot_date` (date) -- `slot_order` (integer, for sorting) -- `created_at`, `updated_at` - -### 3. `planned_items` table (junction) -- `id` (primary key) -- `plannable_item_id` (foreign key) -- `calendar_slot_id` (foreign key) -- `created_at`, `updated_at` - -## Slot Management Strategy -- **Auto-create day-based slots** when trip is created or dates are updated -- Generate one slot per day between start_date and end_date -- Items can exist in "unplanned" state (no slot assignment) or be assigned to a slot - -## Backend Implementation - -### 1. Database Migrations -- Create migration for `plannable_items` table -- Create migration for `calendar_slots` table -- Create migration for `planned_items` junction table - -### 2. Models and Relationships -- `PlannableItem` model (belongs to Trip, belongs to many CalendarSlots through PlannedItems) -- `CalendarSlot` model (belongs to Trip, has many PlannableItems through PlannedItems) -- `PlannedItem` model (junction model with additional attributes) -- Update `Trip` model to include relationships - -### 3. Business Logic -- Auto-create/update slots when trip dates change -- Handle slot regeneration when dates are modified -- Preserve existing planned items when possible - -### 4. API Endpoints -``` -GET /api/trips/{id}/plannables - List all plannable items for a trip -POST /api/trips/{id}/plannables - Create new plannable item -PUT /api/plannables/{id} - Update plannable item -DELETE /api/plannables/{id} - Delete plannable item - -GET /api/trips/{id}/calendar-slots - Get all slots for a trip -PUT /api/calendar-slots/{id} - Update slot (rename) - -POST /api/planned-items - Assign item to slot -PUT /api/planned-items/{id} - Update assignment (change slot, time, order) -DELETE /api/planned-items/{id} - Unassign item from slot -PUT /api/calendar-slots/{id}/reorder - Reorder items within a slot -``` - -## Frontend Implementation - -### 1. Routing Setup -- Install `react-router-dom` package -- Configure routes in App.jsx -- Add route for trip detail page: `/trip/:id` - -### 2. Trip Detail Page (`TripDetail.jsx`) -- Header section: Display trip name, dates, description -- Two-column layout: - - Left: Plannable items sidebar - - Right: Calendar view (future implementation) - -### 3. Plannable Items Sidebar Components - -#### `PlannablesList.jsx` -- "+" button at top to add new items -- "Unplanned Items" section -- Day slot sections with assigned items -- Drag & drop functionality between sections - -#### `PlannableItem.jsx` -- Display item with type icon -- Show name and key details -- Edit/Delete actions -- Draggable wrapper - -#### `PlannableForm.jsx` -- Modal/slide-out form -- Dynamic fields based on item type -- Validation - -### 4. Update Existing Components -- Make `TripCard` clickable -- Add navigation to trip detail on click -- Update Dashboard to handle navigation - -### 5. State Management -- Consider using Context or simple state management for: - - Plannable items list - - Calendar slots - - Drag & drop state - -## UI/UX Considerations -- Type-specific icons (🏨 hotel, 🍽️ restaurant, 🎯 attraction, ✈️ transport, 🎭 activity) -- Color coding for different types -- Smooth drag & drop animations -- Loading states during API calls -- Confirmation dialogs for deletions -- Toast notifications for actions - -## Implementation Order -1. ✅ Backend migrations and models - COMPLETED - - Created migrations for plannable_items, calendar_slots, planned_items tables - - Created models with relationships -2. ✅ Backend API endpoints - COMPLETED - - Created controllers for PlannableItem, CalendarSlot, PlannedItem - - Added all routes to api.php - - Organized controllers in DDD structure (Infrastructure/Domain) -3. ✅ Auto-slot creation - COMPLETED - - Created CalendarSlotService - - Created TripObserver to auto-create slots on trip creation/update - - Registered service provider -4. ⏳ Frontend routing setup - TODO -5. ⏳ Trip detail page structure - TODO -6. ⏳ Plannable items CRUD - TODO -7. ⏳ Calendar slots display - TODO -8. ⏳ Drag & drop functionality - TODO -9. ⏳ Polish and edge cases - TODO - -## Future Enhancements (Not in MVP) -- Calendar view in right column -- Time-based slots (morning/afternoon/evening) -- Collaborative features (share with travel companions) -- Import from external sources (booking confirmations) -- Export to PDF/calendar formats -- Cost tracking and budgeting -- Map view of planned items \ No newline at end of file diff --git a/.gitignore b/.gitignore index 70ea49a..42a9051 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ /.idea -/docker/data \ No newline at end of file +/docker/data +/.claude