How thinking in server-first component boundaries can simplify data flow and reduce client JavaScript in Next.js applications.When I first started working with the Next.js App Router, I kept running into the same situation.Components would suddenly break — usually after adding a hook or a click handler. The fix felt obvious: add "use client".But after doing this a few times, I realised something: I was slowly turning my application back into a traditional client-side React app.Which defeats the whole point of React Server Components.The real challenge isn’t learning how to use Client and…
Conduct a technical migrationwithin less than 6 months — Part 3 (final)based on Next.js migration, performed at JobTeaserWhat is this 3-parts article about:sharing my own experience with handling a technical migration📖 some additional elements that I find relevant and could help (identified with 📖 emoji) but not personally testedWhat this presentation is NOT about:technical step-by-step Next.js migrationthe perfect and only way to do a migrationI tried to be as exhaustive as possible, but I didn’t even complete all the points personally. So the presentation is a mix of my personal…
Conduct a technical migrationwithin less than 6 months — Part 2based on Next.js migration, performed at JobTeaserWhat is this 3-parts article about:sharing my own experience with handling a technical migration📖 some additional elements that I find relevant and could help (identified with 📖 emoji) but not personally testedWhat this presentation is NOT about:technical step-by-step Next.js migrationthe perfect and only way to do a migrationI tried to be as exhaustive as possible, but I didn’t even complete all the points personally. So the presentation is a mix of my personal experience and…
Conduct a technical migrationwithin less than 6 months — Part 1based on Next.js migration, performed at JobTeaserWhat is this 3-parts article about:sharing my own experience with handling a technical migration📖 some additional elements that I find relevant and could help (identified with 📖 emoji) but not personally testedWhat this presentation is NOT about:technical step-by-step Next.js migrationthe perfect and only way to do a migrationI tried to be as exhaustive as possible, but I didn’t even complete all the points personally. So the presentation is a mix of my personal experience and…
Managing z-index is a classic challenge for front-end developers. As a project grows, display conflicts and bugs related to z-index can quickly turn into serious headaches.I recently took some time to clean up the z-indexes in one of our projects.In this article, I’ll share the approach I used for this cleanup (while also laying the foundation for keeping things manageable in the long run).1. Analyzing the existing z-indexesThe first step was to perform a thorough audit of all the z-index declarations in the project. This gave me an overview of how many z-indexes we had and what values were…
TypeScript significantly improved JavaScript development with enhanced code reliability and maintainability, ensuring fewer runtime errors and greater productivity for developers.But when you start working with it, the syntax can sometimes feel overwhelming.One of the most intimidating features in TypeScript is “generics”. Look at the example below 🤯 aren’t you afraid ?Types declarations from @tanstack/react-query (library) that can feel overwhelmingBut don’t worry, we will go step by step and once you understand generics, you’ll see how powerful they are.The best any alternativeImagine this…
The Jobteaser application contains a lot of different relatively independent modules to help universities provide career guidance to students: a job board, a career event management system, a career advice appointment management system…When we decided to migrate our application’s backend from a monolith to a service-oriented architecture, we strived to keep each module as isolated as possible from the others in the event of an incident. If the career appointment system was down, students should still be able to browse and apply to job ads.That isolation is achieved through what we’ve called…
When it comes to the communication between microservices, there are 2 possible extremes:All-sync: whenever a service needs data from another service, it fetches it via a synchronous API call (REST, gRPC, GraphQL). Service calls service calls service… which tends to evolve into layers of APIs, where each layer has dependencies on the next.All-async: no sync calls between services, all communication is event-driven or in the form of data replication. This tends to form silos: independent services that are fed all the data they need by an async mechanism and can function independently of any…
This is an introduction to how we’ve implemented microservices at a mid-size scale-up called Jobteaser, with a mix of Go and Ruby service chassis, gRPC APIs and data replication via Kafka.Foundation: The service chassisBack in early 2019, when Jobteaser decided to get serious about breaking up its decade-old Rails monolith into microservices, we assembled a Foundation team that started working on an in-house service chassis.It was soberly coined service and came in two flavours: the rb-service framework in Ruby and the go-service framework in Go. Four years later, they still form the…
Read at the source
Your visit, your choice.
Optional Google Analytics helps us understand visits. Microsoft Clarity records masked interactions to improve the site. Optional tools stay off unless you choose them. Privacy details.