Commit Graph

42 Commits

Author SHA1 Message Date
b2a1d292da feat: implement advanced tagging system, tag weighting, and app focus refactoring
- Implemented reusable TagSelector component with i18n support
- Added tag weighting system (popularity scores 1-5)
- Created admin panel for tag management
- Integrated Nebius AI and Brave Search for 'Magic Scan'
- Refactored app focus: removed bottle status, updated counters, and displayed extended bottle details
- Updated i18n for German and English
- Added database migration scripts
2025-12-19 12:58:44 +01:00
9eb9b41061 feat: implement server-side image compression with sharp and cleanup RLS policies 2025-12-18 22:08:28 +01:00
17727243be feat: add global auth listener with hard reload on logout 2025-12-18 21:45:27 +01:00
6f32bfa17f feat: add visual eyecatcher to session detail header 2025-12-18 21:38:10 +01:00
ec9468f671 fix: resolve dynamic server usage error in debug-admin API route 2025-12-18 21:33:57 +01:00
42d8191c1a fix(pwa): add visibilitychange listener for Android sleep issues 2025-12-18 21:28:46 +01:00
087292f65d feat: improve PWA auth robustness and session management 2025-12-18 21:27:00 +01:00
7008bbfd84 feat: social UI optimization, collapsible sections, and admin fixes 2025-12-18 21:16:09 +01:00
a64e8f17a1 feat: session deletion, improved tasting deletion visibility, and PWA login loop fix 2025-12-18 21:02:44 +01:00
c63a348e6b fix: add defensive fallbacks for missing database relationships 2025-12-18 20:35:38 +01:00
869c8fe9c5 feat: add stop session button and update walkthrough 2025-12-18 17:20:49 +01:00
ca1621e765 feat: refine session workflow with global state, quick tasting, and statistics 2025-12-18 17:19:38 +01:00
0f56c8b0f4 feat: add gallery upload and fix mobile header issues
- Added 'Upload from Gallery' button to CameraCapture component
- Implemented secondary file input without 'capture' attribute to allow gallery selection on mobile
- Fixed overlapping header elements on mobile by making the header responsive
- Compacted 'Dram of the Day' button on small screens
- Added translations for the new gallery upload feature
2025-12-18 15:48:11 +01:00
960fa89fc1 fix: resolve relationship error in admin dashboard
- Fetched api_usage and profiles separately to avoid Supabase join errors when relationships are not explicitly defined in the schema cache.
- Updated Gemini AI tracking integration to ensure all calls are recorded correctly.
- Improved error handling in admin dashboard.
2025-12-18 15:43:40 +01:00
f25aad401e fix: add debug info to recent API calls display
Added total count display and error message output to help debug
why API calls are logged but not displayed in the UI.
2025-12-18 15:39:46 +01:00
1cfa9cab8c feat: add Gemini AI tracking and fix admin dashboard
- Integrated API tracking into analyze-bottle service
- Added credit balance check before Gemini API calls
- Deduct credits after successful Gemini analysis
- Track both successful and failed Gemini API calls
- Added debug logging to admin dashboard for recent API calls
- Fixed error handling in analyze-bottle

Now tracks both Google Search and Gemini AI API usage!
2025-12-18 15:35:02 +01:00
b18f8907a3 feat: add plan assignment to user management
- Added plan dropdown to user edit modal
- Shows current plan with highlighted card
- Allows admin to assign/change user's subscription plan
- Loads user's current plan when opening edit modal
- Updates plan via setUserPlan service
- Visual feedback with success/error messages

Admins can now:
- View user's current subscription plan
- Assign users to different plans (Starter, Bronze, Silver, Gold)
- See plan details (credits/month, price) in dropdown

This completes the subscription plan system!
2025-12-18 15:29:13 +01:00
42b4b2b2e1 feat: implement subscription plan system with monthly credits
- Database schema:
  * subscription_plans table - stores plan tiers (Starter, Bronze, Silver, Gold)
  * user_subscriptions table - assigns users to plans
  * Default plans created (10, 50, 100, 250 credits/month)
  * All existing users assigned to Starter plan

- Subscription service (subscription-service.ts):
  * getAllPlans() - fetch all plans
  * getActivePlans() - fetch active plans for users
  * createPlan() - admin creates new plan
  * updatePlan() - admin edits plan
  * deletePlan() - admin removes plan
  * getUserSubscription() - get user's current plan
  * setUserPlan() - admin assigns user to plan
  * grantMonthlyCredits() - distribute credits to all users

- Plan management interface (/admin/plans):
  * Visual plan cards with credits, price, description
  * Create/Edit/Delete plans
  * Toggle active/inactive status
  * Sort order management
  * Grant monthly credits button (manual trigger)

- Features:
  * Monthly credit allocation based on plan
  * Prevents duplicate credit grants (tracks last_credit_grant_at)
  * Admin can manually trigger monthly credit distribution
  * Plans can be activated/deactivated
  * Custom pricing and credit amounts per plan

- UI:
  * Beautiful plan cards with color coding
  * Modal for create/edit with validation
  * Success/error messages
  * Manage Plans button in admin dashboard

Ready for future automation (cron job for monthly credits)
and payment integration (Stripe/PayPal).
2025-12-18 15:16:44 +01:00
95a8b3940b feat: implement comprehensive credits management system
- Database schema:
  * Extended user_credits table with daily_limit, API costs, last_reset_at
  * Created credit_transactions table for full audit trail
  * Added RLS policies for secure access control

- Core services:
  * credit-service.ts - balance checking, deduction, addition, transaction history
  * admin-credit-service.ts - admin controls for managing users and credits

- API integration:
  * Integrated credit checking into discover-whiskybase.ts
  * Credits deducted after successful API calls
  * Insufficient credits error handling

- Admin interface:
  * /admin/users page with user management
  * Statistics dashboard (total users, credits in circulation, usage)
  * Interactive user table with search
  * Edit modal for credit adjustment and settings
  * Per-user daily limits and API cost configuration

- Features:
  * Automatic credit initialization (100 credits for new users)
  * Credit transaction logging with balance_after tracking
  * Admin can add/remove credits with reason
  * Admin can set custom daily limits per user
  * Admin can set custom API costs per user
  * Low credit warnings (< 10 credits)
  * Full transaction history

- User experience:
  * Credits checked before API calls
  * Clear error messages for insufficient credits
  * Graceful handling of credit deduction failures

System is ready for future enhancements like credit packages,
auto-recharge, and payment integration.
2025-12-18 15:02:32 +01:00
e960d1bace fix: resolve infinite recursion in admin_users RLS policy
The admin_users policy was checking if user is admin by querying
the same table, causing infinite recursion. Changed to allow users
to view their own admin record directly using auth.uid() = user_id.

This fixes the error: 'infinite recursion detected in policy for
relation admin_users'
2025-12-18 14:11:22 +01:00
7d307ac253 fix: add missing i18n translation key and admin debug logs
- Added common.all translation key to de.ts and en.ts
- Added debug logging to admin page for troubleshooting access issues
2025-12-18 14:07:25 +01:00
dd27cfe0e7 feat: implement API usage tracking and admin dashboard
- Added database schema for API tracking system:
  * api_usage table - tracks all Google Search and Gemini AI calls
  * user_credits table - prepared for future credits system
  * admin_users table - controls admin dashboard access
- Created comprehensive tracking service (track-api-usage.ts):
  * trackApiUsage() - records API calls with success/failure
  * checkDailyLimit() - enforces 80 Google Search calls/day limit
  * getUserApiStats() - per-user statistics
  * getGlobalApiStats() - app-wide statistics (admin only)
  * checkIsAdmin() - server-side authorization
- Integrated tracking into discover-whiskybase.ts:
  * Pre-call limit checking with friendly error messages
  * Post-call usage tracking for success and failures
  * User authentication verification
- Built admin dashboard at /admin:
  * Global statistics cards (total, today, by API type)
  * Top 10 users by API usage
  * Recent activity log with 50 latest calls
  * Color-coded status indicators
  * Secure access with RLS policies
- Features:
  * Daily limit resets at midnight Europe/Berlin timezone
  * Graceful error handling (allows on tracking failure)
  * Comprehensive indexes for fast queries
  * Ready for future credits/monetization system
2025-12-18 13:56:21 +01:00
334bece471 feat: implement comprehensive i18n system with German and English support
- Created type-safe i18n system with TranslationKeys interface
- Added German (de) and English (en) translations with 160+ keys
- Implemented I18nContext provider and useI18n hook
- Added LanguageSwitcher component for language selection
- Refactored all major components to use translations:
  * Home page, StatsDashboard, DramOfTheDay
  * BottleGrid, EditBottleForm, CameraCapture
  * BuddyList, SessionList, TastingNoteForm
  * StatusSwitcher and bottle management features
- Implemented locale-aware currency formatting (EUR)
- Implemented locale-aware date formatting
- Added localStorage persistence for language preference
- Added automatic browser language detection
- Organized translations into 8 main categories
- System is extensible for additional languages
2025-12-18 13:44:48 +01:00
35c2443473 feat: implement QOL features (Stats, Search, Dram of the Day) 2025-12-18 12:34:51 +01:00
970dabbbf6 feat: add bottle editing and purchase price tracking 2025-12-18 12:16:01 +01:00
6e09300bab feat: enforce 12-hour limit for active tasting sessions 2025-12-18 12:12:20 +01:00
e3af71c584 feat: complete bottle-to-session integration flow 2025-12-18 12:08:24 +01:00
2685176992 chore: clean up diagnostic logs and update walkthrough 2025-12-18 11:32:16 +01:00
5923dd0474 fix: resolve RLS infinite recursion in tastings and sessions 2025-12-18 11:24:04 +01:00
e6974cd060 fix: resolve collection fetch race condition and improve tasting deletion UI 2025-12-18 11:17:22 +01:00
d07af05b66 feat: implement buddies and tasting sessions features 2025-12-18 10:56:41 +01:00
314967b31b fix: resolve mobile UI issues (scrollbar and overlapping form) 2025-12-18 10:04:11 +01:00
330c8e1cc0 feat: optimize layout for mobile devices (Pixel 9 Pro) 2025-12-18 09:59:31 +01:00
a3aa4f8b25 fix: restore BottleGrid and apply storage URL normalization 2025-12-18 09:36:13 +01:00
f600360505 chore: deployment debugging - minimal middleware, health api, and nextjs upgrade 2025-12-18 09:14:13 +01:00
1a0a132182 chore: revert standalone output and harden home page auth check 2025-12-18 09:06:57 +01:00
56178cea81 chore: deployment debugging - output standalone and global error boundary 2025-12-18 09:00:59 +01:00
a41a72fb0d eval fix 2025-12-18 00:32:45 +01:00
6f08bb3c4c feat: implement offline queue, background sync and AI robustness 2025-12-17 23:25:12 +01:00
939d69a634 feat: add tasting sorting and polish UI with premium aesthetic 2025-12-17 23:18:07 +01:00
19689ffd2f feat: implement PWA, manifest, service worker and offline indicator 2025-12-17 23:15:51 +01:00
5807d949ef init 2025-12-17 23:12:53 +01:00