Skip to content

Antibes, France

JohannAvramov

Full-Stack Engineer (TypeScript / PHP)

Angular · TypeScript · React · Node.js · Symfony

Relocating to French-speaking Switzerland (Geneva - Lausanne) upon signing · EU citizen (B permit) · Available within 1 month

  • French (native)
  • English (C1)
  • German (basics)
Portrait of Johann Avramov

Profile

Full-stack engineer at Orange in Sophia Antipolis since February 2025, acting as front-end tech lead for a team of three developers, within a 20-person SAFe organisation.

My daily stack is Angular, TypeScript, Node.js and Symfony, with GitLab CI/CD, Docker and GCP. I led the migration of business-critical applications from Angular 8 to Angular 21 and from Symfony 5 to Symfony 7, raising SonarQube coverage from 65% to 85%.

Before Orange I founded and ran AzurIT, a two-employee company, and delivered three SaaS products in fourteen months. I am now looking for a developer role in French-speaking Switzerland, between Geneva and Lausanne.

SaaS products delivered
3SaaS products delivered
accounts created on Datark
1,500accounts created on Datark
large accounts: Orange, Amadeus
2large accounts: Orange, Amadeus
Projects

What I have built.

Four products designed and developed end to end, from problem definition to production deployment.

Open-access platform for heritage sciences.

  • Next.js
  • NestJS
  • PostgreSQL
  • TypeScript
  • Stripe
  • Copyleaks

Context

Open-access platform for heritage sciences (archaeology, history, conservation): PDF publication submission, search through the PACTOLS thesaurus, co-author collaboration and subscriptions.

What I built

Full rewrite of a platform already in production with 1,500 accounts created: moving from Angular, Express and MongoDB to Next.js, NestJS and PostgreSQL, with a progressive data migration.

Technical points

  • Progressive data migration from MongoDB to PostgreSQL, with no downtime for the platform in production.
  • Plagiarism detection through the Copyleaks API: PDF submission, asynchronous results received over a webhook with a verified HMAC-SHA256 signature, a state machine exposed to the front end, and administrator notification for manual review. Integrated in sandbox mode.
  • Graceful degradation of the third-party service: with no API key the scan is marked as skipped, on a network error it is marked as failed, and the publication upload succeeds in both cases.
  • Search indexed on the PACTOLS thesaurus, and co-author management on every submission.

Architecture

  • client
  • api
  • db
  • external
  • Next.js
  • NestJS
  • PostgreSQL
  • Stripe
  • Copyleaks
  • Next.jsNestJS· REST
  • NestJSPostgreSQL· SQL
  • NestJSStripe· subscriptions
  • NestJSCopyleaks· signed webhook

AquaPro Manager

View the product

Web application for swimming pool maintenance professionals.

  • Next.js 16
  • React 19
  • TypeScript
  • Tailwind CSS
  • shadcn/ui
  • Firebase
  • Stripe
  • Zod
  • Vitest

Context

Pool maintenance professionals track their clients, their jobs and their invoicing across paper notes, messaging apps and spreadsheets. Nothing is connected, and client history gets lost.

What I built

Responsive web application for pool professionals: a multi-tenant SaaS covering clients, pools, jobs, stock, products, accounting and invoicing, with Stripe subscriptions.

Technical points

  • Multi-tenant model with per-company data isolation.
  • Stripe subscriptions and billing wired into the job lifecycle.
  • Quote and invoice, accounting, stock, supplier and employee tracking modules.
  • Form validation with Zod schemas and react-hook-form, Recharts dashboards and Vitest tests.
  • OpenTelemetry instrumentation and performance monitoring.

Architecture

  • client
  • api
  • db
  • external
  • Next.js App Router
  • Firebase Admin
  • Firebase
  • Stripe
  • Next.js App RouterFirebase Admin· server actions
  • Firebase AdminFirebase· read / write
  • Firebase AdminStripe· subscriptions

AirsoftHub

Project on hold

Management platform for airsoft clubs.

  • React 18
  • Vite
  • TypeScript
  • Supabase
  • PostgreSQL
  • Tailwind CSS
  • shadcn/ui
  • Vitest

Context

Airsoft clubs manage their members, field bookings, membership fees and inventory by hand, across spreadsheets and messaging apps.

What I built

A single platform bringing together member management, slot booking, automated invoicing and QR code access control, spread across eighteen functional modules.

Technical points

  • Multi-tenant security enforced at the database level: PostgreSQL Row Level Security policies on Supabase, in a dedicated migration.
  • Nine business Edge Functions: slot booking, PDF invoice and QR code generation, member invitation, inventory management, scheduled reminders and email sending.
  • Six versioned SQL migrations to evolve the schema.
  • Custom build guardrails, blocking in development and at build time: mock data detection, Supabase configuration validation and environment checks.

Architecture

  • client
  • api
  • db
  • external
  • React + Vite
  • Edge Functions
  • PostgreSQL + RLS
  • Supabase Auth
  • React + ViteEdge Functions· invoke
  • Edge FunctionsPostgreSQL + RLS· SQL
  • React + ViteSupabase Auth· session

MamaSafeFood

View the product

Mobile app helping pregnant women decide what is safe to eat.

  • React Native
  • Expo
  • TypeScript
  • Firebase
  • Cloud Functions
  • Google Gemini
  • RevenueCat

Context

During pregnancy, checking whether a food is safe means cross-referencing scattered medical sources. That is not usable standing in a supermarket aisle or in front of a restaurant menu.

What I built

A mobile app that identifies ingredients from a photo of a dish or a restaurant menu, then returns a verdict matched to the pregnancy profile: green, orange or red, with an explanation and a per-ingredient breakdown.

Technical points

  • Ingredient recognition and risk analysis through the Google Gemini API, with two input modes: photo of a dish, and restaurant menu.
  • Robust model calls: three attempts with progressive backoff, retries limited to 429 and 5xx responses, fallback to a secondary model, recovery of truncated JSON responses and an image size cap.
  • Verdict computed from the user profile: trimester, toxoplasmosis immunity, allergies and how the food was prepared.
  • Migration from Supabase to Firebase: authentication, Firestore, storage and Cloud Functions.
  • Subscriptions handled through RevenueCat, Google and Apple sign-in, Jest tests on the analysis functions.

Architecture

  • client
  • api
  • db
  • external
  • Expo / React Native
  • Cloud Functions
  • Firestore
  • Google Gemini
  • RevenueCat
  • Expo / React NativeCloud Functions· HTTPS
  • Cloud FunctionsFirestore· read / write
  • Cloud FunctionsGoogle Gemini· analysis
  • Expo / React NativeRevenueCat· subscriptions
Experience

Where I have worked.

Full-Stack Engineer, front-end tech lead

Orange

February 2025 - presentSophia Antipolis, France
  • Migrated business-critical applications from Angular 8 to Angular 21 and from Symfony 5 to Symfony 7, raising SonarQube coverage from 65% to 85%.
  • Front-end tech lead for a team of three developers, within a 20-person team organised in SAFe.
  • Introduced TDD and Jest coverage above 90%: average defects per sprint reduced from 18 to 3.
  • Cut production release time from 1 to 2 days down to 2 to 3 hours, using GitLab CI/CD, Docker and a rollback strategy.
  • Built features on Cockpit, Orange's omnichannel campaign management platform, and ran the services on GCP.
  • Angular
  • TypeScript
  • Symfony
  • PHP 8
  • GitLab CI/CD
  • Docker
  • GCP
  • MySQL
  • Jest

Founder and lead developer

AzurIT (SARL)

September 2023 - November 2024Antibes, France
  • Founded and ran a two-employee company, from product definition through to day-to-day operations.
  • Three SaaS products delivered in fourteen months: Datark, AquaPro Manager and MamaSafeFood.
  • Designed the REST APIs, data models and business logic, from requirements gathering to deployment and maintenance.
  • Automated data extraction with Puppeteer: retry logic, selector fallbacks and structured exports.
  • Wound the company down by choice at the end of 2024 to join a corporate environment.
  • Next.js
  • React
  • Node.js
  • NestJS
  • MongoDB
  • Firebase
  • Stripe
  • Puppeteer

Back-end developer (apprenticeship)

Amadeus

2022 - 2023Sophia Antipolis, France
  • Developed and optimised back-end features on the Loyalty platform (cart, points management), within an Agile SAFe team.
  • Implemented and maintained REST APIs using Java, Spring Boot and Oracle DB.
  • Wrote and automated JUnit tests, up to 95% code coverage.
  • Supported production releases and coordinated with the infrastructure and product teams.
  • Java
  • Spring Boot
  • REST APIs
  • Oracle DB
  • JUnit
  • SAFe

Full-stack developer (apprenticeship)

Native Spaces

2021 - 2022Nice, France
  • Built front-end modules in React for responsive production interfaces.
  • Developed the back end in PHP and MySQL: REST APIs, data access layers and query optimisation.
  • Integrated external services (Stripe, Google APIs) and built internal automation tooling.
  • React
  • PHP
  • MySQL
  • Stripe
  • Google APIs

Web developer (while studying)

Freelance

2017 - 2021France
  • Built websites and web applications for small organisations, alongside my studies.
  • PHP
  • MySQL
  • JavaScript
Skills

Technical skills.

Grouped by how much I actually use them, not by how long the list can get.

Daily

Used every day in production
  • Angular
  • TypeScript
  • Node.js
  • Symfony
  • PHP 8
  • GitLab CI/CD
  • Docker
  • GCP
  • MySQL
  • Jest

Solid

Several products delivered
  • React
  • Next.js
  • NestJS
  • MongoDB
  • Firebase
  • Cypress

Basics

Occasional or earlier practice
  • Java / Spring Boot
  • Vue 3
Teaching

Teaching.

Web development instructor

Université Côte d'Azur

Since September 2025 · Part-time

I teach web development to students at Université Côte d'Azur and design the lab materials.

ReactNext.jsVue 3TypeScriptAlgorithms
Contact

Get in touch.

I am looking for a full-stack developer role in French-speaking Switzerland, between Geneva and Lausanne.

Relocating upon signing. French citizen, B permit through freedom of movement. Available within 1 month, matching my contractual notice period. On-site interviews within 72 hours.

Send me an email