Full Stack Engineer
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.