WorkITM2026
Institute of Lung Diseases
A ground-up rebuild of a public health institute's site: hard-coded pages and a dead 2019 layout replaced by a Laravel portal the staff can actually run.
- Role
- Full-stack
- Status
- In progress
- Locales
- AZ · EN
01Overview
The Scientific Research Institute of Lung Diseases is a public legal entity in Baku with roots going back to the 1944 tuberculosis institute. Its site, etacxi.az, is where citizens look for the institute's structure, its leadership, its news and the practical information they need before a visit.
The site standing today was built in 2019 and has not moved since. I am rewriting it from scratch: same institution, same public duty, a platform the staff can keep current without a developer.
02The problem
The news section is not a section. Each item is its own hard-coded route - /xeber1, /xeber2, /xeber3 - so publishing anything means editing code and deploying. The newest item is from 2023, which is what happens when publishing is a developer task.
The footer links are placeholders that still read "link 1" through "link 6" and point nowhere. The page declares itself as English while serving Azerbaijani. The site is served over plain HTTP.
Content sits in markup rather than in a database, so nothing can be listed, filtered, searched or shown in more than one language without duplicating a template.
03Architecture
Content moves out of the templates and into the database. Everything a visitor reads becomes a record an editor owns, and the public site is a thin rendering layer over it.
Visitors
Citizens
Services, contacts, leadership, news
Press and partners
Announcements, gallery, international relations
Public site
Blade views
Responsive layout, rebuilt from scratch
Locale routes
/az and /en resolved from one content model
Application
Laravel controllers
Pages, news, gallery, contact form
Admin panel
Authenticated CRUD for every content type
Validation
Form requests, CSRF, spam-guarded contact form
Data
MySQL
Pages, news, staff, gallery, translations
Media store
Uploaded images and documents
04Components
Content model
Turning pages into records
- Static pages - general information, leadership, structure, international relations - become editable records rather than templates.
- Leadership entries carry a photo, a title and a biography, so a change of director is a form, not a commit.
- Every text field is per-locale, so Azerbaijani and English are the same record rather than two copies of a page.
Laravel · MySQL
News and announcements
Replacing the hard-coded routes
- One news table with a publish date, a slug and a status, listed with pagination and read at a stable URL.
- Drafts stay invisible until published, so an editor can prepare an item ahead of time.
Admin panel
Who keeps the site alive
- Role-separated login: editors publish news and gallery items, an administrator manages pages, staff and users.
- Image uploads are resized and stored outside the code tree, so media is never part of a deploy.
Citizen services
The part people actually come for
- The practical pages - compulsory medical insurance, contacts, address and phone numbers - are given their own structure instead of being buried in prose.
- The contact form validates server-side and is rate-limited, and submissions are stored as well as mailed.
Frontend
A layout that survives a phone
- Hand-written HTML, CSS and JavaScript, rebuilt responsive rather than patched over the old jQuery-era markup.
- Third-party embeds the old site loaded on every page are dropped; the gallery and the video sections are served locally.
HTML · CSS · JavaScript
05How it works
- 1
Editor writes
A staff member creates a news item or edits a page in the admin panel, in both languages.
- 2
Validate and store
The form request validates the input; text goes to MySQL, images to the media store.
- 3
Publish
Setting the status to published puts the record into the public listings immediately.
- 4
Request
A visitor hits a locale route; the controller loads the record for that locale.
- 5
Render
Blade renders the page with the institute's layout, responsive down to phone width.
06Design decisions
Rewrite rather than restyle
The problem is not how the 2019 site looks. It is that content lives in code, so a new coat of CSS would leave the institute exactly as unable to publish as it is now.
Laravel for a public institution
A long-lived, maintainable PHP stack the institute's own people can hand over and keep running, with authentication, validation, migrations and an admin layer already solved.
Bilingual by data, not by duplication
Translations are columns on the record, not a second copy of the site. That is what keeps the Azerbaijani and English versions from drifting apart the way the old one did.
HTTPS and a real domain setup
A public health institution asking citizens for contact details over plain HTTP is not acceptable; TLS is part of the rebuild, not a later task.
07Tech stack
- Backend
- PHPLaravelMySQL
- Frontend
- HTMLCSSJavaScriptBlade
- Operations
- NginxGit
08What's next
- Migrate the existing pages, news archive and gallery into the new content model.
- Finish the English locale so both languages ship together.
- Accessibility pass - a public health site has to work for the people least able to fight with it.
Next case study
EduVision
An adaptive intelligent tutoring system with a neuro-symbolic architecture.