Commit Graph

149 Commits

Author SHA1 Message Date
Yusuf Suleman
9fb0133c45 feat: use ConfettiSwiftUI package instead of custom confetti
All checks were successful
Security Checks / dependency-audit (push) Successful in 12s
Security Checks / secret-scanning (push) Successful in 3s
Security Checks / dockerfile-lint (push) Successful in 3s
- import ConfettiSwiftUI
- .confettiCannon modifier on MainTabView
- 80 particles, circles/crosses/rectangles, 7 colors
- Trigger: confettiTrigger += 1
- Removed all custom confetti code (ConfettiView, PhysicsModifier, etc.)

Requires: Add package in Xcode → https://github.com/simibac/ConfettiSwiftUI

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-03 11:05:41 -05:00
Yusuf Suleman
2476c31d8c feat: ReactFlux-style confetti — ceiling drop, 200 particles, full screen
All checks were successful
Security Checks / dependency-audit (push) Successful in 14s
Security Checks / secret-scanning (push) Successful in 3s
Security Checks / dockerfile-lint (push) Successful in 4s
Exact replica of ReactFlux confetti:
- 200 tiny rectangles scattered across full screen width
- Drop from above the screen, fall down with gravity
- Gentle horizontal drift + 3D rotation (tumbling effect)
- 10 vivid colors matching ReactFlux palette
- Staggered delays (0-0.4s) for natural rain effect
- 1.5-2.5s fall duration, fade at 80%
- No overlay/checkmark — just pure confetti rain
- Haptic feedback on trigger

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-03 10:48:53 -05:00
Yusuf Suleman
aa4ce6875a fix: PhysicsModifier body function + Angle type
All checks were successful
Security Checks / dependency-audit (push) Successful in 14s
Security Checks / secret-scanning (push) Successful in 4s
Security Checks / dockerfile-lint (push) Successful in 3s
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-03 10:31:12 -05:00
Yusuf Suleman
c6f6e6f6b9 feat: canvas-confetti exact replica + Quick Add callback fix
All checks were successful
Security Checks / dependency-audit (push) Successful in 13s
Security Checks / secret-scanning (push) Successful in 3s
Security Checks / dockerfile-lint (push) Successful in 4s
Confetti (matches ReactFlux/canvas-confetti exactly):
- 100 particles from bottom-right corner
- angle=120°, spread=70° (upper-left fan)
- Real physics: velocity + gravity
- 3 shapes: circles, rectangles, stars
- 12 vibrant colors
- Particles drift, spin, fade naturally
- Checkmark + 'Added!' overlay

Quick Add fix:
- onFoodAdded callback wired through FoodSearchView → AddFoodSheet
- Both AI Chat and Quick Add now dismiss → switch to fitness → confetti

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-03 10:24:55 -05:00
Yusuf Suleman
ff9e6101f8 fix: ambiguous range operator in confetti
All checks were successful
Security Checks / dependency-audit (push) Successful in 12s
Security Checks / secret-scanning (push) Successful in 3s
Security Checks / dockerfile-lint (push) Successful in 3s
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-03 10:12:10 -05:00
Yusuf Suleman
1dfa05fe4f feat: canvas-confetti style celebration + Quick Add callback
All checks were successful
Security Checks / dependency-audit (push) Successful in 13s
Security Checks / secret-scanning (push) Successful in 4s
Security Checks / dockerfile-lint (push) Successful in 3s
Confetti:
- 60 particles in 3 layered bursts (like canvas-confetti)
- Circles, rectangles, stars in 12 vibrant colors
- Physics: drift, spin, gravity, fade, scale
- Checkmark + 'Added!' text with spring animation
- Haptic feedback

Quick Add:
- FoodSearchView + AddFoodSheet now have onFoodAdded callback
- After adding from Quick Add: dismiss → fitness tab → confetti

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-03 09:43:13 -05:00
Yusuf Suleman
b01409628f feat: calorie tap → fitness, confetti on food add, reduce dashboard padding
All checks were successful
Security Checks / dependency-audit (push) Successful in 13s
Security Checks / secret-scanning (push) Successful in 4s
Security Checks / dockerfile-lint (push) Successful in 3s
- Calorie widget taps switches to Fitness tab
- After adding food: dismiss sheet, switch to Fitness, confetti animation
- Confetti: emoji particles falling + checkmark + haptic feedback
- Dashboard top padding reduced from 60pt to 16pt
- HomeView accepts selectedTab binding

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-03 09:34:48 -05:00
Yusuf Suleman
04fbdc9a9b cleanup: remove debug logging from assistant
All checks were successful
Security Checks / dependency-audit (push) Successful in 13s
Security Checks / secret-scanning (push) Successful in 4s
Security Checks / dockerfile-lint (push) Successful in 3s
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-03 09:26:45 -05:00
Yusuf Suleman
b9d80fb6b6 fix: warm sheet header, welcome state for AI chat, consistent colors
All checks were successful
Security Checks / dependency-audit (push) Successful in 13s
Security Checks / secret-scanning (push) Successful in 4s
Security Checks / dockerfile-lint (push) Successful in 3s
- Custom sheet header with warm canvas background (no white bar)
- Tab picker styled as warm pills (not default segmented control)
- AI Chat welcome state: sparkles icon + 'What did you eat?' prompt
- All backgrounds use canvas color consistently

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-03 09:18:21 -05:00
Yusuf Suleman
39d7628c9e fix: half-width animated calorie widget, remove duplicate +, warm colors
All checks were successful
Security Checks / dependency-audit (push) Successful in 13s
Security Checks / secret-scanning (push) Successful in 4s
Security Checks / dockerfile-lint (push) Successful in 3s
- Calorie widget: half width with animated ring (spring animation)
- Removed floating + from dashboard (only on fitness tab)
- surfaceCard changed from white to warm white (#FFFCF8)
- AssistantChatView gets canvas background
- Future widget placeholder on right side of grid

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-03 09:12:43 -05:00
Yusuf Suleman
3040e55475 fix: dashboard calorie widget horizontal layout + bold meal section headers
All checks were successful
Security Checks / dependency-audit (push) Successful in 13s
Security Checks / secret-scanning (push) Successful in 4s
Security Checks / dockerfile-lint (push) Successful in 3s
Dashboard:
- Removed LazyVGrid, calorie widget is full-width HStack
- Ring (90px) + text info side by side
- No more vertical text issue

Meal sections:
- Title3 bold font for meal name
- Meal icon in tinted circle background
- Item count subtitle
- Calorie total in meal color (bold)
- Subtle tinted background on header
- Clear visual separation from food entries

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-03 08:44:53 -05:00
Yusuf Suleman
db6324f161 redesign: premium podcast player matching Brain/Reader quality
All checks were successful
Security Checks / dependency-audit (push) Successful in 13s
Security Checks / secret-scanning (push) Successful in 4s
Security Checks / dockerfile-lint (push) Successful in 3s
- Episode cards with 18px radius, artwork, hover lift
- Show sidebar matching Brain's folder nav pattern
- Mobile: horizontal scrollable show pills
- Glassmorphic player bar with blur(24px)
- Queue panel slides from right like Brain detail sheet
- All inline Atelier colors, no CSS vars

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-03 08:28:02 -05:00
Yusuf Suleman
00308fde18 style: restyle podcast player to Atelier warm design system
All checks were successful
Security Checks / dependency-audit (push) Successful in 12s
Security Checks / secret-scanning (push) Successful in 3s
Security Checks / dockerfile-lint (push) Successful in 3s
- All CSS vars replaced with Atelier inline colors
- Warm parchment sidebar, frosted glass player bar
- Brown accent tones matching Brain/Reader/Fitness
- Route page renders component directly (no wrappers)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-03 07:54:44 -05:00
Yusuf Suleman
0e9702d494 refactor: separate podcasts from downloads — own route + nav item
All checks were successful
Security Checks / dependency-audit (push) Successful in 13s
Security Checks / secret-scanning (push) Successful in 3s
Security Checks / dockerfile-lint (push) Successful in 4s
- /podcasts — new page with PodcastPlayer (headphones icon)
- /downloads — old media page renamed (download icon)
- /media — kept for backward compat (same as downloads)
- Nav: Reader → Podcasts → Downloads → Brain

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-03 07:42:56 -05:00
Yusuf Suleman
587040b7a6 feat: podcast player frontend + media service with 7 podcast feeds
All checks were successful
Security Checks / dependency-audit (push) Successful in 13s
Security Checks / secret-scanning (push) Successful in 3s
Security Checks / dockerfile-lint (push) Successful in 3s
Frontend:
- PodcastPlayer.svelte — full podcast experience
- Two-panel layout (show sidebar + episode list)
- Sticky audio player bar with play/pause, seek, speed control
- Queue panel with reorder/remove
- Add podcast via RSS URL
- Progress tracking every 30s
- Auto-advance to next queued episode
- Mobile responsive with show overlay

Media Service:
- 7 podcasts imported from Audiobookshelf (1,931 episodes)
- Gateway wired with user auth headers

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-03 07:37:21 -05:00
Yusuf Suleman
c3caa4bb1c feat: wire media service into gateway — proxy, auth, app registration
All checks were successful
Security Checks / dependency-audit (push) Successful in 13s
Security Checks / secret-scanning (push) Successful in 3s
Security Checks / dockerfile-lint (push) Successful in 3s
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-03 06:04:28 -05:00
Yusuf Suleman
69af4b84a5 feat: rebuild iOS app from API audit + new podcast/media service
All checks were successful
Security Checks / dependency-audit (push) Successful in 12s
Security Checks / secret-scanning (push) Successful in 3s
Security Checks / dockerfile-lint (push) Successful in 3s
iOS App (complete rebuild):
- Audited all fitness API endpoints against live responses
- Models match exact API field names (snapshot_ prefixes, UUID strings)
- FoodEntry uses computed properties (foodName, calories, etc.) wrapping snapshot fields
- Flexible Int/Double decoding for all numeric fields
- AI assistant with raw JSON state management (JSONSerialization, not Codable)
- Home dashboard with custom background, frosted glass calorie widget
- Fitness: Today/Templates/Goals/Foods tabs
- Food search with recent + all sections
- Meal sections with colored accent bars, swipe to delete
- 120fps ProMotion, iOS 17+ @Observable

Podcast/Media Service:
- FastAPI backend for podcast RSS + local audiobook folders
- Shows, episodes, playback progress, queue management
- RSS feed fetching with feedparser + ETag support
- Local folder scanning with mutagen for audio metadata
- HTTP Range streaming for local audio files
- Playback events logging (play/pause/seek/complete)
- Reuses brain's PostgreSQL + Redis
- media_ prefixed tables

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-03 02:36:43 -05:00
Yusuf Suleman
e350a354a3 fix: replace .defaultGoal with DailyGoal() to avoid macro expansion issue
All checks were successful
Security Checks / dependency-audit (push) Successful in 12s
Security Checks / secret-scanning (push) Successful in 3s
Security Checks / dockerfile-lint (push) Successful in 3s
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-03 02:13:27 -05:00
Yusuf Suleman
ac8fe3db29 fix: remove History tab, add Foods tab, fix FitnessTabView
All checks were successful
Security Checks / dockerfile-lint (push) Successful in 3s
Security Checks / dependency-audit (push) Successful in 12s
Security Checks / secret-scanning (push) Successful in 3s
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-03 02:11:29 -05:00
Yusuf Suleman
f3e5737706 fix: all model/repo/view mismatches — computed properties, missing methods, type fixes
All checks were successful
Security Checks / dependency-audit (push) Successful in 14s
Security Checks / secret-scanning (push) Successful in 3s
Security Checks / dockerfile-lint (push) Successful in 3s
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-03 02:08:40 -05:00
Yusuf Suleman
9438421207 fix: GoalsViewModel use repo.loadDay instead of missing goals()
All checks were successful
Security Checks / dependency-audit (push) Successful in 12s
Security Checks / secret-scanning (push) Successful in 3s
Security Checks / dockerfile-lint (push) Successful in 4s
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-03 02:01:30 -05:00
Yusuf Suleman
c934791a4a fix: ContentView isAuthenticated → isLoggedIn
All checks were successful
Security Checks / dependency-audit (push) Successful in 12s
Security Checks / secret-scanning (push) Successful in 3s
Security Checks / dockerfile-lint (push) Successful in 3s
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-03 01:59:20 -05:00
Yusuf Suleman
fdb8aeba8a restore: original UI views from first build, keep fixed models/API
All checks were successful
Security Checks / dependency-audit (push) Successful in 12s
Security Checks / secret-scanning (push) Successful in 3s
Security Checks / dockerfile-lint (push) Successful in 3s
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-03 01:54:46 -05:00
Yusuf Suleman
e852e98812 fix: iOS fitness models — UUID strings, snapshot_ fields, convertFromSnakeCase compatibility
All checks were successful
Security Checks / dependency-audit (push) Successful in 12s
Security Checks / secret-scanning (push) Successful in 3s
Security Checks / dockerfile-lint (push) Successful in 3s
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-03 01:44:53 -05:00
Yusuf Suleman
4592e35732 feat: major platform expansion — Brain service, RSS reader, iOS app, AI assistants, Firefox extension
All checks were successful
Security Checks / dependency-audit (push) Successful in 1m13s
Security Checks / secret-scanning (push) Successful in 3s
Security Checks / dockerfile-lint (push) Successful in 3s
Brain Service:
- Playwright stealth crawler replacing browserless (og:image, Readability, Reddit JSON API)
- AI classification with tag definitions and folder assignment
- YouTube video download via yt-dlp
- Karakeep migration complete (96 items)
- Taxonomy management (folders with icons/colors, tags)
- Discovery shuffle, sort options, search (Meilisearch + pgvector)
- Item tag/folder editing, card color accents

RSS Reader Service:
- Custom FastAPI reader replacing Miniflux
- Feed management (add/delete/refresh), category support
- Full article extraction via Readability
- Background content fetching for new entries
- Mark all read with confirmation
- Infinite scroll, retention cleanup (30/60 day)
- 17 feeds migrated from Miniflux

iOS App (SwiftUI):
- Native iOS 17+ app with @Observable architecture
- Cookie-based auth, configurable gateway URL
- Dashboard with custom background photo + frosted glass widgets
- Full fitness module (today/templates/goals/food library)
- AI assistant chat (fitness + brain, raw JSON state management)
- 120fps ProMotion support

AI Assistants (Gateway):
- Unified dispatcher with fitness/brain domain detection
- Fitness: natural language food logging, photo analysis, multi-item splitting
- Brain: save/append/update/delete notes, search & answer, undo support
- Madiha user gets fitness-only (brain disabled)

Firefox Extension:
- One-click save to Brain from any page
- Login with platform credentials
- Right-click context menu (save page/link/image)
- Notes field for URL saves
- Signed and published on AMO

Other:
- Reader bookmark button routes to Brain (was Karakeep)
- Fitness food library with "Add" button + add-to-meal popup
- Kindle send file size check (25MB SMTP2GO limit)
- Atelier UI as default (useAtelierShell=true)
- Mobile upload box in nav drawer

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-03 00:56:29 -05:00
Yusuf Suleman
af1765bd8e fix: mobile nav spacing + safe area, PDF viewer mobile layout
- Mobile nav: tighter spacing, safe-area-inset-bottom padding
- Nav items closer together so bottom section stays visible
- Nav sheet scrollable if content overflows
- PDF viewer mobile: 55vh for PDF, rest for sidebar (scrollable)
- Full screen on mobile (no border-radius, no padding)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-02 00:27:16 -05:00
Yusuf Suleman
5098545580 fix: mobile nav full height + upload paste box, PDF zoom fit
- Mobile nav sheet: flex layout, bottom section pushed to bottom
- Upload paste box + file picker added to mobile nav drawer
- Date shown at bottom of mobile nav
- PDF viewer: added #zoom=page-fit to iframe URL

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-02 00:18:45 -05:00
Yusuf Suleman
2ab27d048a fix: mobile tags pills show all active tags regardless of item count
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-01 22:42:56 -05:00
Yusuf Suleman
9f51f3bcd3 feat: brain mobile pills — tags shown after separator, prefixed with #
Scroll: [All] [Home] [Work] ... | [#guide] [#important] [#dev] ...

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-01 22:35:37 -05:00
Yusuf Suleman
3531360827 feat: brain colored folders/tags — color + icon fields, mobile pills
Backend:
- Added color (hex) and icon (lucide name) columns to folders and tags
- Default folders seeded with colors: Home=green, Work=indigo, Travel=blue, etc.
- API returns color/icon in sidebar and CRUD responses
- Create/update endpoints accept color and icon

Frontend:
- Mobile: horizontal scrollable pill tabs with colored dots
- Desktop sidebar: colored dots next to folder names
- Active pill gets tinted border matching folder color

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-01 22:32:40 -05:00
Yusuf Suleman
8f3afd46c3 feat: brain mobile sidebar — slide-out drawer with overlay
- "Folders & Tags" button shown only on mobile
- Click opens sidebar as slide-out drawer from left
- Dark overlay behind, click to dismiss
- Selecting a folder/tag auto-closes the drawer
- Desktop sidebar unchanged

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-01 22:13:48 -05:00
Yusuf Suleman
a52b13eb28 feat: brain sidebar — settings icon at top, tags show counts, hide empty tags
- Settings gear icon in sidebar header (replaces bottom manage button)
- Click gear → manage mode (shows as checkmark when active)
- Tags only show ones with items (counts visible)
- Manage mode shows ALL tags with delete buttons
- Add input inline under each section in manage mode
- Fixed button-inside-button error (use span for delete)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-01 22:05:01 -05:00
Yusuf Suleman
adef1dbeb8 fix: sidebar add button no longer cut off — input shrinks, button stays visible
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-01 21:58:45 -05:00
Yusuf Suleman
e1f18cfb18 fix: upload works in both Docker and dev mode
Falls back to absolute path on host when /app/screenshots doesn't exist.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-01 21:56:26 -05:00
Yusuf Suleman
f94987ac1b fix: move upload endpoint to root /upload route (works from both app and atelier)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-01 21:44:46 -05:00
Yusuf Suleman
b09fa0b42b feat: paste box + file picker in AppShell sidebar for screenshots
- Paste box: click it, Ctrl+V a screenshot from snipping tool
- Upload icon button: opens file picker
- Only captures paste events inside the box (not globally)
- Shows "Uploading..." then "Saved!" status

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-01 21:41:26 -05:00
Yusuf Suleman
b87a3a583d feat: upload button in AppShell sidebar — click or drag to upload screenshots
- Dashed border button at bottom of sidebar nav
- Click to open file picker
- Drag files onto the bottom rail area to upload
- Shows "Uploading..." then "Saved!" for 2 seconds
- Files save to platform/screenshots/ with timestamp names
- Works from any page in the Atelier shell

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-01 21:36:13 -05:00
Yusuf Suleman
07cbec89c4 feat: quick screenshot upload at /upload
- Drop zone: drag and drop files
- Paste: Ctrl+V pastes clipboard screenshots directly
- Browse: file picker button
- Saves to platform/screenshots/ with timestamp filename
- Mounted as volume in frontend container
- Accessible from any device at dash.quadjourney.com/upload

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-01 21:31:13 -05:00
Yusuf Suleman
02a9783d4f feat: brain sidebar manage mode — add/delete folders and tags
- "Manage folders & tags" button at bottom of sidebar
- Click to enter manage mode:
  - + button appears next to Folders/Tags headers
  - Inline input to type and add new folder/tag
  - × delete button appears on each item
  - Delete confirms before removing
- "Done" button exits manage mode
- Tags/folders created/deleted via taxonomy API
- Sidebar refreshes after changes

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-01 21:25:29 -05:00
Yusuf Suleman
11965eccd1 fix: brain sidebar — show all tags, fix content overflow, match nav styling
- Tags now show regardless of item_count (were hidden when 0)
- Content padding fixed (28px, overflow-x hidden)
- Sidebar nav items use same var(--text-sm) and var(--transition) as AppShell
- Active count color matches AppShell pattern
- Hero command-actions narrower to prevent overflow

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-01 21:20:30 -05:00
Yusuf Suleman
5689ee1f6a fix: brain layout — sidebar + content as flex siblings, no page wrapper
Template restructured to match Reader pattern:
brain-layout (flex) > brain-sidebar (248px) + brain-content (flex:1)
Hero and capture bar moved inside brain-content.
Removed page/app-surface wrappers.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-01 21:17:14 -05:00
Yusuf Suleman
e982b10db5 fix: brain second sidebar — Reader-style panel between AppShell and content
- Removed AppShell sub-nav items (wrong approach)
- Brain page now has its own sidebar column (248px, like Reader)
- Layout: [AppShell Nav] | [Brain Sidebar] | [Masonry Grid]
- Sidebar shows: All items, Folders section, Tags section (with counts)
- Matches Reader page pattern exactly (same CSS, same structure)
- Mobile: sidebar hidden

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-01 21:12:40 -05:00
Yusuf Suleman
e8c5636d98 refactor: brain sidebar lives in AppShell nav, not in-page
- Removed duplicate in-page sidebar from AtelierBrainPage
- AppShell sub-items now full-sized, matching main nav style
- Folders/Tags tabs as pill toggle in sidebar
- All folders shown (not just ones with items)
- All tags shown (not limited to 12)
- Brain page is now just capture + search + masonry grid
- Sidebar links use /brain?folder=X and /brain?tag=X

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-01 20:58:49 -05:00
Yusuf Suleman
fd636f01fa feat: brain sub-sidebar in AppShell — folders/tags under Brain nav item
- Brain nav item expands when on /brain page
- Shows Folders/Tags toggle tabs
- Folder links: /brain?folder=Work etc
- Tag links: /brain?tag=dev etc
- Counts shown next to each
- Brain page reads filter from URL params
- Only shows folders with items + key defaults (Home, Work, Knowledge)
- Tags limited to 12 most-used

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-01 20:35:19 -05:00
Yusuf Suleman
5f2fe8eca6 fix: brain page 500 — removed stale folderCounts reference
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-01 20:30:18 -05:00
Yusuf Suleman
68a8d4c228 feat: brain taxonomy — DB-backed folders/tags, sidebar, CRUD API
Backend:
- New Folder/Tag/ItemTag models with proper relational tables
- Taxonomy CRUD endpoints: list, create, rename, delete, merge tags
- Sidebar endpoint with folder/tag counts
- AI classification reads live folders/tags from DB, not hardcoded
- Default folders/tags seeded on first request per user
- folder_id FK on items for relational integrity

Frontend:
- Left sidebar with Folders/Tags tabs (like Karakeep)
- Click folder/tag to filter items
- "Manage" mode: add new folders/tags, delete existing
- Counts next to each folder/tag
- "All items" option to clear filter
- Replaces the old signal-strip cards

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-01 20:23:45 -05:00
Yusuf Suleman
4805729f87 checkpoint: before taxonomy refactor
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-01 20:12:14 -05:00
Yusuf Suleman
e7b7ff3400 feat: brain live search — results appear as you type (300ms debounce)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-01 19:51:13 -05:00
Yusuf Suleman
85a075260d fix: brain search — Meilisearch settings use PATCH not PUT
Settings were failing with 405 (PUT not supported in Meilisearch v1.12).
Changed to PATCH. Filterable/searchable attributes now applied.
Keyword search working: wedding, yusuf, insurance, airport all return results.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-01 19:48:27 -05:00
Yusuf Suleman
f7fd7cf7d5 fix: brain viewer — centered popup modal instead of full-screen
- 90vw x 80vh centered modal with rounded corners and shadow
- Blurred backdrop overlay, click outside to close
- PDF viewer on left, metadata sidebar on right
- Feels like a popup, not a page takeover

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-01 19:18:34 -05:00