Aucip Admin documentation
React 19 + Tailwind CSS 4 admin template with working modules, RTL and dark mode.
- Overview & requirements
- Install & build
- Structure
- Theming & tokens
- RTL & Arabic
- Components & pages
- Licence FAQ
- Changelog
Overview & requirements
Aucip Admin 1.0.0 is a React 19 + Tailwind CSS 4 admin template written in strict TypeScript, with working CRM, Tasks, Ecommerce, Invoices, Calendar and Chat modules, three dashboards, an offline mock API and a typed Laravel adapter. Demo data: Larkfield Provisions.
Requirements
| Version
---|---
Node.js | 20.19+ (22 LTS recommended)
pnpm | 10.x
React / Vite / Tailwind / TypeScript | 19.x / 6.4 / 4.3 / 5.9
Laravel (optional backend) | 12.x or 13.x with Sanctum 4, PHP 8.2+
Browsers | last 2 versions of Chrome, Edge, Firefox, Safari
What's in the zip
- Source (
src/), tests (tests/,e2e/), guides (docs/) dist/: a prebuilt mock-API demo you can upload to any static hostlaravel-stub/: routes, controller, migrations,DemoSeederLICENSE,README.md,CHANGELOG.md
All dependencies are MIT/ISC/Apache/BSD-style (pnpm license-audit checks). The app has no telemetry.
Install & build
pnpm i
pnpm dev # http://localhost:5173, sign in with any email + 6-character password
| Script | What it does |
|---|---|
pnpm dev |
Vite dev server with the mock API |
pnpm build |
tsc -b (strict) → ESLint (0 warnings) → production build in dist/ |
pnpm preview |
Serve the production build locally |
pnpm typecheck / lint / format |
Individual checks |
pnpm test |
Vitest: mock DB and API contract tests (MSW and Laravel adapter) |
pnpm test:e2e |
Playwright: module smoke tests, ⌘K, layouts at 360/768/1440 in light/dark/RTL, axe WCAG AA |
pnpm test:e2e:laravel |
Module specs against a real Laravel app with the stub installed |
pnpm build:starter |
Generates the Starter variant in dist-variants/aucip-admin-starter |
pnpm license-audit |
Fails on GPL/AGPL/LGPL/non-commercial dependencies |
First Playwright run: pnpm exec playwright install chromium.
Deploying
dist/ is static. Upload it to any host and configure a fallback to index.html (client-side routing).
Using your own API
Set in .env.local before pnpm build:
VITE_API_DRIVER=laravel
VITE_API_BASE_URL=https://api.example.com
The Laravel driver supports Sanctum cookie or bearer token auth. Install the stub from laravel-stub/ (see its README and docs/laravel-adapter.md).
Structure
src/
api/ client.ts (ApiClient), types.ts (contract), hooks.ts (TanStack Query)
adapters/ mock.ts, laravel.ts
mocks/ MSW handlers, in-memory DB, deterministic seed, fixtures/
components/
ui/ shadcn-style primitives
layout/ app-layout, sidebar, command-palette, customizer
data-table.tsx, kanban-board.tsx, kpi-card.tsx, page-header.tsx …
modules/ crm/, kanban/, ecommerce/, invoices/, calendar/, chat/
pages/ dashboards/, auth/, ui-kit, coming-soon
providers/ settings (theme/RTL/i18n), auth
i18n/ messages (en, ar) + useT()
lib/ nav.ts (sidebar and ⌘K both read it), format.ts, chart.ts
laravel-stub/ routes/api.php, generic controller, migrations, DemoSeeder
tests/ e2e/ docs/
Adding a CRUD module
- Add the entity to
src/api/types.tsandResourceMap. - Add seed rows (
src/mocks/seed.ts), searchable columns (src/mocks/db.ts) and the resource insrc/mocks/handlers.ts. - Laravel: migration,
CONFIGinResourceController.php,$resourcesinroutes/api.php. - Create
src/modules/<name>/<name>-page.tsx(copycrm/companies-page.tsxfor tables,kanban/tasks-page.tsxfor boards) withuseList/useResourceMutations. - Lazy-import in
src/router.tsx, add a nav item insrc/lib/nav.ts, labels in both locales. - Extend
tests/crud-suite.tsande2e/smoke.spec.ts.
Theming & tokens
Every colour, radius, spacing and motion value is a CSS variable in src/index.css, exposed to Tailwind 4 through @theme. Use tokens (bg-background, text-muted-foreground, bg-primary) rather than raw colours so dark mode and accents keep working.
Customizer
Light / dark / system, accent (Verdigris, Harbor, Clay, Graphite), radius, density (comfortable / compact), direction, sidebar (expanded / icon rail) and language. Settings are saved in localStorage. An accent overrides --primary, --ring and --accent only.
Core tokens (light)
| Token | Value |
|---|---|
--background |
#F7F5F0 |
--card |
#FFFFFF |
--foreground |
#1B2428 |
--primary |
#0F6B5F |
--signal |
#E8A33D (marks only) |
--sidebar |
#14201F (Ink in both themes) |
--radius |
4px |
Density
| Token | Comfortable | Compact |
|---|---|---|
--row-h |
44px | 36px |
--control-h |
36px | 30px |
--card-pad |
20px | 16px |
The compact: Tailwind variant follows data-density on <html>.
Fonts and icons
Schibsted Grotesk (display), Public Sans (UI), IBM Plex Mono (data), Readex Pro (Arabic), all self-hosted through @fontsource. Icons are Phosphor (MIT), generated into src/components/icons.tsx by scripts/gen-icons.mjs.
Full reference: docs/design-tokens.md and docs/theming.md in the package.
RTL & Arabic
- Switch direction and language in the customizer or the ⌘K palette.
- Layout uses logical utilities only (
ms-*,pe-*,start-*,border-e,text-start); neverml-*orleft-*. - Directional icons mirror with
rtl:-scale-x-100. - Every module is translated into Arabic (
src/i18n/messages.ts,app-messages.ts). Add a locale by adding a message set and alangvalue. - Numbers, dates and currency use the active locale. Arabic can show Latin digits (default) or Arabic-Indic digits (
digitssetting). - IDs, emails, phones and amounts are wrapped in
<bdi>so they read correctly inside Arabic text. - Arabic text uses Readex Pro, line-height 1.6, no uppercase or letter-spacing.
Components & pages
Pages
| Area | Routes |
|---|---|
| Dashboards | / Analytics, /dashboards/ecommerce Store, /dashboards/crm Sales CRM |
| CRM | /crm/contacts, /crm/companies, /crm/deals (pipeline kanban) |
| Tasks | /kanban |
| Ecommerce | /ecommerce/products, /ecommerce/orders, /ecommerce/customers |
| Invoices | /invoices, /invoices/new, /invoices/:id, /invoices/:id/edit |
| Calendar | /calendar (month / week / day, drag to move) |
| Chat | /chat, /chat/:id |
| Auth | /auth/login, register, forgot-password, reset-password, two-factor, lock |
| UI kit | /ui-kit |
Building blocks
- Data table (
components/data-table.tsx): server-side sorting, search, filters, pagination, column visibility, CSV export of all matching rows; columns can be numeric (right-aligned) or hidden belowmd. - Kanban board (
components/kanban-board.tsx): drag-and-drop with dnd-kit, keyboard moves (Space + arrows, or the "Move to" menu), column totals. - KPI card, page header, status badge, confirm-delete, row actions.
- States: loading skeletons, empty and error states with retry.
- Forms: react-hook-form + zod, accessible errors.
- UI primitives (
components/ui/): accordion, alert, alert dialog, aspect ratio, avatar, badge, breadcrumb, button, card, checkbox, combobox, command, context menu, date picker, dialog, drawer, dropdown menu, field, input, kbd, menubar, navigation menu, pagination, popover, progress, radio group, scroll area, select, separator, sheet, slider, switch, table, tabs, toast, toggle, tooltip. - Shell: sidebar (expanded, icon rail, mobile drawer), topbar, skip link, ⌘K palette, customizer.
Invoices print from the browser; "Download PDF" uses the print dialog's Save as PDF, and print CSS hides the app chrome.
Licence FAQ
Which licence do I need? Regular licence: use in one end product that end users are not charged for. Extended licence: use in one end product that end users are charged for (for example a paid SaaS or paid membership). Both include free updates while licensed and 6 months of support (renewable). Each additional end product needs another licence.
Can I install it locally and on staging? Yes. Free local installs (localhost/.test) plus up to 3 staging installs on staging subdomains per licence; staging doesn't count against your production domain.
What counts as staging? A host starting with staging., dev., test., uat. or preview., or a tunnel such as ngrok. Tunnel seats expire after 7 days without a verify. Any other public host counts as production. The full host list is in docs/licensing.md.
Is installation included? Installation is a paid add-on, sold separately.
What does the licence check do? It is a developer tool: the npx aucip-admin CLI and a Vite plugin that runs during pnpm dev and pnpm build. The production bundle contains no licence code and makes no licence network calls, so your deployed app never contacts aucip.com.
What happens if my licence can 't be verified? Dev and build keep working and show a warning (in dev, also a small dismissible banner). After 14 days without a successful check, only npx aucip-admin update is blocked until the licence verifies again.
What is sent? Only the licence key, the domain you activate, the product slug and the template version. No customer data, source code, environment variables or analytics.
Can I remove the licence tooling? Yes. Delete aucipLicense() from vite.config.ts, the related package.json entries and tools/aucip-cli/. The app doesn't depend on them; you would then download updates manually.
Changelog
1.0.0 (13 Oct 2026)
First public release.
- Ledgerline design system: Schibsted Grotesk, Public Sans, IBM Plex Mono and Readex Pro, Phosphor icons, Ink sidebar, ledger tables, KPI cards, density modes.
- Analytics, Store and Sales CRM dashboards.
- Modules: CRM (contacts, companies, deals pipeline, activity timeline), Tasks kanban, Ecommerce (products with variants, orders, customers), Invoices (editor, tax, print/PDF), Calendar (month/week/day, drag to move), Chat (inbox, threads, attachments).
- Auth pages: login, register, forgot/reset password, two-step, lock screen.
- Full Arabic translation, RTL, locale-aware number/date/currency formatting.
- Curated Larkfield Provisions demo data, mirrored in the Laravel
DemoSeeder. - Mock API (MSW) and Laravel adapter (Sanctum).
- Prebuilt mock-API demo in
dist/; Starter variant generator. - No horizontal overflow at 375 px; low-value table columns hidden below
md.
Aucip Admin · aucip.com