Skip to content

Firebase & Data Layer

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.

ServicePurpose
Firebase AuthUser authentication (email/password, Google OAuth)
Cloud FirestorePrimary database for all structured data
Firebase Realtime DatabaseDocument content storage (EditorJS data)
Cloud StorageFile uploads (avatars, media, attachments)
Cloud Functions (v2)Server-side operations (Stripe, referrals)
Firebase AnalyticsUser behavior and event tracking

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';

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);
}
import { firekitDocMutations } from 'svelte-firekit';
// Set (create/overwrite)
firekitDocMutations.set('collection/docId', data);
// Update (merge)
firekitDocMutations.update('collection/docId', { field: value });
// Delete
firekitDocMutations.delete('collection/docId');

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().

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.