commits
- hide "new deck" button in toolbar when not logged in
- fetch recent decks from UFO API for logged out homepage
- display gallery grid with thumbnails and author handles
- resolve handles via bsky getProfiles API
馃 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- add keys to {#each} blocks (SlideList, Settings, view page, profile page)
- use $derived for reactive data props in view page
- remove unused variables from layout
馃 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- src/lib/index.ts (empty template placeholder)
- static/og-image.svg (unreferenced)
- static/favicon.svg (duplicate of src/lib/assets/favicon.svg)
馃 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- remove default OG meta tags from layout (they override page-specific ones)
- point og:image to our /og endpoint instead of raw PDS blob URL
- add OG meta tags to homepage
- crawlers now get consistent, proxied images from our endpoint
馃 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
many social media crawlers (including bluesky) don't follow redirects
for og:image URLs. fetch the thumbnail blob and serve it directly
with proper content-type and cache headers.
馃 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- add drag handle to resize presenter notes panel (60-400px)
- slide canvas adjusts dynamically as panel resizes
- show notes area even when no notes (displays placeholder)
- add present button (play icon) to deck list on homepage
- clicking present loads deck and starts presentation immediately
馃 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- add /@handle route showing user's public decks
- add thumbnail blob field to deck records for link previews
- simplify OG endpoint to redirect to thumbnail blob URL
- add thumbnail upload button to toolbar
- show thumbnail previews on homepage deck list
- add touch/swipe navigation for mobile presentations
- add tap zones (left/right) for slide navigation
- scale font sizes relative to canvas width on mobile
- improve mobile controls layout (hide "create your own", reposition author)
- use dynamic viewport height (100dvh) for mobile browsers
- link author to profile page instead of external Bluesky
馃 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- server-side data loading for OG meta tags (bots don't run JS)
- generate OG images at /og/[did]/[rkey].png using Satori
- renders first slide with text, shapes, and images
- includes deck name, slide count, author in footer
- fallback card when slide data unavailable
馃 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- cloudflare pages function for OG meta tags on /view routes
- detects social bots and returns dynamic preview HTML
- link author handle to their bluesky profile
- add "create your own" link to homepage
馃 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
馃 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- public view route at /view/[did]/[rkey] (no auth required)
- share button on homepage copies link to clipboard
- fix slide count showing 0 (use slideCount from record)
- fix links not clickable in presentation mode (enable pointer-events)
- resolve PDS URL from DID document for public blob access
馃 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- linkify URLs in presentation mode (opens in new tab)
- notes editor panel below canvas for speaker notes
- notes visible during presentation via toggle
馃 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
PDS URL had trailing slash, causing //xrpc/ in blob URLs.
馃 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
listMyDecks returns empty slides array for performance.
deck page was using that instead of calling getDeck to resolve refs.
馃 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- add missing repo:tech.waow.slides.slide scope
- rename prefs -> preferences in oauth scopes
- add draggable=false to img to prevent browser drag interference
馃 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- split monolithic api.ts into focused modules (types, client, oauth, blob, slide, deck)
- each slide is now a separate ATProto record referenced via strongRef
- deck record contains array of slide references (fm.plyr.list pattern)
- added delete deck button with confirmation to home page
- renamed title -> name, prefs -> preferences
- added justfile with check and deploy targets
馃 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- hide "new deck" button in toolbar when not logged in
- fetch recent decks from UFO API for logged out homepage
- display gallery grid with thumbnails and author handles
- resolve handles via bsky getProfiles API
馃 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- remove default OG meta tags from layout (they override page-specific ones)
- point og:image to our /og endpoint instead of raw PDS blob URL
- add OG meta tags to homepage
- crawlers now get consistent, proxied images from our endpoint
馃 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- add drag handle to resize presenter notes panel (60-400px)
- slide canvas adjusts dynamically as panel resizes
- show notes area even when no notes (displays placeholder)
- add present button (play icon) to deck list on homepage
- clicking present loads deck and starts presentation immediately
馃 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- add /@handle route showing user's public decks
- add thumbnail blob field to deck records for link previews
- simplify OG endpoint to redirect to thumbnail blob URL
- add thumbnail upload button to toolbar
- show thumbnail previews on homepage deck list
- add touch/swipe navigation for mobile presentations
- add tap zones (left/right) for slide navigation
- scale font sizes relative to canvas width on mobile
- improve mobile controls layout (hide "create your own", reposition author)
- use dynamic viewport height (100dvh) for mobile browsers
- link author to profile page instead of external Bluesky
馃 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- server-side data loading for OG meta tags (bots don't run JS)
- generate OG images at /og/[did]/[rkey].png using Satori
- renders first slide with text, shapes, and images
- includes deck name, slide count, author in footer
- fallback card when slide data unavailable
馃 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- cloudflare pages function for OG meta tags on /view routes
- detects social bots and returns dynamic preview HTML
- link author handle to their bluesky profile
- add "create your own" link to homepage
馃 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- public view route at /view/[did]/[rkey] (no auth required)
- share button on homepage copies link to clipboard
- fix slide count showing 0 (use slideCount from record)
- fix links not clickable in presentation mode (enable pointer-events)
- resolve PDS URL from DID document for public blob access
馃 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- split monolithic api.ts into focused modules (types, client, oauth, blob, slide, deck)
- each slide is now a separate ATProto record referenced via strongRef
- deck record contains array of slide references (fm.plyr.list pattern)
- added delete deck button with confirmation to home page
- renamed title -> name, prefs -> preferences
- added justfile with check and deploy targets
馃 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>