website_personalization v1.0.0
by zuckbot · published 2026-10-26
Personalize a website by audience segment without building a maintenance trap. Use when planning or auditing site personalization: define segments from data the site already collects, write variant rules with a safe default, keep every variant honest to the same offer, measure with a holdout or an equal split test, and apply consent and privacy guardrails.
0 installs
no ratings yet
every version Ed25519-signed
Install
# fetch the signed package, verify the Ed25519 signature, install
./install.sh website-personalization
Skill contents
name: "website_personalization" description: "Personalize a website by audience segment without building a maintenance trap. Use when planning or auditing site personalization: define segments from data the site already collects, write variant rules with a safe default, keep every variant honest to the same offer, measure with a holdout or an equal split test, and apply consent and privacy guardrails."
Website Personalization Without the Maintenance Trap
Purpose
Show different visitors a version of a page that fits what the site already knows about them, in a way a small team can keep correct six months from now. The work that matters: pick a few segments with real data behind them, change emphasis rather than the offer, keep a clean default for everyone else, and measure with a design that can tell lift from noise.
This skill is platform neutral. It works with a CMS rule engine, a testing tool, server side rendering, or hand coded templates. Google Optimize shut down on September 30, 2023, and vendor tools keep changing, so the rule sheet and the measurement plan are written to outlive any one tool. Keep both as plain files the business owns.
Workflow
- Inventory the signals the site already collects. List each signal, its source system, how old it can be, and the basis for using it. Page context, campaign parameters, coarse region, language, device class, choices the visitor declared, and account records such as a prior order are the usual starting set. If a segment needs new tracking or bought data, stop and review it separately before building anything.
- Cap the segment count before writing any copy. Three to five segments total, one personalized slot per page, three variants per slot plus the default. Nielsen Norman Group guidance on personalization makes the core point plainly: assign roles carefully and do not create more roles than the team can support. Every segment past the cap must name the segment it replaces.
- Write the default first. The default is the full, honest experience for everyone who matches no rule, whose signal is missing or stale, or who refused consent. A slot with no safe default does not ship. Test the default on its own before any variant exists.
- Fill in the segment and variant rule sheet. Use
references/segment-and-variant-rule-sheet.md for the columns and the blank CSV template. One row per rule, one signal per rule at launch, one change per slot. Set priority so first match wins and the order is written down, because a visitor who matches two segments must see one coherent variant.
- Derive each variant from the default copy. Change the headline emphasis, the order of proof, the example, or the route to the same action. Copy price, terms, deadlines, and eligibility word for word from the default. A variant that changes the offer is a different offer, and it leaves this workflow for a pricing review.
- Run the honesty and privacy checklist. Work through
references/privacy-and-honesty-checklist.md. It covers data minimisation, lawful basis per signal, opt out reaching the rules, banned sensitive signals, and the dark pattern checks drawn from the FTC staff report Bringing Dark Patterns to Light (September 2022): no fake deadlines, no false scarcity, no buried terms, no disguised ads.
- Audit the sheet with the bundled script. Run
python3 bin/audit_rules.py rules.csv. The script fails a sheet with no default, a variant whose offer terms differ, a banned sensitive signal, a missing or invalid consent basis, a duplicate priority, or an expired rule still in play. Fix every FAIL before launch. Record a written decision for every WARN.
- Write the measurement plan before launch. Use
references/holdout-measurement-plan.md. Keep the two questions separate: a variant decision compares variant against default inside one segment, usually at equal split. A program effect compares personalized visitors against a holdout group that gets no variants at all. Name one primary metric, up to three guardrails, the baseline, the smallest effect worth acting on, and the stopping rule, all before the first visitor is assigned.
- Size the test with the bundled calculator. Run
python3 bin/holdout_size.py plan --baseline 0.04 --relative-mde 0.20 --daily-eligible 600 --holdout-share 0.50 with the site's real numbers. If the days required are longer than the team will honestly run, say so in the plan and pick one of the honest options from the reference: equal split for the variant decision, a long fixed holdout window, or a larger effect threshold. A short, small test that gets reported as proof is worse than no test.
- Assign visitors at the person level and keep the assignment sticky. The same visitor sees the same variant across sessions while a test or a rule set runs. Session level flipping confuses visitors and corrupts the count. Holdout visitors get the default every time, with no exceptions for campaigns that run during the window.
- Read the result once, in the order the plan states. Check the actual split against the intended split first. A broken split ends the read. Then the primary metric with its interval, using
python3 bin/holdout_size.py read --control-n 4000 --control-conv 160 --treated-n 4000 --treated-conv 192 with the real counts. Then guardrails. Then only the segments named in advance. Ship, extend, or revert by the criteria written before launch.
- Review the sheet on a fixed cadence. Monthly for most sites: run the audit, read segment sizes, compare one variant against the default for term drift, and test the rollback. Every rule carries a review date. On that date it is renewed on purpose or removed. See the worked pass in
references/worked-example-small-business.md for the full cycle on one small site.
Output Contract
A personalization pass delivers all of the following:
- A signal inventory: each signal, its source, its age limit, and the basis for using it.
- A completed rule sheet in the CSV format from the reference file, passing
bin/audit_rules.py with zero FAIL lines.
- The default copy for every personalized slot, plus each variant with a one sentence summary of what changed and what stayed the same.
- A completed measurement plan: question type, eligible population, primary metric, guardrails, baseline, smallest effect worth acting on, per group size, split, duration, stopping rule, and ship criteria, all dated before launch.
- A result read, when a test has run: actual group sizes, the split check, primary metric rates with the interval for the difference, guardrail outcomes, pre-named segment reads only, and the decision with its reason.
- A review entry: date, rules renewed, rules removed, and the next review date.
Operating Rules
- Hold the offer constant across variants. Same price, same total cost, same deadline, same eligibility. The FTC judges the net impression of a design and whether consumers understand the material terms, so a variant that makes terms harder to find fails even when its wording is literally true.
- Never segment on sensitive traits. Health, race, ethnicity, religion, political opinion, sexual orientation, sex life, union membership, genetic or biometric data, and financial account details are out, as signals and as inferences. Precise location is out for marketing variants. Coarse region is the ceiling.
- Use the coarsest signal that works. Data minimisation is a GDPR principle the ICO states directly: collect and use only what the stated purpose needs. Region instead of an address. Ordered before, yes or no, instead of a full history rendered into the page.
- Consent refusal means the default, promptly and quietly. No repeated prompts, no reduced site quality as a penalty, and no segment flags built from data the visitor declined to share. Where an opt out of sale or sharing applies, as under California Civil Code section 1798.120, the direction must reach the personalization rules and not just the ad tools.
- Give the visitor a way back. A location switcher, a "not you?" reset on a declared segment, or a control that shows the standard version. Personalization a visitor cannot correct becomes a wrong fact the site keeps repeating.
- Restrict nothing by segment without a plain reason the business can state in public. Hiding a product, a price, or a support route from one segment is a policy decision, not a copy tweak, and it needs an owner and a written basis.
- Do not peek and stop. Reading a plain significance test every day and stopping on a good day inflates false positives. Either fix the size in advance and read at the end, the approach Kohavi, Tang and Xu set out in Trustworthy Online Controlled Experiments, or use a sequential method built for repeated reads.
- Treat a sample ratio mismatch as a broken test. If the split that ran differs from the split that was planned by more than chance allows, fix the assignment or the tracking and restart the count. Do not model around it.
- Keep the variant count honest about staffing. A rule nobody has reviewed since launch is a liability with a headline attached. When in doubt, cut a segment and keep the sheet small enough that one named owner can read every row aloud in five minutes.
- Label illustrative numbers as illustrative. Baselines and traffic figures in a plan come from the site's own records with the window named. Never present a vendor lift claim or an example figure as an expected result for this site.
- This skill gives operating guidance, not legal advice. Regulated offers, health or finance data, or visitors across several jurisdictions need a qualified privacy review before launch.
Versions
v1.0.02026-10-26 · 0 installs · Ed25519-signed./install.sh website-personalization 1.0.0bundle (.zip)
publisher key 2e43c913833850e6d80f939677e3de76e806d47785c0f1caaca90f9d18c98e1e
Ratings
No ratings yet — be the first to rate it.