Skip to content

Forms learn to celebrate - #34

Merged
AllTerrainDeveloper merged 1 commit into
mainfrom
feature/success-screens
Aug 21, 2026
Merged

AllTerrainDeveloper merged 1 commit into
mainfrom
feature/success-screens

Conversation

@AllTerrainDeveloper

Copy link
Copy Markdown
Owner

What this brings

Success screen designer — every message confirmation gets a visual gallery of nine styles (plain, simple, minimalistic, card, check mark, confetti, fireworks, sparkles, typewriter), each configurable: heading with merge tags, emoji, accent colour, intensity, optional "fill it in again" button. Picking a preset plays it full-screen over the builder through the exact renderer visitors get (src/success.ts, shared with the form bundle); the no-JS fallback renders the same markup statically. New atf_success_styles filter for third-party styles.

Device & browser analytics — aggregate device / browser / OS tallies per form (_atf_tech meta: counters over coarse classes, never a UA string, never a per-visitor row), a "Devices and browsers" report panel with share bars and per-device conversion, per-form privacy switches (Settings → Analytics), an atf_record_tech per-request veto for consent plugins, updated suggested privacy-policy text, and a demo population with realistic browser weights so the mobile-converts-worse pattern is a true finding.

Repeater error precision — a failing repeater emits one error per failing control (rep.row.sub keys) ahead of its row-level summary; the exact box goes red with its own message and aria-invalid, the failing row's card border follows, the container wears a ring, and the error summary indents a repeater's problems under its own line (client and no-JS render). The client validates rows itself on blur/submit and mirrors the sanitiser's drop-all-empty-rows rule. Plus the add-button gap the :where(button) reset had stripped.

Fixes — star ratings no longer light all five (row-hover matched the gaps between stars) nor display a three as a two (:checked ~ label unlit the clicked star's own label); button label colours now survive site themes that repaint button:hover.

Testing

  • 715 PHPUnit tests green (new: success screen contract, UA classifier, tech tallies + gating, per-control repeater errors, nested summary render)
  • 369 vitest tests green (new: success renderer + effects, repeater sub marking, nested summary)
  • PHPCS clean; docs (hooks-reference.md, architecture.md) updated

🤖 Generated with Claude Code

https://claude.ai/code/session_0119U4sRRWGcTQdwYreTwpAp

A success screen designer on every message confirmation: nine styles (plain,
simple, minimalistic, card, check mark, confetti, fireworks, sparkles,
typewriter), each configurable — heading with merge tags, emoji, accent,
intensity, an optional fill-it-in-again button — with a live full-screen
preview in the builder that runs the visitor's own renderer, and a static
no-JavaScript fallback that shares its markup.

Analytics learn what a visitor holds: aggregate device / browser / OS tallies
(counters over coarse classes, never a user-agent string or per-visitor row)
with per-device conversion in a new report panel, per-form privacy switches,
an atf_record_tech veto filter, refreshed privacy-policy text, and a demo
population that browses realistically enough for the mobile conversion gap to
be a true finding.

Repeaters stop shouting: a failing row names its exact control (dotted
rep.row.sub error keys, client and server), the container wears a ring and
the failing box the red, the summary indents a repeater's problems under its
own line, and the add button gets back the breathing room the button reset
had quietly taken.

Also: star ratings no longer light all five from the hover-in-the-gaps rule
(and no longer display a three as a two), and button label colours survive
site themes that repaint button:hover.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0119U4sRRWGcTQdwYreTwpAp
@AllTerrainDeveloper
AllTerrainDeveloper merged commit 68a5012 into main Aug 21, 2026
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant