Core

Architecture

Understand how OpenSya organizes and orchestrates modern fullstack recruitment platforms.

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.

OpenSya focuses on runtime orchestration rather than boilerplate generation.

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.

Architecture
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.

Example
server/controllers/
├── users/
│   ├── index.get.ts
│   ├── index.post.ts
│   └── [id]/
│       └── index.get.ts

OpenSya automatically converts files into routes.

FileGenerated Route
users/index.get.tsGET /users
users/index.post.tsPOST /users
users/[id]/index.get.tsGET /users/:id

Services

Services contain reusable business logic.

Example
server/services/
├── auth/
├── users/
└── notifications/

Services are automatically discovered and registered by the runtime.

Database

The database/ directory contains database-related runtime definitions.

Example
server/database/
├── models/
└── plugins/

Models

Models define database entities.

Example
server/database/models/
├── user.ts
├── company.ts
└── application.ts

Plugins

Plugins provide reusable database behaviors and extensions.

Example
server/database/plugins/
├── timestamps.ts
├── soft-delete.ts
└── slug.ts

Guards

Guards contain runtime access control logic.

Example
server/guards/
├── authenticated.ts
├── admin.ts
└── permissions.ts

Locales

Locales contain translation resources and internationalization files.

Example
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.

Example
client/pages/
├── index.vue
├── login.vue
└── users/
    └── [id].vue

Nuxt automatically generates routes from the filesystem.

Components

Components contain reusable UI elements.

Example
client/components/
├── ui/
├── forms/
└── layouts/

Plugins

Plugins extend the frontend runtime.

Example
client/plugins/
├── api.ts
├── auth.ts
└── i18n.ts

Shared Configuration

The root of the project contains shared configuration and environment files.

FilePurpose
.envEnvironment variables shared across runtimes.
opensya.config.tsMain 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.

The filesystem acts as the runtime registry for the entire application.

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:

  1. Filesystem conventions
  2. Runtime orchestration
  3. Generated typings
  4. Modular architecture

Together, these concepts create a scalable and maintainable fullstack developer experience.