All projects

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. 1

    Editor writes

    A staff member creates a news item or edits a page in the admin panel, in both languages.

  2. 2

    Validate and store

    The form request validates the input; text goes to MySQL, images to the media store.

  3. 3

    Publish

    Setting the status to published puts the record into the public listings immediately.

  4. 4

    Request

    A visitor hits a locale route; the controller loads the record for that locale.

  5. 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.