148 Commits

Author SHA1 Message Date
George Powell c3307b3920 Added streak counter 2026-02-21 01:24:16 -05:00
George Powell 19646c72ca WIP new share menu 2026-02-21 00:38:09 -05:00
George Powell e592751a1c removed unneccesary code i think 2026-02-19 17:59:23 -05:00
George Powell 77cc83841d correctly pass anonymousid to the auth modal in the root route 2026-02-18 18:32:45 -05:00
George Powell e8b2d2e35e Possible fix for sign in with apple migrations failing 2026-02-18 17:54:01 -05:00
George Powell c50cccd3d3 validateSessionToken() now returns more user data 2026-02-18 14:53:31 -05:00
George Powell 638a789a0f device always replaces local localStorage completion with the
authoritative DB record
2026-02-18 14:48:02 -05:00
George Powell e815e15ce5 Countdown timer now shows when there is a new verse available 2026-02-18 14:03:07 -05:00
George Powell e6081c28f1 Refactor game logic into utility modules and add cross-device sync
Extracted game state management, share logic, and stats API calls into dedicated modules (game-persistence.svelte.ts, share.ts, stats-client.ts), and moved daily verse loading to client-side to fix timezone issues. Added a guesses column to daily_completions for cross-device state restoration for logged-in users, a new GET /api/stats endpoint, and a staging deploy script.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-18 13:25:40 -05:00
George Powell 2de4e9e2a7 Another attempt at fixing Cross-site POST form submissions are forbidden 2026-02-13 01:56:24 -05:00
George Powell ea7a848125 Allow for apple bypass 2026-02-13 01:52:48 -05:00
George Powell 1719e0bbbf switched to Bun.env for apple-auth.ts 2026-02-13 01:47:29 -05:00
George Powell 885adad756 added test.bibdle.com domain 2026-02-13 01:35:31 -05:00
George Powell 1b96919acd added --bun flag to deploy.sh 2026-02-13 01:33:36 -05:00
George Powell 8ef2a41a69 Added Sign In with Apple test route 2026-02-13 01:06:21 -05:00
George Powell ac6ec051d4 Added Sign In with Apple 2026-02-13 00:57:44 -05:00
George Powell a12c7d011a added some nice animation details 2026-02-13 00:36:06 -05:00
George Powell 77ffd6fbee Implement client-side timezone handling for daily verses
Refactored the daily verse system to properly handle users across different
timezones. Previously, the server used a fixed timezone (America/New_York),
causing users in other timezones to see incorrect verses near midnight.

Key changes:

**Server-side refactoring:**
- Extract `getVerseForDate()` into `src/lib/server/daily-verse.ts` for reuse
- Page load now uses UTC date for initial SSR (fast initial render)
- New `/api/daily-verse` POST endpoint accepts client-calculated date
- Server no longer calculates dates; uses client-provided date directly

**Client-side timezone handling:**
- Client calculates local date using browser's timezone on mount
- If server date doesn't match local date, fetches correct verse via API
- Changed verse data from `$derived` to `$state` to fix reactivity issues
- Mutating props was causing updates to fail; now uses local state
- Added effect to reload page when user returns to stale tab on new day

**Stats page improvements:**
- Accept `tz` query parameter for accurate streak calculations
- Use client's local date when determining "today" for current streaks
- Prevents timezone-based streak miscalculations

**Developer experience:**
- Added debug panel showing client local time vs daily verse date
- Added console logging for timezone fetch process
- Comprehensive test suite for timezone handling and streak logic

**UI improvements:**
- Share text uses 📜 emoji for logged-in users, 📖 for anonymous
- Stats link now includes timezone parameter for accurate display

This ensures users worldwide see the correct daily verse for their local
date, and streaks are calculated based on their timezone, not server time.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-12 23:37:08 -05:00
George Powell f6652e59a7 fixed weird signin bug 2026-02-12 20:24:38 -05:00
George Powell 290fb06fe9 Reordered guesses table and added emphasis 2026-02-11 23:42:50 -05:00
George Powell df8a9e62bb Add staggered page load animations
Implement elegant fadeInUp animations with staggered delays for main page
elements to create a polished, progressive reveal effect on page load.

Changes:
- layout.css: Added fadeInUp keyframes and delay utility classes
  (200ms, 400ms, 600ms, 800ms)
- +page.svelte: Applied animations to title, date, verse display,
  search input, guesses table, and credits

Animation sequence:
1. Title (0ms)
2. Date + Verse Display (200ms)
3. Search Input (400ms)
4. Guesses Table (600ms)
5. Credits (800ms - when won)

Creates a smooth, professional page load experience without changing any
existing design or functionality.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-11 17:24:14 -05:00
George Powell 730b65201a Redesign stats page with dark theme and enhanced statistics
- Implement dark gradient background with glassmorphism cards
- Add new statistics: worst day, best book, most seen book, unique books by testament
- Design mobile-first responsive grid layout with optimized spacing
- Update Container component to support dark theme (bg-white/10, border-white/20)
- Calculate book-specific stats by linking completions to daily verses
- Improve visual hierarchy with icons and color-coded stat cards

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-11 13:01:53 -05:00
George Powell 78440cfbc3 Fix infinite stats submission and improve mobile button layout
- Fix infinite loop in stats submission effect by adding statsData to early return condition
- Make bottom buttons (View Stats, Sign In/Out) full-width on small screens
- Buttons now stack vertically on mobile, side-by-side on medium+ screens

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-10 21:05:10 -05:00
George Powell 482ee0a83a added twitter logo 2026-02-09 12:16:44 -05:00
George Powell 342bd323a1 Merge branch 'main' into auth
Brought in latest changes from main including:
- RSS feed implementation
- First letter edge case fixes
- Updated ranking formula

Resolved conflicts by:
- Combining .env.example variables from both branches
- Keeping auth version (3.0.0alpha)
- Preserving extended user schema from auth
- Keeping onMount umami approach and adding RSS feed link

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-09 12:03:31 -05:00
George Powell 95725ab4fe Add test infrastructure and signin migration tests
- Add test-specific Drizzle config and database connection
- Create test version of auth module using test database
- Add comprehensive integration tests for signin migration logic
- Add unit tests for deduplication algorithm
- Tests cover edge cases like multiple duplicates, timing, and error handling

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2026-02-05 18:49:21 -05:00
George Powell 06ff0820ce Implement anonymous stats migration on signin
- Fix AuthModal to pass anonymousId on both signin and signup
- Add comprehensive migration logic in signin that moves anonymous completion stats to authenticated user
- Implement deduplication algorithm to handle overlapping completion dates
- Maintain earliest completion when duplicates exist

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2026-02-05 18:49:14 -05:00
George Powell 3cf95152e6 Replace unique constraint with index on dailyCompletions
Changes unique constraint on (anonymousId, date) to a regular index for better performance and to support the migration logic where duplicates may temporarily exist before deduplication.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2026-02-05 18:49:07 -05:00
George Powell c04899d419 removed dumb $env/dynamic/private import and replaced with Bun.env 2026-02-05 18:14:13 -05:00
George Powell 6161ef75a1 added bun types as a dev dependency 2026-02-05 18:13:47 -05:00
George Powell 9d7399769a some little wording changes xd 2026-02-05 18:13:30 -05:00
George Powell b1591229ba Move UI controls to bottom and require authentication for stats
- Moved stats button, auth buttons, and debug info to bottom of main page
- Added authentication requirement for /stats route
- Show login prompt for unauthenticated users accessing stats
- Include AuthModal for sign in/sign up from stats page

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2026-02-05 17:57:29 -05:00
George Powell 96024d5048 Support authenticated users in stats and page loading 2026-02-05 17:46:53 -05:00
George Powell 86f81cf9dd Use user ID for umami identify when authenticated 2026-02-05 17:46:14 -05:00
George Powell 24a5fdbb80 added umami events on social buttons 2026-02-05 17:43:51 -05:00
George Powell dfe1c40a8a switched to bun:sqlite 2026-02-05 00:47:55 -05:00
George Powell dfe784b744 added login modal 2026-02-05 00:47:47 -05:00
George Powell 6bced13543 Merge pull request #2 from pupperpowell/stats
added demo stats page (needs refinement)
2026-02-04 23:36:10 -05:00
George Powell 7d93ead70c added demo stats page (needs refinement) 2026-02-04 23:35:23 -05:00
George Powell 4c82aa078b added identifying with umami anonymous ID 2026-02-03 23:43:03 -05:00
George Powell 2058149207 delayed loading of umami tracker script until page is already
interactive
2026-02-03 00:18:11 -05:00
George Powell 9406498cc9 Merge pull request #1 from pupperpowell/rss
created rss feeds
2026-02-02 02:53:50 -05:00
George Powell 3947e8adb0 rss improvements 2026-02-02 02:52:53 -05:00
George Powell 244113671e created rss feed 2026-02-02 02:07:12 -05:00
George Powell 5b9b2f76f4 added some more words to the "first letter" edge case 2026-02-02 01:32:17 -05:00
George Powell f7ec0742e1 fixed "first letter" clue edge cases 2026-02-02 01:27:12 -05:00
George Powell d797b980ea updated ranking formula 2026-02-02 00:48:35 -05:00
George Powell 2bd86d37a1 added svelte mcp 2026-01-29 01:12:18 -05:00
George Powell 33d6fae446 added .env.example 2026-01-29 01:12:09 -05:00
George Powell ff228fb547 Update package.json version 2026-01-28 23:35:33 -05:00