๐Ÿ””Welcome

HaloLight multi-framework admin dashboard docs is now live!

Supports 12+ framework versions. Welcome to try.

Skip to content

Overall Architecture โ€‹

This document describes the overall architecture design of the HaloLight project, including directory structure, layered design, and core patterns.

Directory Structure Specification โ€‹

Standard Directory Layout โ€‹

src/
โ”œโ”€โ”€ app/                    # Page routes (Next.js) or views/ (Vue)
โ”‚   โ”œโ”€โ”€ (admin)/           # Admin route group
โ”‚   โ”‚   โ”œโ”€โ”€ dashboard/     # Dashboard
โ”‚   โ”‚   โ”œโ”€โ”€ users/         # User management
โ”‚   โ”‚   โ”œโ”€โ”€ roles/         # Role management
โ”‚   โ”‚   โ”œโ”€โ”€ permissions/   # Permission management
โ”‚   โ”‚   โ”œโ”€โ”€ settings/      # System settings
โ”‚   โ”‚   โ””โ”€โ”€ profile/       # User profile
โ”‚   โ””โ”€โ”€ (auth)/            # Auth route group
โ”‚       โ”œโ”€โ”€ login/         # Login
โ”‚       โ”œโ”€โ”€ register/      # Register
โ”‚       โ”œโ”€โ”€ forgot-password/
โ”‚       โ””โ”€โ”€ reset-password/
โ”œโ”€โ”€ components/            # Reusable components
โ”‚   โ”œโ”€โ”€ ui/               # Basic UI components (shadcn/ui)
โ”‚   โ”œโ”€โ”€ layout/           # Layout components
โ”‚   โ”œโ”€โ”€ dashboard/        # Dashboard components
โ”‚   โ”œโ”€โ”€ charts/           # Chart components
โ”‚   โ””โ”€โ”€ shared/           # Shared business components
โ”œโ”€โ”€ hooks/ (composables/)  # Reusable logic
โ”œโ”€โ”€ stores/               # State management
โ”œโ”€โ”€ services/             # API service layer
โ”œโ”€โ”€ lib/                  # Utility library
โ”œโ”€โ”€ types/                # TypeScript type definitions
โ”œโ”€โ”€ styles/               # Global styles
โ””โ”€โ”€ mocks/                # Mock data

Layered Architecture โ€‹

Four-Layer Architecture Design โ€‹

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚                   View Layer                     โ”‚
โ”‚        Pages / Views / Routes                    โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚                Component Layer                   โ”‚
โ”‚     UI Components / Layout / Dashboard          โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚                  State Layer                     โ”‚
โ”‚     Stores / Composables / Hooks                โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚                 Service Layer                    โ”‚
โ”‚     API Services / Data Fetching / Cache        โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

Layer Responsibilities โ€‹

LayerResponsibilityFramework Implementation
View LayerPage routing, layout assemblyNext.js Pages / Vue Views
Component LayerUI rendering, user interactionReact/Vue/Svelte Components
State LayerApplication state, business logicZustand / Pinia / Stores
Service LayerAPI calls, data cachingTanStack Query / Axios

Provider Hierarchy โ€‹

React/Next.js Provider Chain โ€‹

tsx
<ThemeProvider>
  <MockProvider>
    <QueryClientProvider>
      <AuthProvider>
        <PermissionProvider>
          <WebSocketProvider>
            <ErrorProvider>
              <ToastProvider>
                {children}
              </ToastProvider>
            </ErrorProvider>
          </WebSocketProvider>
        </PermissionProvider>
      </AuthProvider>
    </QueryClientProvider>
  </MockProvider>
</ThemeProvider>

Vue Plugin Registration Order โ€‹

ts
app.use(pinia)
app.use(router)
app.use(i18n)
app.use(mockPlugin)
app.use(queryPlugin)
app.use(permissionPlugin)

Layout System โ€‹

AdminLayout Structure โ€‹

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚                     Header                            โ”‚
โ”‚  [Logo] [Breadcrumb]           [Search] [User] [Settings]
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚            โ”‚                                          โ”‚
โ”‚  Sidebar   โ”‚              Content                     โ”‚
โ”‚            โ”‚                                          โ”‚
โ”‚  - Menu    โ”‚   โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”  โ”‚
โ”‚  - Nav     โ”‚   โ”‚        Page Content               โ”‚  โ”‚
โ”‚            โ”‚   โ”‚                                   โ”‚  โ”‚
โ”‚            โ”‚   โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜  โ”‚
โ”‚            โ”‚                                          โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚                     Footer                            โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

AuthLayout Structure โ€‹

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚                                                       โ”‚
โ”‚                    โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”                    โ”‚
โ”‚                    โ”‚            โ”‚                    โ”‚
โ”‚                    โ”‚  Auth Form โ”‚                    โ”‚
โ”‚                    โ”‚            โ”‚                    โ”‚
โ”‚                    โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜                    โ”‚
โ”‚                                                       โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

Route Configuration Specification โ€‹

Route Meta Information โ€‹

ts
interface RouteMeta {
  title: string           // Page title
  icon?: string          // Menu icon
  permission?: string    // Required permission
  hidden?: boolean       // Hidden in menu
  keepAlive?: boolean    // Cache component
  breadcrumb?: boolean   // Show breadcrumb
}

Standard Route Table โ€‹

PathPagePermission
/dashboardDashboarddashboard:view
/usersUser listusers:list
/users/createCreate userusers:create
/users/:idUser detailusers:view
/users/:id/editEdit userusers:update
/rolesRole listroles:list
/permissionsPermission managementpermissions:list
/settingsSystem settingssettings:view
/profileUser profile- (authenticated)

Environment Variable Specification โ€‹

Variable Naming Convention โ€‹

PrefixFrameworkDescription
NEXT_PUBLIC_Next.jsClient-side visible
VITE_Vue/ViteClient-side visible
PUBLIC_SvelteKitClient-side visible
No prefixAllServer-side only

Required Environment Variables โ€‹

bash
# API Configuration
*_API_BASE_URL=http://localhost:3000/api
*_API_TIMEOUT=30000

# Authentication Configuration
*_AUTH_SECRET=your-secret-key
*_TOKEN_EXPIRES=7d

# Mock Toggle
*_ENABLE_MOCK=true

# Feature Toggles
*_ENABLE_WEBSOCKET=true
*_ENABLE_ANALYTICS=false

Code Organization Principles โ€‹

1. Feature First โ€‹

Organize code by feature modules, not by file types:

# Recommended โœ…
features/
โ”œโ”€โ”€ users/
โ”‚   โ”œโ”€โ”€ components/
โ”‚   โ”œโ”€โ”€ hooks/
โ”‚   โ”œโ”€โ”€ services/
โ”‚   โ””โ”€โ”€ types/

# Avoid โŒ
components/
โ”œโ”€โ”€ UserList.tsx
โ”œโ”€โ”€ UserForm.tsx
hooks/
โ”œโ”€โ”€ useUsers.ts
services/
โ”œโ”€โ”€ userService.ts

2. Proximity Principle โ€‹

Place component-specific styles, types, and utilities in the component directory:

components/
โ””โ”€โ”€ UserCard/
    โ”œโ”€โ”€ index.tsx
    โ”œโ”€โ”€ UserCard.module.css
    โ”œโ”€โ”€ UserCard.types.ts
    โ””โ”€โ”€ useUserCard.ts

3. Shared Extraction โ€‹

Extract code used in multiple places to shared locations:

# Used by 2+ components โ†’ Extract to components/shared/
# Used in 3+ places โ†’ Extract to lib/ or utils/

4. Specification First โ€‹

When adding or modifying features, first clarify interfaces, constraints, and directory structure in halolight/docs, then sync to halolight and halolight-vue to avoid implementation divergence.