3WHYNordstar · Installation

NORDSTAR selbst betreiben

Vom leeren Rechner bis zur laufenden Coaching-Plattform. Jeder Schritt einzeln, jeder Klick benannt. Vorkenntnisse brauchst du keine — auch nicht mit dem Terminal.

~60 Min. beim ersten Mal macOS & Windows Kosten: 0 € im Gratisrahmen Google-Konto nötig
00

Was am Ende dasteht

Damit klar ist, wofür der Aufwand gut ist.

Eine laufende Coaching-Plattform auf deinem eigenen Rechner, mit einem fiktiven Beispielunternehmen namens Acme Cloud Solutions und fünf vorbereiteten Zugängen — je einer pro Rolle. Du kannst dich sofort anmelden und dich umsehen, bevor du irgendetwas anpasst.

LoginNameRolleWas sie zeigt
adminAlex AdminAdministratorNutzerverwaltung, Unternehmenskontext
manager1Miriam OttManager 2nd LineSicht über alle Teams
manager2Sven BauerManager 1st LineTeam-Coaching, Forecast
aeNina KranzAccount Executiveeigene Deals, Voice-Coaching
seJonas ReiterSolution Engineertechnische Qualifizierung

Das Passwort lautet überall demo1234.

Bevor du loslegst

Du brauchst ein Google-Konto. Alles andere — Node.js, Git — installieren wir gleich gemeinsam. Bezahlt wird nichts: Firebase und Gemini haben Gratiskontingente, die für den Eigengebrauch reichen. Nur wenn du später E-Mail-Benachrichtigungen willst, muss das Google-Projekt auf den kostenpflichtigen Blaze-Tarif — der bleibt bei diesem Nutzungsumfang trotzdem bei null.

Nur mal reinschauen?

Es geht auch ganz ohne Google-Konto: Die Plattform läuft im Emulator-Modus komplett auf deinem Rechner. Dann funktioniert alles außer der gesprochenen Coaching-Session. Der Weg steht unten unter Schnellweg ohne Google-Konto.

01

Node.js und Git installieren

Zwei Werkzeuge, die die Plattform zum Laufen braucht. Einmalig.

macOS
  1. Öffne nodejs.org und lade die große grüne Schaltfläche mit dem Zusatz LTS herunter.
  2. Doppelklick auf die geladene .pkg-Datei, dann durch den Installationsdialog klicken.
  3. Git ist auf dem Mac meist schon dabei. Falls nicht, fragt dich macOS beim ersten Aufruf, ob es die Entwicklerwerkzeuge nachinstallieren soll — dort auf Installieren klicken.
Windows
  1. Öffne nodejs.org und lade die große grüne Schaltfläche mit dem Zusatz LTS herunter.
  2. Doppelklick auf die .msi-Datei. Alle Vorgaben übernehmen, bis Finish.
  3. Lade zusätzlich Git für Windows und installiere es ebenfalls mit den Vorgaben. Das bringt auch die Git Bash mit, die wir gleich als Terminal verwenden.
02

Terminal öffnen und Projekt holen

Das Terminal ist ein Fenster, in das man Befehle tippt. Mehr nicht.

macOS

Drücke + Leertaste, tippe Terminal, Enter. Es öffnet sich ein Fenster mit einer Zeile, die auf deine Eingabe wartet.

Windows

Klicke auf Start, tippe Git Bash, Enter. Nimm bewusst Git Bash und nicht die Eingabeaufforderung — die Befehle in dieser Anleitung sind darauf abgestimmt.

Prüfe zuerst, ob Node angekommen ist. Tippe den Befehl und drücke Enter:

node --version
Erwartete Ausgabe (Zahl darf abweichen)v22.14.0

Kommt command not found, ist Node nicht installiert oder das Terminal war schon offen. Schließe es, öffne es neu, versuch es noch einmal.

Jetzt holst du das Projekt. Der erste Befehl wechselt in deinen Dokumente-Ordner, der zweite lädt den Code:

cd ~/Documents
git clone https://github.com/JonahNoel/nordstar.git
cd nordstar
Noch kein Zugang?

Das Repository ist privat — ohne Freigabe schlägt der Befehl fehl. Melde dich einfach direkt bei mir, per WhatsApp oder an heidbrink@3why.de, und nenn mir deinen GitHub-Benutzernamen. Ich trage dich ein, du bekommst eine Einladung per E-Mail — danach funktioniert der Befehl oben.

Beim ersten git clone fragt GitHub nach deiner Anmeldung. Das ist normal.

Zum Schluss die Programmbibliotheken herunterladen. Das dauert ein, zwei Minuten:

npm install

Warnungen über veraltete Pakete sind normal und stören nicht.

03

Firebase-Projekt anlegen

Hier liegen später alle Daten: Nutzer, Deals, Coaching-Sitzungen.

  1. Öffne die Firebase Console und melde dich mit deinem Google-Konto an.
  2. Klicke auf Projekt hinzufügen. Der Name ist frei wählbar, etwa nordstar-meinname. Google Analytics kannst du abwählen — es wird nicht gebraucht.
  3. Warte, bis das Projekt bereitsteht, und klicke auf Weiter.

Datenbank anlegen

  1. Links im Menü Erstellen → Firestore Database, dann Datenbank erstellen.
  2. Als Standort eur3 (europe-west) wählen, wenn du in Europa sitzt.
  3. Bei der Frage nach dem Modus Im Produktionsmodus starten wählen.
Wichtig

Produktionsmodus heißt: Zunächst ist alles gesperrt. Das ist richtig so. In Schritt 06 spielen wir die passenden Zugriffsregeln ein. Wählst du hier den Testmodus, steht deine Datenbank für einen Monat offen im Netz.

Anmeldung aktivieren

  1. Erstellen → Authentication, dann Jetzt starten.
  2. In der Liste E-Mail/Passwort anklicken, den oberen Schalter auf Aktiviert stellen und Speichern.

Echte E-Mail-Adressen braucht niemand. Die Anwendung baut intern aus dem Login ae die Adresse ae@nordstar.app — das ist nur eine technische Hülle.

Web-App registrieren

  1. Oben links auf das Zahnrad, dann Projekteinstellungen.
  2. Nach unten scrollen bis Deine Apps und auf das Symbol </> klicken.
  3. Einen Spitznamen vergeben, App registrieren.
  4. Es erscheint ein Codeblock mit firebaseConfig. Lass dieses Fenster offen — die sechs Werte daraus brauchst du in Schritt 05.
So sieht der Block ausconst firebaseConfig = { apiKey: "AIzaSyD…", authDomain: "nordstar-meinname.firebaseapp.com", projectId: "nordstar-meinname", storageBucket: "nordstar-meinname.firebasestorage.app", messagingSenderId: "123456789012", appId: "1:123456789012:web:abc…" };

Dienstkonto-Schlüssel herunterladen

  1. Weiterhin in den Projekteinstellungen, oben auf den Reiter Dienstkonten.
  2. Neuen privaten Schlüssel generieren, dann Schlüssel generieren. Es lädt eine .json-Datei herunter.
  3. Benenne diese Datei in service-account.json um und lege sie in den Projektordner nordstar — also dorthin, wo auch package.json liegt.
Diese Datei ist ein Generalschlüssel

Wer sie hat, hat vollen Zugriff auf dein Firebase-Projekt. Niemals weitergeben, nicht in Chats posten, nicht ins Internet laden. Das Projekt ist so eingerichtet, dass sie versehentlich nicht mitcommittet wird.

04

Gemini-Schlüssel besorgen

Das Sprachmodell, das die Coaching-Gespräche führt und auswertet.

  1. Öffne aistudio.google.com/apikey und melde dich mit demselben Google-Konto an.
  2. API-Schlüssel erstellen anklicken.
  3. Wenn du gefragt wirst, in welchem Projekt: wähle das Firebase-Projekt aus Schritt 03 — das hält alles beisammen.
  4. Kopiere den Schlüssel und leg ihn kurz beiseite, etwa in eine Notiz. Er beginnt mit AIza.
Behandle ihn wie ein Passwort

Mit diesem Schlüssel kann jeder auf deine Rechnung Anfragen an Google stellen. Nicht weitergeben.

05

Einrichtungsassistent ausführen

Er fragt die Werte ab und schreibt alle Konfigurationsdateien selbst.

Zurück ins Terminal, im Ordner nordstar:

npm run setup

Der Assistent fragt nacheinander ab. Die ersten sechs Werte stehen im firebaseConfig-Block aus Schritt 03 — jeweils der Text zwischen den Anführungszeichen:

FrageWas einzutragen ist
apiKeyder Wert hinter apiKey:
authDomain…firebaseapp.com
projectIddie Projekt-ID
storageBucket…firebasestorage.app
messagingSenderIddie lange Zahl
appIdbeginnt mit 1:
measurementId, VAPIDleer lassen, mit Enter überspringen
Gemini-API-Schlüsselder Schlüssel aus Schritt 04
Cloud-Run-Proxy-URLleer lassen — kommt später in Schritt 08
alle weiterenEnter drücken, die Vorgaben passen

Am Ende meldet der Assistent, welche Dateien er geschrieben hat, und listet auf, was noch fehlt.

06

Regeln ausrollen und Beispieldaten anlegen

Ohne diesen Schritt bleibt die Anwendung nach dem Login leer.

Zuerst das Firebase-Kommandozeilenwerkzeug installieren und anmelden. Es öffnet dafür deinen Browser:

npm install -g firebase-tools
firebase login
macOS: Zugriff verweigert

Meldet der erste Befehl EACCES oder permission denied, stelle sudo voran: sudo npm install -g firebase-tools. Du wirst dann nach deinem Mac-Passwort gefragt.

Jetzt die Zugriffsregeln ausrollen. Sie bestimmen, wer welche Daten lesen darf:

npm run deploy:rules

Und die Beispieldaten anlegen — fünf Nutzer, ein Unternehmensprofil, zwei Deals:

npm run seed
Erwartete Ausgabe, gekürzt👤 Nutzer … ✅ admin Alex Admin Administrator … ✅ ae Nina Kranz Account Executive … 🏢 Unternehmenskontext … ✅ companyContexts/acme_demo — 1 Wettbewerbsprofil, 1 Win Story 📁 Demo-Opportunities … ✅ Nordwind Logistik — Plattform-Ablösung (inkl. Beispiel-Session)
07

Prüfen und starten

Erst kontrollieren, dann öffnen — das erspart die Fehlersuche im Dunkeln.

Das Projekt bringt eine Selbstprüfung mit. Sie geht jede Voraussetzung durch und sagt im Klartext, was fehlt:

npm run doctor
So sieht es aus, wenn alles sitzt1 · Werkzeuge ✓ Node.js 22.14.0 ✓ Abhängigkeiten installiert 2 · Konfiguration ✓ .env.local vorhanden ✓ Firebase-Web-Konfiguration vollständig ✓ Gemini-Schlüssel hinterlegt ! Voice-Proxy nicht konfiguriert 3 · Verbindung zu Firebase ✓ Firestore erreichbar ✓ 5 Nutzer angelegt 4 · Sicherheitsregeln ✓ Regeln greifen

Ein ! beim Voice-Proxy ist an dieser Stelle richtig — den richten wir in Schritt 08 ein. Steht dort ein , nennt die Zeile darunter den Befehl, der es behebt.

Wenn die Prüfung durch ist, starte die Anwendung:

npm run dev

Öffne http://localhost:3000 im Browser und melde dich an mit ae und demo1234. Du solltest zwei Deals sehen.

Das Terminal bleibt jetzt belegt — dort läuft der Server. Zum Beenden Strg + C drücken. Für weitere Befehle öffne ein zweites Terminalfenster.

Jetzt die Passwörter ändern

Die fünf Demo-Zugänge stehen in dieser Anleitung und im Repository. Solange die Plattform nur auf deinem Rechner läuft, ist das folgenlos. Sobald du sie ins Internet stellst, ändere sie zuerst unter Admin Dashboard → Users.

08

Sprachfunktion aktivieren

Optional, aber es ist der eigentliche Kern des Produkts.

Bis hierher läuft alles außer dem gesprochenen Coaching. Dafür braucht es einen kleinen Vermittlungsdienst bei Google Cloud, der den Gemini-Schlüssel hält, damit er nicht im Browser landet.

  1. Installiere die Google-Cloud-CLI und melde dich an mit gcloud auth login.
  2. Setze deine Projekt-ID ein und führe die folgenden Befehle aus.
# Projekt-ID eintragen
export PROJECT_ID=deine-projekt-id

# Gemini-Schlüssel sicher hinterlegen
echo -n "DEIN_GEMINI_SCHLUESSEL" | \
  gcloud secrets create GEMINI_API_KEY --data-file=- --replication-policy=automatic

gcloud secrets add-iam-policy-binding GEMINI_API_KEY \
  --member="serviceAccount:$(gcloud projects describe $PROJECT_ID \
    --format='value(projectNumber)')-compute@developer.gserviceaccount.com" \
  --role=roles/secretmanager.secretAccessor

# Dienst ausrollen
cd cloud-run
gcloud config set project $PROJECT_ID
gcloud run deploy nordstar-gemini-proxy \
  --source . --region europe-west3 --allow-unauthenticated \
  --set-env-vars FIREBASE_PROJECT_ID=$PROJECT_ID \
  --set-secrets GEMINI_API_KEY=GEMINI_API_KEY:latest

Am Ende wird eine Adresse ausgegeben, die mit https:// beginnt. Ersetze https durch wss und trage sie ein — dafür einfach den Assistenten noch einmal laufen lassen:

cd ..
npm run setup

Alle bisherigen Werte stehen in eckigen Klammern und werden mit Enter übernommen. Nur bei der Proxy-URL trägst du die neue Adresse ein.

--allow-unauthenticated klingt beunruhigender, als es ist: Browser können bei einer WebSocket-Verbindung keine Google-Zugangsdaten mitschicken. Der Dienst prüft stattdessen selbst, ob ein gültiges Anmeldetoken deiner Plattform vorliegt, und lehnt sonst ab.

Schnellweg ohne Google-Konto

Zum Ausprobieren, ohne irgendetwas anzulegen.

Firebase lässt sich lokal nachbilden. Dafür brauchst du zusätzlich eine Java-Laufzeit: auf dem Mac brew install openjdk, unter Windows von adoptium.net.

npm install
npm install -g firebase-tools

cp .env.example .env.local
echo "VITE_USE_FIREBASE_EMULATOR=true" >> .env.local

Dann drei Terminalfenster, je ein Befehl:

npm run emulators        # Fenster 1
npm run seed:emulator    # Fenster 2
npm run dev              # Fenster 3

Anmelden mit ae / demo1234. Alles funktioniert außer der Sprachsitzung. Die Daten liegen nur im Arbeitsspeicher und verschwinden, sobald du die Emulatoren beendest.

Hilfe von Claude Code holen

Wenn du feststeckst, kann ein KI-Assistent im Projektordner direkt mitlesen.

Claude Code ist ein Assistent, der im Terminal läuft und die Dateien deines Projekts sieht. Das Repository ist darauf vorbereitet: Es enthält eine Datei CLAUDE.md, die den Aufbau erklärt — der Assistent liest sie von selbst.

Einmalig einrichten

npm install -g @anthropic-ai/claude-code

Danach im Projektordner claude eingeben. Beim ersten Start führt dich das Programm durch die Anmeldung.

Der Einstiegssatz

Kopiere diesen Text und füge ihn als erste Nachricht ein. Er sagt dem Assistenten, worum es geht, wo er nachschlagen soll und wo seine Grenzen liegen:

Ich installiere NORDSTAR gerade zum ersten Mal und habe wenig
Erfahrung mit dem Terminal.

Lies bitte zuerst CLAUDE.md, README.de.md und INSTALL.de.md in
diesem Verzeichnis, damit du den Aufbau kennst.

Führe dann `npm run doctor` aus und erkläre mir in einfachen
Worten, was noch fehlt und wie ich es der Reihe nach behebe.

Bitte: erst erklären, dann handeln. Frag mich, bevor du Dateien
löschst oder überschreibst. Und sag mir, wenn ein Schritt etwas
kostet oder nach außen sichtbar wird.
Gute Fragen an den Assistenten

„Was bedeutet diese Fehlermeldung?" — Meldung einfach hineinkopieren.
„Warum bleibt die Seite nach dem Login leer?"
„Erklär mir, was npm run deploy:rules genau macht, bevor ich es ausführe."

Zwei Dinge, die du nicht aus der Hand geben solltest

Gib dem Assistenten niemals dein Google-Passwort — er braucht es nicht, und Anmeldungen im Browser musst du ohnehin selbst durchführen. Und lass ihn nichts in deinem Firebase-Projekt löschen, ohne dass du verstanden hast, was verschwindet.

Wenn etwas klemmt

Die Meldungen, die erfahrungsgemäß auftreten — im Wortlaut.

command not found: node  /  npm

Node.js ist nicht installiert, oder das Terminal war beim Installieren schon offen. Terminal schließen, neu öffnen, node --version erneut versuchen. Hilft das nicht, Schritt 01 wiederholen.

Missing or insufficient permissions

Die Zugriffsregeln sind noch nicht in deinem Projekt. Führe npm run deploy:rules aus und lade die Seite neu. Das ist der häufigste Grund für eine Anwendung, die lädt, aber leer bleibt.

auth/invalid-credential beim Anmelden

Entweder ist in Firebase die Anmeldeart E-Mail/Passwort nicht aktiviert (Schritt 03), oder npm run seed ist nie durchgelaufen. npm run doctor sagt dir, welches von beidem.

service-account.json nicht gefunden

Die Datei liegt nicht im richtigen Ordner oder heißt anders. Sie muss genau service-account.json heißen und direkt neben package.json liegen — nicht in einem Unterordner, nicht im Download-Ordner.

Die Seite bleibt weiß

Meist fehlen Werte in der Konfiguration. npm run doctor ausführen. Wenn dort alles grün ist, im Browser mit F12 die Entwicklerkonsole öffnen und die rote Meldung dort in die Suche oder an den Assistenten geben.

unauthenticated  /  auth_backend_unavailable

Zwei verschiedene Dinge. unauthenticated heißt: Deine Sitzung ist abgelaufen — einmal abmelden und neu anmelden. auth_backend_unavailable heißt: Der Server kann Anmeldetoken nicht prüfen, weil ihm die Zugangsdaten fehlen — lokal also service-account.json, bei einer Veröffentlichung die Umgebungsvariable FIREBASE_SERVICE_ACCOUNT.

Die Sprachsitzung verbindet sich nicht

Entweder fehlt die Proxy-Adresse, oder sie beginnt mit https:// statt wss://. Nach jeder Änderung an der Konfiguration muss npm run dev neu gestartet werden — die Werte werden nur beim Start gelesen.

Der Reiter „Users" bleibt leer

Das ist ein bekannter Fehler der Anwendung, kein Installationsproblem. Die Nutzerverwaltung über diese Oberfläche funktioniert derzeit nicht; Rollen lassen sich über das Seed-Skript setzen.

npm install bricht mit EACCES ab

Fehlende Schreibrechte. Auf dem Mac sudo voranstellen. Unter Windows die Git Bash als Administrator öffnen (Rechtsklick → Als Administrator ausführen).

NORDSTAR ist quelloffen unter der AGPL-3.0. Wer eine veränderte Fassung als Dienst für andere betreibt, muss deren Quelltext zugänglich machen; der Betrieb im eigenen Haus löst keine Pflicht aus. Die vollständigen Bedingungen stehen in der Datei LICENSE im Repository.

Diese Anleitung gehört zum Repository und wird mit ihm gepflegt.

Run NORDSTAR yourself

From an empty machine to a working coaching platform. Every step on its own, every click named. No prior experience needed — not even with a terminal.

~60 min the first time macOS & Windows Cost: €0 on the free tiers Google account required
00

What you end up with

So it is clear what the effort buys you.

A working coaching platform on your own machine, with a fictitious example company called Acme Cloud Solutions and five prepared logins — one per role. You can sign in and look around before changing anything.

LoginNameRoleWhat it shows
adminAlex AdminAdministratoruser management, company context
manager1Miriam OttManager, 2nd lineview across all teams
manager2Sven BauerManager, 1st lineteam coaching, forecast
aeNina KranzAccount Executiveown deals, voice coaching
seJonas ReiterSolution Engineertechnical qualification

The password is demo1234 for all of them.

Before you start

You need a Google account. Everything else — Node.js, Git — we install together in a moment. Nothing is paid for: Firebase and Gemini have free tiers that cover personal use. Only if you later want email notifications does the Google project need the paid Blaze plan — which still costs nothing at this usage level.

Just want a look?

It also works without a Google account: the platform runs entirely on your machine in emulator mode. Everything works except the spoken coaching session. See Shortcut without a Google account below.

01

Install Node.js and Git

Two tools the platform needs. One time only.

macOS
  1. Open nodejs.org and download the large green button marked LTS.
  2. Double-click the downloaded .pkg file and click through the installer.
  3. Git usually ships with macOS. If not, macOS offers to install the developer tools the first time you use it — click Install.
Windows
  1. Open nodejs.org and download the large green button marked LTS.
  2. Double-click the .msi file. Accept all defaults through to Finish.
  3. Also install Git for Windows with its defaults. It brings Git Bash, which we use as the terminal.
02

Open a terminal and get the project

A terminal is a window you type commands into. That is all it is.

macOS

Press + Space, type Terminal, press Enter. A window opens with a line waiting for your input.

Windows

Click Start, type Git Bash, press Enter. Deliberately use Git Bash rather than Command Prompt — the commands here are written for it.

First check that Node arrived. Type the command and press Enter:

node --version
Expected output (the number may differ)v22.14.0

If you get command not found, Node is not installed, or the terminal was already open during installation. Close it, open it again, try once more.

Now get the project. The first command moves into your Documents folder, the second downloads the code:

cd ~/Documents
git clone https://github.com/JonahNoel/nordstar.git
cd nordstar
No access yet?

The repository is private — without an invitation the command fails. Just get in touch with me directly, via WhatsApp or at heidbrink@3why.de, and tell me your GitHub username. I will add you, you get an invitation by email — after that the command above works.

On the first git clone GitHub asks you to sign in. That is expected.

Finally, download the libraries. This takes a minute or two:

npm install

Warnings about outdated packages are normal and harmless.

03

Create the Firebase project

This is where all data lives: users, deals, coaching sessions.

  1. Open the Firebase console and sign in with your Google account.
  2. Click Add project. Any name will do, for example nordstar-yourname. You can switch off Google Analytics — it is not used.
  3. Wait for the project to be ready, then click Continue.

Create the database

  1. In the left menu, Build → Firestore Database, then Create database.
  2. Choose eur3 (europe-west) as the location if you are in Europe.
  3. When asked about the mode, choose Start in production mode.
Important

Production mode means everything is locked at first. That is correct. In step 06 we deploy the proper access rules. If you pick test mode here, your database sits open on the internet for a month.

Enable sign-in

  1. Build → Authentication, then Get started.
  2. Click Email/Password in the list, set the upper toggle to Enabled, and Save.

No real email addresses are needed. Internally the app turns the login ae into ae@nordstar.app — that is just a technical wrapper.

Register a web app

  1. Click the gear icon at the top left, then Project settings.
  2. Scroll down to Your apps and click the </> icon.
  3. Give it a nickname, then Register app.
  4. A code block containing firebaseConfig appears. Keep this window open — you need those six values in step 05.
What the block looks likeconst firebaseConfig = { apiKey: "AIzaSyD…", authDomain: "nordstar-yourname.firebaseapp.com", projectId: "nordstar-yourname", storageBucket: "nordstar-yourname.firebasestorage.app", messagingSenderId: "123456789012", appId: "1:123456789012:web:abc…" };

Download the service account key

  1. Still in Project settings, open the Service accounts tab.
  2. Generate new private key, then Generate key. A .json file downloads.
  3. Rename it to service-account.json and move it into the nordstar project folder — the same place as package.json.
This file is a master key

Whoever holds it has full access to your Firebase project. Never share it, never post it in a chat, never upload it. The project is configured so it cannot be committed by accident.

04

Get a Gemini key

The language model that runs and scores the coaching conversations.

  1. Open aistudio.google.com/apikey and sign in with the same Google account.
  2. Click Create API key.
  3. If asked which project: pick the Firebase project from step 03 — it keeps everything together.
  4. Copy the key and keep it somewhere for a moment. It starts with AIza.
Treat it like a password

Anyone with this key can send requests to Google on your bill. Do not share it.

05

Run the setup wizard

It asks for the values and writes every configuration file itself.

Back in the terminal, inside the nordstar folder:

npm run setup

The wizard asks one question at a time. The first six values are in the firebaseConfig block from step 03 — each is the text between the quotation marks:

QuestionWhat to enter
apiKeythe value after apiKey:
authDomain…firebaseapp.com
projectIdthe project ID
storageBucket…firebasestorage.app
messagingSenderIdthe long number
appIdstarts with 1:
measurementId, VAPIDleave empty, skip with Enter
Gemini API keythe key from step 04
Cloud Run proxy URLleave empty — it arrives in step 08
everything elsepress Enter, the defaults are fine

At the end the wizard reports which files it wrote and lists what is still missing.

06

Deploy rules and create sample data

Without this step the app stays empty after login.

First install the Firebase command line tool and sign in. It opens your browser:

npm install -g firebase-tools
firebase login
macOS: permission denied

If the first command reports EACCES or permission denied, put sudo in front: sudo npm install -g firebase-tools. You will be asked for your Mac password.

Now deploy the access rules. They decide who may read which data:

npm run deploy:rules

And create the sample data — five users, one company profile, two deals:

npm run seed
07

Check, then start

Verify first, open second — it saves you searching in the dark.

The project ships with a self-check. It walks through every prerequisite and says plainly what is missing:

npm run doctor

A ! next to the voice proxy is correct at this point — that comes in step 08. A is followed by the exact command that fixes it.

Once the check passes, start the app:

npm run dev

Open http://localhost:3000 and sign in with ae and demo1234. You should see two deals.

The terminal is now occupied — the server runs there. Press Ctrl + C to stop it. Open a second terminal window for further commands.

Change the passwords now

The five demo logins are in this guide and in the repository. While the platform only runs on your machine that is harmless. Before you put it on the internet, change them under Admin Dashboard → Users.

08

Enable the voice feature

Optional, but it is the actual core of the product.

Everything works so far except spoken coaching. That needs a small relay service on Google Cloud which holds the Gemini key, so it never reaches the browser.

  1. Install the Google Cloud CLI and sign in with gcloud auth login.
  2. Insert your project ID and run the commands below.
# insert your project id
export PROJECT_ID=your-project-id

# store the Gemini key securely
echo -n "YOUR_GEMINI_KEY" | \
  gcloud secrets create GEMINI_API_KEY --data-file=- --replication-policy=automatic

gcloud secrets add-iam-policy-binding GEMINI_API_KEY \
  --member="serviceAccount:$(gcloud projects describe $PROJECT_ID \
    --format='value(projectNumber)')-compute@developer.gserviceaccount.com" \
  --role=roles/secretmanager.secretAccessor

# deploy the service
cd cloud-run
gcloud config set project $PROJECT_ID
gcloud run deploy nordstar-gemini-proxy \
  --source . --region europe-west3 --allow-unauthenticated \
  --set-env-vars FIREBASE_PROJECT_ID=$PROJECT_ID \
  --set-secrets GEMINI_API_KEY=GEMINI_API_KEY:latest

At the end an address starting with https:// is printed. Replace https with wss and store it by running the wizard once more:

cd ..
npm run setup

Existing values appear in square brackets and are kept by pressing Enter. Only the proxy URL needs the new address.

--allow-unauthenticated sounds worse than it is: browsers cannot attach Google credentials to a WebSocket handshake. The service checks for a valid sign-in token from your platform instead, and rejects anything else.

Shortcut without a Google account

For trying it out without creating anything.

Firebase can be simulated locally. You additionally need a Java runtime: on macOS brew install openjdk, on Windows from adoptium.net.

npm install
npm install -g firebase-tools

cp .env.example .env.local
echo "VITE_USE_FIREBASE_EMULATOR=true" >> .env.local

Then three terminal windows, one command each:

npm run emulators        # window 1
npm run seed:emulator    # window 2
npm run dev              # window 3

Sign in with ae / demo1234. Everything works except the voice session. The data lives in memory only and disappears when you stop the emulators.

Getting help from Claude Code

If you get stuck, an AI assistant can read along inside the project folder.

Claude Code is an assistant that runs in the terminal and can see your project files. The repository is prepared for it: it contains a CLAUDE.md file explaining the architecture, which the assistant reads on its own.

One-time setup

npm install -g @anthropic-ai/claude-code

Then type claude inside the project folder. On first start it walks you through signing in.

The opening message

Copy this text and send it as your first message. It tells the assistant what you are doing, where to look, and where its limits are:

I am installing NORDSTAR for the first time and have little
experience with the terminal.

Please read CLAUDE.md, README.md and INSTALL.md in this
directory first, so you know how the project is built.

Then run `npm run doctor` and explain in plain language what is
still missing and how to fix it, one thing at a time.

Please: explain before acting. Ask me before deleting or
overwriting files. And tell me when a step costs money or
becomes visible to others.
Two things to keep to yourself

Never give the assistant your Google password — it does not need one, and browser sign-ins are yours to do. And do not let it delete anything in your Firebase project before you understand what disappears.

When something breaks

The messages that actually come up, verbatim.

command not found: node  /  npm

Node.js is not installed, or the terminal was already open during installation. Close it, reopen it, try node --version again. If that does not help, repeat step 01.

Missing or insufficient permissions

The access rules are not in your project yet. Run npm run deploy:rules and reload the page. This is the most common reason for an app that loads but stays empty.

auth/invalid-credential on sign-in

Either Email/Password sign-in is not enabled in Firebase (step 03), or npm run seed never ran. npm run doctor tells you which.

service-account.json not found

The file is in the wrong folder or has a different name. It must be called exactly service-account.json and sit next to package.json — not in a subfolder, not in Downloads.

unauthenticated  /  auth_backend_unavailable

Two different things. unauthenticated means your session expired — sign out and back in. auth_backend_unavailable means the server cannot verify sign-in tokens because it lacks credentials — locally that is service-account.json, in a deployment the FIREBASE_SERVICE_ACCOUNT environment variable.

The voice session will not connect

Either the proxy address is missing, or it starts with https:// instead of wss://. After any configuration change npm run dev must be restarted — the values are only read at startup.

The "Users" tab stays empty

A known bug in the application, not an installation problem. User management through that screen does not currently work; roles can be set through the seed script.