Response Collection
At a glance
Response Collection captures answers across three identifiability modes — anonymous, pseudonymous, and attributed — with first-class support for autosave, continue-later magic links, configurable progress indicators, server-rendered public pages, and embeddable iframes. It is engineered for high completion rates on mobile devices and at outdoor petanque venues where connectivity is intermittent and respondents often pause mid-survey to play a game.
How it works
When a respondent opens a survey, the runtime first resolves the privacy mode declared by the survey author. In anonymous mode no user_id is persisted; the response is stored against a session token and only aggregate contributions remain. In pseudonymous mode the system computes sha256(survey_id + user_id) and stores the hash, which lets analytics deduplicate one-response-per-respondent without ever exposing identity.
In attributed mode the full user_id is recorded together with a frozen demographic snapshot (age band, region, license type, discipline) so segment breakdowns remain stable even if the member's profile later changes. The runtime renders questions one section at a time on small screens and as a continuous scroll on desktop, evaluates branching rules client-side, and posts answers to the API every ten seconds for autosave. If the respondent drops off, a continue-later magic link can be emailed or surfaced in the in-app inbox; the link rehydrates the partial draft including unsubmitted text and selected branches.
A configurable progress bar indicates completion based on reachable questions under the current branch path, recalculated as answers change. Public surveys are served by a server-rendered Astro page tuned for fast first paint, indexable metadata, and Cloudflare Turnstile challenge to deter automated submissions; the same runtime is exposed as an embeddable iframe with postMessage events so federation and club websites can host surveys inline and react to completion. All submissions pass through validation that enforces required fields, range checks, and choice integrity, and quality signals (timing per question, straight-lining, drop-off coordinates) are emitted to F20.05 for downstream filtering.
Submissions are idempotent on the (session, question) key so retries from flaky networks never produce duplicates.
Key capabilities
- Three privacy modes: anonymous, pseudonymous (hashed dedup), attributed with demographic snapshot
- Autosave every 10 seconds with continue-later magic links for partial completions
- Configurable progress bar that respects active branching paths
- Server-rendered Astro public survey page with Cloudflare Turnstile protection
- Embeddable iframe with postMessage events for federation and club websites
- Idempotent submissions safe for retries on intermittent mobile networks
- Quality signals emitted to QC pipeline (timing, straight-lining, drop-off coordinates)
In practice
A research lead is fielding an anonymous consultation on proposed shot-clock rules. She launches the survey in anonymous mode with a public link distributed via the federation newsletter and embedded as an iframe on three regional club sites. A respondent on a clubhouse phone opens the link, clears Turnstile, and starts answering.
Connectivity drops mid-session; the runtime queues the last two answers and resumes when signal returns. He pauses to play a game, the magic link arrives in his inbox, and he finishes that evening on his laptop. Because the survey is anonymous, his contributions are aggregated without identity, yet straight-lining detection flags one outlier response from another respondent for the lead to review.
Features in this subsystem
7| ID | Status | Features |
|---|---|---|
| F20.03.01 | Shipped | Anonymous mode — no user_id stored, only aggregate contributions ✅ PL-T079 |
| F20.03.02 | Shipped | Pseudonymous mode — sha256(survey_id + user_id) hash for dedup without identification ✅ PL-T079 |
| F20.03.03 | Shipped | Attributed mode — full respondent tracking with demographic snapshot ✅ PL-T079 |
| F20.03.04 | Shipped | Partial save — auto-save every 10s, continue-later via magic link ✅ PL-T079 |
| F20.03.05 | Shipped | Progress bar — configurable progress indicator ✅ PL-T079 |
| F20.03.06 | Shipped | Public survey page — server-rendered Astro page with Turnstile protection ✅ PL-T079 |
| F20.03.07 | Shipped | Embeddable iframe — embed surveys on federation/club websites ✅ PL-T079 |