You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: src/CLAUDE.md
+38-15Lines changed: 38 additions & 15 deletions
Original file line number
Diff line number
Diff line change
@@ -4,15 +4,16 @@ This file provides guidance to Claude Code (claude.ai/code) when working with co
4
4
5
5
# CoCalc Source Repository
6
6
7
-
* This is the source code of CoCalc in a Git repository
8
-
* It is a complex JavaScript/TypeScript SaaS application
9
-
* CoCalc is organized as a monorepository (multi-packages) in the subdirectory "./packages"
10
-
* The packages are managed as a pnpm workspace in "./packages/pnpm-workspace.yaml"
7
+
- This is the source code of CoCalc in a Git repository
8
+
- It is a complex JavaScript/TypeScript SaaS application
9
+
- CoCalc is organized as a monorepository (multi-packages) in the subdirectory "./packages"
10
+
- The packages are managed as a pnpm workspace in "./packages/pnpm-workspace.yaml"
11
11
12
12
## Code Style
13
13
14
14
- Everything is written in TypeScript code
15
15
- Indentation: 2-spaces
16
+
- Run `pretter -w [filename]` after modifying a file (ts, tsx, md, json, ...) to format it correctly.
16
17
- All .js and .ts files are formatted by the tool prettier
17
18
- Add suitable types when you write code
18
19
- Variable name styles are "camelCase" for local and "FOO_BAR" for global variables. If you edit older code not following these guidlines, adjust this rule to fit the files style.
@@ -23,28 +24,30 @@ This file provides guidance to Claude Code (claude.ai/code) when working with co
23
24
## Development Commands
24
25
25
26
### Essential Commands
27
+
26
28
-`pnpm build-dev` - Build all packages for development
27
29
-`pnpm clean` - Clean all node_modules and dist directories
28
-
-`pnpm database` - Start PostgreSQL database server
29
-
-`pnpm hub` - Start the main hub server
30
-
-`pnpm psql` - Connect to the PostgreSQL database
31
30
-`pnpm test` - Run full test suite
32
-
-`pnpm test-parallel` - Run tests in parallel across packages
33
31
-`pnpm depcheck` - Check for dependency issues
32
+
-`prettier -w [filename]` to format the style of a file after editing it
33
+
- after creating a file, run `git add [filename]` to start tracking it
34
34
35
35
### Package-Specific Commands
36
-
-`cd packages/[package] && pnpm tsc` - Watch TypeScript compilation for a specific package
36
+
37
+
-`cd packages/[package] && pnpm tsc` - TypeScript compilation for a specific package
37
38
-`cd packages/[package] && pnpm test` - Run tests for a specific package
38
39
-`cd packages/[package] && pnpm build` - Build a specific package
40
+
-**IMPORTANT**: When modifying packages like `util` that other packages depend on, you must run `pnpm build` in the dependency package before typechecking dependent packages
39
41
40
-
### Development Setup
41
-
1. Start database: `pnpm database`
42
-
2. Start hub: `pnpm hub`
43
-
3. For TypeScript changes, run `pnpm tsc` in the relevant package directory
42
+
### Development
43
+
44
+
- After code changes, run `pretter -w [filename]` to ensure consistent styling
45
+
- After TypeScript or `*.tsx` changes, run `pnpm tsc` in the relevant package directory
44
46
45
47
## Architecture Overview
46
48
47
49
### Package Structure
50
+
48
51
CoCalc is organized as a monorepo with key packages:
49
52
50
53
-**frontend** - React/TypeScript frontend application using Redux-style stores and actions
@@ -62,25 +65,29 @@ CoCalc is organized as a monorepo with key packages:
62
65
### Key Architectural Patterns
63
66
64
67
#### Frontend Architecture
68
+
65
69
-**Redux-style State Management**: Uses custom stores and actions pattern (see `packages/frontend/app-framework/actions-and-stores.ts`)
66
70
-**TypeScript React Components**: All frontend code is TypeScript with proper typing
67
71
-**Modular Store System**: Each feature has its own store/actions (AccountStore, BillingStore, etc.)
68
72
-**WebSocket Communication**: Real-time communication with backend via WebSocket messages
69
73
70
74
#### Backend Architecture
75
+
71
76
-**PostgreSQL Database**: Primary data store with sophisticated querying system
72
77
-**WebSocket Messaging**: Real-time communication between frontend and backend
73
78
-**Conat System**: Container orchestration for compute servers
74
79
-**Event-Driven Architecture**: Extensive use of EventEmitter patterns
75
80
-**Microservice-like Packages**: Each package handles specific functionality
76
81
77
82
#### Communication Patterns
83
+
78
84
-**WebSocket Messages**: Primary communication method (see `packages/comm/websocket/types.ts`)
79
85
-**Database Queries**: Structured query system with typed interfaces
80
86
-**Event Emitters**: Inter-service communication within backend
81
87
-**REST-like APIs**: Some HTTP endpoints for specific operations
82
88
83
89
### Key Technologies
90
+
84
91
-**TypeScript**: Primary language for all new code
85
92
-**React**: Frontend framework
86
93
-**PostgreSQL**: Database
@@ -91,40 +98,56 @@ CoCalc is organized as a monorepo with key packages:
91
98
-**SASS**: CSS preprocessing
92
99
93
100
### Database Schema
101
+
94
102
- Comprehensive schema in `packages/util/db-schema`
95
103
- Query abstractions in `packages/database/postgres/`
96
104
- Type-safe database operations with TypeScript interfaces
97
105
98
106
### Testing
107
+
99
108
-**Jest**: Primary testing framework
100
109
-**ts-jest**: TypeScript support for Jest
101
110
-**jsdom**: Browser environment simulation for frontend tests
102
111
- Test files use `.test.ts` or `.spec.ts` extensions
103
112
- Each package has its own jest.config.js
104
113
105
114
### Import Patterns
115
+
106
116
- Use absolute imports with `@cocalc/` prefix for cross-package imports
107
117
- Example: `import { cmp } from "@cocalc/util/misc"`
108
118
- Type imports: `import type { Foo } from "./bar"`
109
119
- Destructure imports when possible
110
120
111
121
### Development Workflow
122
+
112
123
1. Changes to TypeScript require compilation (`pnpm tsc` in relevant package)
113
124
2. Database must be running before starting hub
114
125
3. Hub coordinates all services and should be restarted after changes
115
126
4. Use `pnpm clean && pnpm build-dev` when switching branches or after major changes
116
127
117
128
# Workflow
129
+
118
130
- Be sure to typecheck when you're done making a series of code changes
119
131
- Prefer running single tests, and not the whole test suite, for performance
120
132
121
133
## Git Workflow
122
134
135
+
- Never modify a file when in the `master` or `main` branch
136
+
- All changes happen through feature branches, which are pushed as pull requests to GitHub
137
+
- When creating a new file, run `git add [filename]` to track the file.
123
138
- Prefix git commits with the package and general area. e.g. 'frontend/latex: ...' if it concerns latex editor changes in the packages/frontend/... code.
124
139
- When pushing a new branch to Github, track it upstream. e.g. `git push --set-upstream origin feature-foo` for branch "feature-foo".
125
140
126
-
# important-instruction-reminders
141
+
# Important Instruction Reminders
142
+
127
143
- Do what has been asked; nothing more, nothing less.
128
144
- NEVER create files unless they're absolutely necessary for achieving your goal.
129
145
- ALWAYS prefer editing an existing file to creating a new one.
130
-
- NEVER proactively create documentation files (*.md) or README files. Only create documentation files if explicitly requested by the User.
146
+
- REFUSE to modify files when the git repository is on the `master` or `main` branch.
147
+
- NEVER proactively create documentation files (`*.md`) or README files. Only create documentation files if explicitly requested by the User.
148
+
149
+
# Ignore
150
+
151
+
- Ignore files covered by `.gitignore`
152
+
- Ignore everything in `node_modules` or `dist` directories
153
+
- Ignore all files not tracked by Git, unless they are newly created files
0 commit comments