Work placement via Unifrog — media & data literacy

Udecide

A one-week media-framing experiment, designed and run by a placement student

Each day, participants saw two real headlines describing the same news story and picked the one that felt more alarming, more sympathetic, or more trustworthy. The app anonymously logged the choice — and whether the participant noticed they'd been influenced at all — to test the Framing Effect on a live teenage audience.

Built by
Work-placement student
Placement via
Unifrog
Supervisor
Ian Dobbs
Duration
29 June – 3 July 2026
Stack
React · Supabase · Netlify

Udecide was built and run during a one-week placement sourced through Unifrog, the careers and education platform schools use to arrange work experience — not as a commercial engagement. It's presented here as a case study in rapid, supervised app-building — and in honest reporting of a small, imperfect dataset.

The idea

Does framing change your mind without you noticing?

The Framing Effect is the well-documented psychological pattern where the words a media source chooses shape how an audience feels about a story — often without the audience realising it happened. The placement student designed Udecide to test this directly: show two real headlines covering the same event, ask which feels more alarming, more sympathetic, or more trustworthy, then ask a follow-up — did you notice any bias before you chose? Where someone picks a side and says no, the effect is operating exactly as predicted.

The build was carried out entirely through Claude Code, with the placement student directing every decision — which stories to use, what the app should look like, how each screen should behave — and iterating through prompts rather than writing code by hand.

Udecide link preview card: the turquoise-to-orange arrow logo beside the tagline 'Compare two headlines. Vote for the one that grabs you.'

The link preview classmates saw when the participant link landed in Snapchat and WhatsApp

The build

Two apps, one shared database

The system splits into an admin app for entering each day's story and a participant-facing app for collecting responses, both reading and writing to the same Supabase database and deployed separately to Netlify.

Admin app
Headlines, sources, question entered
Supabase
Stories, participants, responses
Participant app
Mobile-first PWA, vote & reveal
Admin app

Story entry & management

A form for entering each day's two headlines, their outlets, and a comparison question — six presets or a custom prompt. Outlet dropdowns enforce two different sources per story, submission is blocked until every field is valid, and saved stories can be deleted with a confirmation step that also removes any linked responses.

Inline validation 6 preset questions Cascading delete
Participant app

Vote, follow-up, reveal

A mobile-first PWA — installable straight to a home screen, no app store needed. Sources are never shown, only the two headlines, so responses reflect the language itself rather than prior trust in a source. After voting, a follow-up asks whether the participant noticed any bias, then reveals the group's live A/B split. An anonymous session ID, generated on first visit, tracks progress across stories without collecting any personal data. The placement week's data collection is now complete, so the admin and participant apps are no longer running live.

PWA Sources hidden Anonymous session ID Live results
How the plan changed

Two real trade-offs, made mid-build

The brief that opened the placement week wasn't the one that closed it — and that shift is worth showing rather than hiding. Both changes were forced by practical constraints discovered during the work, not a change of direction for its own sake.

Day 1

Single subject, tracked daily

Original plan: one ongoing story, followed across five days, to see whether the same outlets frame it the same way over time.

Day 2

Narrowed to four fixed print outlets

The chosen story wasn't generating enough contrasting coverage. Scope narrowed to five unrelated stories, each sourced from two of four fixed titles — trading day-on-day outlet tracking for pairs the placement student could reliably curate to a high standard.

Day 2

Batch publish, not daily

All five stories released at once rather than one per day, on the expectation that completion would be higher in a single sitting than across five separate return visits.

Results

What the live week showed

Figures below come from eight read-only SQL queries run against the live dataset. The sample is small and reported as directional, not conclusive — see the caveats after each finding.

21
Anonymous participants
5
Headline pairs tested
33
Responses recorded
31%
Of possible answers submitted

Iran/ceasefire story: a 71/29 headline split with zero participants reporting they'd noticed any bias — the pattern the Framing Effect predicts most cleanly.

Trump crypto story: the largest split in the dataset, 88/13, with roughly half the group unaware of any pull.

One story ran the other way: the group that said they'd noticed bias voted more uniformly than the group that hadn't — reported rather than smoothed over.

An outlet confound: the Guardian was picked far more often when shown, but appeared in only two of five stories, always against the same rival — story selection and outlet effect can't be cleanly separated here.

Completion was bimodal: participants either finished all five stories or stopped after one — whatever happens between story one and two matters more to the final sample size than any headline content.

Design for a minor audience

Anonymous by design, not as an afterthought

Every participant was a school-age classmate reached over Snapchat, so the app was built to need nothing from them beyond a tap. No name, login, or email — an anonymous ID generated on first visit was enough to track progress and de-duplicate within a session, while keeping a dataset of personal information about children out of scope entirely. A privacy notice, shown once, explained in plain terms what was collected and why.

No personal data collected

The research question never required knowing who answered, only what they answered and how quickly.

The honest trade-off

21 is a count of browser sessions, not verified people — nothing de-duplicates a second device or a cleared cache. Reach, not headcount.

Technical approach

Built with Claude Code, directed by the placement student

All development — the admin app, the participant app, the database schema, and every bug fix — was carried out through Claude Code, with the placement student specifying requirements and iterating through prompts rather than writing code directly, and Ian directing the build. That loop — specify, review, refine — was the transferable skill the placement was built around, distinct from the media-analysis findings above.

React Supabase PostgreSQL Netlify Progressive web app SQL analysis Claude Code

Interested in working together?

If you have a data collection or analysis idea that needs a practical, well-built tool behind it, get in touch for an informal conversation.

hello@upmostltd.co.uk