Lex Consultoría’s frontend uses Vue Router 4 in hash mode, meaning every URL is prefixed withDocumentation Index
Fetch the complete documentation index at: https://mintlify.com/fredy-rizo/despacho-frontend/llms.txt
Use this file to discover all available pages before exploring further.
# (e.g., http://localhost:5173/#/dashboard). Hash mode was chosen deliberately: it requires zero server-side configuration because the browser never sends the fragment portion of the URL to the server, making the app deployable on any static file host without rewrite rules.
Router Factory — src/router/index.js
Quasar wraps router creation inside its own defineRouter helper from #q-app/wrappers. This gives Quasar the opportunity to inject platform-specific context (like SSR server state) before the router is instantiated. Inside the factory, the correct history implementation is selected at build time via the VUE_ROUTER_MODE environment variable that Quasar sets from quasar.config.js.
scrollBehavior: () => ({ left: 0, top: 0 }) ensures that every route transition resets the viewport scroll position to the top-left corner. This prevents the awkward experience of navigating to a new page while still scrolled halfway down the previous one.quasar.config.js:
vueRouterMode to 'history' would switch to HTML5 pushState URLs, but that requires the web server to redirect all paths to index.html.
Full Route Table — src/router/routes.js
The complete routes array is defined in a separate file and imported by the router factory. Every page component is lazy-loaded via a dynamic () => import(...) call, which causes Vite to split each page into its own JS chunk. The /*webpackChunkName: "..."*/ magic comments are honored by both Webpack and Vite and give the output chunks human-readable names, making it easier to audit the network tab.
Route Reference
/signUp
Registration page. Rendered outside
MainLayout — no navigation bar or shared shell. Chunk name: SIGNUP./signIn
Login page. Also standalone, outside
MainLayout. Displays the signInComponent form against a full-screen background image. Chunk name: SIGNIN./ (empty path)
Landing / start page rendered inside
MainLayout. Matched when the path is exactly /. Chunk name: START./info_who_we_are
“Who We Are” informational page, rendered inside
MainLayout. Chunk name: WHO_WE_ARE./dashboard
Admin reservations dashboard, rendered inside
MainLayout. Intended for users with roles 1 or 2. Chunk name: DASHBOARD./:catchAll(.*)*
Catch-all 404 handler. The
.* pattern with the * quantifier matches any path not claimed by a preceding route. Renders ErrorNotFound.vue.Nested Routes and the MainLayout Wrapper Pattern
The three main application pages (/, /info_who_we_are, /dashboard) are declared as children of the root / route, whose component is MainLayout.vue. This is Vue Router’s nested route pattern: the parent component acts as a shell and renders child route components inside a <router-view /> outlet.
MainLayout.vue — which contains the navigation bar, drawer, and footer — is mounted once and persists across navigations between its children. Only the inner <router-view> swaps out, making transitions snappy and preventing unnecessary re-renders of shared chrome.
Lazy-Loading Pattern
Each route component uses a dynamic import rather than a static one:DASHBOARD.abc123.js). The browser only downloads that chunk when the user first navigates to /dashboard, reducing initial bundle size and speeding up first-page load.