Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

284 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Nuxt Core Template πŸš€

Pipeline Nuxt Version Vue Version Node License

Enterprise-grade Nuxt 4 Starter Template

Accelerate your next web project with a production-ready, self-hosted-ready foundation

Nuxt Poster

πŸ”— Links

Primary repo (self-hosted GitLab) https://git.fivgpn.com/template/nuxt-core-template
Mirror (GitHub β€” Use this template) https://github.com/yesfedor/nuxt-core-template
Prod demo https://nuxt-core-template.fivgpn.com
Stage demo https://stage-nuxt-core-template.fivgpn.com

Use this template

🌟 Key Features

Core Technologies

Technology Description
Nuxt SSR/SSG/Hybrid Rendering
Vue 3 Composition API Ecosystem
TypeScript Strict Type Checking
Docker Multi-stage, non-root, healthcheck

Main Modules

Core Nuxt Modules

Module Purpose Docs
@nuxt/devtools Development Experience Toolkit Docs
@nuxt/icon Icon Management System Docs
@nuxt/eslint Code Standardization Docs
@nuxtjs/stylelint-module CSS/SCSS Quality Control Docs
@nuxtjs/i18n Internationalization Docs
@nuxtjs/device Device Detection Docs
@pinia/nuxt State Management Docs
@vite-pwa/nuxt PWA / Service Worker Docs

Development Essentials

Module Purpose Docs
es-toolkit Modern Lodash Alternative Docs
mitt Event Bus Implementation Docs
@vueuse/nuxt Reactive Utilities Docs

Validation & Type Safety

Module Purpose Docs
@vee-validate/nuxt + yup Form Validation Docs
ajv + ajv-keywords JSON Schema Validation Docs

πŸ— Self-Hosted Ready

Ships with a complete GitLab CI/CD pipeline designed for your own GitLab instance and your own VMs β€” no SaaS required.

  • by-image-tag delivery β€” build once into a Docker image (Node 24 Alpine, non-root, healthcheck), push to the GitLab Container Registry, deploy by pulling that tag. Nothing is built on the server.
  • Environment-agnostic image β€” one image runs any contour; per-contour config is injected at runtime via NUXT_PUBLIC_*.
  • Contours β€” dev Β· test Β· stage Β· prod Β· vm1 Β· vm2, each an isolated compose project (co-locate several on one VM, distinct host ports).
  • Promotion & release β€” main auto-deploys to stage; a manual button promotes the same tag to prod; release:patch|minor|major bumps package.json, tags vX.Y.Z and re-tags the image β€” no rebuild.
  • Zero-touch new projects β€” container names and deploy paths derive from $CI_PROJECT_NAME; a new project only changes ports, domains and app identity.

πŸ“– Full runbooks: Deployment Β· Using this template

πŸ›  Project Architecture

β”œβ”€β”€ app/
β”‚   β”œβ”€β”€ assets/stylesheets # SCSS Foundation
β”‚   β”œβ”€β”€ components/core # Global Components
β”‚   β”œβ”€β”€ pages # Route System
β”‚   └── api # Auto-imported API Composables
β”œβ”€β”€ Docker/ # Per-contour docker-compose files
β”œβ”€β”€ environments/ # Per-contour + build env
└── shared/ # Business Logic Helpers

✨ Special Features

Custom Innovations

  1. Dynamic Icon System Auto-generated types from ~/assets/icons with IDE support

  2. Core Scope Component

    <core-scope>
      <!-- Global context initialization -->
    </core-scope>

πŸ” Validation Ecosystem

Unified Data Validation Flow

1. Frontend Validation (YUP + VeeValidate)

<script setup lang="ts">
import { useForm } from 'vee-validate'
import * as yup from 'yup'

// Unified validation schema
const schema = yup.object({
  email: yup.string().required().email(),
  age: yup.number().min(18).max(99),
  metadata: yup.object({
    preferences: yup.array().of(yup.string())
  })
});

const { handleSubmit } = useForm({
  validationSchema: schema
});

const onSubmit = handleSubmit((values) => {
  // Submit to API
});
</script>

<template>
  <form @submit="onSubmit">
    <Field name="email" type="email" />
    <ErrorMessage name="email" />

    <button type="submit">Submit</button>
  </form>
</template>

2. Backend Schema Validation (AJV)

// shared/ajv/schemas/user.ts
import { defineSchema } from 'ajv'

export const userSchema = defineSchema({
  type: 'object',
  properties: {
    email: { type: 'string', format: 'email' },
    age: { type: 'number', minimum: 18, maximum: 99 },
    metadata: {
      type: 'object',
      properties: {
        preferences: {
          type: 'array',
          items: { type: 'string' }
        }
      },
      required: ['preferences']
    }
  },
  required: ['email', 'age'],
  additionalProperties: false
});

πŸ“¦ Installation

Requires Node 24 LTS (pinned in .nvmrc).

# Use the pinned Node version
nvm install && nvm use

# Environment setup
cp ./environments/local.env .env

# Install dependencies
npm install

πŸš€ Development

# Start dev server
npm run dev

# Production build (local)
npm run build && node .output/server/index.mjs

# Full production container (local)
docker compose -f Docker/docker-compose.local.yml up --build

πŸ“š Documentation

Section Description
Deployment Self-hosted CI/CD, contours, secrets, versioning
Using this template Bootstrap from zero + adding new projects
Architecture Guide Project Structure Philosophy
Style Guide SCSS Methodology

🀝 Contributing

We welcome contributions! Please follow our Contribution Guidelines and read our Code of Conduct.

License

MIT Β© Garanin Fedor


Live Demo Use this template

About

Nuxt 4 Core (Enterprise) Starter Template with Gitlab cicd

Topics

Resources

Code of conduct

Contributing

Stars

4 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages