The boom of artillery, muffled by heavy snowfall, echoes across the southern Ukrainian city of Mykolaiv, triggering a series of air raid sirens.
In the faded grandeur of a long-abandoned club for navy officers, 29-year-old Anastasia Aleksieieva is gathering food supplies, medicines and even home-made steel plates, carved out of local cars, for use as body armour.
Mykolaiv is now firmly in the sights of the Russian army – troops invaded from the nearby Crimea peninsula and have had more success in taking territory in this region than Russian forces elsewhere in Ukraine.
As the Russians work their way west towards the city people are starting to flee and the hospitals are filling with the injured.
But Anastasia has decided to stay, sending her one-year-old daughter and her mother away to safety.
“I’m a mum of my baby. But I have to help because I know how to do it,” the former army captain explains to the BBC.
The attack on a hospital in the besieged south-eastern city of Mariupol on Tuesday made her decide she had no other choice.
“That was the hardest moment for me,” she says.
Ukrainian forces in the city have, for more than a week now, successfully thwarted a major Russian advance west towards the larger port of Odesa.
In the city centre, Mykolaiv’s governor Vitaliy Kim is standing in fatigues, explaining how Ukrainian soldiers, helped by new reinforcements, had pushed Russian troops back between 15 and 20km (nine to 12 miles) towards the east, and had even surrounded some Russian units which were now in negotiations for their surrender.
Some of those troops were reportedly preparing to bring the captured and damaged Russian tanks into the city to show to residents.
But Mr Kim warns this is not a time to celebrate prematurely.
“We are winning this fight, but not this war,” he says.
The governor said a relatively weak Russian force had underestimated local resistance and expected to “be greeted with flowers”, but Russian reinforcements and planes could quickly turn the tide and enable the Kremlin to capture the whole Black Sea coastline.
“We need a closed sky,” he said, referring to the idea of a no-fly zone enforced by Nato. The Western alliance has so far rejected such an idea, as it could bring them into direct conflict with Russian planes that entered the area.
In the local hospital, head doctor Alexander Dimyanov said 250 Ukrainian soldiers and civilians had been injured in the past fortnight, 12 fatally. Three patients, too sick to be moved further west to safety, remained on the trauma ward.
“We’re exhausted,” said a nurse, who declined to give her name. Dr Dimyanov showed a video of his colleagues in tears, explaining that they were overwhelmed by the workload and by fears that their own families might be hurt.
“They’re crying because they don’t know if they’ll see them again. They don’t run away. They work here every day. We have a lot of wounded people, every day. They see the blood,” said Dr Dimyanov, who also called on the West to impose a no-fly zone.
Inhabitants of several apartment blocks in a civilian neighbourhood in the east of the city showed us where rockets or shells had hit their buildings in recent days, tearing holes in a stairwell and water pipes, and breaking dozens of windows.
“It’s rocket and artillery fire at night. And it’s pretty scary here. Very loud, especially at night,” said 17-year-old Bogdan Somberakov.
He was waiting for a lift with his luggage and his family on the western edge of Mykolaiv.
As he spoke a long convoy of coaches passed by, carrying children west towards the Moldovan border and safety.
War in Ukraine: More coverage
- LIVE: Latest updates from on the ground
- WATCH: On the front line with Ukrainian soldiers
- IMAGES: Scale of destruction in Mariupol revealed
- WAR CRIMES: Could Putin be prosecuted?
- IN DEPTH: Full coverage of the conflict