InfoJobs DevBoard uses React Router DOM 7 for client-side routing. Every page component is loaded with React’sDocumentation Index
Fetch the complete documentation index at: https://mintlify.com/mauroperez055/infoJobs/llms.txt
Use this file to discover all available pages before exploring further.
lazy() function and wrapped in a single <Suspense> boundary, so the browser only downloads the code for a page when the user first navigates to it. The Header and Footer components sit outside the <Routes> tree so they persist across all navigations without re-mounting.
Route table
| Path | Component | Protected | Description |
|---|---|---|---|
/ | HomePage | No | Landing page with hero search form |
/search | SearchPage | No | Paginated job listings with filter controls |
/jobs/:id | JobDetails | No | Full job detail view with AI summary |
/profile | ProfilePage | Yes | Authenticated user profile page |
/login | Login | No | Email / password login form |
/register | Register | No | New account registration form |
* | NotFoundPage | No | 404 fallback — always defined last |
Routes configuration
The complete<Routes> block defined in App.jsx is shown below. Notice that all page imports are wrapped with lazy(), which requires each page file to use export default.
ProtectedRoute
ProtectedRoute is a lightweight wrapper component that gates any route behind an authentication check. It reads the isLoggedIn boolean from Zustand’s authStore. If the user is not logged in, it renders a React Router <Navigate> redirect to the redirecTo path (defaulting to /login) with replace, so the protected route is not pushed onto the browser history stack. If the user is authenticated, it renders children as normal.
Using ProtectedRoute
Wrap any<Route> element with <ProtectedRoute> and pass the target redirect path via the redirecTo prop:
URL-based search filters
The/search page does not hold filter state in memory alone — filters are serialised into URL query parameters so that searches are bookmarkable and shareable. The useFilters hook (used inside SearchPage) reads the initial filter values directly from URLSearchParams on mount:
useEffect calls setSearchParams to keep the URL in sync. This means the back button, browser refresh, and shared links all restore the exact same filtered view. See Custom Hooks for the full useFilters reference.