City suffered late heartbreak in their final away outing of the regular season, as a last-minute penalty condemned them to a 3-2 defeat at Crewe Alexandra.
A first-half brace from Dan Agyei sent the Railwaymen into the break with a controlled lead at the Mornflake Stadium.
City came flying out of the traps in the second half, however, as Andy Cook nodded home his 31st goal of the season in all competitions, before Jamie Walker levelled proceedings with a calm finish.
Hughes’ men battled until the end in search of a winner, but it was Crewe who would take home all three points, as Chris Long converted from 12 yards, in the 101st minute.
City started on the front foot on a sunny evening in Crewe, but it was the hosts wrestled the lead just after the quarter-hour mark.
After getting the better of Sam Stubbs, Agyei used his composure to slot past Harry Lewis and net his 15th of the season.
The lead did not seem to put the Railwaymen completely in the driving seat, however, as City enjoyed much of the possession in the first half.
Romoney Crichlow went close to an equaliser with Richie Smallwood’s free-kick, but mishit his shot as it bounced wide for a corner.
From the resulting corner, the on-loan defender was in the right place again, but could not trouble Tom Booth in the Alex net.
The hosts’ No.11 proved a nuisance once again, however, on the 40th minute, as a ball into the box found Agyei unmarked and his tap-in sent the Bantams into the break two goals behind.
Hughes’ side started the second half with a response, though as minutes after the restart, City halved the deficit - through top scorer Cook.
The No.9 rose highest from Smallwood’s corner to net his 28th goal in Sky Bet League Two, and his second successive header from a corner.
Needing a point to secure a play-off position, the Bantams - with the support of a sold-out away end - City levelled proceedings on the hour mark.
Walker pounced on a loose ball, after Booth let it slip from under his gloves, and converted into the empty net.
Looking to regain the lead, Long took aim from 35 yards for the hosts with a speculative right-footed effort, but it whistled wide of Lewis’ net.
With both sides frantically searching for the game's fifth goal, substitute Courtney Baker-Richardson thought he had caught out City’s No.1 with a hooked effort, moments before Cook’s looping header was stopped by Booth.
It was the home side that would take the victory, however, as after Dan Amoo was fouled inside the area in the 11th minute of added time, Long converted past Lewis from 12 yards.
City travel back to West Yorkshire needing a point against champions Leyton Orient to secure a League Two play-off spot on Bank Holiday Monday.
CREWE: Tom Booth (GK), Kelvin Mellor, Zac Williams (booked 15’), Rod McDonald (C), Chris Long, Conor Thomas, Daniel Agyei (booked 89’, Callum Ainley 90’), Connor O’Riordan, Lachlan Brook (Courtney Baker-Richardson 69’), Ryan Finnigan, Joel Tabiner. Subs not used: Dave Richards, Rio Adebisi, Luke Offord, Callum Ainley, Charlie Colette, David Amoo.
GOALS: Agyei (16’, 43’), Long (90+11' pen).
CITY: Harry Lewis (GK), Brad Halliday, Liam Ridehalgh, Richie Smallwood, Andy Cook, Jamie Walker (Matt Derbyshire 90+3’), Alex Gilliead, Scott Banks (booked 78’), Romoney Crichlow (booked 8’), Abo Eisa (Emmanuel Osadebe 70’), Sam Stubbs. Subs not used: Colin Doyle, Matty Platt, Tolaji Bola, Matt Derbyshire, Dion Pereira, Adam Clayton.
GOALS: Cook (46’), Walker (54’).
ATTENDANCE: 6,123 (2,314 City supporters).