Commit graph

656 commits

Author SHA1 Message Date
2dc817e3d1 Add auto-advance to next media by default
- Videos/audio: auto-advance when media ends
- Images: auto-advance after 60 seconds
- PDFs: auto-advance after 60 seconds, cancelled if user scrolls
- Detect scroll via wheel/scroll events to cancel auto-advance
- Works in PiP mode, pop-out player, and floating audio player
- Seamless playlist-like experience through all media in shop
2026-01-21 10:56:17 -05:00
f0b23ec0ff Add parent page navigation and PDF support
- PiP now controls parent page: clicking prev/next in PiP navigates the parent page URL
- Add 'Go to Page' button (G key) to open current product page
- Add PDF support: renders PDFs in iframe, opens in pop-out (not PiP)
- PDFs and images fall back to pop-out player window
- Pass product URLs through playerData for navigation
- Audio gets small floating player, video gets PiP, PDFs get window
2026-01-21 10:51:36 -05:00
962a89c3a6 Add mobile support and responsive player controls
- Mobile devices open player in new tab (better than PiP)
- Add playsInline attribute for iOS autoplay support
- Responsive controls: hide PiP/auto-resize/always-on-top on mobile
- Implement togglePip function for desktop PiP button
- Optimize button sizes and spacing for touch screens
- Detect mobile via user agent and fallback gracefully
2026-01-21 10:47:57 -05:00
a6c76456d4 Fix PiP navigation to update video source instead of page navigation
- Prev/next in PiP now loads new video source dynamically
- Keeps PiP window open during navigation
- Updates playerData to maintain prev/next chain
- No page navigation, seamless media switching
2026-01-21 10:45:05 -05:00
dcbfd10101 Add native Picture-in-Picture mode with Media Session API
- Click video enters native browser PiP mode directly
- Uses Media Session API to add prev/next track buttons to PiP
- Falls back to small floating player if PiP not supported
- Cleaner than pop-out window, truly floats over all apps
2026-01-21 10:44:01 -05:00
a93d5e457f Redesign controls: centered 3-column grid with play/pause
- Center all controls in screen with dark background panel
- 3-column CSS Grid layout:
  Row 1: Prev | Play/Pause | Next
  Row 2: Always On Top | Fullscreen | Auto-Resize
- Add play/pause toggle button (space key)
- Make always-on-top more aggressive (250ms focus interval)
- Update play/pause icon based on media state
- Larger, more prominent navigation buttons
2026-01-21 10:41:25 -05:00
55fe55041f Ensure media always maintains aspect ratio during manual resize
Add max-width/height constraints and object-position to guarantee aspect ratio is preserved when user manually resizes the window
2026-01-21 10:37:44 -05:00
45ebe5c0ae Fix fullscreen to maintain aspect ratio
Request fullscreen on player container instead of document root to ensure media maintains aspect ratio with object-fit: contain
2026-01-21 10:35:53 -05:00
54e9303912 Fix auto-resize with minimum constraints and responsive controls
- Add minimum window size (600x400) to prevent controls from breaking
- Make button labels more compact (Full, On Top, Resize)
- Add responsive CSS for small windows (stack controls vertically)
- Fix auto-resize scaling to maintain aspect ratio with minimums
- Reduce button padding and gaps for better fit
2026-01-21 10:35:41 -05:00
d3047a7c0c Add pop-out media player with autoplay and navigation controls
Enables an immersive viewing experience for video, audio, and images through a dedicated player window. The player automatically resizes to match media dimensions, supports keyboard navigation, and includes toggles for always-on-top and auto-resize behavior. Features include:

- Pop-out window with autoplay for video/audio/images
- Dynamic window sizing based on media aspect ratio (320px to HD)
- Navigation controls for browsing shop's public media
- Always-on-top toggle (persisted to localStorage)
- Auto-resize toggle (persisted to localStorage)
- Fullscreen support
- Keyboard shortcuts (arrows, ESC, F, T, R)
- Feature flag for easy enable/disable (default: enabled)
- Products use preview file, content uses product file
- Only public products (visibility == 1)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-21 10:06:06 -05:00
82327c1d0b Fix sitemap date format - use YYYY-MM-DD for sitemaps, proper ISO 8601 for Atom 2026-01-11 09:42:05 -05:00
3dfbac6f3e Add sitemap, RSS/Atom feeds, and Google site verification for shops
- Add /sitemap.xml, /rss.xml, /atom.xml, /feed.xml routes
- Include only public products and content (visibility=1)
- Update robots.txt to include sitemap reference for shops
- Add google_site_verification column to shop model
- Add verification code input in shop integration settings
- Render verification meta tag on shop homepage
- Update CLAUDE.md with migration ID generation requirement
2026-01-11 08:52:38 -05:00
7ced344cb0 Update setup.py 2025-12-29 15:40:34 +00:00
5b648499fb Add Adyen payment config to development.ini 2025-12-23 17:07:18 -05:00
1d03d6aee4 Add PayPal settings form handler and pass keys to template, make API key inputs full-width 2025-12-22 18:41:04 -05:00
42241d79b7 Remove jQuery dependency, convert to vanilla JavaScript 2025-12-22 18:34:35 -05:00
4bc0c67e3a Add JavaScript documentation 2025-12-22 18:29:10 -05:00
a647d9798c Replace JS toggles with pure CSS using HTML details element for payment settings 2025-12-22 18:25:14 -05:00
b44942a4bc Add Adyen SDK to requirements 2025-12-22 17:38:25 -05:00
fe0482ac8a Merge branch 'feature/Paypal_checkout' into 'master'
paypal

See merge request engineering/make-post-sell/make_post_sell!57
2025-12-22 22:29:51 +00:00
4210bc1421 Add Adyen payment integration
- Add Adyen API credentials to Shop model (api_key, merchant_account,
  client_key, hmac_key, enabled)
- Add adyen_psp_reference to Invoice model for payment tracking
- Add Adyen checkout views (create-session, complete-checkout)
- Add Adyen webhook handler with HMAC verification
- Add shop settings UI for Adyen credentials
- Add request.adyen_enabled and request.adyen_globally_enabled
- Update ADYEN.md with verification details and implementation status
- Add 21 tests (8 unit, 5 integration, 5 functional + 3 invoice)
2025-12-22 17:16:54 -05:00
a2e2092a31 Add privacy warnings to PayPal docs, create Adyen integration doc
PayPal:
- Document invasive KYC requirements (face scanning, government ID)
- Note that crypto is the privacy-preserving alternative

Adyen:
- Document integration approach (similar to Stripe)
- Include Python library usage, webhooks, credentials needed
- Status: not yet implemented
2025-12-22 16:11:54 -05:00
ac2f586453 Add Stripe payment tracking and webhook resilience
- Add stripe_payment_intent_id and stripe_charge_id columns to Invoice
- Store payment references during checkout for traceability
- Use idempotency key to prevent duplicate charges on retry
- Add Stripe webhook handler for payment_intent.succeeded, payment_failed,
  charge.refunded, and charge.dispute.created events
- Consolidate PayPal webhooks into webhooks.py
- Add stripe.webhook_secret configuration for signature verification

Tests: 8 unit, 5 integration, 7 functional tests for Stripe functionality
2025-12-22 16:03:20 -05:00
0b89ab2bb3 Fix test_cart_checkout_for_shop to match current checkout flow
The checkout POST now returns a 200 OK directly (or with different
redirect count), so update the test to:
1. Use a while loop to follow any number of redirects
2. Update assertion text from "Please enter your payment information."
   to "Please confirm your order." to match current UI text
2025-12-22 15:32:55 -05:00
31592b6923 Add PayPal unit, integration, and sandbox functional tests 2025-12-22 15:21:46 -05:00
979c5117df Merge PayPal views into cart.py, delete paypal.py 2025-12-22 14:29:00 -05:00
8121772233 Rename and simplify PayPal docs 2025-12-22 14:21:24 -05:00
30c1e29aa8 Mark PayPal integration as released Dec 22, 2025 2:30 PM 2025-12-22 14:20:20 -05:00
261ad97c7b Remove PayPalPayment table, use Invoice columns instead
- Add paypal_order_id and paypal_capture_id columns to Invoice model
- Update migration to add columns to mps_invoice instead of creating separate table
- Remove PayPalPayment model (simpler architecture matching Stripe)
- Update paypal.py to store PayPal info directly on Invoice
- Update paypal_webhooks.py to query Invoice by paypal_order_id
- Update Invoice.payment_method property to detect PayPal payments
2025-12-22 12:51:07 -05:00
b5a32c797e Clean up PayPal docs: remove references to non-existent files 2025-12-22 12:43:35 -05:00
09e3873028 Update docs: single migration, tables auto-created 2025-12-22 12:41:45 -05:00
b43850d0c7 Add docs directory, CHANGELOG.rst, update README
- Create docs/ directory and move CHANGES_PAYPAL.md into it
- Add CHANGELOG.rst with unreleased section for PayPal integration
- Update README.rst to mention PayPal alongside other payment methods
2025-12-22 12:36:28 -05:00
66382c9ca2 Fix PayPal migrations: use proper revision IDs and remove table creation
- Rebased onto master to include grid_lanes_enabled and other changes
- Replaced fake revision IDs (a1b2c3d4...) with proper alembic-generated IDs
- Removed table creation migrations (auto-created)
- Removed obsolete merge migration
- Keep only shop column migration for paypal_client_id, paypal_secret, paypal_enabled
2025-12-22 12:27:17 -05:00
8a3b172c0a contains the class-to-table mappings that SQLAlchemy needs to know which table each model class belongs to. 2025-12-22 12:04:37 -05:00
ae8113b857 Update file development.ini 2025-12-22 12:04:37 -05:00
85c2bb5649 Update 9 files
- /make_post_sell/models/shop.py
- /make_post_sell/views/cart.py
- /make_post_sell/scripts/alembic/versions/a1b2c3d4e5f8_create_paypal_payment_table.py
- /make_post_sell/scripts/alembic/versions/a1b2c3d4e5f7_create_paypal_user_shop_table.py
- /make_post_sell/scripts/alembic/versions/a1b2c3d4e5f6_add_paypal_credentials_to_shop.py
- /make_post_sell/scripts/alembic/versions/1396317d0fc4_merge_paypal_and_default_theme_.py
- /make_post_sell/templates/shop_settings.j2
- /make_post_sell/request_methods.py
- /development.ini
2025-12-22 12:04:37 -05:00
557fdda9bc Update 3 files
- /make_post_sell/models/paypal_payment.py
- /make_post_sell/models/paypal_user_shop.py
- /make_post_sell/models/__init__.py
2025-12-22 12:04:37 -05:00
9eab6e0218 PayPal Saved Payment Methods:
- Add vault parameters to order creation for saving payment methods
  - Extract and store vault.id in PayPalUserShop after successful payment
  - Add "Save PayPal" checkbox to checkout page
  - Show saved status for returning customers
  - Add PayPal management section to billing page
  - Add disconnect PayPal functionality at /billing/disconnect-paypal

  - Refunds are handled externally by shop owners via PayPal dashboard
  - Platform does not track or process refunds
  - Update documentation to reflect external refund handling

  Documentation:

  - Update CHANGES_PAYPAL.md 

  No database migrations required - uses existing PayPalUserShop columns:
  - active_payment_token (stores vault.id)
  - payer_id (stores PayPal payer ID)
  EOF
  )"
2025-12-22 12:04:37 -05:00
22be720c53 - Added /billing/disconnect-paypal route 2025-12-22 12:04:37 -05:00
e8e0e52f40 make_post_sell/templates/cart_checkout.j2
- Added "Save PayPal for faster checkout" checkbox
    - Shows "PayPal saved" status for returning users
    - Sends save_paypal parameter to backend

make_post_sell/templates/billing.j2
    - Added PayPal management section
    - Shows connected status with PayPal logo
    - Added "Disconnect PayPal" button
2025-12-22 12:04:37 -05:00
4a6f7ebb3a make_post_sell/views/paypal.py
- Added vault parameters for saving PayPal payment methods

- Extract and store vault.id after successful payment

- Logs vault status (VAULTED vs APPROVED)

make_post_sell/views/billing.py
    - Added paypal_user_shop to template context
    - Added disconnect_paypal() view function
2025-12-22 12:04:37 -05:00
b3270eb369 Add CSS Grid Lanes support with toggleable shop setting
Implement CSS Grid Lanes (masonry layout) for product grids with graceful
fallback to standard CSS Grid for browsers that don't support it yet.

- Add grid_lanes_enabled column to Shop model (default: True)
- Add toggle in Shop Settings under Announcement Ribbon Settings
- Update product grid templates to conditionally apply grid-lanes-enabled class
- CSS uses @supports (display: grid-lanes) for progressive enhancement
- Mobile (160px min) and desktop (240px min) breakpoints supported

When enabled and browser supports Grid Lanes, products flow into a
waterfall/masonry layout where items fill the shortest column first,
creating a Pinterest-style layout that handles varying image heights.
2025-12-19 20:33:28 -05:00
3bf65966c5 Style video play overlay: red tint, add click-to-play text 2025-12-17 09:25:57 -05:00
f95daf02a8 Fix video play overlay visibility and positioning 2025-12-17 09:21:38 -05:00
f3a23ef2cf Add play button overlay on video thumbnails for unlocked content
Display a centered play button overlay on hero thumbnail images when
the product/content is a video file and the user has access to it.
Clicking opens the video in a new tab.

- Add CSS for .video-thumbnail-container and .video-play-overlay
- Support dark theme with appropriate contrast
- Show overlay on content.j2 for free video content
- Show overlay on product.j2 only when user has unlocked the product
2025-12-17 09:16:20 -05:00
82973e61a7 Increase meta description truncation to 500 chars 2025-12-15 07:58:54 -05:00
0777bfc051 Truncate meta descriptions to 200 chars for cleaner unfurl cards 2025-12-15 07:58:19 -05:00
d0a419afa1 Add Twitter card meta tags for proper link unfurling on Matrix/Discord
Links shared to Matrix/Discord were showing the logo instead of thumbnail1
because twitter:card and twitter:image meta tags were missing. Added
complete Twitter card support (summary_large_image) plus og:url and
og:site_name for better Open Graph compliance.
2025-12-15 07:57:04 -05:00
e4ec3e0d5e Improve OTP email visibility by making code the prominent h1 heading
- Move OTP code to top of email as large h1 element
- Increase font size to 3em for better readability
- Add letter spacing and bold styling for clarity
- Demote greeting text to regular paragraph
2025-11-01 11:48:34 -04:00
789acae6fa Merge branch 'fix/mobile-friendly-shop-editor' into 'master'
mobile-friendly-shop-editor

See merge request engineering/make-post-sell/make_post_sell!56
2025-11-01 13:58:49 +00:00