41 Commits
Author SHA1 Message Date
shadowdaoandClaude Sonnet 5.5 473fe192cd Security review fixes: keep pending-capture ids, ship uninstall.php (+verify step), webhook guard, IPv6 /64 + global order throttle, token-safe redirects, honest refund wording, request-id and overlay-token hardening
Test and Release / test (push) Successful in 1m23s
Test and Release / release (push) Successful in 5s
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026.11.15-2209
2026-11-15 14:07:44 -08:00
shadowdaoandClaude Sonnet 5.5 68bd917660 LICENSE, clean uninstall (opt-in data removal), privacy policy text, Update URI header
Test and Release / test (push) Successful in 1m28s
Test and Release / release (push) Successful in 4s
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026.11.15-2202 2026.11.15-2203
2026-11-15 14:00:04 -08:00
shadowdaoandClaude Sonnet 5.5 fb200594ce Admin tables: scroll containers and phone cards; Alerts list flags missing media
Test and Release / test (push) Successful in 1m26s
Test and Release / release (push) Successful in 5s
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-15 13:59:20 -08:00
shadowdaoandClaude Sonnet 5.5 afa768fa42 Overlays refresh themselves after updates; media URLs versioned; frameless (transparent) alerts
Test and Release / test (push) Successful in 1m17s
Test and Release / release (push) Successful in 5s
- Overlay\Build id (plugin version + admin epoch) in X-SG-Build; overlay.js reloads once on mismatch (loop-guarded); 'Refresh all overlays now'
- Media URLs carry ?v=<mtime>
- Alert option 'Frameless' (schema v5): no box so transparent PNG/GIF/WebP and VP9-alpha WebM show through; admin preview with checkerboard and ffmpeg help

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026.11.15-2142
2026-11-15 13:41:18 -08:00
shadowdaoandClaude Sonnet 5.5 9249b80cb6 Donation form: non-refundable notice under the PayPal buttons (editable in Settings)
Test and Release / test (push) Successful in 1m16s
Test and Release / release (push) Successful in 5s
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026.11.15-2139 2026.11.15-2140 2026.11.15-2141
2026-11-15 13:34:54 -08:00
shadowdaoandClaude Sonnet 5.5 cc5b9518e4 Mobile pass 2: reward checkmark spacing, admin table/cell/radio/slider sizing on phones, alert preview scaling
Test and Release / test (push) Successful in 1m19s
Test and Release / release (push) Successful in 4s
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-15 13:34:15 -08:00
shadowdaoandClaude Sonnet 5.5 f6cd67ed0d README: alerts with media, tiers, end-at-target, Cloudflare
Test and Release / test (push) Successful in 1m26s
Test and Release / release (push) Successful in 9s
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-15 13:28:57 -08:00
shadowdaoandClaude Sonnet 5.5 4c379a0245 Tiered goals: ordered milestones with unlocks, tier-aware goal bar, TIER UNLOCKED alerts, next-unlock line
Test and Release / test (push) Successful in 1m21s
Test and Release / release (push) Successful in 4s
- Tiers\TierPolicy (pure), TierRepository (atomic reached marking), Tiers\Recorder hooked before close-at-target
- Admin tiers screen; goal target derived from the final tier
- Overlay goal widget shows Tier N of M and fills within the tier; alert pill; donate form 'Next unlock'
- Installer DB_VERSION 4 (sg_goal_tiers)

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026.11.15-2117
2026-11-15 13:09:18 -08:00
shadowdaoandClaude Sonnet 5.5 39840a20d7 docs: goal tiers contract
Test and Release / test (push) Successful in 1m17s
Test and Release / release (push) Successful in 5s
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026.11.15-2108 2026.11.15-2109 2026.11.15-2110
2026-11-15 13:01:57 -08:00
shadowdaoandClaude Sonnet 5.5 2c16a9ebbb Alert media: images/GIFs/videos/sounds tied to donation amount or reward; release tag collision fix
Test and Release / test (push) Successful in 1m20s
Test and Release / release (push) Successful in 4s
- Alerts\Resolver/Media/Template/AlertMedia/DefInput/DefRepository; Alerts admin screen with Media Library picker and live preview
- Overlay: media resolved server-side from attachment IDs (MIME whitelist), playback with timeouts and autoplay-failure fallbacks
- Workflow: pick the next free minute if the version tag already exists (two pushes in one minute failed 'Create release')

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-15 13:01:31 -08:00
shadowdaoandClaude Sonnet 5.5 1201db175b Mobile: 44px tap targets, 16px inputs, full-width form, admin tables scroll inside their container
Test and Release / test (push) Successful in 1m29s
Test and Release / release (push) Successful in 4s
From a phone-width QA pass (320-768px) of the live donate page and admin screens.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-15 12:56:53 -08:00
shadowdaoandClaude Sonnet 5.5 43106d9edc Automatic Cloudflare detection for rate limiting (trusts CF-Connecting-IP only from Cloudflare ranges)
Test and Release / test (push) Successful in 1m19s
Test and Release / release (push) Failing after 5s
- Core\CidrMatcher (IPv4/IPv6), Core\CloudflareRanges (published ranges, filterable)
- ClientIp 'auto' mode, default for new installs; diagnostics show whether the connection is from Cloudflare

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026.11.15-2055
2026-11-15 12:54:10 -08:00
shadowdaoandClaude Sonnet 5.5 5ea1e1d273 End-at-target goals (auto-close when target reached) and fit-to-window rewards menu overlay
Test and Release / test (push) Successful in 1m14s
Test and Release / release (push) Successful in 4s
- Core\GoalTargetPolicy; atomic close in the capture path; friendly 'goal reached' message
- In-flight checkouts still capture; new orders for a closed goal are refused
- Rewards menu overlay: card hugs content, text scales to the window, resize-aware, scroll only as a last resort

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-15 12:53:07 -08:00
shadowdaoandClaude Sonnet 5.5 1c6d93ad5f Test: schema version assertion is a minimum, not an exact value
Test and Release / test (push) Successful in 1m14s
Test and Release / release (push) Successful in 4s
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026.11.15-2051
2026-11-15 12:50:35 -08:00
shadowdaoandClaude Sonnet 5.5 da1365f060 Schema v3: goals.close_at_target and alert_defs table (contract in docs)
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-15 12:50:26 -08:00
shadowdaoandClaude Sonnet 5.5 f8d6bc2195 README: document rewards
Test and Release / test (push) Successful in 1m16s
Test and Release / release (push) Successful in 6s
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026.11.15-2047
2026-11-15 12:45:45 -08:00
shadowdaoandClaude Sonnet 5.5 e9e3265b22 Donate form: clearer selected state on amount/reward buttons
Test and Release / test (push) Successful in 1m15s
Test and Release / release (push) Successful in 4s
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026.11.15-2041
2026-11-15 12:40:14 -08:00
shadowdaoandClaude Sonnet 5.5 b0b5012698 Add donation actions (rewards): menu editor + queue, donate-form buttons, overlay menu widget, alert lines
Test and Release / test (push) Successful in 1m43s
Test and Release / release (push) Successful in 7s
- Actions\Matcher (exact / every), ActionRepository, Recorder (idempotent via unique key)
- Admin: Rewards screen with live preview, queue with Mark done, menu badge
- Donate form shows actions as payment buttons; overlay 'actions' widget; alerts list triggered actions
- Installer DB_VERSION 2 (sg_actions, sg_action_events)

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026.11.15-2038
2026-11-15 12:36:28 -08:00
shadowdaoandClaude Sonnet 5.5 c62ac06b27 docs: donation actions contract
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-15 12:33:50 -08:00
shadowdaoandClaude Sonnet 5.5 11ac72b23b Test: pin down which rows the abandoned-checkout purge may delete
Test and Release / test (push) Successful in 1m20s
Test and Release / release (push) Successful in 5s
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026.11.15-2031
2026-11-15 12:30:21 -08:00
shadowdaoandClaude Sonnet 5.5 f7ff1dc717 Alerts overlay: show messages approved after later donations (recent mode with client-side dedupe)
Test and Release / test (push) Successful in 1m10s
Test and Release / release (push) Successful in 5s
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026.11.15-2027
2026-11-15 12:26:03 -08:00
shadowdaoandClaude Sonnet 5.5 875ca42054 CSV export: only completed donations (not abandoned checkouts)
Test and Release / test (push) Successful in 1m18s
Test and Release / release (push) Successful in 4s
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026.11.15-2015
2026-11-15 12:14:04 -08:00
shadowdaoandClaude Sonnet 5.5 c7f2dcffeb Make bonus rules visible: highlighted BONUS line on the alerts overlay, streamgoals_bonus action
Test and Release / test (push) Successful in 1m14s
Test and Release / release (push) Successful in 4s
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026.11.15-2008
2026-11-15 12:07:06 -08:00
shadowdaoandClaude Sonnet 5.5 1e2ca96eed README: updates need no token now that the repository is public
Test and Release / test (push) Successful in 1m35s
Test and Release / release (push) Successful in 5s
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026.11.15-2001
2026-11-15 11:59:53 -08:00
shadowdaoandClaude Sonnet 5.5 4cec93067c Add in-WordPress updater: checks Gitea releases, one-click and auto updates
Test and Release / test (push) Successful in 1m15s
Test and Release / release (push) Successful in 7s
- Update\ReleaseParser (pure, host-pinned, https only) and Update\Updater (WP hooks, cached, failure-safe)
- Settings: optional access token for a private repo, 'Check for updates now'

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026.11.15-1955
2026-11-15 11:53:42 -08:00
shadowdaoandClaude Sonnet 5.5 27646c1001 Fix Rules screen crash: Store::rules() discarded decoded config (by-ref foreach over a cast copy)
Test and Release / test (push) Successful in 1m14s
Test and Release / release (push) Successful in 5s
Also make an unreadable rule non-fatal on the Rules screen, and add a regression test.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026.11.15-1948
2026-11-15 11:47:13 -08:00
shadowdaoandClaude Sonnet 5.5 3bbd77b661 Settings: show which address/proxy headers the server passes to the plugin
Test and Release / test (push) Successful in 1m17s
Test and Release / release (push) Successful in 5s
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026.11.15-1944
2026-11-15 11:43:18 -08:00
shadowdaoandClaude Sonnet 5.5 e4d9042aba Add visitor-IP header setting, checkout-button toggles, and configurable timer maximum
Test and Release / test (push) Successful in 1m13s
Test and Release / release (push) Successful in 5s
- Core\ClientIp: trusted-header resolution for rate limiting behind Cloudflare/proxies
- Settings: show/hide Pay Later and Debit/Credit Card (Pay Later off by default)
- add_time rule: optional max_timer_seconds (uncapped by default), editable in rule form

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026.11.15-1941
2026-11-15 11:40:06 -08:00
shadowdaoandClaude Sonnet 5.5 4f92cfdade Show donate form messages above the PayPal buttons
Test and Release / test (push) Successful in 2m48s
Test and Release / release (push) Successful in 4s
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026.11.15-1854
2026-11-15 10:51:44 -08:00
shadowdaoandClaude Sonnet 5.5 fa4feddd35 Fix info tip closing itself when a hover precedes the click
Test and Release / test (push) Successful in 1m13s
Test and Release / release (push) Successful in 6s
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026.11.15-1848
2026-11-15 10:45:52 -08:00
shadowdaoandClaude Sonnet 5.5 e22675f54b Donate form: custom-amount label, visible minimum, fee-cover info icon; hard 1.00 floor; purge abandoned checkouts; drop refund filters; soften personal-account wording
Test and Release / test (push) Successful in 3m9s
Test and Release / release (push) Successful in 8s
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026.11.15-1844
2026-11-15 10:41:29 -08:00
shadowdaoandClaude Sonnet 5.5 a259c0b0a1 README: clarify when a PayPal Business account is required
Test and Release / test (push) Successful in 2m18s
Test and Release / release (push) Successful in 4s
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026.11.15-1833
2026-11-15 10:30:59 -08:00
shadowdaoandClaude Sonnet 5.5 19d399e8c7 Add README with install and PayPal setup guide
Test and Release / test (push) Successful in 1m15s
Test and Release / release (push) Successful in 8s
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026.11.15-1829 2026.11.15-1830
2026-11-15 10:26:23 -08:00
shadowdaoandClaude Sonnet 5.5 4efdef72f6 Add admin UI: setup wizard, goals, rules editor, donations, moderation, overlays, settings
Test and Release / test (push) Successful in 2m34s
Test and Release / release (push) Successful in 9s
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-15 10:26:03 -08:00
shadowdaoandClaude Sonnet 5.5 0b9e6e7cbb Add Gitea Actions workflow: test gate, then versioned zip release
Test and Release / test (push) Successful in 1m24s
Test and Release / release (push) Successful in 5s
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026.11.15-1822
2026-11-15 10:20:53 -08:00
shadowdaoandClaude Sonnet 5.5 2e3abf33d9 Drop refund handling, finalize captures via webhook, add profanity filter
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-15 10:20:53 -08:00
shadowdaoandClaude Sonnet 5.5 35f5d1acfb Add profanity settings keys
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-15 10:18:43 -08:00
shadowdaoandClaude Sonnet 5.5 589e84f28b Add PayPal client, donate flow, webhook; wire rules engine with per-goal lock
Replace the static Engine call (which silently failed) with Engine::default()
and a MySQL named lock. Add engine->overlay integration test.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-15 08:47:00 -08:00
shadowdaoandClaude Sonnet 5.5 65082fb2f5 Add OBS overlays (goal, timer, counter, alerts) with ETag polling
Align timer state key with rules engine (timer_ends_at).

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-15 08:45:22 -08:00
shadowdaoandClaude Sonnet 5.5 7155396312 Add goals repository and configurable rules engine
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-15 08:44:52 -08:00
shadowdaoandClaude Sonnet 5.5 939193f258 Scaffold plugin: architecture contract, schema, settings, fee math
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-15 08:42:30 -08:00