Skip to content

Implementation Guide โ€‹

This guide helps developers create new framework version implementations for HaloLight.

Shared Constraints โ€‹

  • Data Mocking: Use Mock.js with fetch interception, aligned with halolight/src/mock behavior (response format, delay, error codes)
  • Authentication Flow: Login/register/forgot password/reset password reference halolight/src/app/(auth) page flows and validation logic
  • Environment Variables: All frameworks reuse the same variable naming (e.g. *_API_URL, *_USE_MOCK, *_DEMO_*, *_BRAND_NAME) for documentation consistency
  • CI/CD & Testing: Use common workflow (lint + type-check + test + build + security), retain unit tests and coverage tasks

Implementation Checklist โ€‹

Phase 1: Project Initialization โ€‹

  • [ ] Create project using framework CLI
  • [ ] Configure TypeScript
  • [ ] Install Tailwind CSS
  • [ ] Install corresponding shadcn/ui version
  • [ ] Configure environment variables
  • [ ] Setup path alias (@/)

Phase 2: Basic Architecture โ€‹

  • [ ] Create directory structure
  • [ ] Implement API service layer
  • [ ] Configure TanStack Query
  • [ ] Setup Mock.js fetch interception (reuse halolight/src/mock data structure)
  • [ ] Implement state management Store

Phase 3: Authentication System โ€‹

  • [ ] Login/register/forgot password/reset password pages (reference Next.js version interaction)
  • [ ] Auth Store (with Token persistence)
  • [ ] Route guards
  • [ ] Permission checks (page-level and button-level)

Phase 4: Layout Components โ€‹

  • [ ] AdminLayout
  • [ ] AuthLayout
  • [ ] Sidebar
  • [ ] Header
  • [ ] Footer
  • [ ] Breadcrumb
  • [ ] TabsNav

Phase 5: Core Pages โ€‹

  • [ ] Dashboard (draggable dashboard)
  • [ ] User Management (CRUD)
  • [ ] Role Management
  • [ ] Permission Management
  • [ ] System Settings
  • [ ] User Profile

Phase 6: Enhanced Features โ€‹

  • [ ] Theme switching
  • [ ] Skin presets
  • [ ] Internationalization (optional)
  • [ ] Responsive adaptation
  • [ ] Error boundaries
  • [ ] CI/CD (lint, type-check, test, build, security) and coverage reports

Quick Start โ€‹

1. Create Project โ€‹

bash
# Next.js
npx create-next-app@latest halolight --typescript --tailwind --app

# Vue
npm create vue@latest halolight-vue

# SvelteKit
npx sv create halolight-svelte

# Angular
ng new halolight-angular --routing --style=scss

2. Install Dependencies โ€‹

bash
# Common dependencies
npm install axios @tanstack/react-query zustand
npm install -D tailwindcss postcss autoprefixer

# shadcn/ui
npx shadcn@latest init

3. Directory Structure โ€‹

src/
โ”œโ”€โ”€ app/              # Pages
โ”œโ”€โ”€ components/
โ”‚   โ”œโ”€โ”€ ui/          # shadcn components
โ”‚   โ”œโ”€โ”€ layout/      # Layout components
โ”‚   โ””โ”€โ”€ dashboard/   # Dashboard components
โ”œโ”€โ”€ hooks/           # Custom hooks
โ”œโ”€โ”€ stores/          # State management
โ”œโ”€โ”€ services/        # API services
โ”œโ”€โ”€ lib/             # Utility functions
โ”œโ”€โ”€ types/           # Type definitions
โ””โ”€โ”€ mocks/           # Mock data

Framework Comparison Table โ€‹

Component Syntax โ€‹

ConceptReactVueSvelte
Componentfunction Component()<script setup><script>
Propsprops: PropsdefineProps<Props>()export let prop
StateuseState()ref()let state = $state()
ComputeduseMemo()computed()$derived()
Side EffectuseEffect()watch()$effect()
ContextuseContext()provide/injectsetContext()

Routing โ€‹

ConceptNext.jsVue RouterSvelteKit
File Routingapp/page.tsx-routes/+page.svelte
Dynamic Route[id]/page.tsx:id[id]/+page.svelte
Layoutlayout.tsx-+layout.svelte
Guardmiddleware.tsbeforeEach+page.server.ts

State Management โ€‹

FrameworkRecommended SolutionPersistence
ReactZustandzustand/middleware
VuePiniapinia-plugin-persistedstate
SvelteSvelte Stores-
AngularSignalslocalStorage

API Module Template โ€‹

ts
// services/users.ts
import { api } from './api'

export const userService = {
  getList: (params) => api.get('/users', { params }),
  getById: (id) => api.get(`/users/${id}`),
  create: (data) => api.post('/users', data),
  update: (id, data) => api.put(`/users/${id}`, data),
  delete: (id) => api.delete(`/users/${id}`),
}

Query Hook Template โ€‹

ts
// hooks/useUsers.ts
export function useUsers(params) {
  return useQuery({
    queryKey: ['users', params],
    queryFn: () => userService.getList(params),
  })
}

export function useCreateUser() {
  const queryClient = useQueryClient()
  return useMutation({
    mutationFn: userService.create,
    onSuccess: () => {
      queryClient.invalidateQueries({ queryKey: ['users'] })
    },
  })
}

Store Template โ€‹

ts
// stores/auth.ts
export const useAuthStore = create(
  persist(
    (set, get) => ({
      user: null,
      token: null,
      isAuthenticated: false,

      login: async (credentials) => {
        const response = await authService.login(credentials)
        set({
          user: response.user,
          token: response.token,
          isAuthenticated: true,
        })
      },

      logout: () => {
        set({ user: null, token: null, isAuthenticated: false })
      },

      hasPermission: (permission) => {
        const { permissions } = get().user || {}
        return permissions?.includes(permission) || permissions?.includes('*')
      },
    }),
    { name: 'auth' }
  )
)

Testing Checklist โ€‹

Functional Testing โ€‹

  • [ ] Login/logout flow
  • [ ] Permission control effective
  • [ ] Dashboard drag and save
  • [ ] Theme switching works
  • [ ] Skin switching works
  • [ ] Responsive layout
  • [ ] Data table operations
  • [ ] Form submission validation

Compatibility Testing โ€‹

  • [ ] Chrome latest
  • [ ] Firefox latest
  • [ ] Safari latest
  • [ ] Edge latest
  • [ ] Mobile browsers

Code Standards โ€‹

Naming Conventions โ€‹

TypeStandardExample
ComponentPascalCaseUserCard.tsx
HookcamelCase + useuseUsers.ts
StorecamelCase + useuseAuthStore.ts
ServicecamelCase + ServiceuserService.ts
TypePascalCaseUser, UserQueryParams
ConstantUPPER_SNAKEAPI_BASE_URL

File Organization โ€‹

# Component directory
components/
โ””โ”€โ”€ UserCard/
    โ”œโ”€โ”€ index.tsx          # Main component
    โ”œโ”€โ”€ UserCard.types.ts  # Type definitions
    โ””โ”€โ”€ useUserCard.ts     # Component logic

# Page directory
app/users/
โ”œโ”€โ”€ page.tsx               # List page
โ”œโ”€โ”€ [id]/
โ”‚   โ””โ”€โ”€ page.tsx          # Detail page
โ””โ”€โ”€ create/
    โ””โ”€โ”€ page.tsx          # Create page

Reference Resources โ€‹