From dd7932ea4e8ed0126221e725c8323a0c986eb032 Mon Sep 17 00:00:00 2001 From: haerikimmm Date: Mon, 15 Jun 2026 19:15:31 +0900 Subject: [PATCH] feat: Firebase integration, 3-step new trip form, full country list, and UI polish MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Connect Firestore for journal entries and visited countries (real-time onSnapshot) - Connect Firebase Storage for photo uploads - Add NewEntryForm: 3-step flow (trip details → photos → reflection questions) - Expand country list to full world-atlas dataset (~240 countries) matching the map - Filter city suggestions by selected country in both NewEntryForm and EditForm - Redesign StatsPanel as floating horizontal card with donut chart and progress bar - Center timeline layout with responsive side margins - Replace "entry" language with "trip" throughout (Add trip, Save trip, Delete trip) - Remove footer from Layout Co-Authored-By: Claude Sonnet 4.6 --- src/App.svelte | 1 + src/lib/firebase.js | 21 +- src/lib/layout/Layout.svelte | 6 +- src/lib/layout/selection.svelte.js | 40 ++- src/lib/shared/countries.js | 83 ++++- src/lib/stores/journalStore.js | 116 ++----- src/lib/timeline/DeleteConfirm.svelte | 2 +- src/lib/timeline/EditForm.svelte | 95 ++++-- src/lib/timeline/NewEntryForm.svelte | 454 +++++++++++++++++++++++++ src/lib/timeline/PhotoEditor.svelte | 37 +- src/lib/timeline/TimelineView.svelte | 110 +++--- src/lib/world-map/StatsPanel.svelte | 463 ++++++++++---------------- 12 files changed, 884 insertions(+), 544 deletions(-) create mode 100644 src/lib/timeline/NewEntryForm.svelte diff --git a/src/App.svelte b/src/App.svelte index cf337df..6aa1ff8 100644 --- a/src/App.svelte +++ b/src/App.svelte @@ -101,6 +101,7 @@ flex-direction: row; min-width: 0; height: 100%; + position: relative; } .map-area { diff --git a/src/lib/firebase.js b/src/lib/firebase.js index 758573c..644d57d 100644 --- a/src/lib/firebase.js +++ b/src/lib/firebase.js @@ -1,18 +1,19 @@ -import { initializeApp } from "firebase/app"; -import { getAuth, GoogleAuthProvider } from "firebase/auth"; -import { getFirestore } from "firebase/firestore"; +import { initializeApp } from 'firebase/app'; +import { getAuth, GoogleAuthProvider } from 'firebase/auth'; +import { getFirestore } from 'firebase/firestore'; +import { getStorage } from 'firebase/storage'; const firebaseConfig = { - apiKey: import.meta.env.VITE_FIREBASE_API_KEY, - authDomain: import.meta.env.VITE_FIREBASE_AUTH_DOMAIN, - projectId: import.meta.env.VITE_FIREBASE_PROJECT_ID, - storageBucket: import.meta.env.VITE_FIREBASE_STORAGE_BUCKET, + apiKey: import.meta.env.VITE_FIREBASE_API_KEY, + authDomain: import.meta.env.VITE_FIREBASE_AUTH_DOMAIN, + projectId: import.meta.env.VITE_FIREBASE_PROJECT_ID, + storageBucket: import.meta.env.VITE_FIREBASE_STORAGE_BUCKET, messagingSenderId: import.meta.env.VITE_FIREBASE_MESSAGING_SENDER_ID, - appId: import.meta.env.VITE_FIREBASE_APP_ID, + appId: import.meta.env.VITE_FIREBASE_APP_ID, }; -const app = initializeApp(firebaseConfig); - +export const app = initializeApp(firebaseConfig); export const auth = getAuth(app); export const db = getFirestore(app); +export const storage = getStorage(app); export const googleProvider = new GoogleAuthProvider(); diff --git a/src/lib/layout/Layout.svelte b/src/lib/layout/Layout.svelte index ea23cf4..90849fa 100644 --- a/src/lib/layout/Layout.svelte +++ b/src/lib/layout/Layout.svelte @@ -1,6 +1,5 @@ @@ -12,7 +11,6 @@
{@render children()}
-