loading 0.00
All work

riyako.com.ua

Released
2026
Role
Back end
Client
Riyako & Partners
Type
Back end

Riyako & Partners is a Ukrainian law firm working in criminal defence for business owners and executives — searches, raids, tax disputes, defence procurement cases. The site is their main channel for a client who is usually looking for help under time pressure. The front end came from another team; everything behind it was mine.

The brief

The firm already had a site, built on Laravel, with years of published articles and case write-ups behind it. Those texts are the asset — in this market a business owner reads three of them before calling anyone — so the rebuild could not start from an empty database.

On top of that, a law firm site is deceptively data-heavy: practice areas with their own sub-pages, lawyers, case write-ups, news, rankings, and all of it in two languages. Modelled carelessly, that turns into a wall of pages nobody can keep current.

What I built

I migrated the content out of the old Laravel database and into WordPress with a script rather than by hand — posts, dates, media and URLs mapped onto the new content types so the archive kept its history instead of restarting at zero.

Then the model itself: practice areas, lawyers, case write-ups, articles and rankings as separate content types with typed fields, wired across both languages so a missing translation is visible in the admin rather than to a visitor. Archives load through AJAX — the blog pulls the next batch on demand instead of paginating, which matters when the list is long and the reader is skimming for something specific.

Migration

Years of content moved off Laravel

The previous site ran on Laravel with its own schema. I wrote the import rather than retyping: posts, publication dates, media and URLs mapped onto the new content types, so the archive arrived intact and old links still resolve.

Content model

Five entities, two languages

Practice areas, lawyers, case write-ups, articles and rankings are separate types with fixed fields, each paired across Ukrainian and English at the data level. The editors fill in blanks; nothing about the layout is theirs to break.

Back end

Archives that load on demand

The blog does not paginate. Show more fires an AJAX request, the server returns the next batch rendered with the same template as the first, and the reader keeps their place. Fewer full page loads on a list people scan rather than read.

Next case

latitudeconsulting.ai

Contact

Got something to build?

    rebystaras@gmail.com

    Available for freelance and contract work.