48 Commits
Author SHA1 Message Date
nh9961 57ba6fd8c5 docs: update AGENTS.md repository structure for views/ui/public
Build & Lint / build (push) Successful in 1m36s
2026-07-19 21:20:25 +00:00
nh9961 7f64eec207 feat(pwa): web manifest, icons, read-through entry cache
- Add manifest.webmanifest, generated 192/512 icons, theme-color, apple-touch-icon
- Cache entries in localStorage per user; hydrate on load before network refresh
- Single info toast when offline on cached data; cache cleared on logout
- Fix inaccurate local-first meta description
2026-07-19 21:19:43 +00:00
nh9961 767967f25d fix: unify day boundaries on device-local time, JSON import preview parity
- Limits/streaks/greeting now use device-local days (was hardcoded Europe/London),
  matching dashboard metrics; label copy updated
- JSON imports now go through the same preview/duplicate-detection modal as Excel
2026-07-19 21:12:02 +00:00
nh9961 9e8f3c55d6 perf: logbook memoization and pagination, debounced realtime, lazy exceljs
- Precompute per-entry spend/caffeine/sugar map; paginate ledger at 50 rows
- Debounce realtime refetches (500ms trailing) and suppress during bulk import
- Show import progress (Importing X of N)
- Dynamic-import exceljs: entry chunk 1640 -> 700 kB
- Skeleton placeholders for initial load on Overview/Trends/Logbook
2026-07-19 21:00:51 +00:00
nh9961 bb5750e928 feat(ui): unified motion language and interaction states
- Shared transition constants (view/modal/toast/tile) with standard ease-out
- MotionConfig reducedMotion=user plus CSS reduced-motion neutralizer
- Consistent hover/press/focus-visible states across all interactive classes
2026-07-19 20:45:47 +00:00
nh9961 3706021326 feat(ui): view-by-view UX redesign and accessibility pass
- Overview: limits hero with progress states, spend pill, primary quick-add, mobile FAB
- Logbook: day-grouped entries with subtotals, unified filter bar, Log again,
  human source labels
- Trends: unified chart cards, tick thinning, chart aria summaries, radiogroup
  forecast control
- Settings: sectioned layout with separated danger zone, ThemePicker aria fix
- EntryModal: fieldset grouping, Field primitive, safe date validation
- AuthView: autoComplete, password visibility toggle
- StatHint popover replacing title-only tooltips; mobile stacked import preview
- Remaining inline hex styles converted to theme tokens
2026-07-19 20:34:10 +00:00
nh9961 733c6cbae8 feat(ux): toast system, accessible modal wrapper, safer dialogs
- Global toast stack (success/error/info) replacing hidden notice/syncError
- Shared Modal: focus trap, Escape, focus restore, scroll lock; all dialogs migrated
- ConfirmDialog tone prop; limit-override now warning-styled
- Single-entry delete now requires confirmation, per-row busy spinner
- Onboarding no longer closes on failed save; inline error + skip option
2026-07-19 20:08:14 +00:00
nh9961 f8d06cbafb feat(ui): dark-mode token sweep, mobile nav safe-area and a11y polish
- Convert hardcoded light surfaces/borders/text in index.css to theme tokens
- Token-driven status cards, semantic colors, elevation shadows
- Mobile bottom nav: 20px icons, aria-current, safe-area inset padding
- Neutral dark pre-mount canvas fallback
2026-07-19 19:46:56 +00:00
nh9961 50c729eae7 refactor: decompose monolithic App.tsx into per-component files
- Extract views to src/components/views/ (Overview, Logbook, Trends, Settings, Auth)
- Extract standalone components (EntryModal, ImportPreviewModal, ConfirmDialog,
  Sidebar, TopBar, MobileNav, EntryLedger, FiltersPanel, QuickAddPanel, etc.)
- Move shared helpers to src/lib (dashboard, filters, userDisplay) and static
  data to src/data (accents, quickAdds)
- App.tsx now orchestration-only (2971 -> 777 lines); no behavior change
2026-07-19 19:31:40 +00:00
nh9961 2cd8dd5130 feat(ui): extend design tokens, add dark mode, add UI primitives
- Add warning/success token roles across light and dark themes
- Add Light/Dark/System theme mode (localStorage + Appwrite prefs)
- Derive dark token stacks from existing theme seeds
- Remove forced light app-shell background; dynamic color-scheme
- Add Button/Card/Field/Badge/EmptyState primitives under src/components/ui
2026-07-19 18:07:42 +00:00
nh9961 50783ccd45 ci: add --no-audit --no-fund for faster CI
Build & Lint / build (push) Successful in 40s
2026-07-04 23:49:46 +00:00
nh9961 916287c72a ci: add build & lint workflow
Build & Lint / build (push) Failing after 1m54s
2026-07-04 23:36:03 +00:00
nh9961andGitHub 9ab88d71d0 Merge pull request #4 from nh9961/nh9961/coupled-daily-limits-2662 2026-07-01 17:34:39 +00:00
Cursor Agentandnh9961 7a461af9ee Couple daily can and spend limits via usual can size
Link daily caps through the user's chosen standard can size (250/355/473ml)
and built-in prices. Onboarding asks for size and can ceiling with derived
spend preview. Settings syncs cans and spend bidirectionally. Forecast lock
button sets both limits together.

Co-authored-by: nh9961 <hello@nedhalksworth.com>
2026-07-01 14:45:45 +00:00
Ned HalksworthandGitHub 7f56274e65 Replace 'Tropical' with 'Iced Vanilla' in QUICK_ADDS 2026-05-29 17:19:22 +01:00
Ned Halksworth 50ee708295 remove AI mentions from readme 2026-05-29 12:59:16 +01:00
Ned HalksworthandGitHub 2c07f2c5b1 Update README.md 2026-05-29 12:55:12 +01:00
Ned HalksworthandGitHub b4a8bbb1df Merge pull request #2 from nh9961/cursor/fix-ios-barcode-scanner-581a
Fix barcode scanner on iOS Safari
2026-05-27 23:04:14 +01:00
Cursor AgentandNed Halksworth aa1bf1b21f Harden scanner startup and defer polyfill loading
- Fix waitForVideoReady race by re-checking after listeners and timing out
- Serialize iOS native scans with an in-flight guard and chained timeouts
- Lazy-load @undecaf/barcode-detector-polyfill only when scanning starts

Co-authored-by: Ned Halksworth <hello@nedhalksworth.com>
2026-05-27 22:01:48 +00:00
Cursor AgentandNed Halksworth 64584315e5 Fix barcode scanner on iOS Safari
iOS WebKit does not provide a reliable native Barcode Detection API, and
ZXing often failed due to strict camera constraints and video startup timing.

- Install @undecaf/barcode-detector-polyfill (ZBar WASM) on Apple devices
- Fall back through progressively looser getUserMedia constraints
- Wait for video metadata/playback before decoding frames
- Throttle native scans on iOS and tune ZXing retry intervals
- Defer scanner startup until the modal video element is mounted

Co-authored-by: Ned Halksworth <hello@nedhalksworth.com>
2026-05-27 19:51:08 +00:00
Ned Halksworth 4e5fa5d42e fix: fix fact the app stopped working for goodness sake 2026-05-27 19:10:57 +01:00
Ned eaef89f484 fix: remove OAuth login, fix JSX structure and sendPrompt/useMemo merge from ui-redo 2026-05-27 17:33:44 +00:00
Ned HalksworthandGitHub b57240136a Merge pull request #1 from nh9961/ui-redo
UI redo + remove broken OAuth
2026-05-27 18:20:25 +01:00
94a10ecec4 Potential fix for pull request finding
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
2026-05-27 18:19:44 +01:00
Ned c22945cd4e fix: remove broken OAuth login, scrub hardcoded project ID 2026-05-27 16:40:06 +00:00
Ned HalksworthandNed 23801f79d4 add mit license 2026-05-27 16:40:06 +00:00
Ned HalksworthandNed 7bc92a92d7 tidy build config and deps
strip ollama proxy from vite, add deployment html injection plugin,
bump zxing dep for barcode scanning, ignore deploy artifacts
2026-05-27 16:40:06 +00:00
Ned HalksworthandNed add2586cb1 rebuild theme system and restyle ui
flatten themes to 3 colors without categories, rewrite css in vanilla layers,
simplify onboarding flow, tighten greeting punctuation, adjust viewport meta
2026-05-27 16:40:06 +00:00
Ned HalksworthandNed cbdd98e133 rework app shell, strip coach hooks, wire barcode flow
rename state vars throughout, add barcode scanner trigger and draft flow,
drop coach navigation and session, add ForecastPoint type
2026-05-27 16:40:06 +00:00
Ned HalksworthandNed ea8b10a81f wire up barcode scanning with zxing
scanner modal, product preview, verified catalog with 12 red bull barcodes,
appwrite-backed user mappings, lookup pipeline with known/user/partial/unknown result
2026-05-27 16:40:06 +00:00
Ned HalksworthandNed cb375adbd6 swap coach table for barcode products in appwrite
replace chat collection with barcode_products table, seed verified products,
drop ollama env vars and types, prune setup docs
2026-05-27 16:40:06 +00:00
Ned HalksworthandNed 4c7d719e02 rm coach chat and ollama proxy
drop coach panel, session, chat store, and the limitsSummaryForCoach helper
2026-05-27 16:40:06 +00:00
Ned HalksworthandNed 08372febfe feat: enhance Appwrite integration and chat functionality
- Added support for encrypted coach chats with a new `coach_chats` collection in the Appwrite database.
- Updated `.env.example` to include `OLLAMA_API_KEY`, `OLLAMA_MODEL`, and `APPWRITE_API_KEY` for server-side configurations.
- Introduced a setup script in `package.json` for initializing Appwrite database tables.
- Enhanced the Vite configuration to proxy requests to the Ollama API.
- Updated the main application structure to accommodate new chat features and improved theme management.
- Refined CSS styles for better UI consistency and added new components for chat functionality.
2026-05-27 16:40:02 +00:00
Ned HalksworthandNed bd3e970286 intial commit 2026-05-27 16:40:02 +00:00
Ned 012b900716 fix: require VITE_APPWRITE_PROJECT_ID at build time, fix TypeScript types 2026-05-27 15:19:05 +00:00
Ned 5cbe8f0b13 fix: remove broken OAuth login, scrub hardcoded project ID, prep for public release 2026-05-27 13:42:21 +00:00
Ned 18983b8d36 docs: add README for public release 2026-05-27 13:36:33 +00:00
9961 90bae9cbd4 Merge pull request 'feat: integrate barcode scanning functionality and create AGENTS.MD' (#2) from barcode into main
Reviewed-on: #2
2026-05-27 13:34:14 +00:00
Ned Halksworth ec9ea9d1f9 feat: integrate barcode scanning functionality and enhance Appwrite setup
- Added a new `barcode_products` collection to the Appwrite setup for managing barcode data.
- Implemented barcode scanning feature with a dedicated modal for scanning and adding products.
- Introduced new components for barcode product preview and management.
- Updated the setup script to seed verified barcode products from a JSON file.
- Enhanced the application state management to handle barcode-related actions and user interactions.
2026-05-27 14:29:22 +01:00
Ned Halksworth 38deca4562 feat: add AGENTS.MD and CLAUDE.MD 2026-05-27 14:28:46 +01:00
Ned Halksworth 1a282543e4 feat: update login and signup process 2026-05-23 22:01:25 +01:00
Ned Halksworth 0db81bddd5 feat: implement user limits and onboarding features
- Added user limits management with daily can and spend limits.
- Integrated onboarding flow to guide users through setting limits.
- Enhanced greeting messages to reflect user limits and violations.
- Updated CSS for new limit-related components and improved UI consistency.
- Refactored coach session to utilize user limits in interactions.
2026-05-23 21:17:36 +01:00
9961 2be7609172 Merge pull request 'Refactor coach to plain Appwrite storage with integrated overview UI.' (#1) from cursor/coach-integration-plain-storage into main
Reviewed-on: #1
2026-05-23 19:25:53 +00:00
Ned HalksworthandCursor dc9fbf496d Refactor coach to plain Appwrite storage with integrated overview UI.
Remove client-side encryption, migrate coach_chats schema, fix the Ollama proxy, and embed coach on overview alongside the dedicated tab.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-23 20:25:21 +01:00
Ned d312321ffa feat: refactor coach chat to ChatGPT-style Material You design
- Replaced Gemini-style glass/blue aesthetic with clean Material You pink theme
- ChatGPT-style message layout: user right-aligned, coach left-aligned with avatars
- User avatar shows initials, coach avatar shows brain icon
- Chat bubble design: rounded cards matching app theme (no glass/blur effects)
- Clean textarea input with Enter to send, Shift+Enter for newlines
- ChatGPT-style empty state with suggestion chips
- Typing indicator with bouncing dots animation
- Sidebar uses Material You surface/container colors
- Status bar shows model name and ready/thinking state
- Error messages styled as Material You error containers
- Bottom hint text: 'coach can make mistakes'
- All colors use CSS custom properties for accent theme consistency
2026-05-22 22:01:26 +00:00
Ned Halksworth 084acfa84a feat: enhance Appwrite integration and chat functionality
- Added support for encrypted coach chats with a new `coach_chats` collection in the Appwrite database.
- Updated `.env.example` to include `OLLAMA_API_KEY`, `OLLAMA_MODEL`, and `APPWRITE_API_KEY` for server-side configurations.
- Introduced a setup script in `package.json` for initializing Appwrite database tables.
- Enhanced the Vite configuration to proxy requests to the Ollama API.
- Updated the main application structure to accommodate new chat features and improved theme management.
- Refined CSS styles for better UI consistency and added new components for chat functionality.
2026-05-22 22:39:38 +01:00
Ned Halksworth 1c279ccb6c feat: update typography and color scheme; integrate Google Sans fonts
- Replaced "SF Pro Text" and related fonts with "Google Sans", "Google Sans Text", and "Product Sans" in CSS and Tailwind configuration.
- Adjusted color variables for primary, secondary, and error states to enhance UI consistency.
- Modified background colors and button styles for improved aesthetics and usability.
- Introduced new utility classes for layout and component styling in the CSS.
2026-05-15 23:22:12 +01:00
Ned Halksworth f108214df8 intial commit 2026-05-15 21:36:13 +01:00