diff --git a/README.md b/README.md
index 8c0ddb3..2ce28f5 100644
--- a/README.md
+++ b/README.md
@@ -1 +1,26 @@
-https://funnyeivske.github.io/Roesstad/
+# Røsstad Familietre
+
+**Nettsiden finner du her:** [https://funnyeivske.github.io/Roesstad/](https://funnyeivske.github.io/Roesstad/)
+
+## Om Nettsiden
+Dette er et digitalt samlingspunkt for Røsstad-familietreet. Nettsiden er designet for å bevare og visualisere familiens historie på en moderne og interaktiv måte.
+
+## Hvordan den fungerer
+
+### 1. Familietre (Hovedvisning)
+Her ser du selve slektstreet.
+- **Navigering:** Du kan dra i bakgrunnen for å flytte deg rundt, og zoome ut/inn.
+- **Personkort:** Klikk på en person for å sette dem i fokus.
+- **Legg til:** Bruk den store grønne knappen nede til høyre for å legge til nye familiemedlemmer.
+
+### 2. Kart
+Se hvor familien har sine røtter.
+- Når du legger til en person, kan du skrive inn et sted (f.eks. "Grimstad").
+- Personen vil da dukke opp som en markør på kartet.
+
+### 3. Tidslinje
+En kronologisk oversikt over familiens historie.
+- Her listes alle fødsler og dødsfall opp automatisk basert på informasjonen i treet.
+
+---
+*Laget med ❤️ for Røsstad-familien.*
diff --git a/Script.js b/Script.js
index 3fee2ed..59dca8b 100644
--- a/Script.js
+++ b/Script.js
@@ -21,13 +21,26 @@ const state = {
map: null
};
+// --- IMMEDIATE SETUP (UI Handlers) ---
+// This ensures buttons work even if Auth is slow
+setupTabs();
+setupZoom();
+setupModal();
+setupHelp();
+setupFAB();
+
// --- AUTHENTICATION ---
onAuthStateChanged(auth, (user) => {
if (user) {
state.user = user;
- initApp();
+ startDataListener();
} else {
- window.location.href = "index.html";
+ // Redirect to login if not authenticated
+ // Note: In local development with file://, this might trigger unexpectedly.
+ // For now, we assume index.html is the login page.
+ if (!window.location.pathname.endsWith('index.html') && !window.location.pathname.endsWith('/')) {
+ window.location.href = "index.html";
+ }
}
});
@@ -35,9 +48,8 @@ document.getElementById('btn-logout')?.addEventListener('click', () => {
signOut(auth).then(() => window.location.href = "index.html");
});
-// --- APP LOGIC ---
-function initApp() {
- // Start Data Listener
+// --- DATA LISTENER ---
+function startDataListener() {
const q = query(collection(db, 'familyMembers'));
onSnapshot(q, (snapshot) => {
state.people = snapshot.docs.map(d => ({ id: d.id, ...d.data() }));
@@ -50,11 +62,6 @@ function initApp() {
renderAll();
});
-
- // Setup Navigation
- setupTabs();
- setupZoom();
- setupModal();
}
function renderAll() {
@@ -74,7 +81,8 @@ function setupTabs() {
// Show View
document.querySelectorAll('.view-section').forEach(v => v.classList.add('hidden'));
const viewId = `view-${btn.dataset.view}`;
- document.getElementById(viewId).classList.remove('hidden');
+ const viewEl = document.getElementById(viewId);
+ if (viewEl) viewEl.classList.remove('hidden');
// Special handling for Map resize
if (btn.dataset.view === 'map' && state.map) {
@@ -97,7 +105,10 @@ function renderTree() {
childrenRow.innerHTML = '';
if (state.people.length === 0) {
- focusRow.innerHTML = ``;
+ focusRow.innerHTML = `