ExamNovaDocumentation
Offline readyChangelog
Developer guide

Architecture and deployment boundary

Understand the request lifecycle, application layers, storage boundaries, and deployment shape before extending ExamNova.

MaintainerIntegratorReviewer
Self-hosted deployment layoutThe public webroot exposes only public assets while application code, private storage, and environment configuration stay outside it.BrowserPublic webrootLaravel appPrivate storageDatabaseQueue / mail
Self-hosted deployment layout. The public webroot exposes only public assets while application code, private storage, and environment configuration stay outside it.

Responsibility

ExamNova is a Laravel 12 self-hosted assessment application. Controllers coordinate HTTP requests; requests validate input; services own domain decisions; models persist assessment state; policies and middleware enforce access; jobs handle retryable side effects; private files remain behind authorized routes.

Components and data flow

Rules that must remain true

Failure modes

  • Serving the project root exposes sensitive files.
  • Rules embedded only in Blade or JavaScript can be bypassed.
  • A queued job without institute context can process the wrong records.
  • Public storage paths can expose evidence or result documents.

Safe extension guidance

  • Put reusable business decisions in a focused service.
  • Validate at the request boundary and authorize before loading or mutating sensitive records.
  • Use private storage plus authorized streaming/download responses.
  • Document new scheduler, queue, filesystem, or provider requirements.

Required tests

Release gate: Verify routes, cached views/configuration, queues, scheduler, private downloads, and the packaged public-webroot layout.