From a7eeedaa8f3deb89ad391e3991c72882a015abd2 Mon Sep 17 00:00:00 2001 From: Alex Olson Date: Tue, 24 Feb 2026 08:13:35 -0500 Subject: [PATCH 01/20] Add feedback survey design doc --- .../2026-02-24-feedback-survey-design.md | 150 ++++++++++++++++++ 1 file changed, 150 insertions(+) create mode 100644 docs/plans/2026-02-24-feedback-survey-design.md diff --git a/docs/plans/2026-02-24-feedback-survey-design.md b/docs/plans/2026-02-24-feedback-survey-design.md new file mode 100644 index 000000000..4ca7c7a80 --- /dev/null +++ b/docs/plans/2026-02-24-feedback-survey-design.md @@ -0,0 +1,150 @@ +# Feedback Survey Page — Design + +**Date:** 2026-02-24 +**Status:** Approved + +## Overview + +A post-meetup feedback survey at `civictech.ca/feedback`. Fully anonymous, no login required. Designed to be completable in ~30 seconds (core questions only) or in more depth via optional expanders. Responses are committed as JSON files to the public `CivicTechTO/feedback` GitHub repo. + +--- + +## Architecture + +**New file:** `_pages/feedback.md` with `permalink: /feedback/` +**Layout:** existing `page` layout +**JS:** vanilla JavaScript (consistent with site conventions) + +### Submission Flow + +1. User fills out the form and clicks Submit +2. JS assembles a JSON object from all field values +3. JS calls the GitHub Contents API: + `PUT /repos/CivicTechTO/feedback/contents/submissions/.json` + using a fine-grained PAT scoped to Contents: write on that repo only +4. File is committed directly to `CivicTechTO/feedback` +5. Page replaces the form with a thank-you message + +### File Naming + +`submissions/YYYY-MM-DD-hacknight-NNN-<6-char-random>.json` + +Sortable by date, identifiable by meetup number, random suffix prevents collision. + +### PAT Handling + +Stored as a Jekyll config variable — set in `_config.yml` locally (gitignored) and as a GitHub Actions secret in CI. Rendered into the page at build time. Never committed in plaintext. + +The token is technically visible in rendered page source. This is acceptable: it is scoped so narrowly (write-only to one public repo) that the worst-case abuse is noise in the feedback repo. + +### Feedback Repo + +A new public repo `CivicTechTO/feedback` must be created. A `README.md` there should document the JSON schema. No CI or processing pipeline is needed at launch — the JSON files are the artifact. + +--- + +## Meetup Dropdown + +Jekyll populates the last ~10 meetups at build time from `site.meetups`, rendered as `