Areas
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
-
Areas are top-level organizational containers
- They represent the broadest categories of your life and work
- Examples: Work, Personal, Health, Finance, Learning, Home
-
Areas are optional
- Projects can exist without belonging to an area
- Areas provide structure but aren't required
-
Areas don't cascade delete
- Deleting an area orphans its projects, doesn't delete them
- This prevents accidental data loss
- Orphaned projects remain accessible
-
Areas are simple by design
- Just a name and optional description
- No status, priority, or due dates
- Focus is on categorization, not task management
-
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
-
Name (required)
- The area title
- Examples: "Work", "Personal", "Health", "Finance", "Learning"
- Displayed in uppercase on area cards
- Sorted alphabetically
-
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"
-
UID (auto-generated)
- Unique identifier for the area
- Used in URLs and API calls
- Cannot be changed
-
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:
- Navigate to
/areas - Click "New Area" button (if implemented)
- 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:
- Navigate to
/areas - Hover over area card
- Click three-dot menu (appears on hover)
- Click "Edit"
- Modify fields in modal
- 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:
- Area record is deleted from database
- Projects belonging to area are orphaned (area_id set to null)
- Projects are NOT deleted
- 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:
- Navigate to
/areas - Hover over area card
- Click three-dot menu
- Click "Delete"
- 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:
- Go to Projects page
- Filter by "No Area"
- 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:
-
During project creation:
- Select area from dropdown in project modal
- Area dropdown shows all user's areas alphabetically
-
When editing existing project:
- Open project detail or edit modal
- Change area in dropdown
- Can set to "No Area" to orphan project
-
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:
- Navigate to Projects page
- Filter by "No Area"
- Or use grouped view - they appear in "No Area" section
How to fix (if desired):
- Open orphaned project
- Edit project details
- Select an area from dropdown
- 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
- Navigate to
/areas - Create areas for major life domains:
- Work
- Personal
- Health
- Finance
- Learning
- Home
- Add descriptions to clarify scope:
- Work: "Professional projects and career development"
- Personal: "Personal goals and hobbies"
- Health: "Fitness, nutrition, and wellness"
- Assign existing projects to appropriate areas
- Review grouped projects view for balance
Workflow 2: Organize Projects into Areas
Scenario: You have many unorganized projects
- Go to Projects page
- Filter by "No Area" to see orphaned projects
- For each project:
- Open project detail
- Consider its nature (work, personal, etc.)
- Assign to appropriate area
- Use grouped view to verify organization
- Adjust as needed
Workflow 3: Focus on Specific Life Domain
Scenario: You want to focus on work projects only
- Navigate to
/areas - Click on "Work" area card
- See only work-related projects
- Review active projects in work domain
- Identify stalled projects
- Plan next actions
Workflow 4: Review Life Balance
Scenario: Check if you're balanced across domains
- Navigate to
/projects?grouped=true - See projects grouped by area
- Count projects in each area
- Identify areas with:
- Too many projects (overcommitted)
- Too few projects (neglected domain)
- All completed projects (ready for new initiatives)
- Make adjustments to achieve balance
Workflow 5: Reorganize Life Structure
Scenario: Your life structure has changed
- Navigate to
/areas - Edit area names/descriptions to reflect new reality
- Consider creating new areas:
- New job → New work area or split areas
- New hobby → Personal or new Learning area
- Delete obsolete areas (projects become orphaned)
- Re-assign orphaned projects to new structure
- 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:
- Go to Projects page
- Filter by "No Area"
- You'll see all orphaned projects
- Re-assign to a new area if needed
"I can't see my area in the projects dropdown"
Possible causes:
- Area belongs to different user (not shared)
- Area was deleted
- Frontend cache issue
How to fix:
- Refresh the page
- Check
/areaspage to confirm area exists - If missing, recreate the area
"Area cards not showing in grid"
Possible causes:
- No areas created yet
- Loading state
- API error
How to check:
- Wait for loading to complete
- Check browser console for errors
- Verify
/api/areasendpoint returns data - Create first area if none exist
"Projects grouped view not working"
Checklist:
- Is
?grouped=truein URL? - Do projects have
area_idset? - Are areas loaded in global state?
- Check browser console for errors
"Can't delete an area"
Possible reasons:
- You're not the owner (areas can't be shared)
- Network error
- 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 - How areas relate to projects
- Today Page Sections - How area filtering affects Today view
- Architecture Overview - Technical architecture
- Backend Patterns - Module structure
- Database & Migrations - Data model details
- Directory Structure - File locations
Technical Implementation Files:
- Area model:
/backend/models/area.js - Areas service:
/backend/modules/areas/service.js - Areas controller:
/backend/modules/areas/controller.js - Areas repository:
/backend/modules/areas/repository.js - Areas routes:
/backend/modules/areas/routes.js - Areas validation:
/backend/modules/areas/validation.js - Frontend components:
/frontend/components/Area/ - Areas list page:
/frontend/components/Areas.tsx - Area detail page:
/frontend/components/Area/AreaDetails.tsx - Area modal:
/frontend/components/Area/AreaModal.tsx - Areas API client:
/frontend/utils/areasService.ts - Integration tests:
/backend/tests/integration/areas.test.js
Document Version: 1.0.0 Last Updated: 2026-03-14 Audience: Developers, AI assistants, and end users