PlanterPlan is a specialized project management web application designed specifically for church planters to manage the complex process of launching a new church. The app provides structured task templates, collaborative features, and comprehensive resources to guide planters through the 9-month church planting journey. This document outlines requirements for a complete system rewrite that maintains existing functionality while fixing partial implementations and adding new features.
The application addresses the challenge that church planters face: managing hundreds of tasks within a 9-month timeframe without prior experience. PlanterPlan provides:
- Pre-built task templates organized hierarchically
- Detailed instructions and resources for each task
- Collaborative team management
- Timeline management with automated due date calculations
- White-label capabilities for partner organizations
- Phases - Major stages of the church planting process
- Milestones - Key accomplishments within each phase
- Tasks - Specific action items within milestones
- Subtasks - Granular child tasks under main tasks
- Project Owner: Full edit access, settings management, user invitation
- Full User: View and edit all tasks
- Limited User: View all, edit only assigned tasks
- Coach: View all, edit only coaching-specific tasks
- Account creation and management
- Project creation from templates
- Store functionality with Stripe integration
- Due date engine with automatic date calculations
- Project customization (add/delete/modify tasks)
- Team collaboration and user invitation system
- Progress visualization (donut charts)
- Task detail management with rich content
- Resource library (searchable/filterable)
- Multiple task list views (Priority, Overdue, Due Soon, Current, etc.)
- Alternative checkpoint-based project architecture
- Monthly status reports
- Analytics dashboard
- Content management for master library
- Template creation and management
- User and license management
- White-label organization administration
- Custom branding and URLs
- Organization-specific administration
- View-only access for organizational oversight
- CORS error during new user registration
- Case-sensitive email field issue
- Search functionality in both user and admin interfaces
- Print formatting for status reports
- Master library display when adding custom tasks
- New project notification emails to administrators
- Priority view filtering logic (orphaned tasks/empty milestones)
- Project menu dropdown filtering for archived projects
- Automated Reporting: Monthly status reports sent automatically to supervisors on the 2nd of each month
- Smart Task Filtering:
- Hide already-included tasks when adding from library
- Show topically related tasks with "show more" option
- Bulk task selection capability
- Strategy Templates: New task type that prompts library additions upon completion
- Coaching Tasks: Auto-assignment to users with Coach permissions
- Advanced User Management: Filters for user activity, task completion, login history
- Drag-and-drop reordering with automatic renumbering
- Push notifications for:
- Weekly priority task summaries
- Overdue task alerts
- Task comments
- Multi-language interface support
- API integrations (Zoho CRM, Zoho Analytics)
- File upload system (AWS or similar)
- Calendar integration via ICS feed
- Due dates for checkpoint-based phases
- Multiple sorting options (chronological, alphabetical, numerical)
- Gantt chart reporting for phases and milestones
- Core Technologies
- Architecture Overview
- Component Architecture
- State Management
- Data Flow Patterns
- Key Features
- API Services
- Utility Systems
- Styling and UI
- Performance Optimizations
- Security and Authentication
- Development Considerations
- React 18+: Component-based UI with hooks and contexts
- React Router DOM: Client-side routing
- Tailwind CSS: Utility-first styling framework
- HTML5 Drag & Drop API: Native drag-drop functionality
- Supabase:
- Authentication service
- PostgreSQL database with Row Level Security (RLS)
- Real-time subscriptions
- Storage for assets
- React Context API: Global state management
- Custom Hooks: Reusable business logic
- Local Component State: UI-specific state
┌─────────────────────────────────────────────────────────┐
│ Frontend (React) │
├───────────────────────────────────────────────────────────┤
│ ┌─────────────┐ ┌──────────────┐ ┌──────────────┐ │
│ │ Components │ │ Contexts │ │ Hooks │ │
│ └─────────────┘ └──────────────┘ └──────────────┘ │
├───────────────────────────────────────────────────────────┤
│ Service Layer │
│ ┌─────────────────────────────────────────────────┐ │
│ │ Auth | Task | Resource | License | Organization │ │
│ └─────────────────────────────────────────────────┘ │
├───────────────────────────────────────────────────────────┤
│ Utility Layer │
│ ┌─────────────────────────────────────────────────┐ │
│ │ Date | Drag | Position | Cache | Validation │ │
│ └─────────────────────────────────────────────────┘ │
└───────────────────────────────────────────────────────────┘
│
▼
┌───────────────────────────────────────────────────────────┐
│ Backend (Supabase) │
├───────────────────────────────────────────────────────────┤
│ ┌──────────┐ ┌──────────────┐ ┌──────────────┐ │
│ │ Auth │ │ Database │ │ Storage │ │
│ └──────────┘ └──────────────┘ └──────────────┘ │
└───────────────────────────────────────────────────────────┘
src/
├── components/
│ ├── Admin/ # Administrative tools
│ ├── contexts/ # React contexts for global state
│ ├── License/ # License management UI
│ ├── Login/ # Authentication components
│ ├── MasterLibrary/ # Template library features
│ ├── Organization/ # White-label organization UI
│ ├── Reports/ # Reporting and analytics
│ ├── Resources/ # Resource management
│ ├── Search/ # Search functionality
│ ├── Settings/ # User and admin settings
│ ├── TaskForm/ # Task creation/editing forms
│ ├── TaskList/ # Task listing and management
│ ├── TemplateList/ # Template management
│ └── TemplateProject/ # Project creation from templates
├── hooks/ # Custom React hooks
├── services/ # API service layers
├── utils/ # Helper functions and utilities
└── supabaseClient.js # Supabase client configuration
| Component | Purpose | Key Functions |
|---|---|---|
TaskList |
Displays and manages projects/tasks | Task creation, selection, hierarchical display, drag-drop, search integration |
TaskItem |
Represents a single task | Displays task info, handles drag events, toggles expansion, recursive rendering |
TaskDetailsPanel |
Displays detailed task information | Shows/edits task properties, manages dates, validates changes |
TaskForm |
Task creation/editing form | Form validation, date calculations, array field management |
TemplateList |
Manages templates | Template creation, listing, hierarchical display |
TemplateItem |
Represents a single template | Displays template, handles drag events, recursive structure |
TemplateDetailsPanel |
Displays template details | Shows template properties, editing interface |
TemplateTaskForm |
Template creation/editing | Manages template-specific fields, duration calculations |
HTML5DragDropZone |
Drop zones for drag operations | Handles 'between' and 'into' drops, visual feedback |
ResourcesPage |
Resource management interface | CRUD operations, filtering, tag management |
ResourceItem |
Single resource display | Shows resource details, format badges, action buttons |
OrganizationHeader |
Organization navigation | Displays org branding, navigation links |
OrganizationApp |
Organization app wrapper | Routes, sidebar, themed container |
LicenseManager |
License administration | Generate, filter, track license usage |
LicenseKeyEntry |
License key input | Validates and applies license keys |
WhiteLabelOrgList |
Organization management | Lists orgs, shows details, manages settings |
UserSettings |
User preferences | Profile, notifications, license info |
AdminSettings |
Admin configuration | Organization settings, appearance, user management |
AppearanceSettings |
Theme customization | Colors, fonts, logo management |
App
├── AuthProvider
│ └── OrganizationProvider
│ └── TaskProvider
│ └── SearchProvider
│ └── Router
│ └── ProtectedRoutes
│ └── Layout (varies by route/user)
│ ├── TaskList
│ │ ├── TaskItem (recursive)
│ │ │ ├── HTML5DragDropZone
│ │ │ └── Children TaskItems
│ │ ├── TaskDetailsPanel
│ │ │ └── TaskForm
│ │ ├── NewProjectForm
│ │ └── TaskUIComponents
│ │ ├── EmptyPanel
│ │ ├── DeleteConfirmation
│ │ └── SearchBanner
│ ├── TemplateList
│ │ ├── TemplateItem (recursive)
│ │ │ └── Children TemplateItems
│ │ ├── TemplateDetailsPanel
│ │ │ └── TemplateTaskForm
│ │ └── CreateNewTemplateForm
│ ├── ResourcesPage
│ │ ├── ResourceItem
│ │ ├── ResourceDetailsPanel
│ │ └── ResourceForm
│ ├── Settings
│ │ ├── UserSettings
│ │ │ └── LicenseSection
│ │ └── AdminSettings
│ │ └── AppearanceSettings
│ ├── Organization
│ │ ├── OrganizationHeader
│ │ ├── OrganizationSelector
│ │ └── OrganizationSettings
│ └── Admin
│ ├── LicenseManager
│ └── WhiteLabelOrgList
- Purpose: Manages user authentication state and session
- State:
user,loading,userRole,userOrgId,userInfo - Key Methods:
fetchUserInfo(): Retrieves user profile datahasRole(): Role-based access control
- Purpose: Central task management hub
- State:
tasks,loading,error,isFetching - Key Methods:
fetchTasks(): Parallel fetch of instance and template taskscreateTask(): Task creation with license validationupdateTask(): Task updates with impact analysisdeleteTask(): Recursive deletion with hierarchy updatesafterDragDrop(): Drag-drop position synchronization
- Purpose: White-label organization data management
- State:
organization,organizationId,loading,error - Features:
- CSS variable injection for theming
- Fallback to default organization
- Automatic refetch on visibility change
- Purpose: Search and filtering functionality
- State:
searchFilters,isSearchActive,filteredTasks - Filters:
- Text search across multiple fields
- Status filtering (overdue, today, this week)
- Task type filtering (instance vs template)
- User assignment filtering
| Hook | Purpose | Key Returns |
|---|---|---|
useTaskCreation |
Handles task/project creation | createTask(), isCreating, canCreate |
useTaskDeletion |
Manages recursive deletion | deleteTask(), getDeletionConfirmationMessage() |
useTaskUpdate |
Updates with impact analysis | updateTask(), updateTaskDates(), getUpdateStatus() |
useTaskDates |
Cached date calculations | taskDates, recalculateAllDates(), isTaskOverdue() |
useTemplateToProject |
Template conversion | createProjectFromTemplate(), isConverting |
useLicenses |
License management | canCreateProject, applyLicenseKey(), validateProjectCreation() |
useInvitations |
Project invitations | sendProjectInvitation(), acceptProjectInvitation() |
useTaskForm |
Form state management | formData, errors, validateForm(), dateMode |
useTemplateTaskForm |
Template form logic | formData, validateForm(), affectedAncestors |
| Service | Purpose | Key Methods |
|---|---|---|
authService |
Authentication operations | signUp(), signIn(), getCurrentUser(), updateUserProfile() |
taskService |
Task CRUD operations | fetchAllTasks(), createTask(), updateTask(), deleteTask() |
licenseService |
License management | generateLicense(), validateLicense(), markLicenseAsUsed() |
organizationService |
Org management | fetchOrganizationBySlug(), updateOrganization() |
resourceService |
Resource operations | fetchAllResources(), createResource(), validateResourceData() |
invitationService |
Invitation handling | createInvitation(), acceptInvitation(), getPendingInvitations() |
teamManagementService |
Team operations | getProjectMembers(), addProjectMember(), checkUserRole() |
reportService |
Report generation | generateProjectReport(), exportReport(), generatePDFExport() |
| Utility | Purpose | Key Functions |
|---|---|---|
DateCacheEngine |
Date calculation caching | calculateAllDates(), updateTaskDatesIncremental() |
dateUtils |
Date operations | calculateDueDate(), determineTaskStartDate(), formatDate() |
dragUtils |
Drag-drop helpers | calculateDropPosition(), canDropOnTarget(), makeDraggable() |
sparsePositioning |
Position management | calculateInsertPosition(), checkIfRenormalizationNeeded() |
sequentialTaskManager |
Sequential updates | calculateSequentialStartDates(), updateAncestorDurations() |
taskUtils |
Task helpers | getTaskLevel(), isDescendantOf(), getBackgroundColor() |
TaskList Component
- Hierarchical task display with expand/collapse
- HTML5 drag-drop zones for reordering
- Real-time date recalculation
- Search integration
- License-based project creation
TaskItem Component
- Recursive rendering for nested tasks
- Drag handle with accessibility support
- Visual feedback for drag operations
- Contextual background colors by level
TaskDetailsPanel Component
- View/edit mode toggle
- Parent impact warnings
- Field validation
- Array field management (actions/resources)
TaskForm Components
TaskForm: Instance task creation/editingTemplateTaskForm: Template task managementNewProjectForm: Project initializationCreateNewTemplateForm: Template creation- Date mode selection (calculate end date vs duration)
HTML5DragDropZone Component
- Two zone types: 'between' (reorder) and 'into' (nest)
- Visual feedback with animations
- Hover state management
- Debug mode for development
Drag Operation Flow
handleDragStart: Validates draggability, stores drag datahandleDragOver: Prevents default, shows drop zoneshandleDrop: Calculates new position, updates hierarchyafterDragDrop: Syncs to database, recalculates dates
ResourcesPage Component
- Split-panel interface (list/details)
- Format filtering (PDF, hyperlink, PowerPoint, etc.)
- Tag management
- User-scoped resource visibility
Resource Validation
- Title requirements
- URL validation for hyperlinks
- Tag length limits
- Format-specific rules
White-Label Customization
- Custom color schemes (primary, secondary, tertiary)
- Font selection
- SVG logo upload with validation
- Subdomain routing
OrganizationSettings Component
- Logo management with SVG validation
- Color picker integration
- Font selection dropdown
- Real-time preview
LicenseManager Component
- Bulk license generation
- Status filtering (available/used)
- Organization assignment
- Copy-to-clipboard functionality
License Validation Flow
- User applies license key
- System validates uniqueness and availability
- License marked as used upon project creation
- User limited to one project without license
// Task state structure
{
tasks: [
{
id: string,
title: string,
parent_task_id: string | null,
position: number,
origin: 'instance' | 'template',
start_date: Date | null,
due_date: Date | null,
duration_days: number,
is_complete: boolean,
// ... additional fields
}
],
loading: boolean,
error: Error | null
}Common patterns:
expandedTasks: Object tracking expanded nodes in tree viewsselectedTaskId: Currently selected itemisEditing: Edit mode toggleformData: Form field valueserrors: Validation errorsdateMode: Date calculation mode
Custom hooks encapsulate complex stateful logic:
useTaskDates: Cached date calculationsuseTaskCreation: Creation with license validationuseTaskDeletion: Recursive deletion logicuseInvitations: Project invitation management
User Input → Form Validation → License Check → Position Calculation
→ Date Enhancement → Database Insert → State Update → UI Re-render
Drag Start → Visual Feedback → Drop Zone Activation → Drop Event
→ Position Calculation → Optimistic Update → Database Sync → Date Recalculation
Template Selection → License Validation → Hierarchy Traversal
→ Root Project Creation → Recursive Child Creation → Date Calculation
→ State Integration
- Unlimited nesting levels
- Parent-child relationships
- Automatic duration rollup
- Sequential date calculations
- Reusable task templates
- Template library with search
- Project creation from templates
- Default duration preservation
- Visual reordering
- Parent reassignment
- Accessibility support
- Touch device compatibility
- Multiple calculation modes
- Dependency-based updates
- Cache optimization
- Overdue tracking
- Custom branding
- Organization-specific themes
- Subdomain routing
- Logo customization
- Project creation limits
- Key generation and validation
- Bulk operations
- Usage tracking
- Project invitations
- Role-based permissions
- Member management
- Activity tracking
- Multiple format support
- Tag categorization
- File attachments
- Link validation
- User registration with metadata
- Authentication (sign in/out)
- Password reset flow
- Profile management
- CRUD operations
- Batch updates
- Hierarchy management
- Statistics generation
- Master library operations
- Key generation algorithm
- Validation logic
- Usage tracking
- Project limit enforcement
- Organization CRUD
- Theme management
- Logo storage
- Subdomain handling
- Resource CRUD
- Format validation
- Tag management
- Permission checking
- Invitation creation
- Email validation
- Status management
- Acceptance flow
- Member management
- Role assignments
- Permission checking
- Statistics
DateCacheEngine Class
- Dependency mapping
- Incremental updates
- Cache invalidation
- Performance monitoring
Key Algorithms:
- Sequential start date calculation
- Duration rollup for parents
- Milestone-based scheduling
- Working days calculation
Sparse Positioning System
- Gap-based positioning (increment: 1000)
- Automatic renormalization
- Collision avoidance
- Insertion optimization
Features:
- Cross-browser compatibility
- Touch support
- Keyboard navigation
- Screen reader announcements
- Error recovery
Color Scheme
- Level-based background colors
- Status indicators
- Hover/active states
- Dark mode support (planned)
Typography
- System font stack
- Responsive sizing
- Hierarchy emphasis
- Readability optimization
CSS Transitions
- Smooth expand/collapse
- Drag feedback
- Hover effects
- Loading states
Keyframe Animations
pulse-blue/green: Drop zone feedbackshimmer: Loading effectstask-reorder: Success feedbackshake: Error indication
- Mobile-first approach
- Touch-optimized interactions
- Flexible layouts
- Breakpoint management
- React.memo for expensive components
- useMemo for computed values
- useCallback for stable references
- Virtual scrolling (planned)
- Incremental updates
- Optimistic UI updates
- Batch operations
- Query result caching
- Parallel fetching
- Request debouncing
- Error retry logic
- Connection pooling
- Supabase Auth handles user sessions
- JWT tokens for API requests
- Row Level Security (RLS) policies
- Organization-scoped data access
- Role hierarchy: owner > full > limited > coach
- Project-level permissions
- Organization admin rights
- Resource visibility controls
- Input sanitization
- XSS prevention
- CSRF protection (via Supabase)
- Secure password policies
- Unit tests for utilities
- Integration tests for services
- Component testing with React Testing Library
- E2E testing for critical flows
- Graceful degradation
- User-friendly error messages
- Automatic retry for network errors
- Error boundary implementation
- Console logging in development
- Error tracking integration (planned)
- Performance monitoring
- User analytics (planned)
- Environment configuration
- Build optimization
- Code splitting
- Asset optimization
- Real-time Collaboration: Live updates via Supabase subscriptions
- Advanced Reporting: Charts, exports, custom reports
- Mobile App: React Native implementation
- Offline Support: Service worker integration
- AI Integration: Smart task suggestions and automation
- Calendar View: Visual timeline and Gantt charts
- Notifications: Email and in-app notifications
- File Attachments: Direct file upload to tasks
- Time Tracking: Built-in timer functionality
- Recurring Tasks: Template-based recurring task creation
- TypeScript migration
- Storybook integration
- Performance profiling
- Accessibility audit
- Internationalization
- Dark mode implementation
This Task Management App represents a sophisticated, enterprise-ready solution with robust architecture, comprehensive features, and scalable design. The modular structure, combined with modern React patterns and Supabase backend, provides a solid foundation for future growth and enhancement.