Skip to content

Changelog ​

What changed in each release, newest first. This is the CHANGELOG.md that ships in the zip.

[2.0.0] - 2026-10-06 ​

A new visual identity, nine languages, five applications, thirteen dashboards, forty ready business modules, and a phone-ready layout — on the same schema-driven core.

Added ​

  • Signs in on first run. The package ships a .env.development that turns on the built-in demo backend and pre-fills the login form, so npm install then npm run dev lands on the sign-in page ready to press Sign in. Remove its two lines when you connect your real backend; .env.example documents every variable.
  • Nine languages — English, Arabic, Spanish, Italian, French, German, Portuguese, Turkish and Indonesian, every one at 100% key parity with English. Arabic drives the whole interface right-to-left. The language menu lists every language by its own name (Deutsch, العربية).
  • Dates, numbers and currency follow the chosen language, not the browser and not a hardcoded American default: 142.300,00 $ in German, 142 300,00 $US in French. Counted phrases pluralize by the real rules of each language, including Arabic's six forms. The first day of the week follows the language too, in the calendar app and in every date picker.
  • Languages you can add and remove — npm run smart-admin -- add-locale fr scaffolds a language end to end: the locale file, the type registration, the lazy loader, the formatting registry, and a manifest of everything it created. Fill in the translations and it is live. remove-locale fr strips all of it using that manifest, offers a backup first, and refuses if anything still refers to the language. Removing a language you added leaves the project byte-for-byte as it was before. analyze --locales reports per-language key coverage against your base language, and npm run check:i18n fails on any key the code uses that no locale defines.
  • Applications
    • Invoice (/apps/invoice) — a list with totals for billed, paid, pending and overdue across every invoice, search, a status filter and per-row view / edit / download / delete; an invoice document that prints cleanly (the app chrome drops away) with Download PDF, Send and Edit; and a create / edit form whose line-items editor updates the subtotal, tax and total as you type. The PDF is real, selectable text, and its library is fetched only when you ask for a download. Every figure comes from one calculation, so the list, the document and the PDF cannot disagree.
    • Kanban (/apps/kanban) — named, addable columns; cards with labels, a checklist progress bar, assignee avatars, a due-date chip that turns amber as the date nears and red once it passes, priority and a done state. Cards drag within and between columns, and a detail drawer edits description, checklist, comments, labels, assignees, due date and priority. Search and a priority filter narrow the whole board; dragging pauses while a filter is active, and says why. The drag library loads only when the board is opened.
    • Chat (/apps/chat) — Chats · Groups · Contacts with search, presence and unread badges; grouped bubbles, date dividers, read ticks and a typing indicator; five message types (text, voice notes with a seekable waveform, images with a lightbox, video, files); an info panel with members and shared media. Call, video, mic and camera controls are previews that never ask for camera or microphone permission.
    • Email (/apps/email) — a three-pane mailbox: folder rail, message list and reading pane, with compose, labels, snooze and attachments.
    • Calendar (/apps/calendar) — month, week and agenda views, a mini month in the sidebar, and an event dialog.
  • Thirteen dashboards — the home dashboard plus CRM, eCommerce, Analytics, Crypto, Finance, HR, Logistics, Marketing, POS, Projects, Sales and Support, all on deterministic seed data with no failing requests.
  • Forty business modules, each with a list, a detail view, create (and, for all but categories, edit) forms, seed data and translations: CRM (companies, contacts, deals, leads), eCommerce (categories, customers, orders, reviews, products), HR (employees, departments, attendance, leave, payroll), Finance (accounts, expenses, invoices, transactions), Projects (projects, clients, timesheets), Support (tickets, agents, knowledge base), Logistics (shipments, drivers, fleet, warehouses), Marketing (campaigns, audiences, automations), Crypto (markets, portfolio, transactions, wallets), Sales (orders, quotes, payments) and POS (orders, registers).
  • Reusable dashboard widgets — DonutChart, RadialGauge, BarChart, RankedList, StatCard and more, generic and theme-driven.
  • A full set of authentication pages — Sign In, Sign Up, Forgot Password, Reset Password (with a live strength meter), Lock Screen and Two-Step Verification (a six-digit code that submits itself on the last digit, with a resend cooldown). All public and working against the built-in demo backend.
  • A "verify you're human" widget (SaHumanVerification) — a Turnstile-style challenge that runs entirely client-side. It appears on Sign In and Sign Up when features.humanVerification is on (off by default, toggleable in Settings → Features), and is documented for swapping in real Turnstile.
  • Error and utility pages — 404, 403, 500, 503 Maintenance and Coming Soon with a live countdown, sharing one layout. None of them makes a network request. "Go back" appears only when there is somewhere to go back to.
  • More pages — the signed-in user's Profile (with two-step verification setup), Plans & pricing, FAQs, Privacy and Terms, an Offline page with a connection banner, a Layouts gallery that applies each layout live, a Productivity page that shows the command palette, pins, shortcuts and tour, and /recover, which clears this browser's stored state and signs you back in.
  • Roles & Permissions — a roles list (/roles), a role editor (/roles/:id) built around a resource × action permission matrix, and a read-only permissions overview (/permissions). The matrix is wired to the app's real CASL authorization, and the editor shows a live "what this role can do" panel from the same rules. The Administrator's "everything" rule is shown as Full access and cannot be edited into something weaker by accident.
  • A browsable UI Kit — 23 pages under /ui-kit/*: buttons, button groups, badges & chips, avatars, dropdowns, typography, colors, icons, alerts, toasts, modals & dialogs, tooltips & popovers, progress & spinners, skeletons, ratings, placeholders, cards, tables, lists, tabs & accordions, carousel, pagination and charts — in light, dark and RTL. All public.
  • A Forms section — eleven pages under /forms/*: inputs, selects and a searchable combobox, toggles, dates and times, file upload, validation, form layouts, a multi-step wizard, tabbed forms, a rich-text editor and a live schema playground — edit the field definitions and the form, its validation and the data table regenerate. The validation page shows a rejection from your API landing under the exact field it belongs to.
  • New components — SaDatePicker, SaTimePicker, SaDateTimePicker, SaCombobox, SaMultiSelect, SaColorInput, SaPasswordInput (with a reveal toggle), SaAlert, SaSpinner, SaRating (direction-aware partial fill), SaCarousel (scroll-snap, correct in RTL, touch-swipe) and SaListGroup, plus a .sa-button-group utility with logical radii.
  • Table columns generated from the schema. One FieldDefinition[] now produces the form, the validation, the filter bar and the table columns. Dropdowns show their labels, switches read Yes/No, dates use the reader's locale.
  • Draft auto-save and an unsaved-changes guard for schema forms (useFormDraft, useFormDirty).
  • CLI: input files and form generation. generate reads the shape your API returns from smart-admin.generate.json instead of guessing, wires the new module into the app and shows you what it changed. generate-form <name> builds a form page from smart-admin.form.json. remove-backups deletes the CLI's backups. Both input files have committed *.example.json samples.
  • A worked example of swapping the demo data for a real API (scripts/dev-api.mjs) — a small dependency-free server, plus notes on what to change: point the app at your API and return validation failures as { errors: [{ field, message }] }.
  • A utility library you can try before you trust it — 35 typed, tree-shakeable helpers in six groups (arrays, strings, numbers, objects, files, colors), each with a live page under Utilities. No lodash. slugify('مرحبا بالعالم') gives مرحبا-بالعالم; capitalizing istanbul in Turkish gives İstanbul; round(1.005, 2) is 1.01; percentage(5, 0) is 0, not Infinity; stripHtml uses DOMPurify. contrastColor uses real WCAG contrast rather than the YIQ shortcut — on the color page's default blue #3b82f6, white text scores 3.68:1 and fails where black passes at 5.71:1.
  • Theme Customizer drawer — a slide-out that tweaks colors, page background, dark mode, RTL, layout, sidebar position, density, corner radius, typography scale and fonts live, with six presets, Reset to defaults and a copy config action that emits a ready-to-paste defaultConfig.ts snippet.
  • ui.direction config option ('auto' | 'ltr' | 'rtl') — pin the text direction independently of language. 'auto' (the default) follows the active language.
  • Multi-level sidebar navigation — nested groups with expand/collapse, active-trail highlighting, section captions, a flyout when the sidebar is collapsed to its icon rail, and subtle depth cues. Permission-filtered via CASL: denying a group hides its whole subtree, and an empty group or an orphaned caption is dropped.
  • Design identity: "Soft & Airy" — a tinted cool-gray canvas that white cards float on (#F1F2F7 light, #0E1013 dark with #1A1D23 cards), a token-driven elevation scale (--sa-shadow-xs … --sa-shadow-xl, .sa-lift for the hover rise), --sa-surface-overlay so menus and dialogs stay legible over cards, and a decorative --sa-text-muted tier.
  • Fullscreen toggle in the navbar, shown where the browser supports it.
  • Activity Log (/activity-log) on seed data — paginated and filterable by action, entity, user and date range.

Changed ​

  • English placeholders read as a sentence: "Enter full name", "Select plan" rather than "Enter Full name". Words with their own capitals stay as written ("Enter SKU", "Enter API key"). Other languages are unchanged, and a field's own placeholder still wins.
  • Pinia upgraded to 4 (pinia ^4.0.3, with @vue/devtools-api ^8.2.1 as a direct dependency). No API change for the app; persisted settings and notifications keep their keys and shape.
  • Tailwind's shadow-* scale points at the --sa-shadow-* tokens, so one edit re-skins every shadow without modifying a shadcn-vue component.
  • Card surface standardized — cards take a soft --sa-card-border hairline, while inputs, tables and dividers keep the visible --border.
  • Sidebar tokens are aliases of their main-surface counterparts (--sidebar: var(--card), …) instead of a duplicated set that could drift.
  • Theme resolution is localStorage-first. useThemeProvider applies the cached tenant palette before any network call and skips the /theme request entirely with the demo backend, so a clean boot fires no failing request.

Removed ​

  • The old demo addresses (/datatable-demo, /form-engine-demo, /crud-demo, /ui-components-demo, /editor-demo, /dx-demo, /showcase). Everything they showed lives in the UI Kit, Forms and Productivity pages; the old paths now show the not-found page.

Fixed ​

  • The template is usable on a phone. Below 768px the sidebar becomes a slide-in drawer opened from a hamburger, in all four layouts; between 768 and 1024 it snaps to its icon rail. Your saved sidebar preference is left untouched. Tables switch to one labeled card per row on phones.
  • The responsive preview shows what a phone really gets. It loads the app in a real device frame at the real width, so breakpoints fire; you can add your own device sizes in Settings → Appearance.
  • Schema forms no longer lose data. A conditionally-shown field kept its value on submit; editing a record no longer clears it; number fields show the value they were given. Forms no longer open covered in errors, an empty dropdown says "Select a valid option", the browser's own validation bubble no longer fights the form, and an HTTP 422 from your API lands under its field. The wizard and tabbed forms behave the same way, and Next on an incomplete step says why it won't advance.
  • One-time-code fields report themselves complete when the last digit is typed, not only when a whole code is pasted.
  • Progress bars fill from the right in RTL.
  • No phantom scrollbars from screen-reader-only text anchoring to the page.
  • Initials never render half a character for an emoji or flag in a label.
  • Charts follow a theme change live — color mode and brand color.
  • Module translations survive a language switch (messages are merged, not replaced).
  • The horizontal layout has its navigation, with section captions as the strip's top-level menus and nested groups opening in place.
  • The collapsed-rail flyout stays on screen and scrolls when long.
  • Only one sidebar entry highlights as the current page.
  • Dark-mode overlays stand off the card they open over.
  • The Activity Log no longer fires a failing request.
  • Exports carry real column names. CSV and Excel headers, and the export column picker, read in the active language instead of raw translation keys. PDF headers are in English, because the PDF's built-in font has no Arabic glyphs.

Security ​

  • Dependencies updated to patched versions: axios, form-data, @tiptap/*, postcss, nanoid, dompurify and echarts. xlsx now installs from SheetJS's own distribution (0.20.3), because the npm registry copy no longer receives fixes. npm audit --omit=dev reports no vulnerabilities.

[1.0.0] - 2026-06-04 ​

First tagged release.

  • Build hardening: production build with gzip + brotli pre-compression, vendor chunk splitting (vue / charts / editor / utils), source maps off. Optional bundle visualizer behind ANALYZE=true. shallowRef + AbortController in useCrud.
  • Security: all environment-bound values flow through import.meta.env; Dockerfile and nginx.conf ship with security headers (CSP, HSTS, X-Frame-Options, Referrer-Policy, Permissions-Policy).
  • Documentation at smart-admin-panel-docs.vercel.app.
  • Live demo at smart-admin-panel-demo.vercel.app, with the demo backend and pre-filled login credentials.
  • License: commercial template terms in LICENSE.

[0.4.0] - 2026-06-04 ​

Added ​

  • Productivity: command palette with auto-registered routes, global and page-scoped keyboard shortcuts (useShortcuts, usePageShortcuts), an onboarding tour (useTour), a pinned-pages menu (usePinnedPages), a responsive preview and a smart breadcrumb with async labels.
  • Infrastructure: in-app notifications (useNotifications) with an optional WebSocket / SSE channel (useRealtimeNotifications); an activity log (useActivityLog) fired from useCrud; export to CSV, Excel and PDF with lazy-loaded libraries (useExport); drag-and-drop uploads with progress (useFileUpload); a promise-based confirmation API (useConfirm); a global ErrorBoundary; print mode; a multi-tenant theme API (useThemeProvider).
  • Reference modules: a full Users module (list / detail / new / edit, bulk delete, multi-step destructive confirms, CSV export, palette commands); a Dashboard with KPI cards, a lazy Apache ECharts area chart and a recent activity feed; a Settings module (General / Appearance / Features) with live preview and reset.
  • CLI tooling: smart-admin generate <name> scaffolds a module; analyze reports unused custom components and font usage; remove / restore / reset with timestamped backups for safe deletion.
  • Production readiness: SEO meta tags, theme-color, OpenGraph cards, a branded <title>.
  • LICENSE — commercial template license.

Changed ​

  • useCrud.items uses shallowRef (the immutable replacement pattern is kept at every mutation site).

Fixed ​

  • Logged-out boot in the 401-refresh interceptor (_skipAuthRefresh on bootstrapAuth's /auth/me call).
  • DataTable column type for file fields aligned with UploadFile[].
  • TypeScript noUncheckedIndexedAccess edge cases across the schema / DataTable / CRUD generics.

[0.3.0] - 2026-05-23 ​

Added ​

  • Command Palette (Ctrl+K) with fuzzy search and auto-registered routes
  • Keyboard shortcuts: global defaults, per-page scoping, and a ? cheat sheet
  • Smart breadcrumb with static and dynamic (function) labels
  • Onboarding tour with a spotlight overlay and completion tracking
  • Responsive preview and a v-copy click-to-clipboard directive
  • Rich text editor (Tiptap) with image, link, and table support

[0.2.0] - 2026-05-21 ​

Added ​

  • Schema-driven forms and a generic DataTable
  • useCrud composable with optimistic updates
  • Authentication and permissions (CASL) plus the Axios HTTP layer
  • UI component library: stats cards, empty states, skeletons, confirmations

Changed ​

  • API response types reshaped to a flat PaginatedResponse<T>

Fixed ​

  • Logged-out boot infinite reload loop in the 401-refresh interceptor

[0.1.0] - 2026-05-10 ​

Added ​

  • Project scaffold: Vue 3, Vite, TypeScript, Tailwind CSS 4, shadcn-vue
  • Theme engine, dynamic fonts, i18n with RTL, and the global config system
  • Layout system (classic / modern / minimal / horizontal)