Ali Milani does good fighting talk. “If Boris Johnson has an ounce of courage he’ll stay here and fight his seat,” he says in the South Ruislip branch of Costa Coffee, west London. “If not, I might just follow him wherever he goes. Nah, I’m joking. I’ll beat whatever Tory comes here. It would just be sweeter if it’s Boris Johnson.”

Milani, a 25-year old Iranian immigrant – his mother moved here when he was five, and raised him single-handedly – could be on track to cause the biggest political upset of the 2019 General Election. It’s an intoxicating proposition: if Milani can achieve the 5 percent swing needed to turn Uxbridge into a Labour seat, he’ll be the first person in history to unseat a sitting British Prime Minister. He thinks he can do it. “I’m raring to go,” Milani says. “I want to explain to people what a Labour government means for them.”

When we meet outside South Ruislip tube station on a frosty November night, I am struck by his self-assuredness. (“I’m just doing media, bruv,” he says, taking a call. His phone is blowing up.) Unlike most politicians I’ve met, Milani doesn’t peacock to journalists, but he also doesn’t do talking point robo-speak. He seems to be telling it like it is. It’s odd. “Honest to God, I never saw myself as an MP,” he says. “I just thought I’d be an activist.” So much so that when a member of his local constituency association asked him to consider standing in Uxbridge in 2018, Milani hung up the phone.

South Ruislip station in the west London constituency of Prime Minister Boris Johnson.

He grew up in a council flat in Wembley, but went to school in Kilburn. His mum was on disability benefits, as were many of his friends’ parents. He was poor, but didn’t realise it. “If I went to a friend’s house, it wasn’t like their house was dramatically different to mine.” When he went to Brunel University, he had an awakening. “My first day, I’m sat around a table with my new flatmate, and one of them is talking about her horse. I’m like, ‘What do you mean a horse?’” He’s on a roll now. “I mean, where do you put a horse? You can’t just park a horse like a car in the street.” Wealth stopped being an intellectual concept, and became real.

After university, Milani spent two terms as student union president, before being elected vice president of the National Union of Students. He is affiliated with the pro-Corbyn Momentum movement, who are mobilising on his behalf on an unprecedented scale in Uxbridge, and he rattles through all the standard Momentum talking points: tuition fee abolition, re-nationalisation, prioritising the climate emergency, ending the creeping privatisation of the NHS.

Ali Milani, Labour's candidate for Uxbridge and South Ruislip, at a local branch of Costa Coffee.

His campaign has left the Tories rattled. Rumours swirl that Johnson may switch seats. They’re pumping money into Uxbridge to appeal to swing voters – the Guardian reports the Tories spent £1,178 in a single day on Facebook advertising. Milani can’t outspend the Tories, so shoe leather it will be. “Our strategy is not particularly innovative. We’re just going to speak to more people.” He’ll also be targeting students at nearby Brunel University – they’re integral to his hopes of getting elected.

As a teenager, Milani posted anti-Semitic tweets online. (He has apologised.) How will he persuade Uxbridge’s Jewish community to vote for him? “Look, I’ve tried to apologise without excuse or reservation,” Milani says. “The path I’ve gone down is that you have to apologise but you also have to reach out and rebuild trust. I have lots of Jewish friends and colleagues who’ve sat me down, and I’ve learned from them. But it’s within everyone’s right not to accept my apology.”

He regrets his anti-semitism, because he has experienced racism himself. “Around 7/7, I remember vividly,” he says. “Comments in school and on the street and stuff.” About what? “Oh, just the usual stuff. Muslims being terrorists.” After becoming a candidate, Milani received death threats. The Daily Mail ran an article about Milani, using a picture of ISIS fighters. “The thing is,” he laughs, “my mum’s English isn’t great, so she thinks any article written about me is positive. She’ll rock up with the Daily Mail, and I’ll say. ‘Let’s take that down now.’”

South Ruislip.

Earlier, standing outside South Ruislip tube station as Milani slurped a Ribena, I’d observed that his candidacy isn’t about him really, but about how much people hate Johnson. He’s fine with that. He loathes him too. “He’s a liar… he’ll do or say anything to advance his political career. I can’t stand that about him.”

If elected, he’ll be the second British-Iranian member of the House of Commons. He relishes the opportunity to subvert the right’s portrayal of immigration as a sort of cancer upon our body politic. “One of the cool things about my candidacy is that it allows people to challenge the framing of immigration.” He’s aware of the wider cultural significance of his candidacy. “On the one side, you’ve got the Etonian who wanted to be world king,” he summarises for me, “and on the other side you’ve got an immigrant who grew up in a council estate and went to a comprehensive school and lives in the community. It’s a fight for the soul of the country.”

We leave Costa and head out into the night. Momentum have organised a mass canvas. There will be speeches from Ash Sarkar and Owen Jones. People begin to trickle in. Leaning against the wall of the tube station, I ask Milani whether he’s kissed any babies. “Only one,” he laughs. “An activist’s son got sick, so they made me hold the baby.” Even his baby-kissing is authentic.

Milani and volunteers at a recent mass canvas in South Ruislip.

A smartly dressed man arrives, pulls a Labour rosette out of his briefcase, and congratulates Milani on recent Newsnight appearance. (In an assured performance, a tie-less Milani confronted former Secretary of State Stephen Crabb about the Tories’ record in office, and said Johnson wouldn’t be seen dead in his own seat.)

More people are streaming in, convening on a grass verge opposite the tube station. Soon, there are too many to count – I guess around 200 or 300. “My vote for Labour is obviously for what they stand for, but also to see the back of the Tory Party and the Brexit party,” says Nil Murrell, 54, a retired company director. “I feel very passionately about what’s been done to this country.” Even though she’s come out to canvas tonight, she’s not overly optimistic about the result. “It’s going to be tight.”

Milani dons a red head torch. “It’s to let people know I’m Labour,” he jokes. (It’s so he can read the constituency materials he’s handing out on doorsteps.) A police van drives past, and Milani runs over to flyer it. It is very cold and I can’t feel my feet. Milani has another 38 days of this. I don’t envy him. Under a canopy of leaves, illuminated by the chill of TV lights, Milani delivers a speech from atop an upturned recycling bin. Jones and Sarkar flank him, his caporegimes. He looks at ease. I think he can win this.

This is a story that can be told in many ways. Local boy fighting against the Tory parachuted into his seat. Immigrant versus the Establishment. The working class kid who grew up on benefits, challenging the Old Etonian who wanted to be world king. Or, a savvy political operator who saw an opportunity and thought, I can do better than him.

Milani went to see Johnson a few years ago at his constituency clinic, back when he was a student. He was a nobody then. I think Boris Johnson knows who he is now.