Skip to content

Project Structure

Understanding the project structure is essential for efficient development. This guide covers the directory organization, file conventions, and architectural patterns used in the template.

  • Directorypublic/ Static assets served directly
    • vite.svg
  • Directorysrc/ Main application source code
    • Directoryassets/ Static assets and global styles
      • Directorystyles/ Global CSS and theme files
        • index.css
      • vue.svg
    • Directorycomponents/ Reusable Vue components
      • Directoryui/ shadcn-vue component library (40+ components)
      • DirectoryHiTable/ Advanced data table component
      • DirectoryHiForm/ Dynamic form builder component
      • DirectoryHiExport/ Data export component
      • DirectoryCharts/ ApexCharts wrapper components
      • DirectoryRichTextEditor/ TipTap rich text editor
      • DirectoryGlobalSearch/ Global search functionality
      • DirectoryAnimatedButton/ Custom animated button
      • DirectoryBaseCard/ Reusable card components
      • DirectoryHiLoading/ Loading state component
      • DirectoryHiLogo/ Application logo component
      • DirectoryNumeral/ Number formatting component
    • Directorylayouts/ Layout components and structures
      • Directorycomponents/ Layout-specific components
      • mainLayout.vue
      • DirectorysideLayout/ Sidebar layout variant
      • DirectorytopLayout/ Top navigation layout variant
    • Directoryviews/ Page components and routes
      • Directoryoverview/ Dashboard and analytics pages
      • Directorymanagement/ Admin management modules
      • Directoryauth/ Authentication pages
      • Directoryerrors/ Error pages (403, 404, 500)
      • Directorysettings/ Settings and profile pages
      • DirectoryUIElement/ Component showcase pages
    • Directorystores/ Pinia state management
    • Directoryrouter/ Vue Router configuration
    • Directorylocales/ Internationalization files
    • Directoryproviders/ Vue providers and context
    • Directoryhooks/ Composable functions
    • Directoryutils/ Utility functions and helpers
    • Directorylib/ Library configurations
    • Directoryconstant/ Application constants
    • main.ts Application entry point
    • App.vue Root Vue component
  • package.json Project dependencies and scripts
  • vite.config.ts Vite build configuration
  • tailwind.config.js Tailwind CSS configuration
  • tsconfig.json TypeScript configuration
  • components.json shadcn-vue configuration

The template follows a modular, scalable architecture with clear separation of concerns:

  • Script Setup syntax for cleaner component code
  • TypeScript everywhere with strict type checking
  • Composable pattern for reusable logic
  • Reactive state management with Pinia
  • Atomic design principles with ui/, components/, and layout separation
  • Props-based configuration for maximum flexibility
  • Slot-based composition for extensibility
  • TypeScript interfaces for prop validation

shadcn-vue Library (/src/components/ui/)

Contains 50+ production-ready components:

  • Form Components: Button, Input, Select, Checkbox, Radio, Switch
  • Layout Components: Card, Separator, Aspect Ratio, Container
  • Navigation: Breadcrumb, Tabs, Menu, Pagination
  • Feedback: Alert, Toast, Dialog, Popover, Tooltip
  • Data Display: Table, Badge, Avatar, Calendar
  • Advanced: Carousel, Stepper, Sidebar, Navigation Menu

Each component follows the shadcn-vue pattern with:

  • TypeScript definitions
  • Tailwind CSS styling
  • Accessibility support
  • Consistent API design

Dashboard & Analytics (/src/views/overview/)

  • dashboard/: Main dashboard with KPI metrics and charts

    • components/DataCard.vue - Metric display cards
    • components/MonthlyRevenueComparison.vue - Revenue comparison charts
    • components/RecentOrders.vue - Recent order listing
    • components/TopReferralSources.vue - Traffic source analytics
    • components/UserDeviceDistribution.vue - Device usage charts
  • analyze/: Advanced analytics dashboard

    • components/KPIMetricsCard.vue - Key performance indicators
    • components/RevenueAreaChart.vue - Revenue trend visualization
    • components/SalesLineChart.vue - Sales performance tracking

Flexible Layout Architecture

  • mainLayout.vue: Base layout with theme and router setup
  • sideLayout/: Sidebar navigation layout (default)
    • Collapsible sidebar with menu
    • Header with search and notifications
    • Breadcrumb navigation
  • topLayout/: Top navigation layout (alternative)
    • Horizontal navigation bar
    • Dropdown menus for sections

Layout components:

  • LayoutHeader.vue: Application header with actions
  • LayoutSidebar.vue: Navigation sidebar
  • LayoutBreadcrumb.vue: Dynamic breadcrumb navigation
  • LanguageSwitcher.vue: Internationalization controls
  • Notification.vue: Notification center
  • SettingSheet.vue: Theme and preference settings

Main TypeScript configuration with strict settings:

{
"compilerOptions": {
"strict": true,
"noImplicitAny": true,
"strictNullChecks": true,
"moduleResolution": "bundler",
"target": "ES2020",
"module": "ESNext"
}
}

Vite Configuration (vite.config.ts)

  • Vue plugin with TypeScript support
  • Path aliases for clean imports
  • Development server settings
  • Build optimizations
  • CSS preprocessing

Tailwind Configuration (tailwind.config.js)

  • Design system tokens
  • Custom component styles
  • Dark mode configuration
  • Plugin integrations
  • PascalCase for component names: UserTable.vue, OrderDetail.vue
  • kebab-case for directories: user-management/, order-detail/
  • index files for barrel exports: components/index.ts
  • camelCase for utilities: formatDate.ts, apiClient.ts
  • PascalCase for classes: ApiClient.ts, UserService.ts
  • lowercase for configuration: router.ts, store.ts
  • kebab-case for images: user-avatar.png, company-logo.svg
  • descriptive names for CSS: global.css, components.css

Pinia Store Structure (/src/stores/)

  • user.ts: User authentication and profile state
  • setting.ts: Application settings and preferences
  • index.ts: Store configuration and plugins

Each store follows the composition API pattern:

export const useUserStore = defineStore('user', () => {
const user = ref<User | null>(null)
const isLoggedIn = computed(() => !!user.value)
function login(credentials: LoginCredentials) {
// Login logic
}
return { user, isLoggedIn, login }
})

Locales Structure (/src/locales/)

  • en-US.json: English translations
  • zh-CN.json: Chinese translations
  • index.ts: i18n configuration
  • types.ts: Translation type definitions

Translation key structure:

{
"common": {
"buttons": {
"save": "Save",
"cancel": "Cancel"
}
},
"pages": {
"dashboard": {
"title": "Dashboard"
}
}
}

Reusable Logic (/src/hooks/)

  • useMediaQuery.ts: Responsive design utilities
  • useThemeColor.ts: Theme management
  • useGlobalSearch.ts: Search functionality
  • useAlertDialog.ts: Dialog management

Context Providers (/src/providers/)

  • AlertDialogProvider: Global dialog management
  • Centralized state for cross-component communication
  • Type-safe context injection

Each major component includes:

  • README.md: Component overview and usage
  • types/: TypeScript definitions
  • composables/: Logic hooks
  • components/: Sub-components
  • sample.vue: Usage examples (where applicable)

The project uses path aliases for clean imports:

// Instead of
import UserTable from '../../../components/UserTable.vue'
// Use clean paths
import UserTable from '@/components/UserTable.vue'
import { formatDate } from '@/utils/date'
import { useUserStore } from '@/stores/user'

Common aliases:

  • @/src/
  • @/components/src/components/
  • @/views/src/views/
  • @/utils/src/utils/