2026-05-03 19:51:57 -05:00
|
|
|
<!DOCTYPE html>
|
|
|
|
|
<html lang="en" class="dark">
|
|
|
|
|
<head>
|
|
|
|
|
<meta charset="UTF-8">
|
|
|
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
2026-07-06 12:54:29 -05:00
|
|
|
<link rel="icon" type="image/svg+xml" href="/brand/favicon.svg">
|
|
|
|
|
<link rel="alternate icon" href="/brand/favicon.ico">
|
2026-07-05 17:18:31 -05:00
|
|
|
<link rel="apple-touch-icon" href="/brand/apple-touch-icon.png">
|
|
|
|
|
<meta name="theme-color" content="#101417">
|
2026-07-05 17:50:11 -05:00
|
|
|
<meta name="description" content="Calm command for household money.">
|
|
|
|
|
<meta property="og:title" content="Bill Tracker">
|
|
|
|
|
<meta property="og:description" content="Calm command for household money.">
|
2026-07-06 12:54:29 -05:00
|
|
|
<meta property="og:image" content="/brand/social-preview.png">
|
|
|
|
|
<meta property="og:image:type" content="image/png">
|
|
|
|
|
<meta property="og:image:width" content="1200">
|
|
|
|
|
<meta property="og:image:height" content="630">
|
2026-07-05 17:50:11 -05:00
|
|
|
<meta name="twitter:card" content="summary_large_image">
|
|
|
|
|
<meta name="twitter:title" content="Bill Tracker">
|
|
|
|
|
<meta name="twitter:description" content="Calm command for household money.">
|
2026-07-06 12:54:29 -05:00
|
|
|
<meta name="twitter:image" content="/brand/social-preview.png">
|
refactor: component splits, PWA support, CommandPalette
Component Splits:
- AdminPage.jsx: 1,906 -> 82 lines (logic moved to client/components/admin/ — 9 files)
- DataPage.jsx: 3,132 -> 60 lines (logic moved to client/components/data/ — 8 files)
- TrackerPage.jsx: 2,566 -> 2,132 lines (MonthlyStateDialog, StartingAmountsEditDialog, PaymentModal)
PWA:
- vite-plugin-pwa installed with NetworkFirst caching for API routes
- Square PWA icons (192x192, 512x512, apple-touch-icon)
- theme-color, apple meta tags, touch icon in index.html
- Build generates dist/sw.js + Workbox runtime
CommandPalette:
- Navigation commands, Add bill action, month jumps
- Grouped results with empty/filtered states
2026-05-28 20:53:22 -05:00
|
|
|
<meta name="mobile-web-app-capable" content="yes">
|
|
|
|
|
<meta name="apple-mobile-web-app-capable" content="yes">
|
|
|
|
|
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent">
|
2026-07-05 17:18:31 -05:00
|
|
|
<meta name="apple-mobile-web-app-title" content="Bill Tracker">
|
2026-05-03 19:51:57 -05:00
|
|
|
<title>Bill Tracker</title>
|
2026-07-10 17:53:27 -05:00
|
|
|
<!-- Pre-bundle theme apply (external so CSP stays script-src 'self'): a
|
|
|
|
|
classic script blocks parsing, so the class lands before first paint. -->
|
|
|
|
|
<script src="/theme-init.js"></script>
|
2026-05-03 19:51:57 -05:00
|
|
|
</head>
|
|
|
|
|
<body>
|
|
|
|
|
<div id="root"></div>
|
refactor(ts): convert the app shell to TSX (B7)
App.tsx (routing + QueryClient), main.tsx (entry; index.html updated to
main.tsx), useAuth.tsx (typed AuthContextValue/User + MeResponse; uses the safe
useContext()||defaults pattern so no `never` trap), and the layout components
(Layout, Sidebar, NavPill, BrandBlock — NavItem type, LucideIcon-typed nav
config, casts for the untyped overdue/simplefin API responses). TS caught a dead
prop: App passed mainContentId to TrackerPage, which takes no params — removed.
typecheck 0, lint 0 errors (39 warns), build green, 17/17 e2e probe.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-04 19:49:57 -05:00
|
|
|
<script type="module" src="/client/main.tsx"></script>
|
2026-05-03 19:51:57 -05:00
|
|
|
</body>
|
|
|
|
|
</html>
|