Senior Full-Stack Developer โ€” Operator Portal Modernization Offline

$$$$

Meet the YozmaTech

YozmaTech isnโ€™t just another tech company โ€“ weโ€™re a global team of go-getters, innovators, and A-players helping startups and product companies scale smarter and faster. We build dedicated development teams across 10+ countries, creating strong, long-term partnerships based on trust, transparency, and real impact. Here, every idea counts. We value people who are proactive, open-minded, and ready to grow. If youโ€™re passionate about building meaningful products and want to join a team that feels like family โ€“ youโ€™ll feel right at home with us.

We are looking for a Senior Full-Stack Engineer who can independently own the migration of a legacy portal end-to-end. The engagement is short-term, for 3โ€“4 months.

Our client a dedicated modernization track, not a feature squad. We're rebuilding a large EV-charging back-office portal from a legacy stack onto React 18 + TypeScript, and we want it done fast. You take a legacy screen and own the whole path to its replacement: reverse-engineering what the old flow actually does, designing and building the BFF endpoint behind it, and shipping the new page.
The Team
Small and lean โ€“ a couple of developers on the same migration, plus QA. Minimal process, minimal handoffs. There is no PM writing you specs for the screens you replace: the legacy system is the spec, and you're expected to read it

Key Requirements:
๐Ÿ”น 8+ years of frontend development in production environments;
๐Ÿ”น 5+ years with React (v18; v19 a bonus);
๐Ÿ”น Strong TypeScript, JavaScript, SCSS/Sass;
๐Ÿ”น 5+ Java/Kotlin, Spring Boot codebase โ€“ reading it and building BFF endpoints in it (you won't own core backend services);
๐Ÿ”น Redux Toolkit, Thunk, RTK Query;
๐Ÿ”น MUI, Vite, CSS Modules, Storybook;
๐Ÿ”น Proven full ownership of features and flows โ€“ you scope, decide and ship without being managed through it;
๐Ÿ”น Ability to reverse-engineer an unfamiliar codebase: trace a flow end to end, read backend code and SQL, and find the hidden branch nobody remembers;
๐Ÿ”น Comfortable working in a Java/Kotlin, Spring Boot codebase โ€“ reading it and building BFF endpoints in it (you won't own core backend services);
๐Ÿ”น Solid understanding of frontend architecture, design patterns and performance at scale;
๐Ÿ”น Experience building or maintaining a shared component library;
๐Ÿ”น English โ€“ Upper-Intermediate or higher.

Will be plus:
๐Ÿ”น Experience on a large legacy migration / modernization project;
๐Ÿ”น Familiarity with CI/CD pipelines, Docker, deployment workflows;
๐Ÿ”น UI testing frameworks;
๐Ÿ”น Experience with AI coding agents / CLI tools (Claude Code, Cursor, Copilot) โ€“ we use them daily;


What you will do:
๐Ÿ”น Own migrations end-to-end: legacy flow โ†’ API contract โ†’ BFF endpoint โ†’ new page;
๐Ÿ”น Establish what a legacy screen really does โ€“ the undocumented branches, the permission gates, the edge cases operators rely on โ€“ by reading code and data, not by asking around;
๐Ÿ”น Build and extend the BFF layer (Java/Kotlin + Spring Boot): endpoints, response shapes, permission gates;
๐Ÿ”น Build and contribute reusable components to our shared UIkit library;
๐Ÿ”น Make the architectural calls on your own pages, and review the other migration developers' work;

What you're walking into:
๐Ÿ”น Two portals live side by side. New pages are feature-flag gated and embedded next to legacy screens in iframes; navigation, state and deep links cross that boundary via postMessage. Coexistence, not a clean rewrite;
๐Ÿ”น The legacy system is the requirements doc. 10+ years of accumulated behaviour, largely undocumented, partly dead code. Distinguishing intended behaviour from accident is the daily job;
๐Ÿ”น A monolith at the other end of your BFF. Its own conventions โ€“ failure bodies returned with HTTP 200, inconsistent payload shapes, queries older than the framework you're wrapping them in;
๐Ÿ”น Multi-tenant and permission-dense. Every page, tab and dropdown is gated per service provider and per role. An empty filter is usually a 403, not a rendering bug;
๐Ÿ”น Real scale in the data layer. Large grids, virtualized infinite selects, look-ahead pagination, async exports. Render performance is a design constraint, not a polish pass;
๐Ÿ”น Parity with the screen you replace. Operators live in these pages all day; a dropped seconds field in a timestamp comes back as a bug report;
๐Ÿ”น Debt in the new repo too. Pre-existing type errors, lint noise, half-migrated patterns. Leave things better; don't declare bankruptcy;

Interview stages:
๐Ÿ”น HR-interview;
๐Ÿ”น Technical interview with client;
๐Ÿ”น Reference check;
๐Ÿ”น Offer;

Why Join Us?

At YozmaTech, weโ€™re self-starters who grow together. Every day, we tackle real challenges for real products โ€“ and have fun doing it. We work globally, think entrepreneurially, and support each other like family. We invest in your growth and care about your voice. With us, youโ€™ll always know what youโ€™re working on and why it matters.
From day one, youโ€™ll get:
๐Ÿ”น Direct access to clients and meaningful products;
๐Ÿ”น Flexibility to work remotely or from our offices;
๐Ÿ”น A-team colleagues and a zero-bureaucracy culture;
๐Ÿ”น Opportunities to grow, lead, and make your mark.

After you apply

Weโ€™ll keep it respectful, clear, and personal from start to offer.
Youโ€™ll always know what project youโ€™re joining โ€“ and how you can grow with us.

Everyoneโ€™s welcome

Diversity makes us better. We create a space where you can thrive as you are.

Ready to build something meaningful?

Letโ€™s talk. Your next big adventure might just start here.

Required skills experience

React.js 5 years
Java 5 years
Spring Boot 5 years

Required languages

English B2 - Upper Intermediate
Loading...