Skip to content
Hassan Zayyan
← All work

Case study · Aug – Dec 2025 · Backend Developer (internship)

TowerTrack

A public map of the regency's telecom towers and fiber-optic routes, rebuilt from spreadsheet records.

Client
Dinas Komunikasi dan Informatika Kabupaten Semarang
Role
Backend Developer (internship), Aug – Dec 2025
Stack
Laravel, Inertia.js, MySQL, Docker
Status
Delivered, public map

Context

Semarang Regency is moving its overhead fiber-optic cables into underground ducting. Cables on the existing poles can only be cut once the underground route is live, so the work depends on knowing exactly what is already installed and where. That inventory sat in spreadsheets with no map view.

What I built

  • Modeled the tower and fiber-optic route data and migrated it out of spreadsheets into a relational schema, making the records searchable and mappable.
  • Built the query layer behind the map: filters by district, provider, point type, permit status and road side, plus coverage-radius and distance calculations.
  • Implemented public reporting endpoints so residents and providers can submit complaints and corrections against specific towers or routes.
  • Shipped it as a Laravel + Inertia.js monolith, containerized with Docker for repeatable deployment.

Architecture

Architecture of TowerTrackThe browser (public map, reporting form and admin pages) talks to one Laravel and Inertia.js monolith, which runs in a Docker container and holds the query layer and the reporting endpoints. The monolith stores towers, fiber routes and reports in MySQL.Docker containerBrowserPublic mapReporting formAdmin pagesLaravel + Inertia.js monolithQuery layer: filters, coverageradius, distanceReporting endpointsMySQLTowers, fiber routes, reports

Decisions

  1. 01

    Spreadsheets to a relational schema

    The records had to be searchable and drawable on a map, and the spreadsheets supported neither.

  2. 02

    Public reporting endpoints

    Residents and providers can correct the data after handover, so the inventory stays current without the original team.

  3. 03

    One Laravel + Inertia.js monolith in Docker

    The project had to ship quickly. A single Laravel + Inertia.js codebase was the fastest way to deliver the map, the reporting forms and the admin pages together, and Docker kept the deployment repeatable.

Outcome

The towers and fiber routes are on one public map with filters and coverage-radius search: 168 towers across 19 districts.

Screenshots

TowerTrack's public home page: a map of Semarang Regency with tower markers and the heading ‘Setiap menara di Kabupaten Semarang, dalam satu peta’.
Public home page.
Tower location map of the Ungaran area with a coverage-radius circle around each tower.
Tower map with the coverage-radius overlay.
Fiber-optic route map for the Ungaran area with filters for area, search, point type, status, road side and provider.
Fiber-optic routes, filtered by area, status and provider.
The internship team with two Diskominfo Kabupaten Semarang staff members in front of the Diskominfo sign.
The team at Diskominfo Kabupaten Semarang.