Architecture
Architecture
OpenSya is the open-source recruitment infrastructure for modern companies.
Modular, scalable, and fully owned by you.
To support this vision, OpenSya Core provides a convention-driven fullstack architecture built around runtime orchestration, filesystem conventions and generated typings.
Instead of manually configuring every controller, service, plugin or route, OpenSya automatically discovers and orchestrates applications based on the project structure.
Fullstack Architecture
OpenSya applications are organized around two runtimes:
- A backend runtime powered by NestJS
- A frontend runtime powered by Nuxt
Both runtimes share the same development philosophy and conventions.
project/
├── server/
│ ├── controllers/
│ ├── services/
│ ├── database/
│ │ ├── models/
│ │ └── plugins/
│ ├── guards/
│ └── locales/
│
├── client/
│ ├── pages/
│ ├── components/
│ └── plugins/
│
├── .env
└── opensya.config.ts
The runtime continuously scans and orchestrates these directories automatically.
Backend Runtime
The server/ directory contains the backend runtime powered by NestJS.
It is responsible for:
- Controllers and routes
- Business services
- Database models and plugins
- Guards and access control
- Internationalization
- Runtime orchestration
Controllers
Controllers define HTTP routes using filesystem conventions.
server/controllers/
├── users/
│ ├── index.get.ts
│ ├── index.post.ts
│ └── [id]/
│ └── index.get.ts
OpenSya automatically converts files into routes.
| File | Generated Route |
|---|---|
users/index.get.ts | GET /users |
users/index.post.ts | POST /users |
users/[id]/index.get.ts | GET /users/:id |
Services
Services contain reusable business logic.
server/services/
├── auth/
├── users/
└── notifications/
Services are automatically discovered and registered by the runtime.
Database
The database/ directory contains database-related runtime definitions.
server/database/
├── models/
└── plugins/
Models
Models define database entities.
server/database/models/
├── user.ts
├── company.ts
└── application.ts
Plugins
Plugins provide reusable database behaviors and extensions.
server/database/plugins/
├── timestamps.ts
├── soft-delete.ts
└── slug.ts
Guards
Guards contain runtime access control logic.
server/guards/
├── authenticated.ts
├── admin.ts
└── permissions.ts
Locales
Locales contain translation resources and internationalization files.
server/locales/
├── en/
└── fr/
Frontend Runtime
The client/ directory contains the frontend runtime powered by Nuxt.
It is responsible for:
- Pages and routing
- UI components
- Frontend plugins
- Runtime integrations
- Shared typings
Pages
Pages define frontend routes and views.
client/pages/
├── index.vue
├── login.vue
└── users/
└── [id].vue
Nuxt automatically generates routes from the filesystem.
Components
Components contain reusable UI elements.
client/components/
├── ui/
├── forms/
└── layouts/
Plugins
Plugins extend the frontend runtime.
client/plugins/
├── api.ts
├── auth.ts
└── i18n.ts
Shared Configuration
The root of the project contains shared configuration and environment files.
| File | Purpose |
|---|---|
.env | Environment variables shared across runtimes. |
opensya.config.ts | Main OpenSya runtime configuration. |
Runtime Orchestration
OpenSya continuously discovers and orchestrates the application runtime from the filesystem structure.
This includes:
- Route discovery
- Service registration
- Plugin loading
- Database initialization
- Runtime hooks
- Type generation
Developers focus on business logic while OpenSya handles runtime wiring automatically.
Generated Typings
OpenSya automatically generates typings from runtime definitions and discovered structures.
This provides:
- Strong type safety
- Better IDE autocompletion
- Shared runtime contracts
- Consistent developer experience
Generated typings are a core part of the OpenSya architecture.
Philosophy
OpenSya is not a boilerplate or starter kit.
It is a runtime architecture layer designed to standardize how modern recruitment and business platforms are structured, discovered and orchestrated.
The architecture relies on four core ideas:
- Filesystem conventions
- Runtime orchestration
- Generated typings
- Modular architecture
Together, these concepts create a scalable and maintainable fullstack developer experience.