Aleksei Makeev.
← ALL WORK
04 / 07BACK OFFICENEXT 15 · REACT 19 · TAILWIND 42025–26

Admin — the panel volunteers run the charity from

A Russian-language back office for people who are not developers: add an animal, draft a care guide, approve a volunteer, record a payout — without ever meeting Markdown, an image pipeline or SQL.

Next.js 15React 19Tailwind 4TipTapCloudflare R2MapLibre GLGroq
The animals list in the admin panel, the media manager, and a generated guide draft with Accept and Rewrite buttons
PROBLEM

Every hour a volunteer spends fighting a CMS is an hour not spent on animals. The back office had to be usable by whoever happens to be on duty, on a laptop, in Russian — while still drawing a hard line around money. The person editing a blog post should never be one wrong click away from the withdrawals screen.

APPROACH

A rich-text editor with a drag-and-drop media manager that uploads straight to Cloudflare R2 behind signed URLs, and a map picker for feeding points. Permissions live as an array on the admin’s own row and are checked in middleware against the path being asked for, so rights belong to a person rather than to a fixed role. A “Generate draft” button in the care-guide editor fills the article in from a language model, and the volunteer either takes it or sends it back to be rewritten. Every image the draft points at is checked to see that it actually loads, so nobody reviewing an article runs into a broken link.

The care-guide editor: a formatting toolbar ending in a Generate draft button, drag-and-drop media blocks uploading to R2, and a link checker marking each referenced image reachable or replaced
15/19/4
NEXT · REACT · TAILWIND MAJORS
RBAC
PERMISSION ARRAYS IN MIDDLEWARE
18
ADMIN SCREENS, ALL IN RUSSIAN