Policy 03: Calls to action for a standalone tax-filing site
Written: 2026-07-24. Status: draft.
Answers question 1 of the Next steps in policy-03-tax-filing.md ("Should this be its own website / fundraise / attribution loop?") and specifies the conversion surface for it. Content and app structure are out of scope here — this doc is only about what we ask visitors to do, and how we count it.
The reframe: we are not raising money, we are manufacturing evidence of demand
The original plan was to accept donations, not because the project needs cash to operate, but to have a clear call-to-action and start a virtuous cycle. Donations are a poor instrument for that goal: they carry entity and campaign-finance overhead (see ../adr/stripe.md), and small-dollar totals are weak evidence of anything.
For this plank specifically, there is a far better thing to collect. Direct File was killed with a single argument — Treasury's replacement report and NTU both leaned on "296,531 users out of 30M+ eligible, at up to $138/return, so nobody wants this" (opposition argument 2 in the research doc). That is an empirical claim about demand.
So: every call-to-action on this site should manufacture the counter-evidence. N Americans, in M congressional districts, want their return pre-filled. That is the asset. It costs nothing legally, it compounds, and it aims directly at the load-bearing argument of the opposition.
Framework: three tests, one hero number
A CTA earns a place on the site only if it passes all three tests:
- Costly enough to be credible. A YouTube like costs the user nothing, so it proves nothing to anyone. An email plus a ZIP costs a little. A 30-second video of your own face costs a lot. Evidentiary value scales with what the action costs the person.
- Legible to an audience that matters. Three audiences, three different metrics: congressional staff read constituents in my district; journalists read a number plus a human story; technical allies (Code for America, EFF, HN, the Direct File alumni) read does the code work. The general public is not the target and should not drive the metric.
- Leaves a trace someone else sees. Otherwise we are the only party who knows it happened, and it cannot start a cycle.
Then the discipline: exactly one hero number on the homepage. Everything else is a rung on a ladder that leads to it. Movements with five co-equal asks convert on none of them.
The decision
Build the working demo, and make the demo the call-to-action.
Idea 3 in the research doc's Next steps — an open-source demo implementation of what IRS pre-filled filing would look like — is not a side project. It is the highest-converting CTA available, because it is the only one where the visitor experiences the thing being withheld from them. "13 hours and $290" persuades nobody. Watching a timer stop at 1:12 on a return that filled itself in is visceral, and it converts to a signature at a rate no petition page will reach.
The funnel
Try the demo (~90 sec)
↓
See your time vs. 13 hours ← the emotional beat; do not skip or bury it
↓
Sign: "Pre-fill my return" ← email + ZIP [HERO METRIC]
↓
Share your time card ← the viral loop
↓
(April 15, 2027) Activate → contact your representative
Four surfaces, one flow. Ship that; everything else is later.
Hero metric
Signatures — "N Americans want their taxes pre-filled."
Not visitors, not hours, not demo completions. Reasons: it is the number that directly
answers "nobody wants this"; it is the number a legislative assistant understands; and it
maps onto the existing subscribe conversion type, so attribution works on day one with
no schema change.
Show it on the homepage as a live counter with a visible goal and progress bar.
The stat we manufacture
Median time to file on our demo: 1 minute 12 seconds. IRS estimate for the real thing: 13 hours. We built it for $500.
We generate this number ourselves, from our own users, and it is a stronger press hook than anything in the research doc. It is the homepage headline, the YouTube title, and the HN submission title. Instrument the demo timer from the first deploy so this number exists — it cannot be reconstructed later.
The options
Ranked. "Rung" is position on the commitment ladder.
| # | CTA | Rung | Friction | Credibility | Spreads | Verdict |
|---|---|---|---|---|---|---|
| 1 | Try the demo — file a fake return | 1 | Low | n/a (hook) | High | Core, ship first |
| 2 | Sign: "Pre-fill my return" (email + ZIP) | 2 | Low | Medium | Low | Hero metric |
| 3 | Share your time card | 2 | Low | Low | Highest | Core |
| 4 | Claim your hours → live tally | 2 | Low | Medium | Medium | Strong, phase 2 |
| 5 | Tell your filing story (public wall) | 3 | Medium | High | Medium | Strong, phase 2 |
| 6 | 30-second video: "how long did yours take?" | 4 | High | Highest | Medium | Phase 3 |
| 7 | Tell your rep to cosponsor the Direct File Act | 4 | Medium | High (to staff) | Low | April 2027 |
| 8 | Star / fork the open-source repo | 2 | Low | High (to tech press) | High | Free win, ship with launch |
| 9 | Pledge to act on Tax Day, April 15 2027 | 3 | Low | Medium | Low | Strong, phase 2 |
1. Try the demo
A synthetic pre-filled 1040 flow: fake W-2 already loaded, taxpayer reviews, confirms, done. Start a timer on first interaction, stop on confirm. The entire persuasive payload is the timer plus the contrast screen that follows.
Do not gate it behind an email. The demo is the argument; charging for the argument destroys the funnel.
2. Sign: "Pre-fill my return"
Two fields: email, ZIP. ZIP is not optional — it is what converts a raw count into "constituents per district," which is the only form congressional staff care about. Present it as one line of copy explaining why we ask.
Reuses subscribe. No new conversion type needed for launch.
3. Share your time card
Server-rendered image: your time (1:12), the national average (13 hours), the site URL. Share buttons carrying UTM params so the existing attribution loop closes. Comparison is what drives sharing here — people post their number because it is theirs and because it is absurd.
4. Claim your hours
"How long did filing actually take you? What did you pay?" Two numeric inputs feeding a live tally: what we have counted (e.g. 4,182 hours) shown against what America loses (7.1 billion hours, per NTU). The gap is the point and the invitation.
Secondary benefit: a proprietary dataset. "In our sample of N filers, median time was X and median cost was $Y" is an original finding, and original findings get covered.
5. Tell your filing story
Two text fields, published to a public wall after moderation. This is journalist bait — reporters need a human, and a searchable wall of them is the single most useful thing to hand a reporter who has already agreed to write the piece.
6. Thirty-second video
Highest credibility per unit, highest friction. Do not launch with it — 200+ signatures first, so there is a pool to ask. When it ships, do not host uploads; ask for a public post plus a link submission. Hosting user video means moderation duty, storage cost, and a takedown process we do not want in month one.
7. Contact your representative
The specific ask exists and is live: the Direct File Act of 2026 (Warren / Sherman, 160+ cosponsors, introduced March 2026). "Ask your representative to cosponsor" is far stronger than a generic "tell Congress you care."
Do not build this ourselves. House member contact forms are individually idiosyncratic and CAPTCHA-protected; a homegrown integration will break constantly. Link to 5 Calls or a comparable vendor.
Hold this until Tax Day 2027 — see the timing note below.
8. Star / fork the repo
Nearly free, and for this plank the developer audience is the correct first audience: they will believe "the IRS could ship this" immediately, because they just cloned it and ran it. GitHub stars are public, hard to fake, and legible to exactly the reporters who cover this beat. Two independent flywheels (public list + technical credibility) beats one.
9. Tax Day pledge
"I'll spend ten minutes on April 15, 2027 telling my representative." A date-bound commitment that builds an activation list with a built-in news peg.
On the YouTube video
A video is worth having. "Like the video" is not worth having as a CTA — it is off-site, unattributable per person, builds nothing we own, and fails test 1.
Correct use: the video is the ad, not the ask. Two minutes: filing a return in ninety seconds on a website built for $500, cut against the $250M/year the IRS estimated and the $103M the incumbents spent lobbying since 2003. Title it with the manufactured stat. The CTA at the end is "beat my time," pointing at the demo.
Timing: build now, mobilize April 15
Today is July 2026. Tax Day 2027 is roughly nine months out — which is close to ideal. Build the list through the fall on demo-plus-signature, then activate it into representative contact during filing season, when the pain is present-tense and the press is already writing tax stories. Every phase-2 CTA should ladder toward that date.
Targets
So we know whether it is working:
| Milestone | Meaning |
|---|---|
| 1,000 signatures | A legislative assistant will take the meeting |
| 10,000 signatures | Press-worthy for a policy this niche |
| 100 stories | Enough for a montage and a feature pitch |
| 500 GitHub stars | Tech press will treat the demo as a story in itself |
Put the current number and the next milestone on the page. Visible progress converts.
Wiring notes for the build session
Current conversion types are a plain string on Conversion
(app/analytics/attribution.py:36): new_visitor, subscribe, contact, preorder,
with record_key (line 40) for records whose integer pk we do not expose.
Launch needs no new conversion type — the signature reuses subscribe.
When a phase-2 CTA does need one (story, pledge, hours_claimed), four places must
change together:
app/analytics/attribution.py— add the build block alongside the existing ones (~line 375)app/analytics/views.py:205— add to thevalid_typestupleapp/analytics/views.py:178— add to the chart list if it deserves its own chartapp/analytics/views.py:148+app/analytics/urls.py— add the detail route and dispatch
The demo timer is not a conversion — it is an attribute of the visit. Store it where a median can be computed over it, since that median is the headline stat.
Flags
- Label the demo unmistakably as not the IRS. Fictional branding, a persistent banner, synthetic data only. A convincing mock of a government filing site is the one version of this idea carrying real legal risk, and it is cheap to defuse.
- Never collect a real SSN or real tax data, not even optionally, not even "to make the demo more realistic." Prefilled fake W-2s only. This also keeps us clear of any data-security obligation we are not equipped to carry.
- No donations on this site until there is an entity. See ../adr/stripe.md; the 501(c)(4) route is the cheap one if that changes.
- ZIP is load-bearing. A signature count without geography cannot be turned into the district-level argument, and it cannot be retrofitted later. Collect it from signature one.
Open questions
- Which specific bill number does the Direct File Act of 2026 carry in each chamber? The research doc cites the press release but not H.R./S. numbers; needed for CTA 7 copy.
- Does the demo live on this site or its own domain? Own domain is better for the HN story, worse for the attribution loop.
- Is the "claim your hours" dataset worth an IRB-style disclosure about how we will publish aggregates? Probably not at this scale, but decide before publishing findings.