Typical project layout based on the sample project ckn.ws.
ckn.ws/
├─ apps/ # Frontend components (CKN UI, browser-side)
│ ├─ app.js
│ └─ Default.js
├─ client/ # Auto-generated frontend bundle (Webpack output)
│ └─ app.js
├─ dist/ # Compiled TypeScript → JavaScript (server runtime)
├─ node_modules/
├─ public/ # Static assets to be served directly
├─ src/ # Server-side TypeScript source (framework usage)
│ ├─ modules/
│ │ ├─ main/
│ │ │ ├─ controllers/
│ │ │ │ └─ DefaultController.ts
│ │ │ ├─ models/
│ │ │ │ └─ TestModel.ts
│ │ │ ├─ public/
│ │ │ └─ views/
│ │ │ ├─ main.default.ejs
│ │ │ └─ module.ts
│ │ └─ otherModule/
│ ├─ index.ts
│ └─ start.ts
├─ themes/
├─ .gitignore
├─ .npmignore
├─ .npmrc
├─ Dockerfile
├─ package-lock.json
├─ package.json
└─ tsconfig.json
1.1 Root level
- apps/ – Source for frontend components (written with
@ckn-technology/ui). - client/ – Auto-generated frontend bundle from
apps/(via Frontend middleware). - public/ – Static files served directly (images, CSS, JS, downloads).
- src/ – TypeScript server code (controllers, modules, bootstrap).
- themes/ – Theme / layout / branding resources.
- dist/ – Build output (Node.js runtime code).
- Dockerfile – Container build for deployment.
1.2 Module structure under src/modules/main
src/modules/main/
├─ controllers/
│ └─ DefaultController.ts
├─ models/
│ └─ TestModel.ts
├─ public/ # Static files specific to this module (optional)
└─ views/
├─ main.default.ejs
└─ module.ts
A typical module contains:
- controllers/ – Route handlers (HTTP & WebSocket).
- models/ – Business / data models.
- views/ – View templates & module configuration.
- public/ – Module-specific static assets.
Each module can be registered automatically by
ModuleMiddleware so you don’t have to wire each
controller manually.