carlos / movement Public

Clone
git clone https://amadan.net/carlos/movement

Plain git — no account needed to clone.

Download

Download this file

1[
2 {
3 "id": "form.name",
4 "section": "Signup form",
5 "label": "Name field label",
6 "text": "Your name",
7 "context": "Labels the first field on the signup form, above the email address. It is required — you are recruiting people into a movement, so a nameless row is one you cannot do much with. Say if you would rather it were optional and I will loosen it.",
8 "notes": "The field caps at 120 characters and accepts any script, so it does not break names that English-language forms usually break."
9 },
10 {
11 "id": "form.name.placeholder.never",
12 "section": "Signup form — \"No AI. Not for me.\"",
13 "label": "Name placeholder on the No AI page",
14 "text": "Ned Ludd",
15 "context": "Grey text in the name box, and it changes with the position somebody picked. This is the one for people who said they will not use AI: the actual leader the Luddites were named after. It reads as a real name first and a joke second, which is the order that matters — a placeholder that is obviously a gag stops showing you where to type.",
16 "notes": "Chosen to be flattering rather than mocking. In this crowd being called a Luddite is closer to a compliment, and getting that wrong on the page for people who already disagree with you would be the worst place to do it."
17 },
18 {
19 "id": "form.name.placeholder.curious",
20 "section": "Signup form — \"Interested, but uneasy.\"",
21 "label": "Name placeholder on the uneasy page",
22 "text": "John Cagey",
23 "context": "The one you suggested, for the middle group — the people this whole page exists to find. Cagey as in wary, and it scans as an ordinary name.",
24 "notes": "This is the page that matters most, so it is the one where a joke landing badly costs the most."
25 },
26 {
27 "id": "form.name.placeholder.enthusiast",
28 "section": "Signup form — \"All in. Fully-pilled.\"",
29 "label": "Name placeholder on the all-in page",
30 "text": "Max Tokens",
31 "context": "For the people who said they are all in. A real-sounding name that is also a model parameter — this audience reads it instantly, and it is the page that already hands them the model's output verbatim, so the joke is consistent with the one next to it.",
32 "notes": "Alternatives if this is too inside: \"Vera Singh-Ularity\", \"Ava Accelerato\", or something flatter."
33 },
34 {
35 "id": "form.badname",
36 "section": "Signup form",
37 "label": "Error when the name is missing",
38 "text": "We need something to call you.",
39 "context": "Shown above the form when somebody submits without a name. It is one of only two visible errors on the whole signup path — everything else renders the ordinary confirmation page, because saying more would let a stranger work out who is already on the list.",
40 "notes": "Saying this leaks nothing: it is a fact about the form just submitted, not about any address's state."
41 },
42 {
43 "id": "admin.col.name",
44 "section": "Admin",
45 "label": "Table column — name",
46 "text": "Name",
47 "context": "Column heading in the list of confirmed signups. Only you see it. The name is the first column now, ahead of the email address, since it is the thing you would actually read down.",
48 "notes": ""
49 },
50 {
51 "id": "signin.submit",
52 "section": "Admin sign-in",
53 "label": "Sign-in button",
54 "text": "Continue",
55 "context": "The button on the admin sign-in page. It said \"Send me a link\", which describes only one of the two things that can happen: a Keymail address is handed straight to Keymail's approval ceremony and never gets an email, while any other allowlisted address does get a link. The button cannot promise either without being wrong half the time.",
56 "notes": "Replacing a string you already approved, because it turned out to describe the wrong flow — you spotted it. \"Continue\" is deliberately neutral. The heading above already says Sign in, so repeating it here would just be an echo."
57 }
58]