Firebase & Data Layer
Firebase Integration
Section titled “Firebase Integration”Mindhyv uses Firebase 11.10.0 as its backend, accessed through the svelte-firekit library (v0.1.8) which provides reactive Svelte bindings for Firebase services.
Firebase Services Used
Section titled “Firebase Services Used”| Service | Purpose |
|---|---|
| Firebase Auth | User authentication (email/password, Google OAuth) |
| Cloud Firestore | Primary database for all structured data |
| Firebase Realtime Database | Document content storage (EditorJS data) |
| Cloud Storage | File uploads (avatars, media, attachments) |
| Cloud Functions (v2) | Server-side operations (Stripe, referrals) |
| Firebase Analytics | User behavior and event tracking |
svelte-firekit API
Section titled “svelte-firekit API”The svelte-firekit library provides reactive primitives used throughout the app:
import { firekitDoc, // Reactive single document firekitDocMutations, // Document mutations (set, update, delete) firekitCollection, // Reactive collection query firekitCollectionGroup,// Collection group queries firekitUser, // Current authenticated user firekitAuth, // Auth operations firekitAnalytics, // Analytics tracking firebaseService, // Low-level Firebase access} from 'svelte-firekit';Reactive Data Binding
Section titled “Reactive Data Binding”Stores use firekitDoc and firekitCollection with Svelte 5 $derived to create reactive data flows:
class UserStore { // Automatically subscribes to Firestore document private _doc = $derived(firekitDoc(`users/${firekitUser.user?.uid}`));
// Derived typed data public userData = $derived(this._doc?.data as User);}Document Mutations
Section titled “Document Mutations”import { firekitDocMutations } from 'svelte-firekit';
// Set (create/overwrite)firekitDocMutations.set('collection/docId', data);
// Update (merge)firekitDocMutations.update('collection/docId', { field: value });
// DeletefirekitDocMutations.delete('collection/docId');Root Layout Setup
Section titled “Root Layout Setup”The root +layout.svelte wraps the entire app with Firebase:
<FirebaseApp> <Toaster /> <ModeWatcher /> {@render children()}</FirebaseApp>On mount, it initializes referral tracking via cookieManager.initializeReferralTracking().
Key Firestore Imports
Section titled “Key Firestore Imports”import { serverTimestamp, where, Timestamp, doc, getDoc } from 'firebase/firestore';These are used directly for queries, timestamps, and one-off document reads beyond the reactive bindings.