|
| 1 | +# Compass Calendar Development Instructions |
| 2 | + |
| 3 | +Always reference these instructions first and fallback to search or bash commands only when you encounter unexpected information that does not match the info here. |
| 4 | + |
| 5 | +## Working Effectively |
| 6 | + |
| 7 | +### Initial Setup |
| 8 | + |
| 9 | +- Install dependencies: `yarn install --frozen-lockfile --network-timeout 300000` |
| 10 | + - Takes ~3.5 minutes. NEVER CANCEL. Set timeout to 10+ minutes. |
| 11 | +- Copy environment template: `cp packages/backend/.env.example packages/backend/.env` |
| 12 | + |
| 13 | +### Development Servers |
| 14 | + |
| 15 | +- **CRITICAL**: The backend requires external service credentials (Google OAuth, Supertokens, MongoDB) to run properly |
| 16 | +- **Web Development** (RECOMMENDED for coding): |
| 17 | + - `yarn dev:web` - Takes ~10 seconds to build. Serves on http://localhost:9080/ |
| 18 | + - Frontend works standalone without backend services |
| 19 | +- **Backend Development** (requires full setup): |
| 20 | + - `yarn dev:backend` - Fails without proper .env configuration |
| 21 | + - Needs: Google Cloud OAuth credentials, Supertokens account, MongoDB connection |
| 22 | + |
| 23 | +### Testing |
| 24 | + |
| 25 | +- **Core tests**: `yarn test:core` - Takes ~2 seconds. NEVER CANCEL. Always passes. |
| 26 | +- **Web tests**: `yarn test:web` - Takes ~15 seconds. NEVER CANCEL. 27/28 tests pass. |
| 27 | +- **Full test suite**: `yarn test` - Takes ~18 seconds but FAILS in restricted environments due to MongoDB binary download from fastdl.mongodb.org |
| 28 | + - Use individual package tests instead: `yarn test:core` and `yarn test:web` |
| 29 | + |
| 30 | +### Building |
| 31 | + |
| 32 | +- **CLI Tool**: `yarn cli --help` - Takes ~3 seconds. Lists all available commands. |
| 33 | +- **Web Build**: `yarn cli build web --environment staging --clientId "test-client-id"` |
| 34 | +- **Node Build**: `yarn cli build nodePckgs --environment staging` |
| 35 | +- Both builds require valid environment configuration |
| 36 | + |
| 37 | +### Linting |
| 38 | + |
| 39 | +- `npx eslint . --fix` - Takes ~15 seconds. NEVER CANCEL. |
| 40 | +- Expect ~186 style errors (normal for this codebase) |
| 41 | +- No workspace-level lint command available |
| 42 | + |
| 43 | +## Validation |
| 44 | + |
| 45 | +### Manual Testing Requirements |
| 46 | + |
| 47 | +- **ALWAYS** test the web application by starting `yarn dev:web` and navigating to http://localhost:9080/ |
| 48 | +- **ALWAYS** verify the login page loads correctly (shows "The gangway lowers only for the chosen" message) |
| 49 | +- **DO NOT** attempt to test login functionality without proper backend setup |
| 50 | +- **ALWAYS** run `yarn test:core` and `yarn test:web` after making changes |
| 51 | +- **ALWAYS** run `npx eslint . --fix` before completing work |
| 52 | + |
| 53 | +### Screenshots and UI Validation |
| 54 | + |
| 55 | +- Web application successfully loads and displays professional login interface |
| 56 | +- Login page URL: http://localhost:9080/login?reason=gauth-session-expired |
| 57 | +- Expected: Dark themed login form with email input and "OK" button |
| 58 | + |
| 59 | +## Project Structure |
| 60 | + |
| 61 | +### Packages Overview |
| 62 | + |
| 63 | +- `@compass/backend` - Express.js REST API with MongoDB, Google Calendar sync, WebSocket support |
| 64 | +- `@compass/web` - React/TypeScript frontend with Redux, styled-components, webpack bundling |
| 65 | +- `@compass/core` - Shared utilities, types, and business logic |
| 66 | +- `@compass/scripts` - CLI tools for building, database operations, user management |
| 67 | + |
| 68 | +### Key Files & Directories |
| 69 | + |
| 70 | +``` |
| 71 | +packages/backend/src/ |
| 72 | +├── auth/ # Google OAuth integration |
| 73 | +├── calendar/ # Google Calendar API |
| 74 | +├── event/ # Event CRUD operations |
| 75 | +├── sync/ # Calendar synchronization |
| 76 | +├── user/ # User management |
| 77 | +└── common/ # Shared backend utilities |
| 78 | +
|
| 79 | +packages/web/src/ |
| 80 | +├── views/ # React components and pages |
| 81 | +├── store/ # Redux state management |
| 82 | +├── common/ # Frontend utilities |
| 83 | +└── assets/ # Images and static files |
| 84 | +
|
| 85 | +packages/core/src/ |
| 86 | +├── types/ # TypeScript type definitions |
| 87 | +├── constants/ # Shared constants |
| 88 | +├── util/ # Utility functions |
| 89 | +└── mappers/ # Data transformation logic |
| 90 | +``` |
| 91 | + |
| 92 | +## Environment Requirements |
| 93 | + |
| 94 | +### Required for Full Development |
| 95 | + |
| 96 | +- Node.js >=18.18.0 (specified in package.json engines) |
| 97 | +- Yarn package manager (lockfile format) |
| 98 | +- Google Cloud Project with OAuth 2.0 credentials |
| 99 | +- Supertokens account for user session management |
| 100 | +- MongoDB database (cloud or local) |
| 101 | + |
| 102 | +### Optional Services |
| 103 | + |
| 104 | +- Kit.com account for email integration |
| 105 | +- NGrok account for local tunneling |
| 106 | + |
| 107 | +### Critical Environment Variables (backend/.env) |
| 108 | + |
| 109 | +```bash |
| 110 | +# Required for backend to start |
| 111 | +BASEURL=http://localhost:3000/api |
| 112 | +CLIENT_ID=YOUR_GOOGLE_OAUTH_CLIENT_ID |
| 113 | +CLIENT_SECRET=YOUR_GOOGLE_OAUTH_SECRET |
| 114 | +SUPERTOKENS_URI=YOUR_SUPERTOKENS_INSTANCE_URL |
| 115 | +SUPERTOKENS_KEY=YOUR_SUPERTOKENS_API_KEY |
| 116 | +MONGO_URI=YOUR_MONGODB_CONNECTION_STRING |
| 117 | + |
| 118 | +# Required for web development |
| 119 | +PORT=3000 |
| 120 | +NODE_ENV=development |
| 121 | +``` |
| 122 | + |
| 123 | +## Common Tasks & Timing |
| 124 | + |
| 125 | +### Repository Operations |
| 126 | + |
| 127 | +- `yarn install` - 3.5 minutes (NEVER CANCEL, set 10+ minute timeout) |
| 128 | +- `yarn test:core` - 2 seconds (always passes) |
| 129 | +- `yarn test:web` - 15 seconds (27/28 tests pass) |
| 130 | +- `yarn dev:web` - 10 seconds to start (always works) |
| 131 | +- `yarn cli --help` - 3 seconds (shows available commands) |
| 132 | + |
| 133 | +### Development Workflow |
| 134 | + |
| 135 | +1. **Start Development**: `yarn dev:web` (frontend only, always works) |
| 136 | +2. **Run Tests**: `yarn test:core && yarn test:web` (skips problematic backend tests) |
| 137 | +3. **Check Code Style**: `npx eslint . --fix` (expect style warnings) |
| 138 | +4. **Manual Validation**: Open http://localhost:9080/ and verify login page loads |
| 139 | + |
| 140 | +### CI/CD Integration |
| 141 | + |
| 142 | +- GitHub Actions runs `yarn install` and `yarn test` on Node.js 20 |
| 143 | +- Tests fail in CI due to MongoDB network restrictions (known limitation) |
| 144 | +- Linting and build validation happens in CI pipeline |
| 145 | + |
| 146 | +## Troubleshooting |
| 147 | + |
| 148 | +### Common Issues |
| 149 | + |
| 150 | +- **MongoDB download failures**: Use `yarn test:core` and `yarn test:web` instead of `yarn test` |
| 151 | +- **Backend won't start**: Missing environment variables, use web-only development |
| 152 | +- **Build timeouts**: All build operations need 10+ minute timeouts |
| 153 | +- **Test failures**: Expected in restricted network environments |
| 154 | + |
| 155 | +### Network Limitations |
| 156 | + |
| 157 | +- MongoDB binary downloads blocked in some environments |
| 158 | +- Google Fonts and external resources may be blocked |
| 159 | +- Backend services require internet connectivity for OAuth and database |
| 160 | + |
| 161 | +### Workarounds |
| 162 | + |
| 163 | +- Develop frontend-only using `yarn dev:web` for most coding tasks |
| 164 | +- Use individual test commands instead of full test suite |
| 165 | +- Mock external services for backend development when credentials unavailable |
| 166 | + |
| 167 | +## Package Scripts Reference |
| 168 | + |
| 169 | +### Root Level Commands |
| 170 | + |
| 171 | +- `yarn cli [command]` - Access CLI tools for build, seed, delete operations |
| 172 | +- `yarn dev:web` - Start webpack dev server (recommended) |
| 173 | +- `yarn dev:backend` - Start backend server (requires full environment) |
| 174 | +- `yarn test` - Run all tests (fails in restricted environments) |
| 175 | +- `yarn test:core` - Run core package tests only (reliable) |
| 176 | +- `yarn test:web` - Run web package tests only (mostly reliable) |
| 177 | + |
| 178 | +### Individual Package Commands |
| 179 | + |
| 180 | +- Core: Basic test and lint-fix scripts (lint-fix does nothing) |
| 181 | +- Backend: No individual scripts defined |
| 182 | +- Web: No individual scripts defined |
| 183 | +- Scripts: CLI entry point and utilities |
| 184 | + |
| 185 | +Always prioritize frontend development with `yarn dev:web` when backend services are unavailable. |
0 commit comments