import { useState, useEffect, useCallback, useContext, useRef } from "react"; import { AuthContext } from "./AuthContext"; import { Search } from "lucide-react"; // Import pages/views import Login from "./pages/Login"; import Register from "./pages/Register"; import ProfilePage from "./pages/ProfilePage"; // Import refactored components import CreateModal from "./components/CreateModal"; import BeanForm from "./components/BeanForm"; import BrewForm from "./components/BrewForm"; import BeanDetail from "./components/BeanDetail"; import BrewCard from "./components/BrewCard"; import BottomNav from "./components/BottomNav"; import IosPromptModal from "./components/IosPromptModal"; import UpdatePrompt from "./components/UpdatePrompt"; import SyncIndicator from "./components/SyncIndicator"; // Import constants import { METHODS, METHOD_LABELS, METHOD_ICONS, METHOD_COLORS } from "./constants"; // ─── Storage helpers ─── const STORAGE_KEY = "coffee-logbook-data"; const defaultData = { beans: [], brewLogs: [], lastSyncedAt: null }; const storage = { get: async (key) => { try { const val = localStorage.getItem(key); return val ? { value: val } : null; } catch { return null; } }, set: async (key, val) => { try { localStorage.setItem(key, val); } catch (e) { console.error("Storage set failed:", e); } } }; async function loadData() { try { const result = await storage.get(STORAGE_KEY); if (result) { const parsed = JSON.parse(result.value); return { beans: parsed.beans || [], brewLogs: parsed.brewLogs || [], lastSyncedAt: parsed.lastSyncedAt || null }; } return defaultData; } catch { return defaultData; } } async function saveData(data) { try { await storage.set(STORAGE_KEY, JSON.stringify(data)); } catch (e) { console.error("Save failed:", e); } } const uid = () => Date.now().toString(36) + Math.random().toString(36).slice(2, 7); const LoadingScreen = () => (
Don't have an account?{' '}
Already have an account?{' '}
Tap the + button to log your first brew.
Tap + to add your first coffee bean.
{brewSearchQuery ? "Try refining your search terms or filters." : "Start brewing and log your recipes here."}