Skip to content

hpi-schul-cloud/nuxt-client

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

11,126 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

The next Level of Schul-Cloud

Coverage Maintainability Rating

The nuxt-client is the primary frontend application for the dBildungscloud ecosystem. It is a Vue 3 single-page application built with Vite, Vuetify, and TypeScript. The application serves teachers, students, and administrators across multiple German federal states (branded via a theming system). It communicates with the Schulcloud-Server REST and Socket API and coexists with the legacy client during an ongoing migration.

πŸ—οΈ Tech Stack Overview

πŸ“Ž Architecture Diagram (open in diagrams.net or the draw.io IDE plugin)

πŸš€ Getting Started

Prerequisites

For a full walkthrough of the local development environment, see the Getting Started guide.

Installation & Start

npm install
npm run serve

The app will be available at http://localhost:4000.

πŸ“ Project Structure

/config                     # βš™οΈ Vite plugins and build configuration
/public                     # 🌐 Static assets and theme files
/src                        # 🧩 Application source code
β”œβ”€β”€ assets/                 # 🎨 Fonts, images, SVGs
β”œβ”€β”€ components/             # 🧩 Shared Vue components
β”œβ”€β”€ composables/            # πŸͺ Shared Vue composables
β”œβ”€β”€ generated/              # πŸ€– Auto-generated API clients (OpenAPI)
β”œβ”€β”€ layouts/                # πŸ“ Page layout wrappers
β”œβ”€β”€ locales/                # 🌍 i18n translation files
β”œβ”€β”€ modules/                # πŸ“¦ Building Block modules
β”œβ”€β”€ pages/                  # πŸ“„ Route-level page components
β”œβ”€β”€ plugins/                # πŸ”Œ Vue plugins (Vuetify, i18n, etc.)
β”œβ”€β”€ router/                 # πŸ›€οΈ Vue Router configuration
β”œβ”€β”€ store/                  # πŸ—„οΈ Pinia state stores
β”œβ”€β”€ styles/                 # 🎨 Global SCSS styles
β”œβ”€β”€ themes/                 # 🎨 Theme definitions
β”œβ”€β”€ types/                  # πŸ“ Shared TypeScript types
└── utils/                  # πŸ”§ Utility functions
/tests                      # πŸ§ͺ Test setup and helpers

πŸ“œ Scripts

Script Purpose
serve Start the Vite dev server with HMR
build Type-check and build for production
type-check Run vue-tsc without emitting files
test:unit Run unit tests with Vitest
test:unit:watch Run unit tests in watch mode
test:unit:ci Run unit tests with coverage
lint Lint source files with ESLint
lint:fix Lint and auto-fix source files
generate-client:server Regenerate the server API client from OpenAPI spec
generate-client:fwu Regenerate the FWU API client from OpenAPI spec
generate-client:filestorage Regenerate the file storage API client from OpenAPI spec
generate-client:h5p-editor Regenerate the H5P editor API client from OpenAPI spec
generate-client:common-cartridge Regenerate the Common Cartridge API client from OpenAPI spec

πŸ§ͺ Testing

Unit tests use Vitest with Vue Test Utils and vitest-mock-extended for type-safe mocking.

npm run test:unit

πŸ€– API Client Generation

API clients are auto-generated from OpenAPI specs via openapi-generator-cli. Configuration lives in openapitools.json.

npm run generate-client:server
npm run generate-client:fwu
npm run generate-client:filestorage
npm run generate-client:h5p-editor
npm run generate-client:common-cartridge

πŸ’‘ Coding Conventions

General

  • Use async/await for better readability instead of callbacks
  • Leverage TypeScript for type safety – use inference over declared return types
  • Avoid // @ts-ignore – define types properly instead
  • File naming: kebab-case, e.g. MyComponent.vue, my-util.ts
  • Context meta tags separated by dots: MyComponent.unit.ts
  • Function names: camelCase
  • Pure functions as directly importable utils/ES modules
  • Avoid assigning a variable only to immediately return it
  • Avoid async as part of function names

CSS / Styling

  • Global styles live in a central styles/ directory, imported via main.ts
  • Use scoped styles by default in page and module components
  • Font sizes via CSS custom properties defined in src/styles/css-variables/_typography.scss (e.g. --heading-1, --text-md) – do not use hardcoded pixel values
  • Prefer CSS Grid / Flexbox for column/row layouts
  • Font changes exclusively in src/styles/utility/_fonts.scss
  • Refer to the official Vue Style Guide for component conventions

πŸ“– Documentation

The comprehensive guide covering architecture, design patterns, and development workflows is available in the documentation.

πŸ”— Related Repositories

License

GNU AFFERO GENERAL PUBLIC LICENSE - Version 3

About

Schulcloud-Verbund-Software-Nuxt-Client

Topics

Resources

License

Stars

35 stars

Watchers

12 watching

Forks

Packages

 
 
 

Contributors