Every marker is a real place. Every number refers to a person.
Between the day of 20 July and the morning of 21 July, Russian missile, guided-bomb, drone and artillery strikes killed sixteen people and injured at least 103 across Dnipropetrovsk, Odesa, Kharkiv, Donetsk, Zaporizhzhia, Kherson and Sumy oblasts. A guided bomb hit a residential building in Pavlohrad, killing two and injuring 18, and a missile struck a civilian enterprise in Odesa Oblast, killing three. Figures are official but preliminary; one Kherson casualty also appears in the previous edition, counted once in multi-day totals.
These are not just numbers, photographs, or cards. They are real people’s lives.This report preserves only facts confirmed by official sources.
Overnight into 21 July, Russia attacked Ukraine with 58 strike drones — Shahed-type (including jet-powered variants), Gerbera, Italmas, "Banderol" loitering munitions and "Parodiya" decoy drones — launched from Kursk and Oryol in Russia and from occupied Donetsk and Hvardiiske in Crimea. The Ukrainian Air Force reported that air defence shot down or suppressed 46 of them as of 08:00, while eight strike drones hit targets at seven locations (Ukrainian Air Force, via the kpszsu Telegram channel, on the morning of 21 July; figures preliminary, the attack still ongoing at the time of reporting).
Verified by the UN Human Rights Monitoring Mission (OHCHR): in July 2026 alone, at least 437 civilians were killed and 2,610 injured in Ukraine — the highest monthly civilian death toll since May 2022.
Official confirmation required. A report is included only after confirmation by a Ukrainian regional administration, the State Emergency Service (DSNS), police or another public authority. A link may lead to reputable reporting that directly attributes the facts to that official source. Casualty figures are official and time-stamped.
Curated, not exhaustive. Reporting delays, safety restrictions and limited information from occupied territories mean that some attacks will not appear. A report can also be delayed until an official account is available.
Finished editions, coarse locations. This is not a live map: each edition covers a completed 24-hour window, and a report appears only after Ukrainian authorities have made it public themselves. Exact coordinates appear only if the authorities have disclosed a location; otherwise the map shows the district or city. Casualty figures are preliminary, time-stamped (“as of …”) and corrected as official updates arrive.
Overlapping official windows. An oblast’s 24-hour tally can cover a strike this site already reported on its own the previous morning, hours before that tally was published. Each card keeps the figure its official source stated, so an edition’s daily total is the sum of the official reports it contains and can overlap the edition before it. Multi-day totals on the map subtract the overlap, so every victim is counted once.
No money passes through the app. Every “Support” button is a direct external link to an established fund (UNITED24, Superhumans, Voices of Children and others), matched to the kind of recovery or relief work involved. These links support each fund’s broader work and are not earmarked for the people or locations in a specific report.
“Support the project” is separate from the funds. The Ko-fi link in the footer covers only the project’s own running costs — hosting, subscriptions and maintenance. It is not a fundraiser for victims, it is not connected to any of the funds above, and the project is not run for profit.
Thank you for staying with the people behind these numbers, photographs and reports.
The most helpful thing you can do right now takes ten seconds: share this report so more people see it.
A new report is published every morning — come back tomorrow.