|
|
@@ -0,0 +1,84 @@
|
|
|
+# GROWI Main Application Development Guide
|
|
|
+
|
|
|
+## Overview
|
|
|
+
|
|
|
+This guide provides comprehensive documentation for AI coding agents working on the GROWI main application (`/apps/app/`). GROWI is a team collaboration wiki platform built with Next.js, Express, and MongoDB.
|
|
|
+
|
|
|
+## Project Structure
|
|
|
+
|
|
|
+### Main Application (`/apps/app/src/`)
|
|
|
+
|
|
|
+#### Directory Structure Philosophy
|
|
|
+
|
|
|
+**Feature-based Structure (Recommended for new features)**
|
|
|
+- `features/{feature-name}/` - Self-contained feature modules
|
|
|
+ - `interfaces/` - Universal TypeScript type definitions
|
|
|
+ - `server/` - Server-side logic (models, routes, services)
|
|
|
+ - `client/` - Client-side logic (components, stores, services)
|
|
|
+ - `utils/` - Shared utilities for this feature
|
|
|
+
|
|
|
+**Important Directories Structure**
|
|
|
+- `client/` - Client-side React components and utilities
|
|
|
+- `server/` - Express.js backend
|
|
|
+- `components/` - Universal React components
|
|
|
+- `pages/` - Next.js Pages Router
|
|
|
+- `states/` - Jotai state management
|
|
|
+- `stores/` - SWR-based state stores
|
|
|
+- `stores-universal/` - Universal SWR-based state stores
|
|
|
+- `styles/` - SCSS stylesheets with modular architecture
|
|
|
+- `migrations/` - MongoDB database migration scripts
|
|
|
+- `interfaces/` - Universal TypeScript type definitions
|
|
|
+- `models/` - Universal Data model definitions
|
|
|
+
|
|
|
+### Key Technical Details
|
|
|
+
|
|
|
+**Frontend Stack**
|
|
|
+- **Framework**: Next.js (Pages Router) with React
|
|
|
+- **Language**: TypeScript (strict mode enabled)
|
|
|
+- **Styling**: SCSS with CSS Modules by Bootstrap 5
|
|
|
+- **State Management**:
|
|
|
+ - **Jotai** (Primary, Recommended): Atomic state management for UI and application state
|
|
|
+ - **SWR**: Data fetching, caching, and revalidation
|
|
|
+ - **Unstated**: Legacy (being phased out, replaced by Jotai)
|
|
|
+- **Testing**:
|
|
|
+ - Vitest for unit tests (`*.spec.ts`, `*.spec.tsx`)
|
|
|
+ - Jest for integration tests (`*.integ.ts`)
|
|
|
+ - React Testing Library for component testing
|
|
|
+ - Playwright for E2E testing
|
|
|
+- **i18n**: next-i18next for internationalization
|
|
|
+
|
|
|
+**Backend Stack**
|
|
|
+- **Runtime**: Node.js
|
|
|
+- **Framework**: Express.js with TypeScript
|
|
|
+- **Database**: MongoDB with Mongoose ODM
|
|
|
+- **Migration System**: migrate-mongo
|
|
|
+- **Authentication**: Passport.js with multiple strategies (local, LDAP, OAuth, SAML)
|
|
|
+- **Real-time**: Socket.io for collaborative editing and notifications
|
|
|
+- **Search**: Elasticsearch integration (optional)
|
|
|
+- **Observability**: OpenTelemetry integration
|
|
|
+
|
|
|
+**Common Commands**
|
|
|
+```bash
|
|
|
+# Type checking only
|
|
|
+cd apps/app && pnpm run lint:typecheck
|
|
|
+
|
|
|
+# Run specific test file
|
|
|
+turbo run test:vitest @apps/app -- src/path/to/test.spec.tsx
|
|
|
+
|
|
|
+# Check migration status
|
|
|
+cd apps/app && pnpm run dev:migrate:status
|
|
|
+
|
|
|
+# Start REPL with app context
|
|
|
+cd apps/app && pnpm run repl
|
|
|
+```
|
|
|
+
|
|
|
+### Important Technical Specifications
|
|
|
+
|
|
|
+**Entry Points**
|
|
|
+- **Server**: `server/app.ts` - Handles OpenTelemetry initialization and Crowi server startup
|
|
|
+- **Client**: `pages/_app.page.tsx` - Root Next.js application component
|
|
|
+ - `pages/[[...path]]/` - Dynamic catch-all page routes
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+*This guide was compiled from project memory files to assist AI coding agents in understanding the GROWI application architecture and development practices.*
|