Task at hand
«Development Cup» is an international youth tournament in Minsk with a long history and an established track: seasons, teams, matches, reports, news, multimedia, and trilingual support (RU / BY / EN).
A CMS platform on an old stack was already running in production. For the viewer, the site existed. For the brand, UX, and operations, the picture was typical of a mature sports product:
- the logo and visual language lagged behind modern sports culture and the expectations of a young audience;
- the runtime and framework had moved out of the comfortable support zone;
- the admin panel and surrounding packages lived on mid-2010s versions;
- the public showcase needed a modern editorial UX without breaking routes and editorial processes;
- the data (teams, seasons, media) could not be «reset for the sake of beauty».
The goal was not a showcase for the sake of a showcase, but a bundle:
- refresh the logo and visual identity while preserving the tournament's recognizability;
- build the public layer as a tournament media product under the new identity;
- carry out a major backend / infrastructure upgrade with data migration;
- preserve working tournament entities and familiar URLs where it matters for SEO and audience habits.
The work ran in parallel tracks: brand, public front end, and platform upgrade (PHP, Symfony, EasyAdmin, Doctrine, MySQL, Nginx, and the bundle ecosystem). It is important to state this honestly: one person / one chat does not cover the full scope of such a project.
Why not «from scratch at any cost»
Rewriting everything on a new stack from a clean slate for a seasonal tournament is a risk in terms of timeline, budget, and editorial data.
Constraints that set the frame:
| Constraint |
What follows from it |
| Live seasons and archive |
Data migration, not a «new empty CMS» |
| Routes like tables and matches |
The front end is designed around the existing URL / slot map |
| The editorial team already knows the EasyAdmin track |
Upgrade the admin panel, not a paradigm shift «for fashion» |
| Public UX lagged behind the tournament brand |
A separate front-end pass without waiting for a full backend rewrite |
| The logo is «recognizable but tired» |
Redesign of the character and typography without changing the tournament's name |
The solution: new identity + new public layer + platform modernization. The front end connects to the CMS through template slots (TEMPLATE / slot:).
What was done
1. Redesign of the logo and visual identity
A separate creative track — Development Football Cup: refresh the mark of a children's / youth tournament so that it becomes more modern and emotional, yet remains recognizable.
Brand task. The existing logo needed not a cosmetic «tighten the color», but a new image: dynamics, sporting excitement, development — without losing the connection to «Development Cup».
Concept. The foundation rested on three pillars: football, development, and the energy of the younger generation. Instead of an abstract symbol, the center became a dynamic young footballer — a character that reads for both children and teens: moving forward, playing, striving to win.
What changed in practice:
| Was in meaning |
Became |
| Traditional graphic mark |
A stylized footballer character as the main anchor |
| Calm / outdated delivery |
Trajectories, speed lines, energy of the ball and movement |
| Typography «as it was» |
Massive sports letters with volume and rigid geometry |
| Restrained palette |
Saturated green, neon lime, silver-white |
| One language build |
RU / BY / EN versions for the site, social media, and media |
Result for the brand: the tournament received a brighter visual face aimed at a young audience. The same identity is designed for the site, social media, advertising, uniforms, diplomas, and other media — not just a favicon in the header.

2. Tournament public website
A new public front end was built around the real product sections and the refreshed brand:
- home: hero news carousel, results, feed;
- about the tournament;
- tournament table (seasons, groups, table / matches / top scorers tabs, final stage);
- teams and team card (roster, media, coach);
- match: scoreboard, lineups, field scheme, report;
- news and article;
- multimedia (albums, lightbox, optional YouTube);
- player and coach profiles;
- themed 404;
- Ru / Blr / En switcher (in the header — corresponding logo versions).
The front-end stack is intentionally light: HTML5, a single CSS, JS + i18n without a heavy SPA bundle. For a sports showcase with CMS data, this is a deliberate trade-off: layout speed, predictable slot integration, and control over motion/a11y (prefers-reduced-motion, skip-link, ARIA).
Visually — a dark editorial sports look in the palette of the refreshed identity, Manrope + Unbounded fonts, emphasis on team crests, logos, and match photos, rather than «cards for the sake of cards».

3. Platform upgrade (backend + infrastructure)
A parallel and heavier track — lifting the entire server stack to current LTS / supported branches without data loss.
Runtime and framework
| Component |
Was |
Became |
| PHP |
7.0 |
8.5 |
| Symfony (+ Form, Security, Serializer, Validator, HttpClient, Twig, Mailer, etc.) |
3.3 |
7.4.x |
| EasyAdmin |
1.17 |
5.8 |
| Doctrine ORM |
2.5 |
3.7 |
| Doctrine DBAL |
— |
4.5 |
| Doctrine Bundle |
— |
3.3 |
This is not a «minor bump»: between Symfony 3 and 7, there is a change in security, DI, forms, serialization contracts, and the bundle ecosystem. EasyAdmin 1 → 5 is essentially a different admin model. Doctrine 2 → 3 / DBAL 4 is a separate layer of entity and query migration.
Related packages
| Package |
Was |
Became |
| VichUploader |
1.4 |
3.0 |
| LiipImagine |
1.9 |
2.18 |
| FOSUserBundle |
2.0 |
4.1 |
| CKEditor |
Ivory/egeloen 4.x |
friendsofsymfony/ckeditor-bundle 2.8 |
| FMElfinder |
6.2 |
14.0 |
| a2lix/translation-form-bundle |
2.1 |
4.0 |
| knplabs/doctrine-behaviors |
1.4 |
3.1 |
| beelab/recaptcha2-bundle |
1.2 |
2.14 |
The set is telling: uploads and image previews, users, WYSIWYG, file manager, form translations, Doctrine soft-behaviors, reCAPTCHA — everything an editorial sports CMS lives on.
Database and web server
| Component |
Was |
Became |
How it was migrated |
| MySQL |
5.7 |
8.0 |
data migration via dump |
| Nginx |
(old branch) |
1.30.6 |
update on the target track |
Security support window (at the time of delivery)
- Symfony 7.4 (LTS) — security fixes until November 2029;
- PHP 8.5 — until December 2029.
For the client, this is a move from «holding on to an outdated runtime» to a support horizon comparable to several tournament seasons ahead.

How it works technically (layer roles)

Identity sets the face of the tournament on the site and offline media.
Public front end is responsible for composition, i18n UX, tables, match pages, and media.
CMS / EasyAdmin — for seasons, teams, reports, news, and uploads.
Infrastructure — for ensuring this track has the right to exist after 2026 without constant «version fires».
The front end is connected to the CMS via template comments and slots (team header, news pagination, player photo, media categories, etc.) — so that the layout can be reviewed separately from live data and then placed on live entities.
Must / Not Now
Must (included)
- redesign of the logo and visual identity for a young audience;
- language versions of the mark RU / BY / EN;
- new public UI for key tournament sections under the refreshed brand;
- trilingual UX on the showcase;
- upgrade of PHP → 8.5 and Symfony → 7.4 LTS;
- EasyAdmin 1 → 5 and Doctrine 2 → 3 / DBAL 4;
- update of the critical bundle ecosystem (upload, imagine, user, editor, elfinder, translations, recaptcha);
- MySQL 5.7 → 8.0 with data migration via dump;
- Nginx → 1.30.6;
- preservation of the editorial track and tournament entities.
Not Now (deliberately not inflated)
- a full brand book «of 40 spreads» instead of a working set of media;
- rewriting the public site into a heavy SPA «for fashion»;
- switching the CMS paradigm to another admin panel from scratch;
- invented metrics like «sped up by N%» without production measurement;
- publishing internal admin URLs, access schemes, and live personal data of players in the portfolio.
Result for business and operations
| For whom |
What changed |
| Participants / young audience |
A new emotional mark: footballer character, dynamics, lime/green palette |
| Marketing / organizers |
Identity is ready for the site, social media, uniforms, diplomas, and advertising media |
| Viewer / media |
A modern tournament showcase: matches, tables, teams, news, media, languages |
| Editorial / operators |
Admin panel on the current EasyAdmin and compatible bundles |
| IT / security |
Runtime and framework in the LTS zone with a patch horizon until 2029 |
| Data |
MySQL 8 and migrated content — without resetting the history of seasons |
| Further development |
Features can be built on Symfony 7, rather than patching Symfony 3 |
Key product effect: the tournament received a new visual face, a refreshed showcase, and a viable platform simultaneously. A beautiful logo on an outdated runtime or a «technically healthy» site with an old mark — neither option reaches a coherent product.
Conclusions
- For a youth tournament, identity is not a «picture on top»: it sets the tone of the site, uniforms, and social media.
- For a sports CMS, upgrading Symfony 3 → 7 is a project of contract and bundle migration, not a «composer update».
- A public redesign is best conducted along the map of live URLs and slots — otherwise the front end and backend will diverge.
- EasyAdmin, Doctrine, upload/imagine/editor — upgrade as a package: individually they pull each other down.
- MySQL 5.7 → 8 via dump is a workable path if data integrity checks are agreed upon in advance.
- Honest scope: brand, front end, and platform are different tracks; in a case study, this must be named out loud.
FAQ
Why touch the logo if we could have just done the site?
For a youth tournament, the mark is the first contact in the feed, on the uniform, and on the poster. The old logo on the new UI would have looked alien; the new identity set the palette and tone of the entire showcase.
Why a character rather than an abstract crest?
The concept was built on football, development, and the energy of young players. A stylized young footballer reads faster than a «neutral» symbol and works better for a children's / teenage audience.
Why wasn't the site rewritten in React/Next?
For a tournament showcase with CMS slots, lightweight HTML/CSS/JS gave control over layout, i18n, and delivery speed without extra runtime on the client. SPA makes sense when UI/state complexity justifies the cost.
Could only PHP have been updated, leaving Symfony 3?
In the short term — an illusion of stability. Real security support and the bundle ecosystem are constrained by the framework branch. The goal here was an LTS horizon until 2029.
What was the riskiest part of the backend?
The Symfony 3→7 + EasyAdmin 1→5 + Doctrine 2→3 combination with live data and editorial processes. Upload/editor/translation packages without a coordinated upgrade break the admin panel even with a «green» composer on the core.
Were old seasons and materials preserved?
Yes: MySQL was upgraded to 8.0 with migration via dump. The task was to migrate the data, not to reset the tournament archive.
Who did the brand, front end, and backend?
These are different tracks of one delivery. The portfolio records all three results; the backend scope (Symfony/Doctrine/infrastructure) was carried out as part of a team / contractor track, not «in one chat».
What can be shown publicly in the portfolio?
The logo, public UI, and anonymized stack diagrams. Live admin data, internal admin URLs, and personal data of players — no.