Public Access
- backend/app/security.py: require_session() now auto-authenticates by returning the first family_profile_id from the DB. No cookie or password needed. Falls back to "bootstrap" sentinel if no FamilyProfile exists. Admin routes (require_admin) still protected by bearer token. - frontend/src/api/index.ts: removed 401→/login redirect interceptor - frontend/src/App.tsx: removed Sign out button, removed /login route and Login page import - Login page kept on disk (unused) for potential future re-enablement
59 lines
2.0 KiB
TypeScript
59 lines
2.0 KiB
TypeScript
import { BrowserRouter, Routes, Route, Link, useLocation } from 'react-router-dom'
|
|
import { QueryClient, QueryClientProvider } from '@tanstack/react-query'
|
|
import { ErrorBoundary } from './components/ErrorBoundary'
|
|
import Dashboard from './pages/Dashboard'
|
|
import MealDetail from './pages/MealDetail'
|
|
import Pantry from './pages/Pantry'
|
|
import ShoppingList from './pages/ShoppingList'
|
|
|
|
const queryClient = new QueryClient()
|
|
|
|
function Navigation() {
|
|
const location = useLocation()
|
|
const isActive = (path: string) => location.pathname === path
|
|
|
|
const linkClass = (path: string) =>
|
|
`inline-flex items-center px-3 py-2 text-sm font-medium rounded-lg transition-colors ${
|
|
isActive(path)
|
|
? 'text-primary-700 bg-primary-50'
|
|
: 'text-surface-600 hover:bg-surface-100'
|
|
}`
|
|
|
|
return (
|
|
<nav className="bg-white border-b border-surface-200 sticky top-0 z-50">
|
|
<div className="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
|
|
<div className="flex justify-between h-14">
|
|
<div className="flex items-center space-x-1">
|
|
<Link to="/" className={linkClass('/')}>MealPlanner</Link>
|
|
<Link to="/pantry" className={linkClass('/pantry')}>Pantry</Link>
|
|
<Link to="/shopping-list" className={linkClass('/shopping-list')}>Shopping List</Link>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</nav>
|
|
)
|
|
}
|
|
|
|
function App() {
|
|
return (
|
|
<ErrorBoundary>
|
|
<QueryClientProvider client={queryClient}>
|
|
<BrowserRouter>
|
|
<div className="min-h-screen bg-surface-50">
|
|
<Navigation />
|
|
<main className="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-8">
|
|
<Routes>
|
|
<Route path="/" element={<Dashboard />} />
|
|
<Route path="/meals/:id" element={<MealDetail />} />
|
|
<Route path="/pantry" element={<Pantry />} />
|
|
<Route path="/shopping-list" element={<ShoppingList />} />
|
|
</Routes>
|
|
</main>
|
|
</div>
|
|
</BrowserRouter>
|
|
</QueryClientProvider>
|
|
</ErrorBoundary>
|
|
)
|
|
}
|
|
|
|
export default App |