- 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>
- 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>
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>
- 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>
- 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>
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>
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>
- 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>
- 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>
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>
- "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>
- 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>
- 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>
- 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>
- "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>
- 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>
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>
- 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>
- 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>
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>
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>
- 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>
- PDFs open in full-screen split layout: PDF viewer (left) + metadata sidebar (right)
- Uses native browser PDF viewer (iframe) for full rendering
- Images open in centered viewer with dark background
- Sidebar shows title, summary, tags, folder, extracted text, download button
- Mobile: stacks vertically (viewer top, sidebar bottom)
- Links and notes still use the slide-over sheet
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- PDF detail sheet now shows inline rendered PDF pages
- Click to expand inline, "Full view" for overlay viewer
- Uses pdfjs-dist canvas rendering (same as trips app)
- Falls back to screenshot if no original upload found
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Polls only pending/processing items by ID every 4s instead of
reloading the entire list every 3s. Prevents screen flashing.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Upload button (arrow icon) in capture bar next to text input
- Accepts: PDF, PNG, JPG, GIF, WEBP, TXT, MD, CSV
- Multiple file upload supported
- Hidden file input triggered by button click
- Upload status indicator while processing
- Files sent to /api/brain/items/upload endpoint
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- PDF cards: show first page render as thumbnail with "PDF" badge
- Image cards: show the original uploaded image
- PDF detail sheet: shows screenshot + extracted text in mono font
- Image detail sheet: shows the original image
- Card content shows page count for PDFs, extracted text preview
- Links still open URL on screenshot click, PDFs/images open detail
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- PDF: extracts selectable text via pymupdf, falls back to Tesseract OCR for scanned docs
- PDF: renders first page as screenshot thumbnail
- Images: Tesseract OCR for text extraction, OpenAI vision API fallback for photos
- Plain text files: direct decode
- All extracted text stored in extracted_text field for search/embedding
- Tested: PDF upload → text extracted → AI classified → searchable
New deps: pymupdf, pytesseract, Pillow
System dep: tesseract-ocr added to both Dockerfiles
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Link detail: shows screenshot image (clickable to open URL), URL, summary, tags
- Note detail: click note text to edit, save/cancel buttons
- Notes: AI now fixes spelling/grammar instead of rewriting
- AI returns corrected_text field for notes, worker replaces raw_content
- Removed verbose meta grid (folder/confidence/status/saved)
- Folder shown as a pill badge in meta line
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>