Files
qtalker---/frontend/src/App.tsx
Indiana 3b33b5d6f6 feat: presence beyond the tab — PWA manifest and the Ghost Log recap
Usability wave Workstream C (#5, #7):
- manifest.webmanifest with existing 192/512/180 icons, linked in
  index.html with theme-color aligned to #07070d; no service worker.
- GET /api/seances/recent: last 12 of the seeker's own séances with
  entity, per-kind event counts (one GROUP BY) and up to 3 spirit
  echoes (one windowed query) — no per-session N+1.
- /log Ghost Log page: cards with GhostGlyph, relative in-fiction
  timestamps, counts and echo lines; LOG link in the séance topbar;
  en/es i18n parity.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-28 17:19:55 +00:00

46 lines
1.7 KiB
TypeScript

// App shell: router + providers + the global CRT overlay (scanlines/vignette)
// that sits above every page like old glass.
import { BrowserRouter, Route, Routes } from 'react-router-dom'
import { AuthProvider } from './state/auth'
import { HauntingLayer } from './components/HauntingLayer'
import { GhostLog } from './components/GhostLog'
import { CodexEntityPage } from './pages/CodexEntityPage'
import { CodexPage } from './pages/CodexPage'
import { DevicesPage } from './pages/DevicesPage'
import { EnterPage } from './pages/EnterPage'
import { GhostLogPage } from './pages/GhostLogPage'
import { InventoryPage } from './pages/InventoryPage'
import { LandingPage } from './pages/LandingPage'
import { SeancePage } from './pages/SeancePage'
import { ShopPage } from './pages/ShopPage'
function App() {
return (
<AuthProvider>
<BrowserRouter>
<div className="crt-overlay" aria-hidden="true">
<div className="crt-scanlines" />
<div className="crt-vignette" />
</div>
<HauntingLayer />
<GhostLog />
<Routes>
<Route path="/" element={<LandingPage />} />
<Route path="/enter" element={<EnterPage />} />
<Route path="/seance" element={<SeancePage />} />
<Route path="/log" element={<GhostLogPage />} />
<Route path="/codex" element={<CodexPage />} />
<Route path="/codex/:id" element={<CodexEntityPage />} />
<Route path="/shop" element={<ShopPage />} />
<Route path="/inventory" element={<InventoryPage />} />
<Route path="/devices" element={<DevicesPage />} />
<Route path="*" element={<LandingPage />} />
</Routes>
</BrowserRouter>
</AuthProvider>
)
}
export default App