Skillara AI uses Firebase Authentication for user identity. Sign-in is optional — you can generate and download CVs without an account. An account is required only to save CVs to your personal dashboard, where they persist across sessions and devices.Documentation Index
Fetch the complete documentation index at: https://mintlify.com/CristianParadaLopez/cv-builder/llms.txt
Use this file to discover all available pages before exploring further.
Authentication provider
Skillara AI supports two sign-in methods through Firebase Auth:Google OAuth
One-click sign-in via
signInWithPopup using GoogleAuthProvider. This is the recommended and most prominent sign-in path in the UI.Email & Password
Standard
signInWithEmailAndPassword and createUserWithEmailAndPassword flows are also available on the /login page for users who prefer not to use Google.auth instance exported from firebase/config.ts:
How it works
AuthProvider wraps the entire application and listens to Firebase’s onAuthStateChanged observer. When the observer fires, it updates the user state and sets loading to false. While the initial auth check is in progress, AuthProvider suppresses rendering of its children to prevent a flash of unauthenticated UI.
useAuth() hook exposes three values to any component in the tree:
| Value | Type | Description |
|---|---|---|
user | User | null | The Firebase User object when signed in, or null when signed out |
loading | boolean | true while the initial onAuthStateChanged check is in progress |
logout | () => Promise<void> | Calls signOut(auth) and resolves when the sign-out is complete |
ProtectedRoute
The/dashboard route is wrapped in a ProtectedRoute component. If user is null, the component immediately redirects the visitor to /login using React Router’s <Navigate> with replace, preventing the protected URL from appearing in browser history. Because AuthProvider already suppresses its children until the initial auth check completes, ProtectedRoute only ever evaluates once the Firebase identity is known.
Not signed in
The component renders
<Navigate to="/login" replace />, sending the user to the login page without adding /dashboard to browser history.Firestore data structure
Once signed in,user.uid is used as the top-level segment of the Firestore path for all CV documents belonging to that user:
cvs sub-collection conforms to the SavedCV interface:
Setting up Firebase for self-hosting
To run Skillara AI with your own Firebase project, create a.env file in the frontend/ directory and populate all six required variables:
The backend also defines a Prisma
User model with a googleId String? @unique field, designed to mirror Firebase identities on the server side. However, the current UI relies exclusively on Firebase client-side authentication — the Prisma model is not yet wired into the auth flow and exists for future server-side use.