# Directory Structure [← Back to Index](../CLAUDE.md) --- ## Project Root ``` /Users/chris/c0deLab/ProjectLand/tududi/ ├── README.md # User-facing documentation ├── CLAUDE.md # This developer guide (index) ├── LICENSE # MIT License ├── package.json # Root scripts and dependencies (monorepo) ├── package-lock.json # Dependency lock file │ ├── Configuration Files ├── webpack.config.js # Frontend build configuration ├── tsconfig.json # TypeScript config (frontend only) ├── jest.config.js # Jest config for frontend tests ├── babel.config.js # Babel transpilation for Jest + Webpack ├── eslint.config.mjs # ESLint flat config ├── .prettierrc.json # Prettier code formatting ├── tailwind.config.js # Tailwind CSS customization ├── .sequelizerc # Sequelize CLI configuration ├── postcss.config.js # PostCSS config for Tailwind │ ├── Docker & Deployment ├── Dockerfile # Production Docker image (multi-stage) ├── docker-compose.yml # Development Docker setup ├── .dockerignore # Docker build exclusions │ ├── Git & GitHub ├── .gitignore ├── .github/ │ ├── CONTRIBUTING.md # Contribution guidelines │ └── workflows/ # GitHub Actions (if any) │ ├── Source Code ├── backend/ # Express backend → See Backend Structure ├── frontend/ # React frontend → See Frontend Structure ├── public/ # Static assets (fonts, locales, images) ├── dist/ # Production build output ├── e2e/ # Playwright E2E tests ├── scripts/ # Build and utility scripts ├── docs/ # Documentation (this directory) │ └── Other ├── screenshots/ # App screenshots for README ├── uploads/ # User file uploads (not in git) ├── test-results/ # Playwright test results └── node_modules/ # Dependencies ``` --- ## Backend Structure ``` /Users/chris/c0deLab/ProjectLand/tududi/backend/ │ ├── app.js # Main Express application entry point │ # - Middleware setup (Helmet, CORS, compression) │ # - Session management │ # - Rate limiting │ # - Module registration │ # - Swagger integration │ # - SPA fallback routing │ ├── modules/ # Feature modules (modular architecture) │ │ │ ├── tasks/ # Task management (MOST COMPLEX MODULE) │ │ ├── routes.js # Express routes │ │ ├── repository.js # Data access layer │ │ ├── recurringTaskService.js │ │ ├── taskEventService.js │ │ ├── taskScheduler.js # Cron-based scheduling │ │ ├── operations/ # Business logic operations │ │ │ ├── list.js # List operations │ │ │ ├── completion.js # Status changes │ │ │ ├── recurring.js # Recurrence handling │ │ │ ├── subtasks.js # Subtask CRUD │ │ │ ├── tags.js # Tag assignment │ │ │ ├── grouping.js # Grouping logic │ │ │ ├── sorting.js # Sort orders │ │ │ └── parent-child.js # Hierarchy ops │ │ ├── queries/ # Query builders │ │ │ ├── query-builders.js │ │ │ ├── metrics-queries.js │ │ │ └── metrics-computation.js │ │ ├── core/ # Core utilities │ │ │ ├── serializers.js # Format API responses │ │ │ ├── parsers.js # Parse request data │ │ │ ├── builders.js # Build database objects │ │ │ └── comparators.js # Detect changes │ │ ├── middleware/ │ │ │ └── access.js # Access control │ │ └── utils/ │ │ ├── constants.js │ │ ├── validation.js │ │ └── logging.js │ │ │ ├── projects/ # Project management │ │ ├── routes.js │ │ ├── repository.js │ │ └── utils/ │ │ └── validation.js │ │ │ ├── areas/ # Area organization │ ├── notes/ # Notes management │ ├── tags/ # Tag system │ ├── users/ # User management │ ├── auth/ # Authentication (login/register) │ ├── shares/ # Project sharing & permissions │ ├── telegram/ # Telegram bot integration │ ├── inbox/ # Inbox items │ ├── habits/ # Habit tracking │ ├── notifications/ # Notification system │ ├── search/ # Universal search │ ├── views/ # Saved views │ ├── admin/ # Admin functions │ ├── backup/ # Backup/restore (33KB, complex) │ ├── feature-flags/ # Feature flag management │ ├── quotes/ # Daily quotes │ └── url/ # URL handling │ ├── models/ # Sequelize model definitions │ ├── index.js # Model initialization & associations │ ├── task.js # Task model (recurrence fields) │ ├── project.js # Project model │ ├── area.js # Area model │ ├── note.js # Note model │ ├── tag.js # Tag model │ ├── user.js # User model (bcrypt password, settings) │ ├── permission.js # Permission/sharing model │ ├── apiToken.js # API token model │ ├── recurringCompletion.js │ ├── taskEvent.js # Task audit log │ ├── taskAttachment.js │ ├── inboxItem.js │ ├── notification.js │ ├── role.js │ ├── view.js │ ├── backup.js │ ├── setting.js │ └── action.js │ ├── migrations/ # Database migrations (64+ files) │ ├── 20240101120000-initial-schema.js │ ├── 20240115140000-add-recurring-tasks.js │ └── ... (timestamped migration files) │ ├── seeders/ # Database seed data │ └── (seed files if any) │ ├── middleware/ # Global middleware │ ├── auth.js # Authentication (session + Bearer token) │ ├── authorize.js # Authorization (permission checking) │ ├── rateLimiter.js # Rate limiting config (5 different limiters) │ ├── queryLogger.js # Development query logging │ └── permissionCache.js │ ├── services/ # Cross-cutting services │ ├── permissionsService.js # Main permissions service │ ├── backupService.js # Backup/restore operations │ ├── emailService.js # Email notifications │ ├── logService.js # Error logging │ ├── applyPerms.js # Apply permissions │ └── permissionsCalculators.js # Permission calculations │ ├── shared/ # Shared utilities │ ├── errors/ # Custom error classes │ │ ├── AppError.js │ │ ├── NotFoundError.js │ │ ├── ValidationError.js │ │ ├── ConflictError.js │ │ ├── UnauthorizedError.js │ │ └── ForbiddenError.js │ ├── middleware/ │ │ └── errorHandler.js # Global error handler │ └── database/ │ └── BaseRepository.js # Base repository class │ ├── utils/ # Utility functions │ ├── uid.js # Generate 15-char unique IDs (nanoid) │ ├── slug-utils.js # URL slug handling, UID extraction │ ├── timezone-utils.js # Timezone conversions, date calculations │ ├── attachment-utils.js # File handling and validation │ ├── migration-utils.js # Database migration helpers │ ├── request-utils.js # Request utilities │ └── notificationPreferences.js │ ├── config/ # Configuration │ ├── config.js # Environment-based config │ ├── database.js # Sequelize database config │ └── swagger.js # Swagger API schema (30KB) │ ├── docs/ # API documentation │ └── swagger/ │ └── (swagger doc files) │ ├── scripts/ # Utility scripts │ └── (database management scripts) │ └── tests/ # Backend tests ├── unit/ # Unit tests │ ├── models/ │ │ ├── task.test.js │ │ ├── project.test.js │ │ ├── user.test.js │ │ └── ... │ ├── middleware/ │ │ ├── auth.test.js │ │ └── authorize.test.js │ ├── services/ │ │ ├── permissionsService.test.js │ │ └── applyPerms.test.js │ └── utils/ │ ├── timezone-utils.test.js │ ├── slug-utils.test.js │ ├── attachment-utils.test.js │ └── migration-utils.test.js │ └── integration/ # Integration tests (47+ test directories) ├── tasks/ │ ├── tasks.test.js │ ├── subtasks.test.js │ └── recurring.test.js ├── projects/ ├── areas/ ├── notes/ ├── tags/ ├── auth/ ├── shares/ └── ... ``` --- ## Frontend Structure ``` /Users/chris/c0deLab/ProjectLand/tududi/frontend/ │ ├── index.tsx # React application entry point │ # - React root initialization │ # - i18n setup │ # - Dark mode initialization │ # - Service worker cleanup │ ├── App.tsx # Root component (13KB) │ # - Route definitions │ # - User authentication check │ # - Route protection │ # - Layout wrapper │ ├── Layout.tsx # Main layout wrapper (21KB) │ # - Sidebar integration │ # - Navigation │ # - Modal management │ ├── components/ # React components (feature-based) │ │ │ ├── Task/ # Task-related components │ │ ├── TasksToday.tsx │ │ ├── TaskDetails.tsx │ │ ├── TaskForm.tsx │ │ ├── TaskItem.tsx │ │ ├── TaskList.tsx │ │ ├── TaskFilters.tsx │ │ ├── SubtaskList.tsx │ │ └── ... │ │ │ ├── Project/ # Project components │ │ ├── ProjectDetails.tsx │ │ ├── ProjectForm.tsx │ │ ├── ProjectList.tsx │ │ ├── ProjectCard.tsx │ │ └── ... │ │ │ ├── Area/ # Area components │ │ ├── AreaDetails.tsx │ │ ├── AreaForm.tsx │ │ └── ... │ │ │ ├── Note/ # Note components │ │ ├── NoteDetails.tsx │ │ ├── NoteForm.tsx │ │ └── ... │ │ │ ├── Tag/ # Tag components │ ├── Habits/ # Recurring tasks UI │ ├── Inbox/ # Inbox management │ │ │ ├── Calendar/ # Calendar view (27KB) │ │ └── Calendar.tsx │ │ │ ├── Sidebar.tsx # Left navigation sidebar │ ├── Navbar.tsx # Top navigation bar │ │ │ ├── Metrics/ # Productivity metrics │ │ └── ... │ │ │ ├── Notifications/ # Notification system │ ├── UniversalSearch/ # Search interface │ │ │ ├── Shared/ # Shared UI components (41 items) │ │ ├── Modal components │ │ │ ├── Modal.tsx │ │ │ ├── ConfirmDialog.tsx │ │ │ └── ... │ │ ├── Form inputs │ │ │ ├── Input.tsx │ │ │ ├── Select.tsx │ │ │ ├── DatePicker.tsx │ │ │ └── ... │ │ ├── ToastContext.tsx │ │ ├── LoadingScreen.tsx │ │ ├── Button.tsx │ │ ├── Badge.tsx │ │ └── ... │ │ │ ├── Admin/ # Admin panel │ ├── Backup/ # Backup/restore UI │ ├── Profile/ # User profile settings │ │ ├── ProfileSettings.tsx │ │ ├── ApiTokens.tsx │ │ └── ... │ ├── Productivity/ # Analytics dashboard │ └── Login/Register # Auth pages │ ├── Login.tsx │ └── Register.tsx │ ├── store/ # Zustand state management │ └── useStore.ts # Global store (28KB) │ # - Task state & cache │ # - Project state & cache │ # - UI state (modals, filters, selections) │ # - Cache management functions │ ├── contexts/ # React contexts │ ├── ModalContext.tsx # Modal state management │ ├── SidebarContext.tsx # Sidebar state │ └── TelegramStatusContext.tsx # Telegram integration status │ ├── hooks/ # Custom React hooks │ ├── useKeyboardShortcuts.ts # Keyboard handling │ ├── useModalManager.ts # Modal management │ ├── usePersistedModal.ts # Modal persistence │ └── useTasksData.ts # Task data fetching │ ├── utils/ # Frontend utilities (30+ files) │ ├── API Services (API client utilities) │ │ ├── tasksService.ts # Task API client │ │ ├── projectsService.ts # Project API client │ │ ├── notesService.ts │ │ ├── tagsService.ts │ │ ├── areasService.ts │ │ ├── profileService.ts # User profile API │ │ ├── apiKeysService.ts # API token management │ │ ├── searchService.ts # Search API client │ │ ├── sharesService.ts # Project sharing API │ │ ├── backupService.ts # Backup/restore API │ │ ├── inboxService.ts # Inbox API │ │ ├── habitsService.ts # Habits/recurring API │ │ ├── taskEventService.ts # Task history API │ │ ├── taskIntelligenceService.ts # AI-assisted task mgmt │ │ └── attachmentsService.ts # File attachment handling │ │ │ ├── Utilities │ │ ├── dateUtils.ts # Date/time helpers │ │ ├── timezoneUtils.ts # Timezone handling │ │ ├── taskSortUtils.ts # Task sorting logic │ │ ├── localeUtils.ts # i18n helpers │ │ ├── keyboardShortcutsService.ts # Shortcut definitions │ │ ├── bannersService.ts # Banner management │ │ ├── urlService.ts # URL parsing │ │ ├── slugUtils.ts # URL slug handling │ │ ├── userUtils.ts # User utilities │ │ ├── fetcher.ts # SWR fetcher configuration │ │ └── featureFlags.ts # Feature flag client │ │ │ └── config/ │ └── paths.ts # API and path configuration │ ├── entities/ # TypeScript interfaces/types │ ├── Task.ts # Task type definition │ ├── Project.ts # Project type definition │ ├── Note.ts # Note type definition │ ├── User.ts # User type definition │ ├── Tag.ts # Tag type definition │ ├── Area.ts # Area type definition │ ├── TaskEvent.ts # Task event type │ ├── Attachment.ts # Attachment type │ ├── InboxItem.ts # Inbox item type │ └── Metrics.ts # Metrics type │ ├── i18n.ts # i18next configuration │ # - Language detection │ # - Resource loading │ # - 24 language support │ ├── styles/ # Global styles │ ├── globals.css │ ├── markdown.css │ └── ... │ └── __tests__/ # Frontend tests ├── setup.ts # Test configuration └── (component tests) ``` --- ## E2E Tests Structure ``` /Users/chris/c0deLab/ProjectLand/tududi/e2e/ ├── tests/ # Playwright test specs │ ├── login.spec.ts │ ├── tasks.spec.ts │ ├── projects.spec.ts │ ├── subtasks.spec.ts │ ├── recurring-tasks.spec.ts │ └── ... └── bin/ └── run-e2e.sh # Test runner script ``` --- ## Critical Paths Reference Quick lookup table for common development tasks: | Task | Primary Location | Related Files | |------|------------------|---------------| | **Add backend feature** | `/backend/modules/[feature]/` | routes.js, repository.js, operations/ | | **Create new model** | `/backend/models/[model].js` | Also update `/backend/models/index.js` for associations | | **Database migration** | `/backend/migrations/TIMESTAMP-name.js` | Create with `npm run migration:create` | | **Add React component** | `/frontend/components/[Feature]/ComponentName.tsx` | - | | **Define API routes** | `/backend/modules/[module]/routes.js` | - | | **Business logic** | `/backend/modules/[module]/operations/` | Or service files in module | | **Global frontend state** | `/frontend/store/useStore.ts` | Zustand store | | **API client** | `/frontend/utils/[resource]Service.ts` | - | | **TypeScript types** | `/frontend/entities/[Type].ts` | Interface definitions | | **Backend unit tests** | `/backend/tests/unit/[category]/` | models/, middleware/, services/, utils/ | | **Backend integration tests** | `/backend/tests/integration/[module]/` | - | | **E2E tests** | `/e2e/tests/[feature].spec.ts` | Playwright specs | | **Middleware** | `/backend/middleware/[name].js` | auth.js, authorize.js, etc. | | **Shared utilities** | `/backend/utils/` or `/frontend/utils/` | Depends on context | | **Error classes** | `/backend/shared/errors/` | Custom error types | | **Swagger docs** | `/backend/config/swagger.js` | API schema definitions | --- [← Back to Index](../CLAUDE.md)