763 lines
No EOL
20 KiB
Markdown
763 lines
No EOL
20 KiB
Markdown
# Areas - Behavior Rules
|
|
|
|
This document explains how areas work in tududi from a user behavior perspective. For technical implementation details, see the backend code in `/backend/modules/areas/` and frontend components in `/frontend/components/Area/`.
|
|
|
|
---
|
|
|
|
## Overview
|
|
|
|
**Areas** are the highest level of organization in tududi, representing major life domains or responsibility categories. They provide a way to group projects into meaningful top-level segments.
|
|
|
|
**Key characteristics:**
|
|
- Represent broad life domains (Work, Personal, Health, Finance, etc.)
|
|
- Sit at the top of the organizational hierarchy
|
|
- Provide high-level grouping for projects
|
|
- Simple structure with just name and description
|
|
- User-specific (each user has their own areas)
|
|
- Optional organizational layer (projects can exist without areas)
|
|
|
|
**Hierarchy Position:**
|
|
```
|
|
Areas (highest level - life domains)
|
|
└── Projects (mid level - specific goals)
|
|
└── Tasks (actionable items)
|
|
└── Subtasks
|
|
```
|
|
|
|
**URL:** `/areas`
|
|
|
|
---
|
|
|
|
## Core Principles
|
|
|
|
1. **Areas are top-level organizational containers**
|
|
- They represent the broadest categories of your life and work
|
|
- Examples: Work, Personal, Health, Finance, Learning, Home
|
|
|
|
2. **Areas are optional**
|
|
- Projects can exist without belonging to an area
|
|
- Areas provide structure but aren't required
|
|
|
|
3. **Areas don't cascade delete**
|
|
- Deleting an area orphans its projects, doesn't delete them
|
|
- This prevents accidental data loss
|
|
- Orphaned projects remain accessible
|
|
|
|
4. **Areas are simple by design**
|
|
- Just a name and optional description
|
|
- No status, priority, or due dates
|
|
- Focus is on categorization, not task management
|
|
|
|
5. **One project, one area**
|
|
- A project can belong to at most one area
|
|
- But an area can contain many projects
|
|
|
|
---
|
|
|
|
## Hierarchy
|
|
|
|
```
|
|
Areas (highest level - life domains)
|
|
└── Projects (mid level - specific goals/initiatives)
|
|
├── Tasks (actionable items)
|
|
└── Notes (reference material)
|
|
```
|
|
|
|
**Example structure:**
|
|
```
|
|
Area: "Work"
|
|
├── Project: "Q1 Marketing Campaign"
|
|
│ ├── Task: "Design landing page"
|
|
│ └── Task: "Write email copy"
|
|
├── Project: "Website Redesign"
|
|
│ └── Task: "Research design trends"
|
|
└── Project: "Team Onboarding"
|
|
|
|
Area: "Personal"
|
|
├── Project: "Home Renovation"
|
|
│ ├── Task: "Get contractor quotes"
|
|
│ └── Task: "Choose paint colors"
|
|
└── Project: "Learn Spanish"
|
|
└── Task: "Complete Duolingo lesson"
|
|
|
|
Area: "Health"
|
|
└── Project: "Exercise Routine"
|
|
├── Task: "Go for morning run"
|
|
└── Task: "Meal prep for the week"
|
|
```
|
|
|
|
---
|
|
|
|
## Area Properties
|
|
|
|
### Basic Information
|
|
|
|
1. **Name** (required)
|
|
- The area title
|
|
- Examples: "Work", "Personal", "Health", "Finance", "Learning"
|
|
- Displayed in uppercase on area cards
|
|
- Sorted alphabetically
|
|
|
|
2. **Description** (optional)
|
|
- Longer explanation of what this area encompasses
|
|
- Helps clarify the scope and purpose
|
|
- Displayed on area card in smaller text
|
|
- Example: "Work related projects and professional development"
|
|
|
|
3. **UID** (auto-generated)
|
|
- Unique identifier for the area
|
|
- Used in URLs and API calls
|
|
- Cannot be changed
|
|
|
|
4. **User ID** (system-managed)
|
|
- Links area to the user who created it
|
|
- Areas are private to each user
|
|
- Cannot be shared between users
|
|
|
|
---
|
|
|
|
## Area Lifecycle
|
|
|
|
### Creating an Area
|
|
|
|
**Ways to create:**
|
|
1. Navigate to `/areas`
|
|
2. Click "New Area" button (if implemented)
|
|
3. Use the area modal to enter details
|
|
|
|
**Required fields:**
|
|
- Name (must not be empty or just whitespace)
|
|
|
|
**Default values:**
|
|
- Description: Empty string
|
|
|
|
**Auto-generated:**
|
|
- UID (unique identifier)
|
|
- User ID (current user)
|
|
- Timestamps (created_at, updated_at)
|
|
|
|
**Example:**
|
|
```
|
|
Name: "Work"
|
|
Description: "Professional projects, career development, and work-related tasks"
|
|
```
|
|
|
|
### Editing an Area
|
|
|
|
**What you can edit:**
|
|
- Name (required, cannot be empty)
|
|
- Description (optional)
|
|
|
|
**What you cannot edit:**
|
|
- UID
|
|
- User ID
|
|
- Created timestamp
|
|
|
|
**How to edit:**
|
|
1. Navigate to `/areas`
|
|
2. Hover over area card
|
|
3. Click three-dot menu (appears on hover)
|
|
4. Click "Edit"
|
|
5. Modify fields in modal
|
|
6. Click "Save" or "Update Area"
|
|
|
|
**Validation:**
|
|
- Name cannot be empty
|
|
- Name cannot be only whitespace
|
|
- Whitespace is trimmed from name
|
|
|
|
### Deleting an Area
|
|
|
|
**What happens:**
|
|
1. Area record is deleted from database
|
|
2. **Projects belonging to area are orphaned** (area_id set to null)
|
|
3. Projects are NOT deleted
|
|
4. Tasks and notes within projects are unaffected
|
|
|
|
**What is NOT deleted:**
|
|
- Projects (they become orphaned, with no area)
|
|
- Tasks within projects
|
|
- Notes within projects
|
|
- Any data except the area itself
|
|
|
|
**How to delete:**
|
|
1. Navigate to `/areas`
|
|
2. Hover over area card
|
|
3. Click three-dot menu
|
|
4. Click "Delete"
|
|
5. Confirm deletion in dialog
|
|
|
|
**Who can delete:**
|
|
- Area owner only
|
|
- Admin users (if admin functionality exists)
|
|
|
|
**No undo:**
|
|
- Deletion is permanent for the area
|
|
- But projects can be manually reassigned to a new area
|
|
|
|
**Finding orphaned projects after deletion:**
|
|
1. Go to Projects page
|
|
2. Filter by "No Area"
|
|
3. Re-assign to a new area if needed
|
|
|
|
---
|
|
|
|
## Using Areas
|
|
|
|
### Viewing Areas
|
|
|
|
**Areas List Page:**
|
|
- URL: `/areas`
|
|
- Shows all areas for current user
|
|
- Displayed as a responsive grid
|
|
- Grid adapts to screen size:
|
|
- Mobile: 1 column
|
|
- Tablet: 2 columns
|
|
- Desktop: 3 columns
|
|
- Large desktop: 4 columns
|
|
|
|
**Area Cards:**
|
|
Each card displays:
|
|
- Area name (uppercase, centered, large font)
|
|
- Description (if provided, smaller text, centered)
|
|
- Three-dot menu (appears on hover)
|
|
- Edit option
|
|
- Delete option
|
|
|
|
**Card Layout:**
|
|
- Fixed height (120px)
|
|
- Centered content
|
|
- Hover effect (slight opacity change)
|
|
- Click card to view projects in that area
|
|
|
|
### Linking to Projects
|
|
|
|
**From area card:**
|
|
- Clicking an area card navigates to: `/projects?area={uid}-{slug}`
|
|
- This filters the Projects page to show only projects in that area
|
|
- Example: `/projects?area=abc123-work`
|
|
|
|
**Slug generation:**
|
|
- Area name converted to lowercase
|
|
- Non-alphanumeric characters replaced with hyphens
|
|
- Leading/trailing hyphens removed
|
|
- Example: "My Work Area" → "my-work-area"
|
|
|
|
**From area detail page:**
|
|
- Displays link: "View projects in {area name}"
|
|
- Clicking navigates to filtered projects view
|
|
|
|
### Grouping Projects by Area
|
|
|
|
**On Projects page:**
|
|
- Add query parameter: `?grouped=true`
|
|
- Projects grouped under their area names
|
|
- Special "No Area" group for orphaned projects
|
|
|
|
**Example grouped view:**
|
|
```
|
|
Work
|
|
├── Q1 Marketing Campaign (75% complete)
|
|
├── Website Redesign (30% complete)
|
|
└── Client Onboarding (done)
|
|
|
|
Personal
|
|
├── Home Renovation (in progress)
|
|
└── Learn Spanish (planned)
|
|
|
|
No Area
|
|
└── Random Ideas (not started)
|
|
```
|
|
|
|
**Benefits:**
|
|
- High-level overview of work distribution
|
|
- See balance across life domains
|
|
- Identify areas with too many/few projects
|
|
|
|
---
|
|
|
|
## Display Rules
|
|
|
|
### Area Cards (Grid View)
|
|
|
|
**Information shown:**
|
|
- Area name (bold, uppercase, 18px)
|
|
- Description (if exists, 12px, gray text)
|
|
- Three-dot menu (visible on hover)
|
|
|
|
**Visual design:**
|
|
- Light background: `bg-gray-50` (light mode)
|
|
- Dark background: `bg-gray-900` (dark mode)
|
|
- Rounded corners with shadow
|
|
- Fixed height: 120px
|
|
- Centered text alignment
|
|
- Hover: Slight opacity reduction (90%)
|
|
|
|
**Interaction:**
|
|
- Click anywhere on card → Navigate to projects filtered by area
|
|
- Click three-dot menu → Show edit/delete options
|
|
- Hover card → Show three-dot menu
|
|
|
|
**Sorting:**
|
|
- Areas always sorted alphabetically by name (A-Z)
|
|
- Case-insensitive sorting
|
|
- Consistent across all views
|
|
|
|
### Empty State
|
|
|
|
**When no areas exist:**
|
|
- Shows message: "No areas found" (translated)
|
|
- Prompts user to create their first area
|
|
|
|
---
|
|
|
|
## Area-Project Relationship
|
|
|
|
### Assigning Projects to Areas
|
|
|
|
**Ways to assign:**
|
|
1. **During project creation:**
|
|
- Select area from dropdown in project modal
|
|
- Area dropdown shows all user's areas alphabetically
|
|
|
|
2. **When editing existing project:**
|
|
- Open project detail or edit modal
|
|
- Change area in dropdown
|
|
- Can set to "No Area" to orphan project
|
|
|
|
3. **Bulk operations (if implemented):**
|
|
- Select multiple projects
|
|
- Assign to area in bulk
|
|
|
|
**Project can have:**
|
|
- One area (normal case)
|
|
- No area (orphaned - still valid)
|
|
- Cannot have multiple areas
|
|
|
|
### Area Display on Projects
|
|
|
|
**On project cards:**
|
|
- Area name shown as a label/tag
|
|
- Usually displayed below project name
|
|
- Clickable link to filter by area
|
|
|
|
**On project detail page:**
|
|
- Area name displayed in metadata section
|
|
- Linked to area's projects list
|
|
- Can be changed inline (if editable)
|
|
|
|
**On project forms:**
|
|
- Dropdown selector for area
|
|
- Includes "No Area" option
|
|
- Sorted alphabetically
|
|
|
|
### Orphaned Projects
|
|
|
|
**What are orphaned projects:**
|
|
- Projects with no area assigned (`area_id = null`)
|
|
- Created without an area, or area was deleted
|
|
- Perfectly valid state
|
|
|
|
**How to find:**
|
|
1. Navigate to Projects page
|
|
2. Filter by "No Area"
|
|
3. Or use grouped view - they appear in "No Area" section
|
|
|
|
**How to fix (if desired):**
|
|
1. Open orphaned project
|
|
2. Edit project details
|
|
3. Select an area from dropdown
|
|
4. Save changes
|
|
|
|
**Not a problem:**
|
|
- Areas are optional organizational tools
|
|
- Projects work perfectly fine without areas
|
|
- Some users prefer not to use areas at all
|
|
|
|
---
|
|
|
|
## Common Workflows
|
|
|
|
### Workflow 1: Set Up Life Domains
|
|
|
|
**Scenario:** Initial organization of your life
|
|
|
|
1. Navigate to `/areas`
|
|
2. Create areas for major life domains:
|
|
- Work
|
|
- Personal
|
|
- Health
|
|
- Finance
|
|
- Learning
|
|
- Home
|
|
3. Add descriptions to clarify scope:
|
|
- Work: "Professional projects and career development"
|
|
- Personal: "Personal goals and hobbies"
|
|
- Health: "Fitness, nutrition, and wellness"
|
|
4. Assign existing projects to appropriate areas
|
|
5. Review grouped projects view for balance
|
|
|
|
### Workflow 2: Organize Projects into Areas
|
|
|
|
**Scenario:** You have many unorganized projects
|
|
|
|
1. Go to Projects page
|
|
2. Filter by "No Area" to see orphaned projects
|
|
3. For each project:
|
|
- Open project detail
|
|
- Consider its nature (work, personal, etc.)
|
|
- Assign to appropriate area
|
|
4. Use grouped view to verify organization
|
|
5. Adjust as needed
|
|
|
|
### Workflow 3: Focus on Specific Life Domain
|
|
|
|
**Scenario:** You want to focus on work projects only
|
|
|
|
1. Navigate to `/areas`
|
|
2. Click on "Work" area card
|
|
3. See only work-related projects
|
|
4. Review active projects in work domain
|
|
5. Identify stalled projects
|
|
6. Plan next actions
|
|
|
|
### Workflow 4: Review Life Balance
|
|
|
|
**Scenario:** Check if you're balanced across domains
|
|
|
|
1. Navigate to `/projects?grouped=true`
|
|
2. See projects grouped by area
|
|
3. Count projects in each area
|
|
4. Identify areas with:
|
|
- Too many projects (overcommitted)
|
|
- Too few projects (neglected domain)
|
|
- All completed projects (ready for new initiatives)
|
|
5. Make adjustments to achieve balance
|
|
|
|
### Workflow 5: Reorganize Life Structure
|
|
|
|
**Scenario:** Your life structure has changed
|
|
|
|
1. Navigate to `/areas`
|
|
2. Edit area names/descriptions to reflect new reality
|
|
3. Consider creating new areas:
|
|
- New job → New work area or split areas
|
|
- New hobby → Personal or new Learning area
|
|
4. Delete obsolete areas (projects become orphaned)
|
|
5. Re-assign orphaned projects to new structure
|
|
6. Review and refine
|
|
|
|
---
|
|
|
|
## Integration with Other Features
|
|
|
|
### Areas and Projects Page
|
|
|
|
**Filtering by area:**
|
|
- URL: `/projects?area={uid}-{slug}`
|
|
- Shows only projects in that area
|
|
- Breadcrumb or header shows current area filter
|
|
- Can clear filter to see all projects
|
|
|
|
**Grouping by area:**
|
|
- URL: `/projects?grouped=true`
|
|
- Projects organized under area headings
|
|
- Collapsible sections (if implemented)
|
|
- Shows "No Area" group for orphaned projects
|
|
|
|
### Areas and Project Detail Page
|
|
|
|
**Area shown on project:**
|
|
- Displayed in metadata section
|
|
- Linked to area's projects list
|
|
- Can edit to change or remove area (if permissions allow)
|
|
|
|
### Areas and Navigation
|
|
|
|
**Sidebar (if areas shown):**
|
|
- May show top areas for quick access
|
|
- Click to navigate to area's projects
|
|
- Usually shows 3-5 most used areas
|
|
|
|
**Quick filters:**
|
|
- Projects page may have area pills/tags
|
|
- Click to toggle area filter
|
|
- Multiple areas can be selected (OR logic)
|
|
|
|
---
|
|
|
|
## Best Practices
|
|
|
|
### Naming Areas
|
|
|
|
**Good area names:**
|
|
- Short and clear: "Work", "Personal", "Health"
|
|
- Broad categories, not specific projects
|
|
- Parallel structure: All nouns or all adjectives
|
|
- Examples: "Work", "Home", "Health", "Finance"
|
|
|
|
**Avoid:**
|
|
- Overly specific: "Q1 Marketing" (that's a project)
|
|
- Too many areas (diminishes organizational value)
|
|
- Overlapping categories: "Work" and "Career" (redundant)
|
|
- Vague names: "Stuff", "Things", "Other"
|
|
|
|
### Structuring Your Areas
|
|
|
|
**Recommended approach:**
|
|
- Start with 4-7 major areas
|
|
- Based on life domains, not task types
|
|
- Examples:
|
|
- Professional: Work, Business
|
|
- Personal: Personal, Family, Social
|
|
- Self-improvement: Health, Learning
|
|
- Maintenance: Home, Finance
|
|
|
|
**Too many areas:**
|
|
- Defeats the purpose of high-level organization
|
|
- Hard to remember and maintain
|
|
- Projects get scattered
|
|
- Consider: Do you really need that area?
|
|
|
|
**Too few areas:**
|
|
- Everything in "Work" and "Personal"
|
|
- Loses organizational granularity
|
|
- Consider: Are you neglecting important life domains?
|
|
|
|
### Using Descriptions
|
|
|
|
**Good descriptions:**
|
|
- Clarify the scope of the area
|
|
- Help with project assignment decisions
|
|
- Examples:
|
|
- "Work": "Professional projects, career development, and work relationships"
|
|
- "Health": "Physical fitness, nutrition, mental wellness, and medical care"
|
|
- "Learning": "Online courses, reading, language learning, and skill development"
|
|
|
|
**When to skip descriptions:**
|
|
- Area name is self-explanatory ("Personal", "Work")
|
|
- You're the only user and know what it means
|
|
|
|
### Maintaining Your Areas
|
|
|
|
**Regular review:**
|
|
- Every 3-6 months, review your areas
|
|
- Are they still relevant to your life?
|
|
- Do you need to add/remove/rename areas?
|
|
- Are projects correctly categorized?
|
|
|
|
**When life changes:**
|
|
- New job → Adjust work areas
|
|
- New responsibility → Add new area
|
|
- Completed major goal → Remove or repurpose area
|
|
|
|
---
|
|
|
|
## Troubleshooting
|
|
|
|
### "My projects disappeared when I deleted the area"
|
|
|
|
**What happened:**
|
|
- Projects are not deleted, they're orphaned
|
|
- They still exist in your database
|
|
|
|
**How to find:**
|
|
1. Go to Projects page
|
|
2. Filter by "No Area"
|
|
3. You'll see all orphaned projects
|
|
4. Re-assign to a new area if needed
|
|
|
|
### "I can't see my area in the projects dropdown"
|
|
|
|
**Possible causes:**
|
|
1. Area belongs to different user (not shared)
|
|
2. Area was deleted
|
|
3. Frontend cache issue
|
|
|
|
**How to fix:**
|
|
1. Refresh the page
|
|
2. Check `/areas` page to confirm area exists
|
|
3. If missing, recreate the area
|
|
|
|
### "Area cards not showing in grid"
|
|
|
|
**Possible causes:**
|
|
1. No areas created yet
|
|
2. Loading state
|
|
3. API error
|
|
|
|
**How to check:**
|
|
1. Wait for loading to complete
|
|
2. Check browser console for errors
|
|
3. Verify `/api/areas` endpoint returns data
|
|
4. Create first area if none exist
|
|
|
|
### "Projects grouped view not working"
|
|
|
|
**Checklist:**
|
|
1. Is `?grouped=true` in URL?
|
|
2. Do projects have `area_id` set?
|
|
3. Are areas loaded in global state?
|
|
4. Check browser console for errors
|
|
|
|
### "Can't delete an area"
|
|
|
|
**Possible reasons:**
|
|
1. You're not the owner (areas can't be shared)
|
|
2. Network error
|
|
3. Permission issue
|
|
|
|
**Alternative:**
|
|
- If you can't delete, just don't use it
|
|
- Remove all projects from the area
|
|
- It won't show up in grouped views
|
|
|
|
---
|
|
|
|
## Use Cases
|
|
|
|
### 1. **Life-Work Balance Monitoring**
|
|
|
|
Areas help you see if you're:
|
|
- Overcommitting in work area
|
|
- Neglecting personal projects
|
|
- Ignoring health/fitness
|
|
- Balancing across all domains
|
|
|
|
**Action:** Review grouped projects view monthly
|
|
|
|
### 2. **Context Switching**
|
|
|
|
When switching contexts (work → personal):
|
|
- Click area card to see relevant projects
|
|
- Focus on that domain exclusively
|
|
- Avoid distraction from other areas
|
|
|
|
**Action:** Use area filters during focused work sessions
|
|
|
|
### 3. **Goal Setting Across Life Domains**
|
|
|
|
Ensure you have:
|
|
- Active projects in each important area
|
|
- Balance between maintenance and growth
|
|
- Projects in neglected domains
|
|
|
|
**Action:** Set quarterly goals per area
|
|
|
|
### 4. **Delegation and Collaboration**
|
|
|
|
Though areas themselves aren't shared:
|
|
- Projects within areas can be shared
|
|
- Use areas to organize shared vs. personal work
|
|
- Example: "Work" area has shared team projects
|
|
|
|
**Action:** Keep team projects in shared areas
|
|
|
|
### 5. **Year-End Review**
|
|
|
|
At year end, review each area:
|
|
- How many projects completed?
|
|
- Which areas were neglected?
|
|
- Where did you make most progress?
|
|
- What needs attention next year?
|
|
|
|
**Action:** Annual area-by-area retrospective
|
|
|
|
---
|
|
|
|
## Technical Notes
|
|
|
|
### Data Model
|
|
|
|
**Database table:** `areas`
|
|
|
|
**Columns:**
|
|
- `id` (integer, primary key, auto-increment)
|
|
- `uid` (string, unique, auto-generated)
|
|
- `name` (string, required)
|
|
- `description` (string, optional)
|
|
- `user_id` (integer, foreign key to users table)
|
|
- `created_at` (timestamp)
|
|
- `updated_at` (timestamp)
|
|
|
|
**Indexes:**
|
|
- Primary key on `id`
|
|
- Unique index on `uid`
|
|
- Index on `user_id` (for fast user-based queries)
|
|
|
|
### API Endpoints
|
|
|
|
**GET /api/areas**
|
|
- List all areas for current user
|
|
- Sorted alphabetically by name
|
|
- Returns: Array of area objects
|
|
|
|
**GET /api/areas/:uid**
|
|
- Get single area by UID
|
|
- Returns: Area object
|
|
|
|
**POST /api/areas**
|
|
- Create new area
|
|
- Body: `{ name, description }`
|
|
- Returns: Created area object (201)
|
|
|
|
**PATCH /api/areas/:uid**
|
|
- Update existing area
|
|
- Body: `{ name?, description? }`
|
|
- Returns: Updated area object
|
|
|
|
**DELETE /api/areas/:uid**
|
|
- Delete area (orphans projects)
|
|
- Returns: 204 No Content
|
|
|
|
**Authentication:**
|
|
- All endpoints require authentication
|
|
- 401 if not authenticated
|
|
|
|
### Validation Rules
|
|
|
|
**Name validation:**
|
|
- Required (cannot be null or undefined)
|
|
- Cannot be empty string
|
|
- Cannot be only whitespace
|
|
- Whitespace trimmed before saving
|
|
|
|
**Description validation:**
|
|
- Optional
|
|
- Can be empty string or null
|
|
- Stored as empty string if not provided
|
|
|
|
**UID validation:**
|
|
- Must be valid string format
|
|
- Checked when getting/updating/deleting
|
|
|
|
---
|
|
|
|
## Related Documentation
|
|
|
|
- [Projects Behavior](06-projects.md) - How areas relate to projects
|
|
- [Today Page Sections](02-today-page-sections.md) - How area filtering affects Today view
|
|
- [Architecture Overview](architecture.md) - Technical architecture
|
|
- [Backend Patterns](backend-patterns.md) - Module structure
|
|
- [Database & Migrations](database.md) - Data model details
|
|
- [Directory Structure](directory-structure.md) - File locations
|
|
|
|
**Technical Implementation Files:**
|
|
- Area model: [/backend/models/area.js](../backend/models/area.js)
|
|
- Areas service: [/backend/modules/areas/service.js](../backend/modules/areas/service.js)
|
|
- Areas controller: [/backend/modules/areas/controller.js](../backend/modules/areas/controller.js)
|
|
- Areas repository: [/backend/modules/areas/repository.js](../backend/modules/areas/repository.js)
|
|
- Areas routes: [/backend/modules/areas/routes.js](../backend/modules/areas/routes.js)
|
|
- Areas validation: [/backend/modules/areas/validation.js](../backend/modules/areas/validation.js)
|
|
- Frontend components: [/frontend/components/Area/](../frontend/components/Area/)
|
|
- Areas list page: [/frontend/components/Areas.tsx](../frontend/components/Areas.tsx)
|
|
- Area detail page: [/frontend/components/Area/AreaDetails.tsx](../frontend/components/Area/AreaDetails.tsx)
|
|
- Area modal: [/frontend/components/Area/AreaModal.tsx](../frontend/components/Area/AreaModal.tsx)
|
|
- Areas API client: [/frontend/utils/areasService.ts](../frontend/utils/areasService.ts)
|
|
- Integration tests: [/backend/tests/integration/areas.test.js](../backend/tests/integration/areas.test.js)
|
|
|
|
---
|
|
|
|
**Document Version:** 1.0.0
|
|
**Last Updated:** 2026-03-14
|
|
**Audience:** Developers, AI assistants, and end users |