Changelog 4dd8831
lower survey age to 16
5 files of code, design or docs +44 −30 lines
Code, design and documents 5 files
scripts/survey-mock.cjs +1 −1
@@ -43,5 +43,5 @@ for (let i = 0; i < N; i++) { const liberal = gauss(); // the person's own leaning const r = { residence: home }; - r.age = pick({ a18: 22, a25: 34, a35: 22, a45: 12, a55: 7, a65: 3 }); + r.age = pick({ a16: 3, a18: 21, a25: 33, a35: 21, a45: 12, a55: 7, a65: 3 }); r.gender = pick({ man: 62, woman: 30, other: 4, skip: 4 }); r.setting = pick({ city: 52, town: 33, rural: 15 });
src/lib/survey.js +1 −1
@@ -18,3 +18,3 @@ export { results }; export const counted = survey.sections.flatMap((s) => s.questions.filter((q) => q.type !== "text").map((q) => ({ ...q, section: s.id }))); // what the form needs to know to send answers: nothing secret -export const submitConfig = { edition: survey.edition, open: survey.open && Boolean(survey.nostr.pubkey) && survey.nostr.relays.length > 0, ...survey.nostr }; +export const submitConfig = { edition: survey.edition, min_age: survey.min_age, open: survey.open && Boolean(survey.nostr.pubkey) && survey.nostr.relays.length > 0, ...survey.nostr };
src/pages/survey/take.astro +2 −2
@@ -37,5 +37,5 @@ const cond = (x) => (x.if ? JSON.stringify(x.if) : undefined); </ul> <p class="sv-editing" id="svEditing" hidden></p> - <label class="sv-check"><input type="checkbox" id="svAdult" /> <span>I am 18 or older and I am answering for myself.</span></label> + <label class="sv-check"><input type="checkbox" id="svAdult" /> <span>I am {survey.min_age} or older and I am answering for myself.</span></label> </section> @@ -173,5 +173,5 @@ const cond = (x) => (x.if ? JSON.stringify(x.if) : undefined); // a section may be left only when its required questions are answered function missing(step) { - if (step.dataset.step === "start") return document.getElementById("svAdult").checked ? null : "Please confirm that you are 18 or older."; + if (step.dataset.step === "start") return document.getElementById("svAdult").checked ? null : `Please confirm that you are ${cfg.min_age} or older.`; const r = repeat(step.dataset.step); const blocks = r ? blocksOf(r).filter((b) => Object.keys(read(b)).length) : [step];
survey/2026.yaml +5 −1
@@ -23,4 +23,8 @@ edition: 2026 title: State of Cannabis 2026 +# The youngest age the form accepts. 16 is the highest age of digital consent in any EU country, +# so a respondent of that age can agree for themselves everywhere in the EU. Lowering it means +# collecting from children who, in most countries, cannot consent without a parent. +min_age: 16 # Nothing is sent anywhere while `open` is false: answers are then kept in the browser only. @@ -44,5 +48,5 @@ sections: type: single required: true - options: {a18: 18 to 24, a25: 25 to 34, a35: 35 to 44, a45: 45 to 54, a55: 55 to 64, a65: 65 or older} + options: {a16: 16 to 17, a18: 18 to 24, a25: 25 to 34, a35: 35 to 44, a45: 45 to 54, a55: 55 to 64, a65: 65 or older} - id: gender text: Gender
survey/results-2026.json +35 −25
@@ -81,7 +81,8 @@ "counts": { "all": { - "a18": 577, - "a25": 893, - "a35": 559, + "a16": 80, + "a18": 549, + "a25": 863, + "a35": 537, "a45": 296, "a55": 177, @@ -89,7 +90,8 @@ }, "users": { - "a18": 404, - "a25": 607, - "a35": 385, + "a16": 48, + "a18": 392, + "a25": 587, + "a35": 369, "a45": 207, "a55": 122, @@ -97,7 +99,8 @@ }, "never": { - "a18": 97, - "a25": 158, - "a35": 106, + "a16": 21, + "a18": 84, + "a25": 154, + "a35": 102, "a45": 49, "a55": 31, @@ -105,7 +108,8 @@ }, "growers": { + "a16": 6, "a18": 87, "a25": 132, - "a35": 94, + "a35": 88, "a45": 55, "a55": 23, @@ -113,7 +117,8 @@ }, "region:Europe": { - "a18": 317, - "a25": 499, - "a35": 332, + "a16": 44, + "a18": 308, + "a25": 476, + "a35": 320, "a45": 178, "a55": 86, @@ -121,7 +126,8 @@ }, "region:North America": { - "a18": 124, - "a25": 192, - "a35": 113, + "a16": 15, + "a18": 119, + "a25": 184, + "a35": 111, "a45": 55, "a55": 39, @@ -129,7 +135,8 @@ }, "region:South America": { - "a18": 49, - "a25": 77, - "a35": 44, + "a16": 4, + "a18": 50, + "a25": 74, + "a35": 42, "a45": 17, "a55": 19, @@ -137,7 +144,8 @@ }, "region:Asia": { - "a18": 37, - "a25": 64, - "a35": 36, + "a16": 8, + "a18": 30, + "a25": 68, + "a35": 31, "a45": 23, "a55": 22, @@ -145,5 +153,6 @@ }, "region:Oceania": { - "a18": 20, + "a16": 5, + "a18": 15, "a25": 30, "a35": 18, @@ -153,7 +162,8 @@ }, "region:Africa": { - "a18": 30, + "a16": 4, + "a18": 27, "a25": 31, - "a35": 16, + "a35": 15, "a45": 9, "a55": 6,