๐Ÿ””Welcome

HaloLight multi-framework admin dashboard docs is now live!

Supports 12+ framework versions. Welcome to try.

Skip to content

Nuxt Version โ€‹

Halolight Nuxt version is built on Nuxt 3 with Vue 3.5 + Composition API + TypeScript, providing an out-of-the-box full-stack development experience.

Live Preview: https://halolight-nuxt.h7ml.cn/

GitHub: https://github.com/halolight/halolight-nuxt

Tech Stack โ€‹

TechnologyVersionDescription
Nuxt3.10Vue full-stack framework
Vue3.5+Progressive framework
TypeScript5.7Type safety
Tailwind CSS3.x (CDN)Atomic CSS
Pinia0.5State management
VueUse10.xComposables utility library
Mock.js1.xData mocking

Core Features โ€‹

  • Full-Stack Development: Built-in Nitro server for unified frontend and backend development
  • Auto Import: Automatic import of components, composables, and APIs
  • File-Based Routing: Automatic routing based on file system
  • SSR/SSG: Optional server-side rendering and static generation
  • Command Palette: โŒ˜/Ctrl + K for quick navigation
  • Hot Reload: Excellent HMR development experience
  • Module Ecosystem: Rich Nuxt module extensions

Directory Structure โ€‹

halolight-nuxt/
โ”œโ”€โ”€ nuxt.config.ts              # Nuxt configuration
โ”œโ”€โ”€ app.vue                     # App root component
โ”œโ”€โ”€ pages/                      # File-based routing
โ”‚   โ”œโ”€โ”€ index.vue              # Home page
โ”‚   โ”œโ”€โ”€ login.vue              # Login
โ”‚   โ”œโ”€โ”€ register.vue           # Register
โ”‚   โ”œโ”€โ”€ forgot-password.vue    # Forgot password
โ”‚   โ”œโ”€โ”€ reset-password.vue     # Reset password
โ”‚   โ”œโ”€โ”€ terms.vue              # Terms of service
โ”‚   โ”œโ”€โ”€ privacy.vue            # Privacy policy
โ”‚   โ”œโ”€โ”€ dashboard/             # Dashboard
โ”‚   โ”‚   โ””โ”€โ”€ index.vue
โ”‚   โ”œโ”€โ”€ users/                 # User management
โ”‚   โ”‚   โ””โ”€โ”€ index.vue
โ”‚   โ”œโ”€โ”€ messages/              # Messages
โ”‚   โ”‚   โ””โ”€โ”€ index.vue
โ”‚   โ”œโ”€โ”€ analytics/             # Analytics
โ”‚   โ”‚   โ””โ”€โ”€ index.vue
โ”‚   โ”œโ”€โ”€ profile/               # User profile
โ”‚   โ”‚   โ””โ”€โ”€ index.vue
โ”‚   โ””โ”€โ”€ settings/              # System settings
โ”‚       โ””โ”€โ”€ index.vue
โ”œโ”€โ”€ components/                 # Auto-imported components
โ”‚   โ””โ”€โ”€ common/                # Common components
โ”‚       โ”œโ”€โ”€ AppHeader.vue
โ”‚       โ”œโ”€โ”€ AppSidebar.vue
โ”‚       โ”œโ”€โ”€ AppFooter.vue
โ”‚       โ”œโ”€โ”€ AppTabs.vue
โ”‚       โ”œโ”€โ”€ CommandMenu.vue
โ”‚       โ””โ”€โ”€ ToastContainer.vue
โ”œโ”€โ”€ composables/                # Composable functions
โ”‚   โ”œโ”€โ”€ useTheme.ts
โ”‚   โ”œโ”€โ”€ useToast.ts
โ”‚   โ””โ”€โ”€ useCommandMenu.ts
โ”œโ”€โ”€ layouts/                    # Layouts
โ”‚   โ”œโ”€โ”€ default.vue            # Admin layout
โ”‚   โ””โ”€โ”€ auth.vue               # Auth layout
โ”œโ”€โ”€ middleware/                 # Middleware
โ”‚   โ””โ”€โ”€ auth.global.ts
โ”œโ”€โ”€ plugins/                    # Plugins
โ”‚   โ””โ”€โ”€ pinia-persist.client.ts
โ”œโ”€โ”€ stores/                     # Pinia stores
โ”‚   โ”œโ”€โ”€ auth.ts
โ”‚   โ”œโ”€โ”€ ui-settings.ts
โ”‚   โ”œโ”€โ”€ dashboard.ts
โ”‚   โ”œโ”€โ”€ layout.ts
โ”‚   โ””โ”€โ”€ tabs.ts
โ”œโ”€โ”€ utils/                      # Utility functions
โ”‚   โ”œโ”€โ”€ index.ts
โ”‚   โ””โ”€โ”€ mock.ts
โ”œโ”€โ”€ assets/css/                 # Style files
โ”‚   โ”œโ”€โ”€ main.css
โ”‚   โ””โ”€โ”€ tailwind.css
โ”œโ”€โ”€ tests/                      # Test files
โ”‚   โ””โ”€โ”€ unit/
โ”œโ”€โ”€ .github/                    # GitHub Actions
โ”‚   โ””โ”€โ”€ workflows/
โ”‚       โ”œโ”€โ”€ ci.yml
โ”‚       โ””โ”€โ”€ deploy.yml
โ””โ”€โ”€ public/                     # Static assets

Quick Start โ€‹

Installation โ€‹

bash
git clone https://github.com/halolight/halolight-nuxt.git
cd halolight-nuxt
pnpm install

Environment Variables โ€‹

bash
cp .env.example .env.local
env
# .env example
NUXT_PUBLIC_API_BASE=/api
NUXT_PUBLIC_MOCK=true
NUXT_PUBLIC_DEMO_EMAIL=admin@halolight.h7ml.cn
NUXT_PUBLIC_DEMO_PASSWORD=123456
NUXT_PUBLIC_SHOW_DEMO_HINT=true
NUXT_PUBLIC_APP_TITLE=Admin Pro
NUXT_PUBLIC_BRAND_NAME=Halolight

Start Development โ€‹

bash
pnpm dev

Visit http://localhost:3000

Build for Production โ€‹

bash
pnpm build
pnpm preview

Code Checking and Testing โ€‹

bash
# Type checking
pnpm typecheck

# Code linting
pnpm lint
pnpm lint:fix

# Run tests
pnpm test
pnpm test:run
pnpm test:coverage

Demo Account โ€‹

  • Email: admin@halolight.h7ml.cn
  • Password: 123456

Core Features โ€‹

State Management (Pinia) โ€‹

ts
// stores/auth.ts
export const useAuthStore = defineStore('auth', () => {
  const user = ref<User | null>(null)
  const token = ref('')
  const loading = ref(false)
  const error = ref('')

  const isAuthenticated = computed(() => !!token.value && !!user.value)

  async function login(credentials: LoginCredentials) {
    loading.value = true
    error.value = ''
    try {
      // Login logic
      const result = await mockLogin(credentials)
      user.value = result.user
      token.value = result.token
    } catch (e) {
      error.value = e.message
      throw e
    } finally {
      loading.value = false
    }
  }

  function logout() {
    user.value = null
    token.value = ''
    navigateTo('/login')
  }

  return { user, token, loading, error, isAuthenticated, login, logout }
})

Authentication Middleware โ€‹

ts
// middleware/auth.global.ts
export default defineNuxtRouteMiddleware((to) => {
  const authStore = useAuthStore()

  // Public pages list
  const publicPages = ['/login', '/register', '/forgot-password', '/reset-password']

  if (publicPages.includes(to.path)) {
    return
  }

  if (!authStore.isAuthenticated) {
    return navigateTo({
      path: '/login',
      query: { redirect: to.fullPath },
    })
  }
})

Data Fetching โ€‹

vue
<script setup lang="ts">
// Using useFetch with automatic SSR handling
const { data: users, pending, error, refresh } = await useFetch('/api/users', {
  query: { page: 1, limit: 10 },
})

// Using useAsyncData with custom key
const { data: stats } = await useAsyncData('dashboard-stats', () =>
  $fetch('/api/dashboard/stats')
)
</script>

Page Routes โ€‹

PathPageLayout
/Home-
/loginLoginauth
/registerRegisterauth
/forgot-passwordForgot passwordauth
/reset-passwordReset passwordauth
/termsTerms of serviceauth
/privacyPrivacy policyauth
/dashboardDashboarddefault
/usersUser managementdefault
/messagesMessagesdefault
/analyticsAnalyticsdefault
/profileUser profiledefault
/settingsSystem settingsdefault

Route Configuration โ€‹

vue
<!-- pages/login.vue -->
<script setup lang="ts">
definePageMeta({
  layout: 'auth',
})
</script>
vue
<!-- pages/dashboard/index.vue -->
<script setup lang="ts">
definePageMeta({
  layout: 'default',
})
</script>

Configuration โ€‹

Nuxt Configuration โ€‹

ts
// nuxt.config.ts
export default defineNuxtConfig({
  compatibilityDate: '2025-11-30',
  devtools: { enabled: false },

  modules: [
    '@pinia/nuxt',
    '@vueuse/nuxt',
  ],

  css: ['~/assets/css/main.css'],

  runtimeConfig: {
    public: {
      apiBase: '/api',
      mock: true,
      demoEmail: 'admin@halolight.h7ml.cn',
      demoPassword: '123456',
      showDemoHint: true,
      appTitle: 'Admin Pro',
      brandName: 'Halolight',
    },
  },

  app: {
    head: {
      title: 'Admin Pro',
      script: [
        { src: 'https://cdn.tailwindcss.com' },
      ],
    },
  },
})

Deployment โ€‹

Node.js Server โ€‹

bash
pnpm build
node .output/server/index.mjs

Docker โ€‹

dockerfile
FROM node:20-alpine
WORKDIR /app
COPY package.json pnpm-lock.yaml ./
RUN npm install -g pnpm && pnpm install --frozen-lockfile
COPY . .
RUN pnpm build
EXPOSE 3000
CMD ["node", ".output/server/index.mjs"]

Vercel โ€‹

bash
npx vercel

Cloudflare Pages โ€‹

ts
// nuxt.config.ts
export default defineNuxtConfig({
  nitro: {
    preset: 'cloudflare-pages',
  },
})

Comparison with Other Versions โ€‹

FeatureNuxt VersionVue VersionNext.js Version
State ManagementPiniaPiniaZustand
Data FetchinguseFetchAxiosTanStack Query
Form ValidationNativeVeeValidate + ZodReact Hook Form + Zod
ServerBuilt-in NitroSeparate backendAPI Routes
StylingTailwind CDNTailwindTailwind
RoutingFile-based routingVue RouterApp Router
SSRBuilt-in supportRequires configurationBuilt-in support