🔥 Firebase Setup Guide

Steg-för-steg guide för att koppla Bjerred Skylt till Firebase

Introduktion

Denna guide beskriver hur du kopplar Bjerred Skylt-projektet till Firebase för att lagra trivselregler och användarfeedback i realtid.

📋 Ditt Firebase-projekt

Projektnamn: skylt
Projekt-ID: skylt-e0c45
Console: console.firebase.google.com/project/skylt-e0c45

Firebase Console för projektet skylt-e0c45

Firebase Console - Din projektöversikt för "skylt"

1 Registrera en webbapp i Firebase

Först måste du registrera en webbapp i ditt Firebase-projekt för att få konfigurationen.

1.1 Gå till Projektinställningar

  1. Gå till Firebase Console
  2. Klicka på kugghjulet ⚙️ bredvid "Project Overview" i vänstra menyn
  3. Välj "Project settings" (Projektinställningar)
Firebase Project Settings - Projektinställningar

Firebase Project Settings - Så här ser sidan ut

1.2 Hitta "Your apps" (Dina appar)

📍 Var hittar jag "Your apps"?

Scrolla ner på Project Settings-sidan! "Your apps" finns längst ner på sidan, under alla andra inställningar.

  1. Scrolla ner på Project Settings-sidan
  2. Leta efter rubriken "Your apps" (Dina appar) längst ned
  3. Om det står "There are no apps in your project" behöver du registrera en ny app (se nästa steg)

1.3 Registrera en webbapp

I "Your apps"-sektionen:

  1. Klicka på webb-ikonen </> (den tredje ikonen - ser ut som HTML-taggar)
  2. Ge appen ett smeknamn (t.ex. "Bjerred Skylt Web")
  3. Firebase Hosting - BEHÖVS INTE! Du kan lämna "Also set up Firebase Hosting" okryssat eftersom du redan har GitHub Pages.
  4. Klicka "Register app" (Registrera app)
Add Firebase to your web app - Registrera webbapp

Registrera din webbapp - Ge den ett namn och klicka "Register app"

💡 Om Firebase Hosting

Firebase Hosting behövs INTE när du redan har GitHub Pages! Firebase Hosting är bara ett alternativt sätt att publicera din webbplats.

Om du kryssade i det av misstag: Ingen fara! Du kan ignorera alla Hosting-relaterade steg. Det påverkar inte Firebase-databasen.

1.4 Kopiera konfigurationen

Efter registrering visas ett kodblock med din Firebase-konfiguration:

Firebase SDK konfiguration

Här visas din Firebase-konfiguration - Kopiera värdena!

const firebaseConfig = {
  apiKey: "AIzaSy...",
  authDomain: "skylt-e0c45.firebaseapp.com",
  projectId: "skylt-e0c45",
  storageBucket: "skylt-e0c45.firebasestorage.app",
  messagingSenderId: "123...",
  appId: "1:123..."
};
✓ Kopiera dessa värden!

Kopiera värdena för apiKey, messagingSenderId och appId - du behöver dem i nästa steg (Steg 2).

1.5 Gå vidare - Ignorera Hosting-stegen

Efter att du kopierat konfigurationen:

  1. Om Firebase visar steg om "Install Firebase CLI" eller "Deploy to Firebase Hosting" - klicka bara "Continue to console" eller "Skip this step"
  2. Du behöver INTE installera Firebase CLI
  3. Du behöver INTE köra npm install firebase
  4. Du behöver INTE köra firebase deploy
⚠️ Viktigt: Hoppa över Hosting-stegen!

Eftersom du använder GitHub Pages för att hosta din webbplats behöver du bara Firebase för databasen (Firestore).

Klicka dig förbi alla Hosting-steg tills du kommer tillbaka till Firebase Console.

📍 Hitta konfigurationen senare

Om du behöver hitta konfigurationen igen:

  1. Gå till Project Settings (kugghjulet)
  2. Scrolla ner till "Your apps"
  3. Klicka på din webbapp
  4. Under "SDK setup and configuration", välj "Config"
  5. Där visas ditt firebaseConfig-objekt

1.6 Din app är nu registrerad!

Om du ser en sida som liknar bilden nedan är din webbapp färdigregistrerad. Grattis! Du befinner dig nu på Project Settings-sidan och kan se din app under "Your apps".

Din registrerade webbapp i Firebase Console

Din webbapp "Bjerreds_skylt" är nu registrerad i Firebase!

✓ Vad du ser på skärmen

På denna sida ser du:

  • App nickname: Namnet du gav din app (t.ex. "Bjerreds_skylt")
  • App ID: Ett unikt ID för din app
  • SDK setup and configuration: Här kan du växla mellan "npm" och "CDN" för att se konfigurationen i olika format
  • firebaseConfig: Ditt konfigurationsobjekt med alla värden
💡 Konfigurationen är redan sparad!

Om du följt guiden har jag redan sparat din konfiguration i filen firebase-config.js i ditt projekt. Du behöver inte kopiera värdena igen!

Nästa steg: Nu ska vi aktivera Firestore Database - själva databasen där röster och förslag kommer lagras. Fortsätt till Steg 3!

2 Konfigurationen är klar!

✓ Detta steg är redan klart!

Din Firebase-konfiguration har sparats i filen firebase-config.js:

const firebaseConfig = {
    apiKey: "AIzaSyBbAX6EFxbW1VIcSYQ3Zqbr3v733sGMYD8",
    authDomain: "skylt-e0c45.firebaseapp.com",
    projectId: "skylt-e0c45",
    storageBucket: "skylt-e0c45.firebasestorage.app",
    messagingSenderId: "653653642598",
    appId: "1:653653642598:web:29e332c87fed1cd9f34ca7"
};

Filen index.html har också uppdaterats för att ladda Firebase SDK. Hoppa direkt till Steg 3!

3 Aktivera Firestore Database

⚠️ VIKTIGT - Detta steg måste göras i Firebase Console!

Nu ska du aktivera själva databasen i Firebase Console. Utan detta steg kan inte appen spara några röster eller förslag!

3.1 Navigera till Firestore Database

  1. I Firebase Console, klicka på "Build" i vänstra menyn
  2. Välj "Firestore Database"
  3. Klicka på den blå knappen "Create database"

3.2 Välj Security Rules (Säkerhetsläge)

Nu ser du dialogen "Create a database". Här ska du välja hur säkerhetsreglerna ska fungera från början:

Create a database - Välj säkerhetsläge

Dialogen "Create a database" - Välj säkerhetsläge för din databas

✓ Vad du ser på skärmen

Dialogen visar två alternativ för "Secure rules for Cloud Firestore":

  • Start in production mode - Databasen är låst från början. Ingen kan läsa eller skriva utan att du först lägger till regler. (Säkrare, men kräver att du konfigurerar regler innan appen fungerar)
  • Start in test mode - Databasen är öppen i 30 dagar. Alla kan läsa och skriva. (Enklare för testning, men osäkert för produktion)
💡 Vilken ska du välja?

Rekommendation: Välj "Start in production mode"

Vi kommer ändå att konfigurera egna Security Rules i Steg 5, så det spelar ingen stor roll vilket du väljer. Men "production mode" är säkrare som utgångspunkt.

3.3 Vad du ska göra nu

  1. Välj "Start in production mode" (rekommenderas)
  2. Klicka på den blå knappen "Next"
⏭️ Nästa steg

Efter att du klickat "Next" kommer du till nästa dialog där du ska välja plats (location) för databasen. Ta en skärmdump och fortsätt följa guiden!

3.4 Problem? Tillbaka på Overview-sidan?

Om du hade problem med att välja plats, eller om du hamnade tillbaka på Overview-sidan, är det troligt att databasen ändå skapades! Så här kontrollerar du:

Firebase Console Overview - Projektöversikt

Firebase Console Overview - Din projektöversikt

✓ Vad du ser på Overview-sidan

Du är nu på: https://console.firebase.google.com/u/0/project/skylt-e0c45/overview

På denna sida ser du:

  • "Project Overview" - Rubriken längst upp till vänster
  • Vänstermenyn - Med alternativ som "Build", "Run", "Analytics" etc.
  • "Get started..." - Genvägar för att lägga till appar eller funktioner
  • Din webbapp - Om den visas, är den registrerad

3.5 Kontrollera om Firestore Database är aktiverad

Gör så här för att kontrollera och eventuellt aktivera databasen:

  1. Titta i vänstermenyn - Leta efter "Build"
    (Om du inte ser "Build", klicka på hamburgermenyn ☰ längst upp till vänster)
  2. Klicka på "Build" för att expandera undermenyn
  3. Klicka på "Firestore Database"
📍 Direktlänk till Firestore Database

Du kan också gå direkt till: https://console.firebase.google.com/u/0/project/skylt-e0c45/firestore

3.6 Vad ser du på Firestore Database-sidan?

När du kommer till Firestore Database-sidan finns det två möjligheter:

Om du ser... Vad det betyder Vad du ska göra
"Create database"-knapp Databasen är INTE aktiverad ännu Klicka "Create database" och följ stegen ovan
En tom databas med flikar "Data", "Rules", "Indexes" Databasen ÄR aktiverad! 🎉 Fortsätt till nästa steg (Security Rules)
⚠️ Om du fortfarande har problem

Om "Create database"-dialogen inte fungerar, prova att:

  1. Ladda om sidan (F5 eller Ctrl+R)
  2. Prova en annan webbläsare (Chrome rekommenderas)
  3. Rensa webbläsarens cache
  4. Kontrollera att du är inloggad på rätt Google-konto

3.7 Välj plats (Location) för databasen

Efter att du valt säkerhetsläge kommer dialogen för att välja plats:

Välj plats för databasen

Välj geografisk plats för din Firestore-databas

📍 Vilken plats ska du välja?

Rekommenderat för Sverige:

  • europe-west1 (Belgien) - Närmast Sverige, bäst prestanda
  • europe-north1 (Finland) - Också bra alternativ
  1. Välj europe-west1 i dropdown-listan
  2. Klicka på "Enable" eller "Create"

3.8 Production Mode bekräftelse

Efter att du valt plats ser du en bekräftelse om Production Mode:

Production mode bekräftelse

Bekräftelse av Production Mode-inställningar

3.9 Databasen är klar! 🎉

När databasen skapats kommer du till Firestore Database-sidan med en tom databas:

Firestore Database är klar

Din Firestore Database är nu aktiverad och klar att användas!

✓ Grattis! Databasen är aktiverad!

Du befinner dig nu på: https://console.firebase.google.com/u/0/project/skylt-e0c45/firestore/databases/-default-/data

Vad du ser på skärmen:

  • Flikarna "Data", "Rules", "Indexes", "Extensions" - Olika delar av databasen
  • "+ Start collection" - Knapp för att lägga till data manuellt
  • Tom databas - Normalt! Appen kommer lägga till data automatiskt
⚠️ VIKTIGT: Databasen är låst!

Eftersom du valde "Production mode" är databasen låst som standard. Ingen kan läsa eller skriva till den ännu!

Nästa steg: Vi måste konfigurera Security Rules (Steg 5) för att låta appen läsa och skriva data.

Datastruktur för projektet

Projektet använder följande collection-struktur som redan är förberedd i script.js:

Collection Dokument-ID Fält
rules rule-1, rule-2, etc. textSv (string)
textEn (string)
icon (string)
votes.up (number)
votes.down (number)
suggestions Auto-genererat ruleId (string)
userName (string)
newText (string)
timestamp (timestamp)

4 Lägg till Firebase SDK i index.html

Öppna index.html och lägg till Firebase SDK före din egen script-tagg (<script src="script.js">).

4.1 Lägg till Firebase SDK-skript

Lägg till följande rader precis före </body>-taggen:

<!-- =======================================================================
     FIREBASE SDK
     Lägg till dessa FÖRE script.js
     ======================================================================= -->

<!-- Firebase App (grundläggande - krävs alltid) -->
<script src="https://www.gstatic.com/firebasejs/10.7.0/firebase-app-compat.js"></script>

<!-- Firebase Firestore (för databas) -->
<script src="https://www.gstatic.com/firebasejs/10.7.0/firebase-firestore-compat.js"></script>

<!-- Firebase konfiguration och initialisering -->
<script>
    // Firebase-konfiguration (hämtad från Firebase Console)
    const firebaseConfig = {
        apiKey: "DIN-API-KEY-HÄR",
        authDomain: "skylt-e0c45.firebaseapp.com",
        projectId: "skylt-e0c45",
        storageBucket: "skylt-e0c45.appspot.com",
        messagingSenderId: "DITT-SENDER-ID",
        appId: "DITT-APP-ID"
    };

    // Initiera Firebase
    firebase.initializeApp(firebaseConfig);

    // Gör Firestore-databasen tillgänglig globalt
    const db = firebase.firestore();

    console.log("Firebase initierad!");
</script>

<!-- Din egen JavaScript-fil (EFTER Firebase) -->
<script src="script.js"></script>
💡 Tips

Ersätt "DIN-API-KEY-HÄR" och de andra platsmarkörerna med värdena du fick från Firebase Console i Steg 2.

5 Konfigurera Firebase Security Rules

Security Rules bestämmer vem som kan läsa och skriva till din databas. Just nu är databasen helt låst - ingen kan använda den!

5.1 Du är nu på Rules-sidan

Du befinner dig på: https://console.firebase.google.com/u/0/project/skylt-e0c45/firestore/databases/-default-/security/rules

Firebase Security Rules-sidan

Firebase Security Rules - Här konfigurerar du vem som får läsa och skriva till databasen

✓ Vad du ser på skärmen

På Rules-sidan ser du:

  • En kodredigerare - Här skriver du säkerhetsreglerna
  • Nuvarande regler - Förmodligen något som allow read, write: if false; (blockerar allt)
  • "Publish"-knapp - För att aktivera dina ändringar
  • Rules Playground - För att testa regler (valfritt)
⚠️ Varför är databasen låst?

Eftersom du valde "Production mode" innehåller reglerna troligen:

rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read, write: if false;  // ← Blockerar ALLT!
    }
  }
}

if false betyder att ingen får läsa eller skriva - databasen är helt stängd!

5.2 Vad du ska göra

  1. Markera all text i kodredigeraren (Ctrl+A)
  2. Ta bort allt (Delete eller Backspace)
  3. Klistra in de nya reglerna nedan (Ctrl+V)
  4. Klicka på "Publish"-knappen

5.3 Kopiera dessa regler:

rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    
    // Regler för "rules"-collection
    // Alla kan läsa, alla kan uppdatera röster
    match /rules/{ruleId} {
      allow read: if true;
      
      // Tillåt endast uppdatering av votes-fältet
      allow update: if request.resource.data.diff(resource.data).affectedKeys()
                        .hasOnly(['votes']);
    }
    
    // Regler för "suggestions"-collection
    // Alla kan läsa och skriva förslag
    match /suggestions/{suggestionId} {
      allow read: if true;
      allow create: if request.resource.data.keys().hasAll(
        ['ruleId', 'userName', 'newText', 'timestamp']
      );
    }
  }
}
⚠️ Produktionsvarning

Dessa regler tillåter vem som helst att rösta och skicka förslag. För en produktionsmiljö med högre säkerhetskrav, överväg att lägga till rate limiting eller autentisering.

5.4 Reglerna är publicerade! 🎉

Efter att du klickat "Publish" ser du att reglerna är aktiva:

Security Rules publicerade

Security Rules är nu publicerade och aktiva!

✅ Security Rules är klara!

Dina nya regler är nu aktiva. Databasen är nu öppen för:

  • Läsning - Appen kan hämta data från rules-collection
  • Skrivning - Appen kan spara röster och förslag

5.5 Problem: "Missing or insufficient permissions"

Om du testar att skriva till en collection som inte finns definierad i reglerna (t.ex. test-collection) får du felet:

❌ FEL: FirebaseError: Missing or insufficient permissions.

⚠️ Varför händer detta?

De första reglerna vi skapade (i steg 5.3) tillät endast rules och suggestions collections:

  • rules-collection → tillåten
  • suggestions-collection → tillåten
  • test-collection → INTE definierad = blockerad!

5.6 Lösning: Öppna upp reglerna för utveckling

För att kunna testa och utveckla fritt uppdaterade vi Security Rules till att tillåta alla collections:

rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    
    // Tillåt alla collections för test och utveckling
    match /{document=**} {
      allow read, write: if true;
    }
  }
}
Uppdaterade Security Rules - Tillåt alla collections

Uppdaterade Security Rules som tillåter alla collections

✅ Nu fungerar alla collections!

Med dessa nya regler kan du:

  • Läsa och skriva till vilken collection som helst
  • Testa fritt under utveckling
  • Skapa nya collections utan att ändra reglerna
⚠️ Viktigt för produktion!

Reglerna allow read, write: if true; är öppna för alla - vem som helst kan läsa och skriva till din databas!

Innan du går live: Byt tillbaka till mer restriktiva regler som endast tillåter de collections din app behöver.

6 🎉 Databasen är klar - Testa appen!

✅ GRATTIS! Firebase-kopplingen är klar!

Du har slutfört alla nödvändiga steg:

  • ✅ Webbapp registrerad i Firebase
  • ✅ Firebase-konfiguration sparad i firebase-config.js
  • ✅ Firebase SDK tillagd i index.html
  • ✅ Firestore Database aktiverad
  • ✅ Security Rules publicerade

Databasen är nu redo att användas!

6.1 Testa att Firebase fungerar

Öppna din app lokalt och testa:

  1. Öppna index.html i webbläsaren (dubbelklicka på filen)
  2. Tryck F12 för att öppna utvecklarverktyg
  3. Klicka på fliken "Console"
  4. Du ska se meddelandet: "Firebase initierad! Projekt: skylt-e0c45"
Firebase är initierad - Console visar meddelande

Firebase är initierad! Console visar "Firebase initierad! Projekt: skylt-e0c45"

✅ Firebase är initierad!

Om du ser meddelandet "Firebase initierad! Projekt: skylt-e0c45" i Console betyder det att:

  • Firebase SDK är korrekt inladdad
  • Konfigurationen i firebase-config.js är korrekt
  • Appen har kontakt med Firebase-projektet

6.2 Testa att databasen fungerar (Frontend ↔ Backend)

Nu ska vi verifiera att appen faktiskt kan läsa och skriva till Firestore-databasen. Öppna Console (F12) och kör följande test:

Test 1: Skriv testdata till databasen

Kopiera och klistra in denna kod i Console, tryck sedan Enter:

// TEST: Skriv testdata till Firestore
db.collection('test').doc('testdoc').set({
    message: 'Hej från Bjerred Skylt!',
    timestamp: new Date().toISOString()
}).then(() => {
    console.log('✅ SUCCESS! Data skriven till Firestore!');
}).catch((error) => {
    console.error('❌ FEL:', error);
});

Förväntat resultat: ✅ SUCCESS! Data skriven till Firestore!

Test 2: Läs testdata från databasen

Kopiera och klistra in denna kod i Console:

// TEST: Läs testdata från Firestore
db.collection('test').doc('testdoc').get().then((doc) => {
    if (doc.exists) {
        console.log('✅ SUCCESS! Data läst från Firestore:', doc.data());
    } else {
        console.log('❌ Dokumentet finns inte');
    }
}).catch((error) => {
    console.error('❌ FEL:', error);
});

Förväntat resultat: ✅ SUCCESS! Data läst från Firestore: {message: "Hej från Bjerred Skylt!", timestamp: "..."}

🎉 Om båda testerna fungerar

Grattis! Frontend och Backend är nu kopplade! Din app kan både läsa och skriva till Firestore-databasen.

⚠️ Om du får felmeddelande

Om du ser ❌ FEL: FirebaseError: Missing or insufficient permissions:

  • Security Rules blockerar åtkomst till test-collection
  • Vi behöver uppdatera reglerna för att tillåta test-collection
  • Eller så kan du testa med rules-collection istället

7 Aktivera Firebase-sparning i script.js

För att feedback från användare ska sparas till Firebase behöver script.js uppdateras. Funktionen submitFeedback() hanterar all feedback.

✅ UPPDATERING GENOMFÖRD!

script.js har uppdaterats för att spara feedback till Firebase. Följande ändringar gjordes i submitFeedback()-funktionen:

7.1 Vad sparas till Firebase?

Användaraktion Collection i Firebase Data som sparas
"Bra regel!" feedback_good ruleId - Vilken regel
ruleText - Regeltexten
userName - Användarens namn
timestamp - Tidsstämpel
"Byt ut" suggestions ruleId - Vilken regel
ruleText - Ursprunglig regeltext
userName - Användarens namn
newText - Föreslagen ny text
timestamp - Tidsstämpel

7.2 Koden som lades till

I submitFeedback()-funktionen lades följande Firebase-anrop till:

För "Bra regel!"-feedback:

// Spara "Bra regel!"-feedback till Firebase
if (typeof db !== 'undefined') {
    db.collection('feedback_good').add({
        ruleId: currentRule.id,
        ruleText: state.language === 'sv' ? currentRule.textSv : currentRule.textEn,
        userName: userName,
        timestamp: firebase.firestore.FieldValue.serverTimestamp()
    });
}

För "Byt ut"-förslag:

// Spara "Byt ut"-förslag till Firebase
if (typeof db !== 'undefined') {
    db.collection('suggestions').add({
        ruleId: currentRule.id,
        ruleText: state.language === 'sv' ? currentRule.textSv : currentRule.textEn,
        userName: userName,
        newText: newRuleText,
        timestamp: firebase.firestore.FieldValue.serverTimestamp()
    });
}

7.3 Var ser du feedback i Firebase Console?

Gå till: https://console.firebase.google.com/u/0/project/skylt-e0c45/firestore/databases/-default-/data

Där hittar du:

⚠️ Glöm inte att pusha till GitHub!

Efter att script.js uppdaterats måste du pusha ändringarna till GitHub för att GitHub Pages-versionen ska få Firebase-sparning.

8 Admin-sida för att visa feedback

✅ UPPDATERING: Admin-sida skapad!

En ny fil admin.html har skapats för att visa all feedback som samlats in.

8.1 Vad gör admin-sidan?

Admin-sidan hämtar och visar:

8.2 Hur når man admin-sidan?

En diskret länk (📋-ikon) har lagts till i nedre vänstra hörnet av huvudsidan, bredvid GitHub-länken.

Direkt länk: https://kentlundgren.github.io/Bjerred-skylt/admin.html

8.3 Vad visas för varje feedback?

Typ Information som visas
"Bra regel!" Användarnamn, regelnummer, regeltext, tidsstämpel
Ändringsförslag Användarnamn, ursprunglig regel, föreslagen ny text, tidsstämpel

8.4 Tekniska detaljer

Admin-sidan:

⚠️ Säkerhet

Admin-sidan är publik (vem som helst kan se den). Om du vill begränsa åtkomsten kan du senare lägga till Firebase Authentication.

8.5 ✅ Det fungerar!

Här ser vi admin-sidan med feedback som samlats in från besökare:

Admin-sidan visar feedback

Bilden visar: Admin-sidan med statistik (antal "Bra regel!" och ändringsförslag), samt listan över all feedback med användarnamn, regeltext och tidsstämpel.

9 Hur Frontend och Backend samarbetar

Nu när allt fungerar, låt oss förstå hur de olika delarna samarbetar:

9.1 Översikt av dataflödet

┌─────────────────────────────────────────────────────────────────────┐
│                        ANVÄNDAREN                                    │
│                  (besöker webbsidan)                                │
└─────────────────────────────────────────────────────────────────────┘
                              │
                              ▼
┌─────────────────────────────────────────────────────────────────────┐
│                     FRONTEND (GitHub Pages)                         │
│  ┌─────────────┐  ┌─────────────┐  ┌─────────────────────────────┐ │
│  │ index.html  │  │ styles.css  │  │ script.js                   │ │
│  │ (struktur)  │  │ (utseende)  │  │ (funktionalitet + Firebase) │ │
│  └─────────────┘  └─────────────┘  └─────────────────────────────┘ │
│                                               │                      │
│                                               │ firebase.firestore() │
└───────────────────────────────────────────────│─────────────────────┘
                                                │
                                                ▼
┌─────────────────────────────────────────────────────────────────────┐
│                     BACKEND (Firebase)                              │
│  ┌─────────────────────────────────────────────────────────────┐   │
│  │              Firestore Database                              │   │
│  │  ┌──────────────────┐  ┌──────────────────┐                 │   │
│  │  │  feedback_good   │  │   suggestions    │                 │   │
│  │  │  (Bra regel!)    │  │  (Byt ut-förslag)│                 │   │
│  │  └──────────────────┘  └──────────────────┘                 │   │
│  └─────────────────────────────────────────────────────────────┘   │
└─────────────────────────────────────────────────────────────────────┘
                

9.2 Steg-för-steg: Vad händer när en användare ger feedback?

  1. Användaren klickar "Bra regel!"
    script.js fångar klicket och öppnar feedback-modalen.
  2. Användaren fyller i namn och klickar "Skicka"
    Funktionen submitFeedback() anropas.
  3. Frontend skickar data till Firebase
    db.collection('feedback_good').add({...}) skickar data över internet.
  4. Firebase lagrar data
    Firestore sparar dokumentet med automatiskt ID och server-tidsstämpel.
  5. Firebase bekräftar
    .then()-callback körs och visar "✅ Firebase: ..." i console.

9.3 Steg-för-steg: Vad händer på admin-sidan?

  1. Admin-sidan laddas
    admin.html kör loadAllFeedback() automatiskt.
  2. Frontend frågar Firebase
    db.collection('feedback_good').orderBy('timestamp', 'desc').get()
  3. Firebase returnerar data
    Alla dokument i collection:en skickas tillbaka.
  4. Frontend visar data
    JavaScript bygger HTML-kort för varje feedback och visar dem.

9.4 Varför behövs ingen server?

Traditionellt behöver man en backend-server (t.ex. Node.js, Python) för att hantera databaser. Firebase är en "Backend-as-a-Service" (BaaS) som eliminerar detta:

10 Nollställa databasen (ta bort testdata)

Efter testning vill du kanske ta bort all testdata och börja om från början.

⚠️ Varning!

Att nollställa databasen tar bort ALL data permanent. Detta kan inte ångras!

10.1 Metod 1: Via Admin-sidan (rekommenderas)

Admin-sidan (admin.html) har en "🗑️ Nollställ"-knapp längst ner. Klicka på den och bekräfta för att ta bort all feedback.

10.2 Metod 2: Via Firebase Console

  1. Gå till Firestore Database
  2. Klicka på collection:en du vill ta bort (t.ex. feedback_good)
  3. Klicka på de tre prickarna (⋮) bredvid collection-namnet
  4. Välj "Delete collection"
  5. Skriv collection-namnet för att bekräfta
  6. Upprepa för andra collections (suggestions, test)

10.3 Metod 3: Via webbläsarens Console

Öppna Developer Tools (F12) på din sida och kör:

// Ta bort alla dokument i 'feedback_good'
db.collection('feedback_good').get().then(snapshot => {
    snapshot.forEach(doc => {
        doc.ref.delete();
    });
    console.log('✅ feedback_good tömd!');
});

// Ta bort alla dokument i 'suggestions'
db.collection('suggestions').get().then(snapshot => {
    snapshot.forEach(doc => {
        doc.ref.delete();
    });
    console.log('✅ suggestions tömd!');
});

10.4 Teknisk förklaring: Hur fungerar borttagning?

Firestore har ingen "DELETE ALL"-funktion. Istället måste man:

  1. Hämta alla dokument - .get() returnerar alla dokument i en collection
  2. Loopa igenom - .forEach() går igenom varje dokument
  3. Ta bort individuellt - .delete() tar bort ett dokument i taget

OBS: Om du har väldigt många dokument (tusentals) bör du använda "batch delete" eller Firebase CLI för bättre prestanda.

11 Lägg till initial data i Firestore (valfritt)

Nu ska vi lägga till trivselreglerna i databasen. Du kan göra detta manuellt i Firebase Console eller köra ett skript.

Alternativ A: Manuellt via Firebase Console

  1. Gå till Firestore Database
  2. Klicka "Starta samling" (Start collection)
  3. Ange rules som Collection ID
  4. Lägg till dokument med ID rule-1
  5. Lägg till fälten enligt tabellen i Steg 3
  6. Upprepa för alla 11 regler

Alternativ B: Köra ett initieringsskript

Öppna webbläsarens utvecklarverktyg (F12) på din sida och kör följande i Console-fliken:

// Kör detta EN GÅNG för att lägga till alla regler i Firestore
async function initializeRulesInFirestore() {
    const rules = [
        {
            id: 'rule-1',
            textSv: 'Bastun är en plats för avkoppling, tala dämpat och njut av stillheten.',
            textEn: 'The sauna is a place for relaxation; keep your voice down and enjoy the tranquility.',
            icon: 'volume-2',
            votes: { up: 0, down: 0 }
        },
        {
            id: 'rule-2',
            textSv: 'Badkläder är inte tillåtna i bastun.',
            textEn: 'Swimwear is not allowed in the sauna.',
            icon: 'droplets',
            votes: { up: 0, down: 0 }
        },
        // ... lägg till resten av reglerna
    ];
    
    for (const rule of rules) {
        await db.collection('rules').doc(rule.id).set({
            textSv: rule.textSv,
            textEn: rule.textEn,
            icon: rule.icon,
            votes: rule.votes
        });
        console.log(`Tillagd: ${rule.id}`);
    }
    
    console.log('Alla regler tillagda!');
}

// Kör funktionen
initializeRulesInFirestore();

🔧 Felsökning

Vanliga problem

Problem Lösning
"firebase is not defined" Firebase SDK-skripten måste komma före din kod. Kontrollera ordningen i <script>-taggarna.
"Permission denied" Security Rules blockerar åtkomst. Kontrollera att du publicerat reglerna i Steg 5.
"Invalid API key" Dubbelkolla att du kopierat rätt API-nyckel från Firebase Console.
Data sparas inte Öppna Console (F12) och leta efter felmeddelanden. Kontrollera att db är definierad.