Features

Settings

  • App config loaded from the API, with local overrides per app
  • Centralize front-end options like auto-login in one place

Auth

  • Route-level access for guest, logged-in, and role-based pages
  • Login refreshes automatically and extends as you use the app
  • Sign back in only after a real stretch of inactivity

Account Verification

  • Unverified users held on a verify screen until they confirm
  • Supports more than one verification, worked through one at a time
  • Optional grace period lets users in early, with a reminder banner until they finish
  • Registration asks for a phone number only when the API enables it

Components (shadcn-vue)

  • shadcn-vue plus custom components, drop in and customize
  • Copied into shared/components/ui/, not a dependency

Layouts

  • Layout builder with drop-in blocks: header, footer, body, asides
  • Left/right asides, centered content, with or without header/footer
  • Covers the common cases: auth pages, error pages, centered empty states

Mobile

  • Fully mobile-friendly out of the box
  • Slide-out menus and responsive navigation

Dark Mode

  • Light and dark themes, remembered across visits
  • Correct theme shown immediately, no flash on load

Accessibility (reka-ui)

  • Accessible component primitives via reka-ui - keyboard nav, focus management, and ARIA out of the box
  • Icon-only controls and dialogs carry screen-reader labels
  • Work in progress, not yet fully audited - more support coming soon

Dialog Manager

  • One host renders every dialog, open one from anywhere by name with typed props
  • Only one dialog shows at a time, switching waits for the close animation
  • Every open mounts the dialog fresh, so forms never carry over stale values or errors
  • Slide-out menus close on their own when a dialog opens

Page Transitions

  • Smooth transitions across site, layout, and page changes
  • Only the part that actually changed re-transitions
  • One shared loading mechanism instead of scattered spinners

Cover Loading

  • Branded loading screen shown before the app bundle loads, not a spinner after boot
  • Seamless startup for heavier apps with a large initial payload

Scroll Behavior (Vue Router)

  • Scroll resets to the top on navigation, with back and forward restoring where you left off
  • Routes can be grouped so moving between them keeps the scroll position, handy for tabbed sections
  • Built on Vue Router's own scroll handling, just with the grouping added on top

Localization (vue-i18n)

  • Translations loaded per page and cached, only what's needed
  • Locale auto detected on first visit, then stored in local storage and restored on refresh
  • Signed-in users load their saved locale from the API, so it follows them across devices

Timezones

  • Times displayed in the user's selected timezone, adjusted on the fly
  • Timezone auto detected during registration
  • Signed-in users load their saved timezone from the API, so it follows them across devices

Dev Environment

  • Dockerized dev environment (Node 22)
  • Simple ./dev script for container commands
© Websanova 2026 About Privacy