Skip to main content

Architecture

Dashboard architecture and project structure documentation for ZÈYA Admin Panel.

Tech Stack​

Core Framework​

  • Next.js: 13.2.4
  • React: 18.2.0
  • React DOM: 18.2.0

UI Framework​

  • Bootstrap: 5.2.3
  • React Bootstrap: 2.7.2
  • Bootstrap Icons: 1.10.2
  • React Feather: 2.0.10
  • React Icons: 5.5.0

Charts & Visualization​

  • ApexCharts: 3.37.3
  • React ApexCharts: 1.4.0
  • Chart.js: 4.5.0
  • React Chart.js 2: 5.3.0
  • Recharts: 3.2.1

HTTP & API​

  • Axios: 1.8.2

Utilities​

  • js-cookie: 3.0.5 (Cookie management)
  • dayjs: 1.11.13 (Date handling)
  • uuid: 9.0.1 (UUID generation)
  • react-copy-to-clipboard: 5.1.0
  • react-dropzone: 14.2.3
  • react-easy-crop: 5.4.2

Styling​

  • SASS: 1.71.1
  • SASS Loader: 13.2.2

Other Libraries​

  • Simplebar: 6.2.4 (Custom scrollbar)
  • React Responsive: 9.0.2
  • Next SEO: 5.15.0
  • Vercel Analytics: 1.0.0

Project Structure​

Zeya-Admin/
├── pages/ # Next.js pages (file-based routing)
│ ├── _app.js # App wrapper
│ ├── _document.js # Document wrapper
│ ├── index.js # Dashboard home
│ ├── authentication/ # Auth pages
│ │ ├── sign-in.js
│ │ ├── sign-up.js
│ │ ├── sign-out.js
│ │ ├── forget-password.js
│ │ └── reset-password.js
│ ├── user/ # User management
│ │ ├── index.js
│ │ └── [userId].js
│ ├── product/ # Product management
│ │ ├── index.js
│ │ ├── list.js
│ │ ├── [productId].js
│ │ └── verification.js
│ ├── report/ # Reports
│ │ ├── transaction/
│ │ ├── report-user/
│ │ └── report-product/
│ ├── demographic/ # Demographics & insights
│ │ ├── index.jsx
│ │ ├── swap-analytics.js
│ │ └── ...
│ ├── groups/ # Group management
│ ├── notifications/ # Notification management
│ ├── subscription/ # Subscription management
│ ├── roles/ # Role management
│ └── ...
│
├── components/ # Reusable components
│ ├── AuthChecker.jsx # Authentication checker
│ ├── LazyLoad.jsx # Lazy loading wrapper
│ └── bootstrap/ # Bootstrap components
│
├── sub-components/ # Page-specific components
│ ├── dashboard/ # Dashboard components
│ ├── report/ # Report components
│ ├── user/ # User components
│ └── ...
│
├── layouts/ # Layout components
│ ├── DefaultDashboardLayout.js
│ ├── AuthLayout.js
│ ├── NotFound.js
│ └── navbars/ # Navigation bars
│
├── utils/ # Utility functions
│ ├── withAuth.js # Auth HOC
│ ├── dataCache.js # Data caching
│ ├── runtimeConfig.js # Runtime config
│ └── cropImage.js # Image cropping
│
├── hooks/ # Custom React hooks
│ ├── useCachedData.js # Data caching hook
│ └── useMounted.js # Mount detection hook
│
├── styles/ # SCSS stylesheets
│ ├── theme.scss # Main theme
│ ├── _user.scss # User styles
│ └── theme/ # Theme files
│
├── routes/ # Route configuration
│ └── DashboardRoutes.js
│
├── public/ # Static assets
│ ├── images/ # Images
│ └── fonts/ # Fonts
│
├── data/ # Static/mock data
│ ├── code/ # Code examples
│ └── pricing/ # Pricing data
│
└── widgets/ # Widget components
├── cards/
├── stats/
└── ...

Architecture Patterns​

File-Based Routing​

Next.js uses file-based routing:

  • pages/index.js → /
  • pages/user/index.js → /user
  • pages/user/[userId].js → /user/:userId

Component Structure​

Component/
├── Component.js # Main component
├── Component.module.scss # Component styles (if needed)
└── Component.test.js # Tests (if any)

Layout Pattern​

// Layout wrapper
<DefaultDashboardLayout>
<PageContent />
</DefaultDashboardLayout>

Authentication Pattern​

// Protected pages use withAuth HOC
import withAuth from '../utils/withAuth';

function ProtectedPage() {
return <div>Protected Content</div>;
}

export default withAuth(ProtectedPage);

State Management​

Local State (React Hooks)​

  • Component-specific state
  • Form state
  • UI state (modals, toggles)

Data Caching​

  • Custom useCachedData hook
  • dataCache utility for caching API responses
  • Reduces unnecessary API calls
  • Authentication tokens stored in cookies
  • User preferences
  • Session data

API Architecture​

API Configuration​

// Runtime configuration
const API_URL = process.env.NEXT_PUBLIC_API_URL;
const API_BASE_URL = process.env.NEXT_PUBLIC_API_BASE_URL;

API Call Pattern​

import axios from 'axios';
import Cookies from 'js-cookie';

const apiCall = async (endpoint, options = {}) => {
const token = Cookies.get('auth_token');

return axios({
url: `${API_URL}/${endpoint}`,
headers: {
Authorization: `Bearer ${token}`,
...options.headers,
},
...options,
});
};

Error Handling​

try {
const response = await apiCall('endpoint');
return response.data;
} catch (error) {
if (error.response?.status === 401) {
// Handle unauthorized
router.push('/authentication/sign-in');
}
throw error;
}

Authentication Architecture​

Authentication Flow​

  1. User logs in via /authentication/sign-in
  2. Token stored in cookie
  3. AuthChecker component validates token
  4. Protected routes use withAuth HOC
  5. Token refreshed automatically

Protected Routes​

// Using withAuth HOC
import withAuth from '../utils/withAuth';

function AdminPage() {
return <div>Admin Content</div>;
}

export default withAuth(AdminPage);

Styling Architecture​

SCSS Structure​

  • Theme files: styles/theme/
  • User styles: styles/_user.scss
  • Component styles: Inline or module styles

Bootstrap Integration​

  • Bootstrap 5 as base framework
  • React Bootstrap components
  • Custom SCSS overrides

Performance Optimization​

Code Splitting​

  • Automatic code splitting by Next.js
  • Dynamic imports for heavy components
  • Lazy loading with LazyLoad component

Data Caching​

  • useCachedData hook for API response caching
  • dataCache utility for manual caching
  • Reduces redundant API calls

Image Optimization​

  • Next.js Image component (if configured)
  • Lazy loading images
  • Optimized formats

Build Architecture​

Next.js Build​

# Development
npm run dev

# Production build
npm run build

# Start production server
npm start

# Export static site (if needed)
npm run export

Docker Deployment​

The project includes Docker configuration:

  • docker/Dockerfile.production
  • docker/Dockerfile.stage
  • docker/entrypoint.sh