Commit graph

59 commits

Author SHA1 Message Date
Randall Stillwell
0b670c1a11 Fix remaining list/collection copy gaps from review.
Sweep community, settings, share modal, scanner create-list modal,
and invite flows for vocabulary consistency before merge.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-29 09:51:57 -05:00
Randall Stillwell
a6d72e19b7 Align UI copy with My Collection vs Lists vocabulary.
Replace stale ownership/list labels across pages and components, add
lib/collection-vocabulary.js as the single copy source, document the
taxonomy in AGENTS.md, and gate retired strings in CI.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-28 14:55:01 -05:00
varutasu
c51ec6a04c
Normalize collector numbers in catalog match and harden scanner adds. (#53)
Share card-number normalization across reconcile and identify paths, retry set/name matches when OCR uses leading-zero collector numbers, and extend in-flight locks to all scanner destination actions with disabled Mark Owned feedback.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-28 14:45:55 -05:00
varutasu
66717c4198
fix(scanner): close redesign a11y audit findings (#45)
Add focus traps for modals, accessible names for icon/select controls,
ownership badge role=status, list semantics for the scan queue, and
aria-live updates for the card count.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-27 14:22:18 -05:00
varutasu
673af83519
feat(scanner): persist scan captures to Blob (Brief 3) (#44)
Upload confirmed scan frames to Vercel Blob and store the URL on user_cards
when routing to owned cards, completing the redesign-scanner-flow convoy.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-27 13:57:26 -05:00
varutasu
24c9da4095
feat(scanner): condition, foil, quantity, and ownership badge (Brief 2) (#43)
Extract ScannedCardItem with per-card metadata controls and ownership
lookup via GET /api/cards/[id]/ownership. Propagate condition, foil,
and quantity through owned/collection/deck POST paths.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-27 13:54:33 -05:00
varutasu
47a1abbe4d
feat(scanner): stack-destination picker and auto-route (Brief 1) (#42)
Add ScannerDestinationPicker with game filter and owned/collection/deck
targets. Persist session destination in localStorage and auto-add each
identified scan to the active destination.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-27 13:50:54 -05:00
varutasu
a251dacbd3
fix(scanner): catalog gap review path + not-listed disambiguation (#40)
When vision reads a set+number missing from the catalog, route to
card_submissions rather than sibling disambiguation. Adds a not-listed
modal action, background vision refine, foil-friendly prompt, and
submit-for-review API. Queues catalog-sync-vercel-cron convoy for later.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-27 13:42:51 -05:00
varutasu
8dc6dd6e26
fix(scanner): Layer-1 SQL, printing picker, and rate-limit storm (#39)
Fix identify-by-text 500 (Neon could not infer null game param type).
When a card name has multiple catalog printings, show disambiguation
instead of auto-picking the first match. Throttle concurrent vision
calls and suppress repeated 429/error toasts during detection.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-27 13:10:46 -05:00
varutasu
d798e284c3
feat(scanner): AI Gateway vision + Layer-1 Tesseract/pg_trgm OCR (#38)
Route Layer-2 identification through Vercel AI Gateway (AI_GATEWAY_API_KEY,
default google/gemini-2.5-flash-lite). Add Layer-1 browser Tesseract name-strip
OCR with pg_trgm fuzzy catalog match via /api/cards/identify-by-text before
escalating to vision.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-27 12:59:59 -05:00
varutasu
be5dd8027f
fix(scanner): gemini-2.5-flash model + actionable scan error messages (#37)
Use the same vision model as the deleted browser client, surface Gemini
quota/denial/migration failures as 502/503 with readable text, and stop
scan_attempts telemetry from blocking identification.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-27 12:42:37 -05:00
varutasu
e81dd49752
feat(scanner): server-side scan pipeline (convoy #2) (#35)
* feat(scanner): move card identification server-side (convoy #2)

Replace browser Gemini/OCR with POST /api/scan/identify, add card_submissions
review queue, remove user-writable cards INSERT, and surface disambiguation
when catalog matching is ambiguous.

Co-authored-by: Cursor <cursoragent@cursor.com>

* ci: allowlist server-only lib/scan-gemini.js in LLM key gate

The scan pipeline helper lives under lib/ but is imported exclusively
from pages/api/scan/identify — exclude it from the client-side URL scan.

Co-authored-by: Cursor <cursoragent@cursor.com>

---------

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-27 08:47:05 -05:00
varutasu
8c58990fd9
fix(security): stop leaking Gemini API key to browsers (#34)
Delete the public /api/config/gemini endpoint and remove client auto-load
paths so GEMINI_AI_API_KEY stays server-side only. Add a scan rate-limit
class for the upcoming server-side identify route and a CI gate that blocks
reintroducing config key leaks or new browser LLM URLs.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-27 08:41:48 -05:00
varutasu
171f5afc6f
chore(components): remove dead user prop from MobileNavigation (#28)
components/MobileNavigation.js has accepted a `user` prop ever since
the mobile bottom-bar was extracted from Layout, but it has never read
any field of `user`. The bottom-bar items (Cards, Decks, Dashboard,
Community, More) are statically configured — none of them branch on
auth state, role, user id, or any other per-user attribute. The prop
is dead.

This was originally surfaced as R8 in the fix-layout-default-user
convoy (commit ca302a8) and deliberately deferred there to keep that
convoy focused on the Layout default-user fix. The follow-up was
queued as cleanup-mobile-nav-dead-props in .convoys/ship-readiness.md
§ Queued convoys. Pre-edit audit confirms the queue entry's premise:
`rg '\\buser\\b' components/MobileNavigation.js` returns 1 hit (the
destructure on line 5) before the change and 0 hits after. The
only active call site is components/Layout.js line 598; the
components/Layout.js.backup snapshot also calls it but is a
no-go-zone (per .cursor/rules/no-go-zones.mdc § "Append-only /
historical") and stays untouched — when that backup is eventually
deleted in a separate convoy, its stale call disappears with it.

Verification: npm run lint exit 1 with 128 problems (baseline
preserved, no regression introduced); npm run test:run 21/21 pass
(test/components/Layout.test.js still asserts the logged-out branch
contract from PR #15 — the dead-prop removal is invisible to that
suite since it does not inspect MobileNavigation's prop shape).
Convoy file .convoys/cleanup-mobile-nav-dead-props.md captures the
audit, fix, risks (R1: a future per-user bottom-bar feature would
need to re-add the prop — accepted; carrying dead state to hedge
hypothetical features is worse than paying the one-line re-add cost
when the feature actually lands), and acceptance criteria.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-26 22:53:28 -05:00
varutasu
ca302a89c1
fix(layout+pages): default user=null + page audit sweep (P0 #7) (#15)
* convoy: scope fix-layout-default-user (P0 #7 — Layout maintainer-email leak)

The last remaining P0 ship-blocker from .convoys/ship-readiness.md.
components/Layout.js line 562 defaults the user prop to a real email
address (me@randallstillwell.com); any page that renders Layout without
passing user explicitly impersonates the maintainer.

Scope: components/Layout.js + audit of 17 pages that import Layout
(grep-confirmed list in convoy file). Single PR likely. Auditor cohort
skipped (no design-system, IA, or browser-smoke surface).

Architect to address:
  - Q1: logged-out rendering branch design (navbar, mobile-nav,
        auth-only items treatment)
  - Q2: page audit triage into always-auth / public-or-auth /
        anonymous-allowed buckets
  - Q3: brief decomposition (single brief / 2 briefs in 1 PR / fan-out)
  - Q4: whether to add vitest coverage for the logged-out branch
        (recommend yes — small surface, high regression protection)

Hard out-of-scope: branding (pick-a-name), auth-provider collapse
(single-auth-provider), Layout god-component split (god-component-split).

depends_on: bump-next-js (shipped), fix-auth-bypass (shipped),
            drop-public-setup (shipped)
addresses: P0 #7 from .convoys/ship-readiness.md
parent: ship-readiness

Co-authored-by: Cursor <cursoragent@cursor.com>

* architect(fix-layout-default-user): plan + briefs 1-2 (Layout fix + page audit)

2 briefs, single PR. ~12 files net (down from the 18 in the original scope —
10 of the 17 Layout-importing pages already pass user explicitly).

Brief 1: components/Layout.js default user=null + Sign-in CTA branch in
  UserProfileDropdown when logged out. Adds first jsdom test in the repo
  at test/components/Layout.test.js (Decision D2) with 5 regression-lock
  assertions. devDeps: jsdom@^29, @testing-library/react@^16.

Brief 2: page audit sweep — 7 pages need code changes:
  - Pass user={user} to Layout: scanner.js, deck-builder.js (×4),
    deck/[id].js (×3), decks.js (×3)
  - Replace page-level useState({email: 'me@...'}) → useState(null) +
    null-guards: profile.js, settings.js
  - Replace hardcoded const user = {email: 'me@...'} with useAuth():
    card/[id].js

Discovered second anti-pattern: profile.js, settings.js, card/[id].js
seed page-level state with the maintainer email. Folded into Brief 2 since
success metric "no real email address remains in any component default-prop"
reads naturally to include page-level seed values.

Decisions:
  A1 — Sign-in CTA replaces avatar+email+dropdown when user===null;
       hides auth-only dropdown (Profile/Settings/Logout/Admin);
       keeps public + community nav visible
  B  — Per-page bucket assignment (10 already correct, 7 need fix);
       full per-page table with justification in convoy file
  C2 — Two briefs in one PR (Brief 1 = Layout + test; Brief 2 = page
       sweep depends on Brief 1). C1 buries the conceptual change under
       mechanical edits; C3 is over-orchestrated for this scope
  D2 — vitest lock-in; first jsdom test in repo; same negative-regression
       style as test/lib/permission-middleware.test.js (synthetic-admin
       shape). devDeps jsdom + @testing-library/react

Risks tracked R1-R8. Biggest: R2 (useState(null) null-deref in 3 leaky
pages — mitigated by audit-pass mandate + manual smoke).

MobileNavigation deliberately NOT folded in: its user prop is dead code
(never reads user.*); different bug class; cleanup queued separately to
avoid scope expansion.

Flagged-but-deferred:
  - 4 pages still import useAuth from lib/auth-context.js
    → single-auth-provider (queued P1 #9)
  - Layout headers still render "Deck Hearth" / "DH" branding
    → pick-a-name (queued P1 #12)
  - MobileNavigation dead user prop → cleanup-mobile-nav-dead-props
    or fold into god-component-split

addresses: P0 #7 from .convoys/ship-readiness.md (last P0 ship-blocker)
parent: ship-readiness
Co-authored-by: Cursor <cursoragent@cursor.com>

* feat(layout): default user=null + Sign-in CTA when logged out (Brief 1 of fix-layout-default-user)

Closes the source-side half of P0 #7 from .convoys/ship-readiness.md.
The page-side sweep (Brief 2) follows in a separate commit.

components/Layout.js:
  - Default user prop is now null (was hardcoded to
    { email: 'me@randallstillwell.com', role: 'user' })
  - UserProfileDropdown renders a "Sign in" link to /login when
    user === null instead of the maintainer's email + auth-only menu
    items (Decision A1)
  - All user.* accesses guarded with optional chaining or null checks
  - useState hook stays above the new null-user early return to satisfy
    rules-of-hooks (boot-the-brief caught this on the first try;
    see AGENTS.md Gotcha #11.5)

test/components/Layout.test.js (new):
  - First jsdom test in the repo (Decision D2)
  - 5 regression-lock assertions: no maintainer email ever rendered
    (prop omitted, prop=null), Sign-in link exists with href=/login,
    supplied email renders when prop is set, no "Guest" placeholder
    (locks A1 copy choice)
  - Mocks next/link, next/router (prefetch, replace, events, query),
    and theme-context.useTheme for jsdom safety under Next 16

package.json + package-lock.json:
  - Add jsdom@^29 and @testing-library/react@^16 to devDependencies
  - @testing-library/dom@^10 added explicitly (peer auto-install
    skipped it under npm 11; brief anticipated this fallback)

vitest.config.js (deviation from brief — see PR description):
  - Add esbuild { loader: 'jsx', jsx: 'automatic' } so vitest can
    parse JSX in .js files. Required to import any React component
    written in the repo's Next.js pages-router .js convention
    (AGENTS.md Gotcha #9). The brief said "no change" to this file,
    but JSX-in-.js parsing is a hard prerequisite for the new test
    to import components/Layout.js — the alternatives (rename test
    to .test.jsx; rewrite test in React.createElement) either break
    the test glob or still hit the same Layout.js parse failure.
    Other tests are unaffected (they import non-JSX modules).

Smoke output: see PR description.

addresses: P0 #7 from .convoys/ship-readiness.md (last P0 ship-blocker)
Co-authored-by: Cursor <cursoragent@cursor.com>

* feat(pages): pass user explicitly + null-guard leaky page seeds (Brief 2 of fix-layout-default-user)

Closes the page-side half of P0 #7 from .convoys/ship-readiness.md.
Brief 1 (commit ddf8fd2) handled the Layout-side fix.

Per the architect's per-page bucket table (Decision B in
.convoys/fix-layout-default-user.md), 7 pages needed code changes;
the other 10 of 17 Layout-importing pages already pass `user` correctly.

Pass user={user} to Layout (4 pages, 11 call sites):
  - pages/scanner.js (1 call)
  - pages/decks.js (3 calls)
  - pages/deck-builder.js (4 calls)
  - pages/deck/[id].js (3 calls)
  (All four still import useAuth from lib/auth-context.js — that's
   intentional and stays as-is until the single-auth-provider convoy
   collapses the three parallel auth surfaces.)

Replace leaky page-level seed values with useState(null) + null guards
(2 pages, R2 mitigation):
  - pages/profile.js: useState({email: 'me@...', role: 'user', ...})
                     → useState(null) + ?. on every sync user.* read
                     + early-return guards in getDisplayName/getInitials
                     + conditional render around the "Member since" block
                       so formatDate(undefined) never runs
  - pages/settings.js: same pattern (single user.email reader guarded)

Replace hardcoded const with useAuth from lib/use-auth.js (1 page):
  - pages/card/[id].js: const user = {email: 'me@...'}
                       → const { user } = useAuth() (called unconditionally
                       at the top of the component; rules-of-hooks safe)

Verification:
  - grep 'me@randallstillwell.com' pages/ → 0 hits
  - 21/21 vitest tests pass (16 pre-existing + 5 from Brief 1)
  - npm run lint matches baseline (128 problems pre, 128 post; verified
    via git stash before/after)
  - Manual static read-through of every diff; ReadLints clean on the 7
    files
  - Dev-server smoke: /cards anonymous returned HTTP 200 with 0
    'me@randallstillwell' matches before the user's shared dev server
    became unresponsive mid-session (same dev-server-shared-by-user
    constraint flagged in Brief 1); interactive logged-in smoke is
    parent/operator gated

Flagged-but-deferred (untouched per scope):
  - 4 pages still import useAuth from lib/auth-context.js
    → single-auth-provider (queued P1 #9)
  - components/MobileNavigation.js still receives dead user prop
    → cleanup-mobile-nav-dead-props (or fold into god-component-split)

addresses: P0 #7 from .convoys/ship-readiness.md (last P0 ship-blocker)
Co-authored-by: Cursor <cursoragent@cursor.com>

---------

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-24 14:31:37 -05:00
Randall Stillwell
442e906a79 🚀 Implement Mobile-First Navigation System
 Features Implemented:
• Mobile bottom navigation bar (Cards, Decks, Dashboard, Community, More)
• Raised primary Dashboard button with gradient styling
• Slide-out drawer menu from 'More' button
• Responsive layout: mobile bottom nav + desktop sidebar
• Backdrop blur effects and safe area support

🎯 Navigation Structure:
• Cards - Browse trading cards
• Decks - Manage decks
• Dashboard - Primary home button (raised/prominent)
• Community - Social features
• More - Full menu drawer with all options

📱 Responsive Design:
• Mobile (<768px): Bottom nav + drawer menu
• Desktop (≥768px): Traditional left sidebar
• Content padding adjustments for mobile nav
• Touch-friendly sizing and animations

🔧 Technical Changes:
• Created MobileNavigation.js component
• Completely rewrote Layout.js with mobile-first approach
• Added NavigationContent shared component
• Enhanced CSS with mobile-specific styles
• Proper accessibility and keyboard support

Ready for mobile testing! 🔥📱
2025-08-01 18:18:21 -05:00
Randall Stillwell
061fb90b0a Marker: Fixed card queue property mismatch - cards now properly separate in scanner queue 2025-08-01 17:41:42 -05:00
Randall Stillwell
afb79c57d9 Major Scanner Improvements
🔧 Gemini AI Integration:
- Added Google Gemini API as default OCR service
- Auto-configures from GEMINI_AI_API_KEY environment variable
- Fixed Puter.js authentication issues
- Enhanced OCR settings with connection testing

🎨 Redesigned Scanner Queue:
- New thumbnail + content layout with checkbox overlay
- Smart quantity management (duplicates increment quantity)
- Complete card information display from database
- Two-row action layout (primary/secondary actions)
- Floating bottom toolbar for bulk actions
- Real card images from database

�� Enhanced User Experience:
- Fixed Canvas2D performance warnings
- Better error handling and fallbacks
- Improved responsive design
- Database confirmation indicators
- Professional card scanning workflow

📱 Mobile Ready:
- Optimized layouts for mobile scanning
- Touch-friendly controls and interactions
- Improved visual feedback and status indicators
2025-07-29 14:19:48 -05:00
Randall Stillwell
59774a9b97 🎯 Replace Complex Logo with Clean Static SVG
 Simple & Clean:
- Removed all complex animated fire and card elements
- Using static SVG logo from Vercel Blob storage
- Clean, professional appearance for login page

🖼️ Logo Implementation:
- Direct img tag with blob storage URL
- Responsive sizing with proper aspect ratio
- Subtle drop shadow for depth
- Gentle hover effects for interactivity

🎨 Perfect for Login:
- Compact 1.2x container size
- Scales nicely with size prop
- Clean transitions and hover states
- No complex animations to distract

Much cleaner and more professional! 🚀
2025-07-28 10:59:11 -05:00
Randall Stillwell
d51faaa122 🃏 Simplify Cards to Match Reference Image
 Clean Card Design:
- Replaced complex SVG cards with simple rectangular cards
- Clean rounded corners (8px border-radius)
- Proper card proportions and positioning
- Beautiful drop shadows for depth

🎯 Perfect Positioning:
- Left card: 25% from left, rotated -20°
- Right card: 25% from right, rotated +20°
- Center card: Perfectly centered, no rotation
- All cards at 50% height for better balance

🔥 Simple Fire Icons:
- Small flame icons in card corners
- Center card has larger, centered flame icon
- Gradient fire colors matching theme
- Clean flame shape with inner accent

🎨 Enhanced Styling:
- Consistent card colors and borders
- Progressive shadow depth (center card strongest)
- Gentle floating animations maintained
- Cards properly layered above fire background

Now matches the reference image much better! 🎯
2025-07-28 10:53:53 -05:00
Randall Stillwell
40a014a828 🎯 EXACT SVG Recreation - Perfect Logo Match!
 Complete SVG Integration:
- Used exact fire paths from provided 326x326 SVG
- All 7 main flame layers + 5 small flame details
- Precise card positioning and shapes from original SVG
- Perfect drop shadows and filters maintained

🔥 Authentic Fire Animation:
- 7 main flame layers with individual flicker animations
- 5 small flame details with subtle movement
- Exact colors: #F6891F, #F36E21, #FFD04A, #FDBA16
- Realistic fire glow and brightness effects

🃏 Exact Card Recreation:
- Right card: Angled with corner symbols and details
- Left card: Angled opposite with matching styling
- Center card: Straight with detailed fire icon from SVG
- All cards use exact SVG paths with proper filters

🎨 Perfect Positioning:
- 326x326 viewBox matching original SVG
- Cards positioned at 18% from edges, 42% from top
- Fire background fills entire space behind cards
- Proper z-index layering (fire=1, cards=10-15)

Now matches the reference image EXACTLY! 🔥🃏
2025-07-28 10:51:17 -05:00
Randall Stillwell
d028e4b853 🎯 Perfect Deck Hearth Logo - Matches Reference Image
 Exact Recreation:
- Tightened fire to contained elliptical base behind cards
- Positioned 3 cards exactly as shown in reference image
- Center card straight with fire icon, side cards angled ±15°
- Fire now contained and focused, not sprawling

🔥 Contained Fire Design:
- 3-layer elliptical fire base (base, middle, top)
- 5 flame tongues reaching upward from base
- Much more controlled and elegant fire shape
- Fire positioned behind cards at bottom 15%

�� Perfect Card Layout:
- Left card: J♥ symbol, rotated -15°, positioned at 20% left
- Right card: K♥ symbol, rotated +15°, positioned at 20% right
- Center card: Fire icon, straight, positioned at center top
- All cards properly layered above fire (z-index 10-15)

🎨 Refined Animation:
- Subtle fire flickering with contained movement
- Gentle card floating with realistic rotation
- Center fire icon with soft glow animation
- Perfect balance of movement without distraction

Now matches the reference image exactly! 🎯
2025-07-28 10:45:26 -05:00
Randall Stillwell
2e9060dac7 🔥🃏 Create Epic Fire & Cards Animated Logo
 Complete Logo Redesign:
- Combined realistic fire SVG with floating animated cards
- 3 cards positioned in front of fire (center, left angled, right angled)
- Fire background with 7 main flame layers + 5 small accent flames
- Perfect recreation of the provided concept image

🎨 Advanced Animation System:
- Individual fire layer animations with staggered delays
- Smooth card floating animations with rotation and scaling
- Center card: subtle float with minimal rotation
- Side cards: angled positioning with gentle sway motion
- All animations synchronized for natural movement

🃏 Card Details:
- Center card: Straight with small fire icon
- Left/Right cards: Rotated ±8° with detailed corner symbols
- Proper drop shadows and realistic card appearance
- Cards float in front of fire (higher z-index)

🔥 Fire Integration:
- Theme-aware fire colors (bright for dark, warm for light)
- Realistic flame flickering with organic movement
- Proper layering with cards floating above flames
- Enhanced glow effects and brightness animation

The result is a stunning animated logo that perfectly captures the Deck Hearth brand
2025-07-28 10:44:23 -05:00
Randall Stillwell
4fa61eb522 🔥 Replace with Realistic SVG Fire Logo
 Professional SVG Fire Animation:
- Complete rewrite using provided SVG flame paths
- 6 main flame layers with realistic organic shapes
- 3 small accent flames for detail
- Theme-aware color schemes (dark/light modes)

🎨 Advanced Animation System:
- Individual animation timings for each flame layer
- Staggered animation delays for natural movement
- Transform-origin set to bottom for realistic flickering
- Subtle scaling, rotation, and opacity variations

🌟 Enhanced Visual Effects:
- Drop-shadow glow effect with brightness animation
- Proper aspect ratio (1.5x height) for flame proportions
- Smooth color transitions between themes
- Professional flame colors matching real fire

The fire logo now uses authentic flame shapes and looks incredibly realistic
2025-07-28 10:38:02 -05:00
Randall Stillwell
4d4540c3e5 🔥 Enhanced Fire Logo with Sharp Realistic Flames
 Sharp Flame Edges:
- Replaced rounded borders with custom clip-path polygons
- Created jagged, realistic flame shapes for all fire elements
- Sharp pointed tips and irregular edges like real fire
- Different polygon patterns for main flame, left flame, and right flame

🎨 Enhanced Animation:
- Added more complex flickering with 4 keyframe stages
- Enhanced scaling and rotation variations
- Added subtle hue-rotate filters for color shifting
- More realistic flame movement patterns

🌟 Improved Particles:
- Sharp-edged particles using octagonal clip-paths
- Added rotation animations to particle floating
- Different polygon shapes for visual variety
- More dynamic movement with combined transforms

The fire logo now looks much more realistic with sharp, jagged flame edges that flicker naturally
2025-07-28 10:10:05 -05:00
Randall Stillwell
cdb2e5f8ac 🔥 Add Animated Fire Logo Component
 Beautiful Animated Fire Logo:
- Created AnimatedFireLogo component based on CodePen animation
- Realistic fire flickering with multiple flame layers
- Theme-aware colors (bright for dark mode, warm for light mode)
- Floating particle effects with individual animations
- Scalable size prop for different use cases

🎨 Enhanced Login Experience:
- Replaced static fire emoji with animated logo
- 100px size for prominent branding
- Smooth flickering animations at different speeds
- Wood base and floating sparks for realism
- Perfect integration with fire glow background

🌙 Theme Support:
- Dark mode: Bright yellows and oranges for visibility
- Light mode: Warm browns and golds for elegance
- Consistent with Deck Hearth fire theme
- CSS-in-JS for dynamic theming

The login page now has a mesmerizing animated fire logo that perfectly captures the Deck Hearth brand
2025-07-28 10:08:24 -05:00
Randall Stillwell
2163b9ea0e 🔥 Add Fire Glow Login Background
 Beautiful Animated Fire Glow:
- Slow-moving fire gradient background with light/dark modes
- Floating ember particles with realistic animation
- 12-second background animation cycle with subtle color shifts
- Theme-aware gradient colors (warm daylight vs cozy evening)

🎨 Enhanced Login Experience:
- Updated branding to Deck Hearth with fire emoji
- Backdrop blur effects on form elements
- Semi-transparent containers for depth
- Orange focus states to match fire theme
- Enhanced shadows and glow effects

🌙 Theme Support:
- Light mode: Warm daylight fire with golden embers
- Dark mode: Cozy evening fire with bright orange flames
- RGB color variables for backdrop-blur compatibility
- Gradient-bg-ember class for consistent fire theming

The login page now perfectly captures the warm, inviting Deck Hearth atmosphere
2025-07-28 09:51:39 -05:00
Randall Stillwell
308d2de365 🧹 Major Codebase Cleanup: Remove Legacy React Code
🗑️ Removed Unused Files (11 files):
- 6 temporary import result JSON files
- 3 placeholder pages (community.js, analytics.js, decks.js)
- 3 unused components (CollaborationManager, ActivityLog, BulkInviteModal)
- 2 TypeScript config files (tsconfig.json, next-env.d.ts)

📦 Cleaned Up Dependencies:
- Removed 5 unused TypeScript packages
- Kept resend for future invite/notification features
- Removed 8 packages total, reduced bundle size

 Benefits:
- Cleaner codebase with only active files
- Reduced build time and bundle size
- Eliminated TypeScript overhead (project uses only JS)
- Removed legacy React patterns and unused components
- Better maintainability and clarity

The codebase is now lean and focused on active features
2025-07-28 09:07:36 -05:00
Randall Stillwell
4689424f3a 🔧 Fix System Collections & Database Schema Issues
🐛 Database Schema Fixes:
- Removed non-existent 'updated_at' column from collection_cards operations
- Fixed SQL queries in card ownership API and seeding scripts
- Resolved column does not exist errors

🚫 Hide System Collections from Selection:
- Added 'excludeSystem' parameter to /api/collections endpoint
- Updated CollectionSelectionModal to exclude system collections
- 'All My Cards' no longer appears in card addition modals

 Enhanced System Collection Styling:
- Upgraded system collection badge with gradient styling
- Added 🔒 SYSTEM badge with blue-purple gradient
- Added informative tooltip: 'Automatically syncs with your owned cards'
- Made system collections visually distinct and educational

🎯 User Experience Improvements:
- System collections are now clearly identified as special
- Users understand they can't manually add cards to system collections
- Better visual hierarchy and information architecture
- Automatic sync behavior is now clearly communicated

Card ownership should now work without errors! 🚀
2025-07-27 19:17:55 -05:00
Randall Stillwell
e5f629f8e2 🗂️ Add Collapsible Community Navigation Section
 Hierarchical Navigation Structure:
- Created collapsible Community section with expandable sub-items
- Sub-items: Collections, Decks, Forums (ready for future implementation)
- Smooth expand/collapse animation with chevron icon rotation
- Auto-expands when navigating to any community page

🎨 Visual Design:
- Main Community item with chevron indicator (rotates 90° when expanded)
- Sub-items indented with left border for visual hierarchy
- Smaller sub-item styling (text-sm, rounded-xl, lighter shadows)
- Consistent hover and active states throughout

🔧 Technical Features:
- State management for expand/collapse (isCommunityExpanded)
- useEffect to auto-expand on community page navigation
- Proper ARIA attributes (aria-expanded, aria-haspopup)
- Keyboard navigation support (Enter/Space to toggle)
- Mobile menu integration (closes on sub-item click)

🎯 User Experience:
- Intuitive collapsible navigation matching the design mockup
- Clear visual hierarchy between main and sub-navigation
- Smooth transitions and proper focus management
- Accessibility-compliant with screen reader support

Navigation now matches the requested collapsible structure! 📁
2025-07-27 13:22:42 -05:00
Randall Stillwell
f7cde325ca 🌍 Separate My Collections & Community Collections
 Collection Organization Restructure:
- /collections now shows only user's own collections, collaborations, and shared collections
- /community/collections shows all public collections for discovery
- Updated navigation to include 'Community Collections' link
- Added 'Discover Community' button on My Collections page

🔧 API Changes:
- Modified /api/collections to exclude public collections from other users
- Created /api/community/collections for public collection discovery
- Proper authentication and permission handling for both endpoints

🎯 User Experience Improvements:
- Clear separation between personal and community spaces
- 'My Collection' sidebar item now accurately reflects content
- Community discovery is intentional and separate
- Better organization matches user mental models

📱 UI Enhancements:
- Updated page titles and descriptions
- Added community discovery button with globe icon
- Consistent styling across both collection views
- Same thumbnail and layout system for both pages

This properly separates personal collection management from community discovery! 🚀
2025-07-27 13:17:13 -05:00
Randall Stillwell
2f2c915da1 🔧 Fix Collections Not Loading in Add to Collections Modal
🐛 Authentication Issue Resolution:
- Removed incorrect Authorization header from collections API call
- Modal was using 'auth_token' header when API uses development fallback
- Updated to match successful pattern used by collections page

📡 API Call Corrections:
- Collections fetch: Removed Authorization header (uses dev fallback)
- Add to collection: Removed Authorization header (middleware handles auth)
- Fixed response data handling (API returns array directly)
- Added better error handling and logging

🔍 Root Cause Analysis:
- CollectionSelectionModal used localStorage.getItem('auth_token')
- But /api/collections works without auth headers in development
- Other successful pages (collections.js, collection/[id].js) don't send auth headers
- Development middleware provides fallback admin user automatically

 Expected Behavior:
- Collections modal should now load user's collections properly
- Batch adding cards to collections should work correctly
- Consistent with authentication pattern used throughout app
- Better error messages for debugging

The 'Add to Collections' modal should now properly display collections! 📚
2025-07-26 09:57:54 -05:00
Randall Stillwell
9a5561c2c8 🔄 Restructured User Profile & Theme Toggle
 Profile Dropdown Implementation:
- Created comprehensive UserProfileDropdown component
- Moved user profile to bottom of sidebar (better UX)
- Added dropdown menu with Profile, Settings, Admin Panel, Logout
- Profile button shows user avatar, email, and role
- Smooth dropdown animation with backdrop click-to-close

🎨 Fire-Themed Profile Menu:
- Logout option uses ember red color for distinction
- Profile icons match the overall design system
- Consistent hover states and accessibility features
- Proper ARIA attributes for dropdown functionality

🌙 Separated Theme Toggle:
- Moved theme toggle out of profile section
- Now appears as standalone navigation item above profile
- Shows 'Dark Mode' / 'Light Mode' text labels
- Maintains all accessibility features and fire theming

 Enhanced Accessibility:
- Proper dropdown ARIA attributes (expanded, haspopup)
- Keyboard navigation support throughout
- Screen reader friendly with proper labels
- Focus management for dropdown interactions

🎯 Admin Panel Integration:
- Admin Panel option only shows for admin users
- Conditional rendering based on user role
- Proper navigation structure for different user types
- Consistent with existing admin badge logic

�� Mobile Optimizations:
- Dropdown works seamlessly on mobile devices
- Proper touch targets and spacing
- Auto-closes mobile menu when navigating
- Backdrop prevents accidental interactions

The sidebar now has a much cleaner hierarchy with the profile at the bottom and easy access to all user functions! 🔥👤
2025-07-26 09:51:40 -05:00
Randall Stillwell
94f31a5d77 Enhanced Navigation Accessibility & Fire-Themed UI
🎯 Comprehensive Accessibility Improvements:
- Added proper ARIA roles and labels throughout navigation
- Implemented keyboard navigation (Enter/Space key support)
- Added focus rings with fire-themed ember red color
- Enhanced screen reader support with aria-current and aria-label
- Added tabIndex for proper keyboard traversal

🔥 Fire-Themed Visual Enhancements:
- Updated badges to use flame orange and ember red colors
- ADMIN badges now use ember red for distinction
- Collection/Deck counts use flame orange
- Consistent fire theme across all interactive elements

 Enhanced Hover & Focus States:
- Active items: Left border with ember red accent
- Hover items: Left border with flame orange + slide animation
- Focus states: Enhanced visibility with ember red rings
- Smooth 4px slide animation on hover/focus
- Better visual hierarchy and feedback

 Accessibility Standards Compliance:
- WCAG 2.1 AA compliant focus indicators
- High contrast mode support with enhanced outlines
- Reduced motion support for accessibility preferences
- Proper semantic navigation structure
- Screen reader friendly icon handling (aria-hidden)

📱 Mobile Accessibility:
- Enhanced mobile menu button with proper ARIA
- Improved close button accessibility
- Better touch targets and focus management
- Proper expanded/collapsed state communication

🎨 Visual Polish:
- Consistent focus ring styling across all buttons
- Theme toggle button accessibility improvements
- Better color contrast in all states
- Professional slide animations for navigation feedback

The sidebar navigation now meets modern accessibility standards while maintaining the beautiful fire theme! 🔥
2025-07-26 09:38:18 -05:00
Randall Stillwell
d3e4980b8f 🔥 Primary Red Add Button + Static Rarity Shadows
🎨 Add Button Color Update:
- Changed main add button from wood brown to ember red
- Updated 'Own' option to match ember red theme
- Added static ember red shadow with ring effect
- Consistent fire-themed primary action color

 Performance: Removed All Pulsing Animations:
- Eliminated mythic-pulse animation (3s infinite)
- Eliminated rare-pulse animation (2.5s infinite)
- Eliminated uncommon-pulse animation (2s infinite)
- Eliminated enchanted-pulse animation (2s infinite)
- Removed all @keyframes pulse definitions

 Static Rarity Shadow System:
- Mythic/Legendary: Enhanced golden glow (static)
- Rare: Enhanced purple glow (static)
- Uncommon: Enhanced blue glow (static)
- Enchanted: Multi-color rainbow glow (static)
- All shadows now use consistent opacity levels

🚀 Performance Benefits:
- Eliminated continuous CSS animations on every card
- Reduced GPU usage from constant pulse effects
- Smoother scrolling and hover interactions
- Better battery life on mobile devices
- Cleaner, more professional appearance

🎯 Visual Improvements:
- More vibrant static shadows than pulsing minimums
- Consistent visual hierarchy with static effects
- Primary red add button stands out appropriately
- Cleaner, less distracting card presentation

The cards page should now be much more performant without the constant pulsing animations! 🔥
2025-07-26 09:17:22 -05:00
Randall Stillwell
cf148f5fa3 Ultra-Smooth Hover System with Expanding Actions
🎯 Optimized Button Layout:
- Moved checkbox to top-left corner
- Moved favorite to top-right corner
- Created expanding add button in bottom-left

🚀 Performance Enhancements:
- Reduced all animations from 200ms → 150ms
- Reduced card scaling from 105% → 102% (subtle but smooth)
- Simplified button padding and shadows
- Reduced focus ring intensity

 Expanding Add Button Features:
- Click to expand: Shows Collection, Deck, Own options
- Fire-themed colors: Flame orange, Gold, Wood brown
- Smooth rotation animation (45° when expanded)
- Click outside to close functionality
- Default action: Add to Collection when expanded

🎨 Fire-Themed Action Colors:
- Collection: Flame orange (var(--accent-flame))
- Deck: Golden yellow (var(--accent-gold))
- Own: Wood brown (var(--accent-wood))
- Main button: Wood → Ember when expanded

 Micro-Performance Optimizations:
- Reduced button padding: p-1.5 → p-1
- Smaller shadows and hover effects
- Faster transitions across all elements
- Custom scale-102 for subtle card lift
- Optimized z-index layering

🔧 Technical Improvements:
- Self-contained ExpandingAddButton component
- Proper event propagation handling
- State management for expand/collapse
- Click-outside-to-close behavior
- Added scale-102 to Tailwind config

The cards page should now feel incredibly responsive! 🔥
2025-07-26 09:00:26 -05:00
Randall Stillwell
b97eb45b29 Massive Performance Boost - Remove Heavy Hover Panels
🚀 Performance Optimizations:
- Completely removed complex side hover panels (massive DOM reduction)
- Eliminated 240+ lines of heavy panel HTML per card
- Removed expensive panel positioning calculations
- Simplified hover animations from 300ms to 200ms
- Removed redundant image scaling (double transform)

🎯 New Lightweight Hover System:
- Simple card scaling on hover (transform: scale(1.05))
- Slide-in action buttons in corners
- Checkbox & favorite in top-right corner
- Ownership indicator & add button in bottom-left
- All buttons use opacity transitions (GPU accelerated)

🔥 Fire-Themed Interactive Elements:
- Checkbox: Ember red accent color
- Favorite: Ember red background when active
- Add/Own button: Wood brown background
- Ownership indicator: Gold dot when owned
- All buttons have subtle hover scaling (scale(1.1))

📱 Enhanced Grid Layout:
- Removed right padding (no more panel space needed)
- Increased grid density: lg:4 cols, xl:5 cols, 2xl:6 cols
- Better space utilization across all screen sizes
- Cleaner, more focused card browsing experience

 User Experience Improvements:
- Much faster card grid rendering
- Smoother hover interactions
- Reduced layout shift and jank
- Cleaner visual hierarchy
- Quick access to essential actions

💾 Code Cleanup:
- Removed cardIndex and cardsPerRow props
- Eliminated panel positioning logic
- Simplified component structure
- Reduced bundle size significantly

The cards page should now be lightning fast! 🔥
2025-07-26 08:45:38 -05:00
Randall Stillwell
e056f53b1f 🔥 Transform to Deck Hearth Fire-Inspired Design
🎨 Complete Brand Transformation:
- Rebranded from 'TCG Vault' to 'Deck Hearth'
- Updated logo initials from 'TCG' to 'DH'
- Changed app name throughout the application

🔥 Fire-Themed Color Palette:
Light Theme (Warm Daylight by the Hearth):
- Primary: Warm cream (#fefcf8) like sunlit stone
- Secondary: Soft beige (#f7f3ed) like aged parchment
- Tertiary: Light wood tone (#f0e6d6)
- Text: Dark chocolate brown (#2d1810)
- Accents: Ember orange, flame orange, golden yellow

Dark Theme (Cozy Evening by the Fire):
- Primary: Deep charcoal (#1a0f0a) like burnt wood
- Secondary: Rich dark brown (#2d1b12) like oak
- Tertiary: Medium brown (#3d2317) like mahogany
- Text: Warm white (#fff8f0) like firelight
- Accents: Bright flame, glowing ember, golden glow

🎨 Fire-Inspired Design Elements:
- Flame gradient: Orange to ember red
- Golden gradient: Golden yellow to flame orange
- Fire glow effects with warm shadows
- Wood-toned borders and accents
- Ember and flame-colored interactive elements

🔧 Enhanced Component Styling:
- Updated BulkSelectionToolbar with fire colors
- New CSS classes: btn-flame, btn-ember, btn-gold
- Fire glow and ember glow effects
- Gradient backgrounds: gradient-bg-fire, gradient-bg-golden
- Tailwind color palette: hearth.flame, hearth.ember, etc.

 Warm & Inviting Experience:
- Light mode: Cozy daytime fireplace atmosphere
- Dark mode: Intimate evening hearth ambiance
- Maintains accessibility with proper contrast
- Smooth transitions between themes

The app now perfectly captures the warm, inviting feeling of gathering around a hearth! 🔥🏠
2025-07-26 08:30:07 -05:00
Randall Stillwell
48d1b1b5f9 📱 Implement Mobile-First Responsive Design
🎯 Mobile Slide-In Navigation:
- Added mobile menu button with hamburger icon
- Implemented slide-in sidebar with smooth transitions
- Added mobile overlay with click-to-close functionality
- Mobile menu auto-closes when navigating to new pages
- Proper z-index layering for mobile interactions

🃏 Smart Card Panel Positioning:
- Panels now open on opposite side for right-edge cards
- Added cardIndex and cardsPerRow props to CardItem
- Dynamic positioning based on card's position in grid
- Prevents panels from extending off-screen edges
- Maintains hover functionality on desktop

📱 Mobile-Optimized Bulk Actions:
- Toolbar now spans full width on mobile devices
- Icon-only buttons on mobile, full labels on desktop
- Responsive spacing and padding adjustments
- Improved touch targets for mobile interaction
- Maintains functionality across all screen sizes

🎨 Enhanced Grid Layout:
- Improved mobile grid: 2 columns with tighter spacing
- Better space utilization on all device sizes
- Responsive gap spacing that adapts to screen size
- Optimized padding for mobile vs desktop
- Cards now fill available space properly

 Cross-Device Experience:
- Mobile: Slide-in nav, icon-only actions, 2-column grid
- Tablet: Responsive layout with appropriate spacing
- Desktop: Full sidebar, labeled actions, hover panels
- Large screens: Maximum columns with side panel space

The app now provides an optimal mobile experience while maintaining desktop functionality! ��💻🖥️
2025-07-26 00:49:42 -05:00
Randall Stillwell
20ccd2333e 🎯 Implemented Collection Selection Modal System
 New CollectionSelectionModal Component:
- Multi-select collection interface with search functionality
- Visual card previews showing selected cards to add
- Select all/deselect all functionality for bulk operations
- Real-time collection filtering and search
- Professional modal design with dark mode support

🔗 Integration with Cards Page:
- Bulk selection toolbar now opens collection modal
- Individual card actions trigger collection modal
- Success feedback with detailed results
- Automatic selection clearing after successful additions

🎮 Enhanced Card Detail Page:
- Replaced old single-select dropdown with new modal
- Multi-collection support for single cards
- Automatic refresh of card collections after additions
- Consistent UI across all card interaction points

🎨 User Experience Features:
- Visual card thumbnails in modal header
- Collection metadata display (card count, public status)
- Loading states and error handling
- Responsive design for all screen sizes

Ready for seamless card-to-collection workflow! 📦
2025-07-26 00:22:35 -05:00
Randall Stillwell
a9c94b811f 🔗 Added Card Click Navigation to Detail Pages
 Card Navigation Features:
- Click anywhere on card to navigate to detail page
- Smart click detection avoids interference with interactive elements
- Works in both grid and list view modes
- Cursor pointer indicates clickable areas

🎯 Interaction Improvements:
- Checkbox, buttons, and links don't trigger navigation
- Side panel 'View Details' button uses same-tab navigation
- Consistent behavior across all card interactions
- Smooth user experience for card browsing

🚀 User Experience:
- Natural card browsing workflow
- Easy access to detailed card information
- Maintains all existing functionality (selection, actions)
- Professional click handling with event delegation

Cards are now fully interactive - click to explore! 🃏
2025-07-26 00:12:54 -05:00
Randall Stillwell
5d7a87374f 🐛 Fixed Side Panel Hover Logic for Multi-Select
🔧 Bug Fix:
- Removed persistent panel visibility for selected cards
- Side panels now properly hide when hovering away
- Selection state no longer interferes with hover behavior
- Maintains smooth hover delay and animations

 Improved UX:
- Side panels only appear on hover, regardless of selection
- Clean hover interactions without sticky panels
- Consistent behavior across all cards
- Better multi-select workflow

The side panels now behave correctly - they only show on hover and hide when you move away, even for selected cards! 🎯
2025-07-26 00:05:26 -05:00
Randall Stillwell
d537474a61 Added Magical Rarity Effects with Glowing Shadows & Particles
�� Rarity-Based Visual Effects:
- Mythic/Legendary: Golden glow with 3-layer pulsing animation
- Rare/Holo: Purple glow with shimmering particles
- Uncommon: Blue glow with subtle twinkling
- Enchanted/Secret: Rainbow cycling glow with rotating particles

💫 Dynamic Particle Systems:
- Radial gradient overlays for sparkle effects
- Animated opacity and rotation for enchanted cards
- Multiple particle layers for depth and richness
- Smooth pulsing animations with different timings

🎨 Enhanced Visual Hierarchy:
- Rarity-specific border colors and shadows
- Hover intensification of glow effects
- Side panel inherits rarity styling
- Pulsing rarity indicator dots in panel headers

 Performance Optimized:
- CSS-only animations using hardware acceleration
- Efficient keyframe animations
- Proper z-index layering
- Responsive particle effects

🎯 Smart Rarity Detection:
- Flexible string matching for various rarity names
- Supports MTG, Pokemon, Lorcana rarity systems
- Fallback to standard styling for common cards
- Case-insensitive rarity recognition

Cards now have that premium, magical feel! 🃏
2025-07-26 00:01:04 -05:00
Randall Stillwell
1387ecaccb 🎨 Redesigned Card Hover with Side Information Panel
 New Side Panel Design:
- Information panel slides out from the right side of cards
- 500ms hover delay to prevent accidental triggers
- 320px wide panel with comprehensive card details
- Smooth slide-in animation with backdrop blur effect

🎯 TCG-Specific Information:
- MTG: Mana cost, Power/Toughness, Colors with proper styling
- Pokemon: HP display with yellow highlighting
- Lorcana: Ink cost, Strength/Willpower stats
- Oracle text/description for all card types

🌙 Dark Theme Support:
- Full dark mode styling for all panel elements
- Dark-aware color schemes for TCG-specific badges
- Proper contrast ratios for accessibility

 Enhanced Features:
- Structured layout: Header, Body, Footer sections
- Grid-based action buttons with tooltips
- Copy card info functionality
- Responsive design (hidden on mobile/tablet)
- Better grid spacing with right padding for panels

🎨 Professional Polish:
- Backdrop blur effects for depth
- Smooth transitions with proper easing
- Z-index management for layering
- Reduced grid columns to accommodate panels

Perfect for detailed card inspection! 🃏
2025-07-25 23:55:54 -05:00
Randall Stillwell
a6602eab87 Redesigned Card Interaction with Sliding Information Panel
🎨 New Card-Focused Design:
- Cards now display as clean images without permanent overlays
- Information and actions slide out from behind the card on hover
- Selected cards scale up slightly and show persistent info panel

🚀 Enhanced User Experience:
- Card images are the primary focus, no visual clutter
- Smooth 300ms transitions with easing for professional feel
- Sliding panel appears 2px below card for depth effect
- Backdrop blur effect for better contrast and readability

 Improved Interactions:
- Primary actions (Collection, Deck) prominently displayed
- Secondary actions (Own, Favorite, View) in compact grid
- Proper z-index management prevents panel conflicts
- Increased grid spacing (gap-8, p-8) for sliding panels

🎯 Technical Improvements:
- CSS classes for consistent styling and performance
- Prevented text selection during interactions
- Transform origin optimization for smooth animations
- Proper pointer event handling for accessibility

Cards are now the star of the show! 🌟
2025-07-25 23:44:03 -05:00
Randall Stillwell
e2e5e5bcab 🚀 Added Bulk Selection System to Cards Page
 New Components:
- BulkSelectionToolbar: Floating bottom toolbar with selection count and actions
- CardItem: Modular card component with selection checkboxes and individual actions

🎯 Features:
- Multi-select cards with checkboxes (grid and list view)
- Floating toolbar shows selected count and quick actions
- Primary actions: Add to Collection, Add to Deck, Mark as Owned
- Secondary actions: Add to Favorites, Remove from Owned, Bulk Delete
- Individual card actions: Favorite, Add to Collection, Add to Deck
- Visual feedback: Selected cards get purple border and ring
- Hover effects: Quick actions appear on card hover

🎨 UX Improvements:
- Professional selection states with purple theming
- Smooth animations and transitions
- Responsive design for both grid and list views
- Clear selection button and action confirmations
- Tooltips and visual indicators

Ready for bulk card management! 📦
2025-07-25 23:22:15 -05:00
Randall Stillwell
d10b70da16 🔧 Fixed Cards Page API Response Format
- Updated /api/cards/search to return expected format with success, cards, pagination, and filters
- This fixes the empty cards page when clicking 'Add Cards'
- Removed debug console logs since TCG tags and CollaboratorFacepile are working
- Cards page should now display the sample cards properly
2025-07-25 23:16:35 -05:00
Randall Stillwell
e41d0b986e 🔧 Fixed TCG Tags and Add Cards Button
- Added missing 'game' field to collection cards API query
- Added onClick handler to 'Add Cards' button (redirects to /cards)
- Enhanced debug logging to see actual card data
- Ran sample cards script to ensure cards exist in database

This should fix the missing TCG tags issue by including the game field in the API response.
2025-07-25 23:13:54 -05:00
Randall Stillwell
7090adbb28 🔍 Added Debug Logging for TCG Tags and CollaboratorFacepile
- Made gameStats calculation dynamic to show all games present
- Added console logging to debug missing TCG tags
- Added debug logging to CollaboratorFacepile component
- Added fallback display for missing creator email
- This will help identify why the facepile and tags aren't showing
2025-07-25 23:11:27 -05:00
Randall Stillwell
34b16e972f 🔧 Fixed SQL Syntax Errors in Favorites API
- Separated conditional SQL queries to avoid template literal issues
- Added proper error handling in CollaboratorFacepile component
- Added error handling for favorites functionality
- Improved fallback states for failed API calls

This resolves the 'syntax error at or near AND' and '' parameter errors.
2025-07-25 23:06:16 -05:00