Introduction & Setup

Welcome to Saaslu - A complete React.js SaaS Admin Dashboard Template documentation

1. Product Overview: Saaslu SaaS Admin Template

Saaslu is a modern, responsive admin dashboard template built with React 19, Tailwind CSS v4, Vite, shadcn/ui, and Radix UI. This template is specifically designed for SaaS Analytics, Metrics Tracking, Revenue Management, and Business Intelligence.

Key Features:

  • SaaS Analytics Dashboard with Real-time Metrics
  • Revenue & Subscription Management UI
  • Advanced Data Tables (TanStack Table)
  • Interactive Charts & Visualizations
  • Built with shadcn/ui and Radix UI components
  • Dark Mode Support with next-themes
  • Built with latest React 19 and Tailwind CSS v4
  • 50+ UI Components
  • Fully Responsive Design
  • Modern Animation with Motion (motion/react)

Technology Stack:

Technology Version Description
React ^19.2.0 Frontend Framework
Tailwind CSS ^4.1.17 Utility-First CSS Framework
Vite ^7.2.2 Lightning Fast Build Tool
shadcn/ui Latest Beautiful UI Components
Radix UI ^1.1.x - ^2.2.x Headless Accessible Components
React Router DOM ^7.9.6 Client-Side Routing
ApexCharts ^5.3.6 Interactive Charts Library
React ApexCharts ^1.8.0 React Wrapper for ApexCharts
TanStack Table ^8.21.3 Headless Data Tables
motion ^12.23.26 Production-Ready Animations (import from motion/react)
FullCalendar ^6.1.19 Full-Featured Calendar
Lucide React ^0.554.0 Beautiful Icon Library
next-themes ^0.4.6 Theme Management
Emoji Picker React ^4.16.1 Emoji Picker Component
Embla Carousel ^8.6.0 Modern Touch Carousel
React Day Picker ^9.11.2 Date Picker Component
Sonner ^2.0.7 Toast Notifications
Class Variance Authority ^0.7.1 Component Variants
Date-fns ^4.1.0 Date Utility Library

2. License & Usage Terms

ThemeForest Marketplace license types and their usage limitations:

Regular License

se this for a single end product that users are not charged for. You can use this for your personal project or for one client.

Extended License

Use this for a single end product that users can be charged for (e.g., a SaaS platform or a product for sale). This is required for any commercial project where the end-user pays to use the service.

Important

Each license is valid for a single project only. For more details on Envato license terms, please visit the Official License Page

3. File Structure

The project follows React/Vite standards for easy customization.

saaslu/
├── public/
│   ├── documentation/
│   ├── favicon.ico
│   └── vite.svg
├── src/
│   ├── App.jsx
│   ├── index.css
│   ├── main.jsx
│   ├── assets/
│   ├── components/
│   │   └── ui/
│   ├── context/
│   ├── data/
│   ├── hooks/
│   ├── layout/
│   ├── lib/
│   │   └── utils.js
│   ├── pages/
│   │   ├── apps/
│   │   ├── auth/
│   │   ├── charts/
│   │   ├── error/
│   │   ├── forms/
│   │   ├── icons/
│   │   ├── page/
│   │   ├── plans/
│   │   ├── settings/
│   │   ├── support/
│   │   ├── tables/
│   │   ├── ui-element/
│   │   ├── analytics.jsx
│   │   ├── crm.jsx
│   │   ├── dashboard.jsx
│   │   ├── finance.jsx
│   │   └── project-management.jsx
│   └── router/
│       └── routes-path.jsx
├── .gitignore
├── components.json
├── eslint.config.js
├── index.html
├── jsconfig.json
├── package.json
├── vite.config.js
└── README.md

4. Installation Guide

To run the template, you need Node.js (v18+) and npm/yarn installed.

Step 1: Download & Extract

Download the Zip file from ThemeForest and extract it to your local system.

Step 2: Navigate to Project

Open terminal and navigate to the project root directory:

cd saaslu

Step 3: Install Dependencies

Run this command to install all required libraries:

npm install
  # or
  yarn install

Step 4: Start Development Server

Run this command to start the project in development mode:

npm run dev
  # or
  yarn dev

The project will typically start at http://localhost:5173

5. Deployment

To create an optimized build for production, run the following command:

npm run build
  # or
  yarn build

This command will create a dist/ folder containing all optimized HTML, CSS, and JavaScript files. You can upload the contents of the dist/ folder to your hosting server.

Popular Hosting Platforms:

  • Vercel: vercel --prod
  • Netlify: Drag & drop dist/ folder or use Netlify CLI
  • GitHub Pages: Use gh-pages package
  • Apache/Nginx: Upload dist/ contents to server

6. Color Customization

All colors in Saaslu are set in the src/index.css file. You can easily change Primary, Secondary, and other colors here.

Modify src/index.css:

:root {
  /* Change your Primary Color here */
  --primary: #6657C3;  /* Main Primary Color */
  --primary-foreground: oklch(0.984 0.003 247.858);
  --primary-50: #f1f0fa;
  --primary-100: #dddbf3;
  --primary-200: #c0bce9;
  --primary-300: #a7a0e1;
  --primary-400: #9087d8;
  --primary-500: #7a6ece;
  --primary-600: #6657c3;
  --primary-700: #5240b3;
  --primary-800: #392c81;
  --primary-900: #1e164b;
  --primary-950: #100b2f;
}

After making changes, restart the development server.

7. Font Customization

The template uses 'Mulish' font, which is imported via Google Fonts in src/index.css.

To Change Font:

  1. Go to Google Fonts and select your preferred font
  2. Get the new @import link
  3. Open src/index.css file and replace the old Font Link with the new one
  4. Also change the Font-Family in the @theme section
/* src/index.css */
@import url('https://fonts.googleapis.com/css2?family=Your+Font+Name&display=swap');

@theme inline {
  --font-mulish: "Your Font Name", sans-serif;
}

8. Layout Options & Context Management

Saaslu uses React Context API for global state management. All layout settings are controlled via Context providers located in src/context/.

Available Context Providers:

1. ThemeProvider

Purpose: Controls Dark/Light mode theme switching with animations

Location: src/context/theme-provider.jsx

Features:

  • Toggle between dark, light, and system themes
  • Persist theme preference in localStorage
  • Animated theme transitions with View Transition API
  • Custom animation variants (circle, blur effects)
// Usage in components
import { useTheme } from '@/context/theme-provider';

const MyComponent = () => {
  const { theme, toggleTheme } = useTheme();
  
  return (
    <button onClick={() => toggleTheme('circle-center-blur', 'center')}>
      Current Theme: {theme}
    </button>
  );
};
2. AppSidebarProvider

Purpose: Manages sidebar layout variants and mobile menu state

Location: src/context/sidebar-provider.jsx

Features:

  • Toggle between vertical and horizontal sidebar layouts
  • Control mobile menu open/close state
  • Responsive sidebar behavior
// Usage in components
import { useAppSidebar } from '@/context/sidebar-provider';

const Header = () => {
  const { sidebarVariant, mobileMenuOpen, toggleMobileMenu } = useAppSidebar();
  
  return (
    <button onClick={toggleMobileMenu}>
      {mobileMenuOpen ? 'Close' : 'Open'} Menu
    </button>
  );
};
3. SettingsProvider

Purpose: Controls global app settings and customization options

Location: src/context/settings-provider.jsx

Features:

  • Sidebar size control (collapsed, default, large)
  • Primary color customization
  • Layout type preferences
  • Sidebar theme settings
  • Persistent settings in localStorage
// Usage in components
import { useSettings } from '@/context/settings-provider';

const Customizer = () => {
  const { settings, updateSetting } = useSettings();
  
  return (
    <select onChange={(e) => updateSetting('primaryColor', e.target.value)}>
      <option value="#6657C3">Purple</option>
      <option value="#3B82F6">Blue</option>
    </select>
  );
};
4. RTLContext.jsx

Purpose: Enables Right-to-Left (RTL) language support

Location: src/context/RTLContext.jsx

Features:

  • Toggle RTL/LTR direction
  • Support for Arabic, Hebrew, and other RTL languages
  • Automatic layout adjustment
// Usage in components
import { useRTL } from '../context/RTLContext';

const LanguageSwitch = () => {
  const { isRTL, toggleRTL } = useRTL();
  
  return (
    <button onClick={toggleRTL}>
      Direction: {isRTL ? 'RTL' : 'LTR'}
    </button>
  );
};
4. RTLProvider

Purpose: Enables Right-to-Left (RTL) language support

Location: src/context/rtl-provider.jsx

Features:

  • Toggle RTL/LTR direction
  • Support for Arabic, Hebrew, and other RTL languages
  • Automatic layout adjustment
  • Integration with SettingsProvider
// Usage in components
import { useRTL } from '@/context/rtl-provider';

const LanguageSwitch = () => {
  const { isRTL, toggleRTL } = useRTL();
  
  return (
    <button onClick={toggleRTL}>
      Direction: {isRTL ? 'RTL' : 'LTR'}
    </button>
  );
};
5. LanguageProvider

Purpose: Manages multi-language support and sidebar data

Location: src/context/language-provider.jsx

Features:

  • Support for multiple languages (English, French, Spanish, German, Japanese)
  • Dynamic sidebar data based on selected language
  • Persistent language preference
  • Language-specific content loading
// Usage in components
import { useLanguage } from '@/context/language-provider';

const LanguageSelector = () => {
  const { currentLanguage, changeLanguage, getSidebarData } = useLanguage();
  
  return (
    <select onChange={(e) => changeLanguage(e.target.value)}>
      <option value="english">English</option>
      <option value="french">Français</option>
    </select>
  );
};
Pro Tip

All context providers are wrapped in src/App.jsx. To modify default settings, edit the respective context file and change the initial state values.

8.1 Layout Components

Saaslu includes pre-built layout components that structure your application. All layout files are located in src/layout/.

Layout Structure:

Component File Description
Layout layout.jsx Main layout wrapper with vertical/horizontal sidebar support
Header header.jsx Top navigation with search, notifications, messages, and user menu
LeftSidebar left-sidebar.jsx Collapsible sidebar with menu items from language data
HorizontalSidebar horizontal-sidebar.jsx Horizontal navigation bar for horizontal layout
Footer footer.jsx Footer component with copyright and developer credits
SettingsSheet settings-sheet.jsx Slide-out panel for theme and layout customization

Note: Icons use Lucide React library. Menu items are dynamically loaded from language JSON files in src/data/languages/.

9. Routing Setup

Saaslu uses React Router DOM. To add a new route, you need to make changes in two places:

Step 1: Create Page Component

Create your new component in the src/pages/ folder:

// src/pages/reports/NewReport.jsx
  import React from 'react';
  
  const NewReport = () => {
    return (
      <div>
        <h1>New Report Page</h1>
        <p>Your content here</p>
      </div>
    );
  };
  
  export default NewReport;

Step 2: Add Route

Open src/router/routes-path.jsx file and add your new route:

import NewReport from '../pages/reports/NewReport';
  
  // Inside your Routes component
  <Route path="/new-report" element={<NewReport />} />

Step 3: Add to Sidebar (Optional)

If you want your new page to appear in the sidebar menu, add it to the appropriate section (e.g. dashboards, apps, or pages) inside src/data/languages/english.json:

{
  "id": "new-report",
  "label": "New Report",
  "icon": "FileText",
  "path": "/new-report"
}

10. Core UI Components

All small, reusable Components are available in the src/components/ui/ folder. Built with shadcn/ui and Radix UI.

Usage Example:

import { Button } from '@/components/ui/button';
import { Dialog } from '@/components/ui/dialog';
import { Card } from '@/components/ui/card';

function MyPage() {
  return (
    <Card>
      <h2>My Page</h2>
      <Button variant="default" size="lg">
        Click Me
      </Button>
    </Card>
  );
}

Available UI Components (50+):

  • Accordion - Collapsible content panels
  • Alert Dialog - Modal confirmation dialogs
  • Alert - Notification messages with variants
  • Avatar - User profile images with fallbacks
  • Badge - Status indicators and labels
  • Breadcrumb - Navigation breadcrumbs
  • Button - Multiple variants and sizes
  • Calendar - Date picker calendar
  • Card - Container component with shadow
  • Carousel - Image and content slider
  • Checkbox - Form checkbox inputs
  • Date Picker - Date selection component
  • Dialog - Modal dialog component
  • Dropdown Menu - Context menu component
  • Input - Form input fields with validation
  • Label - Form field labels
  • Navigation Menu - Navigation component
  • Pagination - Page navigation controls
  • Popover - Tooltip and popover component
  • Progress - Loading and progress indicators
  • Radio Group - Radio button groups
  • Scroll Area - Custom scrollable areas
  • Select - Dropdown select component
  • Sheet - Slide-out panel component
  • Sidebar - Navigation sidebar component
  • Skeleton - Loading placeholder component
  • Switch - Toggle switch component
  • Table - Data table component
  • Tabs - Tabbed navigation interface
  • Tooltip - Hover tooltip component

All components are built with shadcn/ui and Radix UI, located in src/components/ui/ and can be easily imported and customized with Tailwind CSS.

11. Chart Usage

Saaslu uses ApexCharts for data visualization.

ApexCharts Example:

import ReactApexChart from 'react-apexcharts';

const series = [{
  name: "Revenue",
  data: [100, 40, 28, 51, 42, 109, 100] // Change this data
}];

const options = {
  chart: { 
    type: 'line',
    toolbar: { show: false }
  },
  colors: ['#6657C3'],
  stroke: { curve: 'smooth', width: 3 },
  xaxis: {
    categories: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul']
  },
  theme: {
    mode: 'dark' // or 'light'
  }
};

<ReactApexChart 
  options={options} 
  series={series} 
  type="line" 
  height={350} 
/>

Data Source: Most chart data is set in the src/data/ folder or directly in the Component file. You need to update the series and options props of the chart.

Note: All charts automatically adapt to dark/light theme changes and use your primary color (#6657C3) by default.

12. Table Integration

TanStack Table is used for data tables throughout the application, which is very powerful and highly customizable for SaaS dashboards.

TanStack Table with shadcn/ui Example:

import { useReactTable, getCoreRowModel, flexRender } from '@tanstack/react-table';
import {
  Table,
  TableBody,
  TableCell,
  TableHead,
  TableHeader,
  TableRow,
} from '@/components/ui/table';

// Sample data
const data = [
  { id: 1, name: 'John Doe', email: '[email protected]', plan: 'Pro', status: 'Active' },
  { id: 2, name: 'Jane Smith', email: '[email protected]', plan: 'Basic', status: 'Active' },
  { id: 3, name: 'Bob Johnson', email: '[email protected]', plan: 'Enterprise', status: 'Inactive' }
];

// Define columns
const columns = [
  { accessorKey: 'id', header: 'ID' },
  { accessorKey: 'name', header: 'User Name' },
  { accessorKey: 'email', header: 'Email' },
  { accessorKey: 'plan', header: 'Subscription Plan' },
  { accessorKey: 'status', header: 'Status' }
];

// Initialize table
const table = useReactTable({
  data,
  columns,
  getCoreRowModel: getCoreRowModel()
});

// Render table
<Table>
  <TableHeader>
    {table.getHeaderGroups().map(headerGroup => (
      <TableRow key={headerGroup.id}>
        {headerGroup.headers.map(header => (
          <TableHead key={header.id}>
            {flexRender(header.column.columnDef.header, header.getContext())}
          </TableHead>
        ))}
      </TableRow>
    ))}
  </TableHeader>
  <TableBody>
    {table.getRowModel().rows.map(row => (
      <TableRow key={row.id}>
        {row.getVisibleCells().map(cell => (
          <TableCell key={cell.id}>
            {flexRender(cell.column.columnDef.cell, cell.getContext())}
          </TableCell>
        ))}
      </TableRow>
    ))}
  </TableBody>
</Table>

Data Source: Table data is typically imported from JSON files in the src/data/ folder. Changing data in these files will update the Table.

Columns: Table Columns are set in the Component file. You can Add/Remove new Columns from here.

Note: The Table component includes SimpleBar for custom scrolling and is fully styled with Tailwind CSS classes for responsive design.

14. FAQ (Frequently Asked Questions)

Make sure you're running the project from its root directory and the public/ folder path is correct. Also ensure all dependencies are installed with npm install. Check that image paths start with / for public folder assets.

Replace your logo in src/assets/ folder and update the path in src/layout/left-sidebar.jsx and src/layout/header.jsx. Make sure to use the same file format or update the import statement.

Yes, remove the Theme Switch Component from src/layout/header.jsx. To set a default theme, modify the initial state in src/context/theme-provider.jsx.

Solution 1: Delete node_modules folder and package-lock.json, then run npm install again.
Solution 2: Clear npm cache with npm cache clean --force
Solution 3: Install the latest LTS version of Node.js (v18+)
Solution 4: Check for syntax errors in your recent code changes

Step 1: Create your page component in src/pages/
Step 2: Add route in src/router/routes-path.jsx
Step 3: Add menu item in src/data/languages/english.json with id, label, icon, and path

Use fetch or axios for API calls. Create an API service file in src/services/ to centralize your API calls. Use React hooks like useEffect to fetch data on component mount. Consider using React Query or SWR for better data fetching and caching.

Open src/index.css and modify the --primary variable in the :root section. Change --primary: #6657C3; for the main primary color. The dev server will auto-reload with your changes.

Yes! With the Regular License, you can use it for a single end product where users are not charged. With the Extended License, you can use it for SaaS applications or products where users are charged. You cannot resell or redistribute the template itself.

Store chart data in component state using useState. Update the state with new data from API calls or user interactions. The chart will automatically re-render with the new data. See the Charts section for code examples.

Yes! Saaslu is fully responsive and works perfectly on all devices - desktop, tablet, and mobile. The sidebar automatically collapses on smaller screens, and all components are optimized for touch interactions.

15. Credits & Sources

List of all External Resources used in this template:

Resource Description Link
React.js Frontend Framework react.dev
Tailwind CSS Styling Framework tailwindcss.com
Vite Build Tool vitejs.dev
shadcn/ui UI Components ui.shadcn.com
Radix UI Headless UI Components radix-ui.com
ApexCharts Charts Library apexcharts.com
TanStack Table Data Tables tanstack.com/table
Lucide React Icon Library lucide.dev
FullCalendar Calendar Component fullcalendar.io
motion Animation Library (motion/react) motion.dev
next-themes Theme Management next-themes
Unsplash Images (Demo Purpose) unsplash.com
Freepik Graphics (Demo Purpose) freepik.com

Important: All Images are for Demo Purpose only. You must use your own images in Production.

16. Support & Changelog

Support:

We provide Dedicated Support for 6 months from the date of purchase.

Contact Information:

Changelog:

v1.0.0
Latest

Date:13 June 2026

  • Initial Release
  • Built with React 19 and Tailwind CSS v4
  • SaaS Dashboard with Analytics & Metrics
  • shadcn/ui and Radix UI Integration
  • Advanced Data Tables with TanStack Table
  • 50+ UI Components
  • Dark Mode Support with Animations
  • Multi-language Support
  • RTL Support
  • Fully Responsive Design