Project Structure
Sersi does not invent a new layout per project. Every scaffold starts from the same agreed standardized shape as described in Why Sersi.
The trees below are the file maps the CLI writes today. Differences between frameworks are intentional and called out as notes; the skeleton stays shared.
Frontend
Vue and Svelte use the same root files as React. Framework-specific golden assets land under src/ (components, logos, etc.).
Frontend · React + TypeScript
Shared Vite layout every frontend scaffold starts from: same root files, predictable src/.
- my-app/
- package.json
- index.html
- vite.config.tsTS only
- tsconfig.jsonTS only
- README.md
- .gitignore
- src/
- App.tsx
- main.tsx
- styles.css
- assets/Framework assets
Without TypeScript, extensions flip to JavaScript and tsconfig.json is omitted:
Frontend · React + JavaScript
Same skeleton without TypeScript: js/jsx extensions instead of ts/tsx.
- my-app/
- package.json
- index.html
- vite.config.js
- README.md
- .gitignore
- src/
- App.jsx
- main.jsx
- styles.css
- assets/Framework assets
Backend · Node
Express and Fastify share the same layout:
- Config and tooling at the project root (
package.json,.env,.gitignore, andtsconfig.jsonwhen TypeScript is enabled) - Application code under
src/with flat MVC layers:routes→controllers→services→models/db db/dummy_dbis a simple in-memoryusersarray (not a database class)- Routes wire named controller handlers; controllers and services export individual functions
JavaScript scaffold (TypeScript declined in the wizard, or typescript: false):
Backend · Node + Express (JavaScript)
Enterprise layout: package.json / .env at the root, MVC layers under src/. Fastify uses the same paths.
- api/
- package.json
- .env
- .gitignore
- src/
- index.js
- routes/
- index.js
- controllers/
- controller.js
- services/
- service.js
- models/
- model.js
- db/
- dummy_db.jsusers array
TypeScript scaffold (typescript: true, or Yes in the wizard after picking Express/Fastify):
Backend · Node + TypeScript
Same src/ MVC layout as JavaScript: .ts extensions, plus tsconfig.json. Works for Express and Fastify.
- api/
- package.json
- tsconfig.jsonTS only
- .env
- .gitignore
- src/
- index.ts
- routes/
- index.ts
- controllers/
- controller.ts
- services/
- service.ts
- models/
- model.ts
- db/
- dummy_db.tsusers array
Fastify uses the same paths as Express; only the framework wiring inside src/index and src/routes/index differs.
Backend · Go
Go scaffolds keep the same layering with idiomatic package names (handlers, repository, model).
Backend · Go
Same layering every Go scaffold: handlers, services, repository, model, routes.
- api/
- main.go
- go.mod
- .env
- .gitignore
- handlers/
- handler.go
- services/
- service.go
- repository/
- dummy_db.go
- model/
- model.go
- routes/
- routes.go
Backend · Python
Python currently scaffolds a FastAPI project (language: python, framework: fastapi) with routers, service, model, and a dummy db at the project root (not under src/).
CI overlay
After the project exists, an optional CI step (wizard or ci: in config) writes provider-specific files into that same folder, never a separate project.
CI overlay · GitHub Actions
Optional pipeline files written into the project you just created.
- my-app/
- .github/CI overlay
- workflows/
- ci.yml
- DockerfileWhen Docker is enabled
CI overlay · GitLab CI
Same optional step: provider-specific filename at the project root.
- my-app/
- .gitlab-ci.ymlCI overlay
- DockerfileWhen Docker is enabled
CI overlay · Bitbucket Pipelines
Same optional step: provider-specific filename at the project root.
- my-app/
- bitbucket-pipelines.ymlCI overlay
- DockerfileWhen Docker is enabled