About
How Survey.cool works underneath: the files, the links, and where everything is kept.
Where your files go
Everything here happens in your browser. Surveys and answers are held on your own device, and nothing is uploaded to us. They do travel, which is the whole point, but only when you send them yourself, through your own apps, to people you choose, or when a survey's author has connected it to a destination of their own, which the survey tells you before you submit.
There is no account, no tracking and no server holding anything. The flip side is that clearing your browser data, or uninstalling the site, takes whatever was in it: export a CSV before you do either.
The survey file
A survey is one JSON file in the survey/v1 format: a title,
an id, the questions, and optionally a style, a thank-you message and an email
address for answers. Question types are short answer, paragraph, multiple choice,
checkboxes, dropdown, linear scale, number, date and time. Any question can be
required, and any question can be greyed out until an earlier answer says it
applies.
The format is plain enough for an AI assistant to write, which is what Design with AI on the Edit page relies on.
Links, QR codes and embeds
A response link carries the whole survey after the #s=:
the file, compressed and encoded to be safe in an address. The part of an address
after the # is never sent to a web server, so the survey goes from the
link straight into the page. A QR code holds the same link, and an embed puts the same
page inside somebody else's website.
Links over about 2,000 characters can be cut short by some apps, and a QR code has a hard size limit. When a survey outgrows them, the Edit page says so and offers the file instead, which has no limit.
Answers
Answers export as a CSV with one row per response: Survey,
Timestamp, Responder, one column per question, then Notes, Latitude,
Longitude, Last edited. Several CSVs, from as many devices as you like, can be
dropped into the Review page together and are pooled into one picture. The email
button builds a mailto: link, so the message is written in the person's
own mail app; answers too long for that are downloaded to attach.
Collecting automatically
A survey can name an address its author owns, under Send each
response to on the Edit page. Every response is then posted there as it is
submitted: a plain POST with the CSV row as JSON, plus a
Response ID column, to a Google Sheet through the script the Edit page
gives you, or to any webhook. Survey.cool's own servers never see it; it goes from the
responder's browser to the author's destination. Responses answered offline wait on
the device and are sent when it reconnects, by whichever Survey.cool page opens first,
or on Chrome and Edge by the site's service worker with no page open at all. A
correction carries the same id, so it replaces its row rather than adding one, and
deleting a response removes its row.
The Sheet script can also hold the survey itself. Publish update on the Edit page sends it a new version, protected by a private key the editor wrote into your copy of the script, and every link and QR code already handed out opens that version from then on, keeping anything already typed. Each response records the version it answered, and answers are kept by question rather than by wording, so rewording a question keeps its answers in one column.
The Review page can read a published CSV address, such as a Sheet's Publish to web link, and reads it again on every visit and on Refresh, so its charts are live.
Looks
Each survey carries its style in its own file: one of six palettes, optional colours, a typeface, corners, spacing and heading alignment. Every palette has a light and a dark version that follows the reader's own setting, and every pair of colours in them is checked against the WCAG contrast ratios. Colours you pick yourself are measured in the editor and flagged if they are hard to read.
Offline and installing
A service worker keeps a copy of the whole site on the device after the first visit, so every page opens and records with no connection. New versions arrive in the background and offer a reload rather than interrupting anything. Installing the site, from the Install page, only gives it its own icon and window: it is the same site either way.