12 Commits

Author SHA1 Message Date
Gemini Agent
ca0569ab0d Enhance security: Rotate VAPID keys, encrypt LLM API keys, and use env vars 2026-01-25 05:13:18 +00:00
Gemini Agent
3ca83f304f Fix notification system: timezone support, subscription handling, duplicate cleanup, and debugging logs 2026-01-25 04:01:31 +00:00
Gemini Agent
90f54766a5 Implement server-side push notifications with scheduler and always-remind option 2026-01-25 03:14:04 +00:00
Gemini Agent
ad8b45ee1f Add PWA infrastructure for iOS notification support
- Add manifest.json for proper PWA installation
- Add service worker (sw.js) for push notification handling
- Add ServiceWorkerProvider to register SW and manage notifications
- Generate PNG icons (192x192, 512x512) for iOS compatibility
- Update settings to show notification status and test button
- Use service worker showNotification for iOS Safari compatibility

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-25 00:49:05 +00:00
Gemini Agent
e35545b156 Streamline save button and add calendar view with search
- Remove redundant Save button, keep only Save & New
- Add calendar view to timeline showing days with entries
- Add search functionality with highlighted matches
- Add date filtering by clicking calendar days
- Show results count when filtering

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-24 23:51:23 +00:00
Gemini Agent
83ee6eefec Add multi-provider LLM support with model selection
- Support OpenRouter, OpenAI, and Anthropic providers
- Fetch available models after entering API key
- OpenRouter sorted by price (cheapest first)
- Store provider, model, and key per user
- Update reflections API to use selected provider/model

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-24 12:23:31 +00:00
Gemini Agent
9711baf54e Disable autosave - require explicit save button click
Autosave was causing issues with race conditions creating
duplicate entries. Simpler to just require manual save.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-24 12:12:41 +00:00
Gemini Agent
e99401858f Fix race condition causing duplicate entries during autosave
Use refs to track entry ID and prevent concurrent saves.
When a save is in progress, queue the next save instead of
starting a new one.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-24 12:08:33 +00:00
Gemini Agent
504f07a106 Add multiple entries per day, user management, reminders, and AI reflections
- Multiple entries per day: Home page now starts fresh, Save & New button
- Admin user management: Add/delete users, reset passwords, toggle admin
- Daily reminders: Browser notifications at configurable time
- AI reflections: Generate insights from entries using Claude API
- Remove cloud sync placeholder (already have user accounts)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-24 12:05:39 +00:00
Gemini Agent
bd6703b24b Add assetPrefix for Tailscale funnel path routing
Assets need to be prefixed with /quietthanks so browsers request
them at the correct path when the app is served under /quietthanks.
Tailscale strips the prefix when proxying to the backend.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-24 06:37:47 +00:00
Gemini Agent
1455b0acd1 Add user authentication with login/register
- Add users and sessions tables to database schema
- Add bcryptjs for password hashing
- Create auth API routes (login, register, logout, me)
- Add AuthProvider context for client-side auth state
- Update all API routes to require authentication and filter by userId
- Create login and register pages
- Add AppShell component for authenticated layout
- Update all pages to use AppShell and show user info
- Each user now has their own private entries and tags

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-24 06:18:41 +00:00
Gemini Agent
5555c1e6b5 Initial commit: Quiet Thanks gratitude app
A calm, private gratitude and mood log built with Next.js 16, TypeScript,
Tailwind CSS, and SQLite/Drizzle ORM.

Features:
- Quick check-in with autosave (800ms debounce)
- Optional mood selector (5 levels) with accessibility labels
- Optional tags with tap-to-add from recent
- Timeline with weekly reflection card
- Filters by mood, tag, and rough day
- Export to Markdown and JSON
- Dark mode default
- Delete with undo toast
- Docker deployment ready

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-24 01:57:20 +00:00