All projects

Interactive guide to European citizenship

Six interactive flows that show readers whether they may qualify for a European citizenship

Role Designed and built it end to end (sole author of the repo). Published by Folha on Sep 14, 2025.
Period Sep 2025
Outcome Published by Folha in September 2025, with strong audience numbers.
Stack
  • HTML
  • CSS
  • JavaScript (vanilla, zero dependencies)
  • CMS embedding
Published · Folha de S.Paulo Launch article (Folha de S.Paulo)

Context

The world desk of Folha de S.Paulo, Brazil’s largest newspaper, gets the same reader question over and over: whether they can get a European passport. It depends on the country and on your family, and the rules change often. So Folha published a tool instead of another explainer. The reader picks a country (Germany, Spain, France, Italy, Portugal or the United Kingdom), answers a short flow of questions, and gets a verdict on whether they appear to meet the current legal requirements. It went live on the site on September 14, 2025.

My role

I designed and built it. Sole author of the repo: the question flows for all six countries, the reader-facing copy, the interface, and the CMS embed that puts it inside a Folha article page.

The tech is deliberately boring. Six self-contained single-page flows in plain HTML, CSS and JavaScript. No framework, no build step, no dependencies. Each page is one file you can open in a browser and read top to bottom. It has to survive inside a news site’s CMS for years. So there is nothing to upgrade and nothing that breaks when a build tool changes version.

  1. 01 Reader inside a Folha article page
  2. 02 Country picker six self-contained flows
    • DE
    • ES
    • FR
    • IT
    • PT
    • UK
  3. 03 Question flow yes or no questions reduced from the current nationality law, one at a time
  4. 04 Verdict appears to meet, or not, the requirements
    • what to do next
    • restart on another country
One HTML file per flow no framework, no build step, no dependencies; embedded through a server-side include, with a script that reports the frame height back to the article page
Reader flow: pick a country, answer questions built from the current law, get a verdict and what to do next. All of it is mine, from the question flows to the CMS embed.

The hard part

Turning nationality law into questions a person can answer was harder than any of the code.

Each country has its own routes: descent, residence, marriage, language requirements, each with its own exceptions. I read the current requirements for all six and reduced each one to a handful of yes/no questions a reader gets through in a few minutes. Every branch that got collapsed had to stay accurate for the reader who lands on it. The output is worded as “you appear to meet the requirements”, never as legal advice, and every verdict ends with what to actually do next.

The second problem was keeping six variants from drifting apart. They share one markup pattern, so adding a country means duplicating the page and swapping the copy, the rules and the colors. One flow gets a fix, the others get the same fix by hand. Not elegant, but with six files and no dependencies I could diff two countries and see exactly where they differed.

Then there were the publishing constraints. The flows are embedded in article pages through server-side includes. A small script reports the frame height back to the parent page, so the article resizes as the reader advances. Typography comes from the paper’s font CDN so the tool matches the article around it, and the layout is mobile-first.

Two of the six published country flows (Portugal and Italy), each a single self-contained page.Two of the six published country flows (Portugal and Italy), each a single self-contained page.
Two of the six published country flows (Portugal and Italy), each a single self-contained page.

Outcome

Folha launched it publicly in the Mundo section on September 14, 2025, with its own launch article. It had strong audience performance; the published page is linked above.