Building and Improving Client Applications Across Frontend and Infrastructure

Context

The client needed support across three separate projects: building their own platform, improving an existing client application, and developing internal tools for cybersecurity training. The work spanned frontend development, CMS integration, performance-focused refactoring, and basic infrastructure setup.

My Approach

I handled each project independently while keeping the implementations consistent in terms of structure and deployment.

  • Built the client’s main application using Next.js and Strapi, setting up a decoupled architecture to allow content to be managed independently from the frontend.
  • Refactored a client project (a bakery website) built with Next.js, focusing on improving performance and UI consistency, and stabilizing a form flow used to communicate with an internal API (e.g., job-related submissions).
  • Developed mock UI applications and email templates for phishing awareness training, replicating common patterns from platforms such as Facebook and Microsoft within a controlled environment.
  • Set up Kubernetes configurations to support deployment of some of the applications, providing a more consistent runtime and hosting approach.

Challenges

Each project had different constraints and levels of maturity, requiring context-specific solutions rather than a shared approach. The bakery project required working around an existing structure while improving performance and ensuring the form integration behaved reliably with the internal API. For the cybersecurity training tools, the challenge was achieving realistic UI reproduction while keeping implementations clearly scoped for internal use.

Outcome

  • A production-ready application for the client with a decoupled CMS architecture.
  • Improved stability and frontend consistency for an existing client project, including a more reliable form integration.
  • Delivery of internal tools used for phishing awareness training in a controlled environment.
  • More structured deployment setups for selected applications using Kubernetes.

Learnings

  • Working across unrelated projects reinforced the importance of quickly adapting to different codebases and constraints.
  • Refactoring existing applications highlighted how small inconsistencies in UI and structure can compound into performance and maintenance issues.
  • Building training simulations required balancing realism with clear boundaries around their intended use.

Tech Stack

  • Next.js, Tailwind CSS, Go, Strapi, Docker, Kubernetes