100 Commits

Author SHA1 Message Date
b1bb05e879 Fix knowledge base loader to handle list format embeddings
Handle both dict and list formats in load_knowledge_base function to fix AttributeError
2026-02-16 19:06:31 -06:00
Bongobutt
b3dab95cf9 Please enter the commit message for your changes. Lines starting 2026-02-16 18:58:35 -06:00
Bongobutt
d5737e97bf fixe 2026-02-16 18:52:38 -06:00
Bongobutt
ad0faf72e1 i sniffed the wrong week to quit picking glue. 2026-02-16 18:51:15 -06:00
832c1e1a23 i bliggleblorfed 2026-02-16 14:00:18 -06:00
c693572069 ms potato head 2026-02-16 13:44:33 -06:00
028bdfa4f9 mr potato head 2026-02-16 13:42:24 -06:00
a395f221cc i quit the wrong week the pick sniffing glue 2026-02-16 13:29:44 -06:00
f140f8f75c no 2026-02-16 13:16:18 -06:00
d262d80199 debug: add API call logging to medication take action 2026-02-16 12:46:22 -06:00
382e62cee7 fix: add missing await in parse retry call 2026-02-16 12:40:25 -06:00
79fe51392d fix(api): auto-determine scheduled_time when logging medications 2026-02-16 12:37:08 -06:00
7cf0681deb debug: add logging and partial name matching for med context lookup 2026-02-16 12:30:25 -06:00
a53187d6a9 fix: make AI parser async to prevent Discord heartbeat blocking 2026-02-16 12:24:13 -06:00
9cc2f19ce8 fix: include scheduled_time when logging medication intake from reminders 2026-02-16 12:13:25 -06:00
398e1ce334 fix: correct embedding model name from l2 to v2 2026-02-16 11:32:06 -06:00
d407a4bd9d Add knowledge base RAG module for book Q&A 2026-02-16 11:27:48 -06:00
85f7b6faac Add knowledge base RAG module for book Q&A
- Create knowledge.py handler with dynamic book selection
- Support list/select/query actions for multiple books
- Implement vector search with cosine similarity
- Add knowledge detection to AI parser config
- Cache embeddings per-book for performance
- Add numpy dependency for vector operations
2026-02-16 11:23:57 -06:00
0f270dbba2 Add knowledge base RAG module for book Q&A
- Create knowledge.py handler with dynamic book selection
- Support list/select/query actions for multiple books
- Implement vector search with cosine similarity
- Add knowledge detection to AI parser config
- Cache embeddings per-book for performance
2026-02-16 11:20:22 -06:00
362716e093 fix(timer): replace TimerIcon with TomatoIcon in expanded view 2026-02-16 07:13:37 -06:00
b5c13dc36b feat(timer): make pomodoro timer prominent in header with tomato styling
- Changed timer button to red/tomato themed pill button
- Added red background, border, and hover effects
- Shows remaining time when running
- Green pulsing indicator when active
- Made TomatoIcon slightly larger (22px) for visibility
2026-02-16 07:05:55 -06:00
4623605167 fix(timer): use RefreshIcon instead of RotateCcwIcon 2026-02-16 06:56:34 -06:00
452967cf5b feat(timer): add subtle pomodoro timer to header
- Added PomodoroTimer component with work/break modes
- Timer appears as icon in header, expands to full widget on click
- Supports 25m work, 5m short break, 15m long break cycles
- Shows progress bar, cycle dots, and mode switcher
- Plays sound when timer completes
- Can be minimized while running (shows pulsing indicator)
2026-02-16 06:53:06 -06:00
b50e0b91fe feat(templates): add category-based organization
- Added 'category' column to routine_templates table
- Categorized all 12 templates into: Daily Routines, Getting Things Done, Health & Body, Errands
- Added /api/templates/categories endpoint to list unique categories
- Updated /api/templates to support filtering by category query param
- Redesigned templates page with collapsible accordion sections by category
- Categories are sorted in logical order (Daily → Work → Health → Errands)
- All categories expanded by default for easy browsing
2026-02-16 06:38:49 -06:00
1621141e76 fix(bot): use duration_minutes instead of duration_seconds when creating steps
- API expects duration_minutes field, not duration_seconds
- Fixed in both create_with_steps and add_steps actions
2026-02-16 06:16:02 -06:00
20f995119c feat(bot): add delete action for medications and routines
- Added delete action to medications handler with confirmation flow
- Added delete action to routines handler with confirmation flow
- Updated AI config with delete examples for both meds and routines
- Added 'delete', 'remove', 'get rid of' to action recognition
2026-02-16 06:04:19 -06:00
7d7d6fb3a0 fix(bot): fix syntax error in f-string with backslash 2026-02-16 05:57:45 -06:00
c903363f6e feat(bot): comprehensive natural language command parsing
- Enhanced AI prompts with time/frequency conversion rules and 20+ examples
- Added smart medication name resolution and confirmation flows
- New medication commands: today, refills, snooze, adherence
- New routine commands: create_with_steps, add_steps, steps, schedule
- Added active session awareness with shortcuts (done, skip, pause, resume)
- Confirmation handling for destructive/create actions
- Improved help message with natural language examples
2026-02-16 05:53:40 -06:00
16d89d07f6 bug fixes 2026-02-16 05:34:27 -06:00
12bbc5c0b4 bot improvements 2026-02-16 04:49:31 -06:00
f8903f74cf discord bot fixes 2026-02-16 04:28:44 -06:00
704da59f9c bug fixes 2026-02-16 00:46:34 -06:00
91ed4015da fix 3 2026-02-16 00:23:56 -06:00
bb6c9c3aa9 fixes 2026-02-16 00:19:31 -06:00
6a372aae03 Add dark mode variants to all dashboard pages 2026-02-16 00:09:29 -06:00
d8fde5b516 added dark mode 2026-02-15 23:11:33 -06:00
e97347ff65 Fix timeline layout: shorter window, overlap lanes, single scrollbar
- Dynamic start/end hours computed from actual events (+1h padding each
  side) instead of hard-coded 5 AM–11 PM; falls back to 7 AM–10 PM
  when no events are scheduled
- Lane algorithm (greedy interval scheduling) prevents overlapping events
  from hiding each other; routines and med groups share the same lane
  pool so conflicts split the column width side by side
- Outer container locked to h-screen overflow-hidden to eliminate the
  page-level scrollbar; timeline inner scrollbar hidden via
  [&::-webkit-scrollbar]:hidden + scrollbarWidth:none

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-15 22:37:31 -06:00
782b1d2931 UI fixes 2026-02-15 22:19:48 -06:00
749f734aff Add Brili-style scheduled routines timeline view
Replaces the flat routine card list with a day-oriented timeline showing
scheduled routines at their time slots, with week strip navigation and
a live "now" indicator. Adds bulk schedules API endpoint.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-15 18:34:03 -06:00
bb01f0213f added routine timeline thingy 2026-02-15 18:03:19 -06:00
1cb929a776 Switch Discord notifications from webhook to user ID DMs
Uses the existing bot token to send DMs to users by their Discord user ID
instead of posting to a channel webhook.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-15 02:14:46 -06:00
c29ec8e210 fixes yo 2026-02-15 01:51:34 -06:00
ba8c6e9050 Here's a summary of all fixes:
Issue #4 — Skip not clearing med
  File: synculous-client/src/app/dashboard/medications/page.tsx                                           Root cause: Skipped medications were routed to the "Upcoming" section (status === 'skipped' in the
  upcoming condition), so they appeared as if still pending.
  Fix: Removed || status === 'skipped' from the grouping condition. Now skipped meds go to the "Due"
  section where they properly render with the "Skipped" label — same pattern as taken meds showing
  "Taken".

  Issue #5 — "Invested -359m in yourself"

  Files: api/routes/routines.py, synculous-client/src/app/dashboard/page.tsx,
  synculous-client/src/app/dashboard/stats/page.tsx
  Root cause: Session duration was calculated by comparing a naive UTC created_at from PostgreSQL with
  the user's local time (after stripping timezone). For users behind UTC (e.g., CST/UTC-6), this
  produced negative durations (~-359 minutes ≈ -6 hours offset).
  Fix: Added _make_aware_utc() helper that treats naive datetimes as UTC before comparison. Also clamped
   durations to max(0, ...) on both backend and frontend formatTime as a safety net.

  Issue #6 — Push notifications not working

  File: api/routes/notifications.py
  Root cause: Subscribing to push notifications created a push_subscriptions row but never set
  web_push_enabled: true in the notifications table. The scheduler daemon checks web_push_enabled before
   sending, so push notifications were always skipped.
  Fix: When subscribing, also call notifications.setNotificationSettings() to enable web_push_enabled.
  When unsubscribing (and no subscriptions remain), disable it.
2026-02-15 00:48:43 -06:00
3ccd11153c bug fixes 2026-02-14 20:06:39 -06:00
04ea648950 updated readme 2026-02-14 17:28:59 -06:00
fb480eacb2 ui update and some backend functionality adding in accordance with research on adhd and ux design 2026-02-14 17:21:37 -06:00
4d3a9fbd54 lots of changes leave me alone its better now 2026-02-14 04:35:40 -06:00
97a166f5aa Fix medication system and rename to Synculous.
- Add all 14 missing database tables (medications, med_logs, routines, etc.)
- Rewrite medication scheduling: support specific days, every N days, as-needed (PRN)
- Fix taken_times matching: match by created_at date, not scheduled_time string
- Fix adherence calculation: taken / expected doses, not taken / (taken + skipped)
- Add formatSchedule() helper for readable display
- Update client types and API layer
- Rename brilli-ins-client → synculous-client
- Make client PWA: add manifest, service worker, icons
- Bind dev server to 0.0.0.0 for network access
- Fix SVG icon bugs in Icons.tsx
- Add .dockerignore for client npm caching

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2026-02-13 03:23:38 -06:00
3e1134575b First synculous 2 Big-Pickle pass. 2026-02-12 23:07:48 -06:00
25d05e0e86 first commit 2026-02-12 22:11:52 -06:00