Commit Graph
5 Commits
Author SHA1 Message Date
webmaster bd0881f882 cache-bust local assets; narrow the language facet to scores >= 3
Part 1 — asset versioning: every local <script src> and <link rel=stylesheet> on the
tracked pages now carries ?v=<sha256-of-the-file> (10 hex), computed at BUILD time from
the file's bytes by work/build-asset-versions.py — never hand-typed, and idempotent
(re-running with no file change rewrites nothing). This is what makes an edited
focus-rule.js / photo-upload.js a new URL instead of a stale cache hit.

Part 2 — language facet: a language now counts for the Language filter only when its
0-5 self-assessment is >= LANG_FACET_MIN (3 = 'works in it'). The constant sits beside
the 15-point rule in the page script and its mirror in build-directory.py. Nothing
stored changes; the card's languages chart still prints every language above 0, the
search box is unchanged, and the facet stays an exact membership test against the
card's value. A '1' language no longer offers the person under that language.
2026-11-03 21:26:58 +00:00
webmaster a6ada39784 feedback: remove identity block, heard_about and the publish consent question
- Delete the 'About you' fieldset (name, email, anonymous tick) and its
  validation: the claimed Upwork name now identifies the sender, and the
  feedback payload carries it only when a seat was claimed this visit.
- Remove the heard_about question.
- Remove the publish consent question. That question WAS the consent, so
  no feedback may be published: the cohort-full state now renders the
  closed-cohort line only, and the feedback-rendering branch (entry keys,
  publish constants, isPublishable, the .fb styles) is gone rather than
  left dead. The GET's 'feedback' array is no longer consumed.
- recommend: first label 'Yes' -> 'Yes, good idea' (value yes unchanged).
2026-11-03 20:09:07 +00:00
webmaster bb963850b1 feat(feedback): three-step progress bar + "Sign up here" link
A real <ol> whose current step carries aria-current="step" and whose
done step is marked by a tick (never colour alone), following the page
state — step 1 when seats are available, step 1 done / step 2 current
when a seat is claimed, and no bar at all in the cohort-full and
count-unavailable states. The bar states no count and no deadline:
both come from the wire.

The claimed state gains the signup link: "Sign up here",
target="_blank" rel="noopener noreferrer", pointing at the directory
page's own #apply form — the one place the application lives, no
invented URL. Secondary to any button; the accessible text says it
opens a new window.

Untouched: the four states, the consent gate, the claim body, the
leftKeys contract, the leak rules, the 15 questions, the corrected copy.
2026-11-03 20:04:20 +00:00
webmaster 28d95b4dcd fix(feedback): read the live route's Free/free seat-count keys
GET /webhook/feedback answers {"free":"","Free":9} (200), but the page
only read seats_left/seatsLeft, so the live page rendered state 4 ("We
cannot read the seat count right now."). Add the wire's own names after the
documented ones: leftKeys: [seats_left, seatsLeft, Free, free]. The existing
guard already skips "free": "" and requires a whole number >= 0, so 9 is
used and an empty string alone prints no number. Document the expected GET
reply (free/Free + the optional feedback[] shape and its publish gate) in the
constants comment. No total is returned, so "9 seats left" stays. Four
states, consent gate, claim body, leak rules and copy untouched.
2026-11-03 19:51:50 +00:00
webmaster 5d2dc11fbc feat(feedback): seat-claim + feedback page in our own design
Replaces the n8n-hosted form. Four states — seats available (count read
from the wire, never hardcoded), seat claimed (deadline as a clock time,
one hour attributed to the workflow), cohort full (consented feedback
only), and count unavailable (today's real state: the route 500s).

One constant each for the GET status route and the POST submit route;
both wire shapes stated in the page. A count that did not come off the
wire is never printed; an entry without consent is never rendered and
"no name" shows the words without the name.

Feedback form recreated from the n8n questions with the copy corrected
(finalize, de-conflated recommend options, textarea for the offer
question, consistent question marks) plus the claim, name/email or an
anonymous tick, and the publish-consent field that gates the list.

noindex, out of sitemap.xml and llms.txt, no inbound links. The Upwork
name and email never reach the Plausible payload.
2026-11-03 19:43:58 +00:00