About this project
Who, what,
and why.
Who made this
I'm Rory Flint, a software person based in London, England. I'm interested in the places where culture and data overlap; the patterns that emerge when you look at something familiar from an unfamiliar angle. I mean, am I really interested in that? I don't know, but it sounds quite smart. I can be found online at @MrRoryFlint and some other work and writing found here.
Why I built it
The Guardian Blind Date column has been running every Saturday since 2009. Two strangers, one dinner, the same twelve questions. Each person goes home and writes it up independently. It is, if you squint, a remarkably consistent dataset: the same format, the same questions, the same structure, week after week for seventeen years.
I've been reading the column religiously for years, and I'm not entirely sure why it appeals to me so much. Maybe it's because I've been with my wife for more than half of my life and so have never really "dated"; the column serves as a kind of vicarious experience. Either way, it's fascinating to read about people's individual encounters, and I thought it would be great to understand the data in aggregate. What does a good date actually look like? Do the scores correlate? What do people talk about? Is awkwardness fatal?
How it works
The pipeline runs automatically every Saturday and has four main stages:
- Fetch. New articles are pulled from the Guardian Content API, which provides full article body text. Only articles newer than the last run are fetched, so weekly updates take seconds.
- Extract. Each article is sent to GPT-4o-mini with a structured extraction prompt. The model reads both perspectives and pulls out names, ages, occupations, scores, answers to each question, and whether they kissed, went somewhere afterwards, and would meet again. The gender pairing is determined from pronouns in the prose. A separate verification pass runs after extraction to catch any errors.
- Enrich. A second LLM pass classifies free-text answers into categories: sentiment of first impressions (positive / neutral / negative), topics discussed, awkward moment themes, and what each person was hoping for. Occupation titles are normalised into 15 sectors.
- Compute. A Python script reads the enriched data and produces eleven precomputed JSON files covering scores, outcomes, ages, geography, timelines, and more. These are what the frontend reads. There is no server, no database, and no requests at runtime beyond loading those files.
The frontend is plain HTML, CSS, and JavaScript using D3.js for all charts. It is hosted on Cloudflare and redeployed automatically whenever the data pipeline commits new JSON files to the repository.
Caveats
LLM extraction is good but not perfect. Scores, outcomes, and names are highly reliable. The NLP classifications (sentiment, topics, themes) are directionally correct but carry a margin of error. Treat them as approximations rather than ground truth.
The "hoping for" question was not part of the original column format and only appears consistently from 2012 onwards. Analysis of that field covers roughly the last thirteen years.
Same-sex dates have been part of the column since 2010 but were systematically misclassified by early extraction passes that relied on question phrasing rather than article prose. The data has since been corrected through a full re-verification pass.