Skip to content
Sylvain Joffraud l4w

2025 — 2026

Amarris Immo

Full-Stack Developer React · Symfony

Industry
Property management · Real estate · LMNP
Team
10 people
Location
Nantes · Full-remote

Two real-estate SaaS, one built solo: JS bundle −52%, PHPStan debt at zero, Symfony 7.4 / API Platform 4.

At a glance

  • Initial JS bundle −52% (443 → 213 KB gzip) via code splitting, despite 16% more front-end code
  • PHPStan level 8: 207 baselined errors brought down to 0
  • Upgraded to PHP 8.4, Symfony 7.4 LTS, Doctrine 3, API Platform 4.3
  • Tests: front end from 53 to 1,518 tests (coverage 30 → 74%), back end from 231 to 655 test methods
  • Billing engine redesign (Strategy pattern) and SCI accounting-close screens

Accounting and advisory group. Assignment in its real-estate division, on two SaaS applications for rental management and financial management for property owners (French LMNP, LMP and SCI regimes), used by several thousand customers.

Context

Two projects in parallel: Immo-GL (rental management, sole full-stack developer on the project, 96% of commits over the period) and Immo-Solo (financial management and accounting close, React front-end developer in a team of 8 developers, 1 PO and 1 designer).

Starting point on Immo-GL: a monolithic front-end bundle, 207 PHPStan errors hidden in a baseline, low test coverage and a stack several major versions behind.

Goal: on Immo-GL, take over alone an application in production with several thousand customers, to make it faster, safer to evolve and up to date on its LTS versions, while still shipping business features (invoicing, leases); on Immo-Solo, deliver the SCI accounting closing screens within the front-end team.

Stack: React 18/TypeScript front end with Material-UI, React Query and Vite, PHP 8.4/Symfony 7.4 back end with API Platform (JSON-LD), PostgreSQL 16, Docker. PHPUnit and Jest tests, PHPStan static analysis.

Achievements

Immo-GL

  • Front-end performance: moved from a monolithic bundle to 37 chunks with 9 lazy-loaded routes; entry bundle cut by 52% (443 → 213 KB gzip, 1,450 → 658 KB raw), measured on the actual before/after Vite builds
  • Full upgrade: PHP 8.3 → 8.4, Symfony 6.4 → 7.4 LTS, Doctrine ORM 2 → 3, DBAL 3 → 4, API Platform 3.2 → 4.3, PHPUnit 10.2 → 11.5, across 26 Doctrine migrations, Docker and CI configuration included
  • Static quality: PHPStan level 8, 207 baseline errors fixed in 7 batches, baseline file removed
  • Tests: front end from 53 to 1,518 tests (12 → 103 suites), line coverage from 30 to 74%; back end from 231 to 655 test methods (1,412 tests, 4,394 assertions)
  • Billing engine analysis and redesign: study of the existing system (invoices, pro-rata, rent reviews, service-charge adjustments), architecture based on the Strategy pattern with prioritized calculators and a registry
  • Back-end performance audit: N+1 queries, missing database indexes
  • Front-end refactoring: simplified lease-creation flow, gradual removal of Recoil, reworked form error handling
  • Quality audit: DRY and SRP violations identified, refactoring plan prioritized by return on investment, React/Vite best-practice guide
  • Fixed critical production bugs (pro-rata, rent receipt PDFs, guarantor permissions)
  • PDF generation (rent receipts, invoices) with DomPDF and MinIO object storage

Immo-Solo

  • SCI accounting-close screens: generation of closing documents (general meeting minutes, management reports, tax forms), status handling and tax-return submission workflows
  • Closing-flow migration in 6 phases: validation logic extraction, new stepper, submission statuses, confirmation dialogs
  • Property disposal and cessation: locking of sold or discontinued properties, state and translation handling
  • Form refactoring: consistent error handling (React Hook Form and Yup), reusable patterns for complex forms
  • Internationalization (i18next) and consistent translation keys

Results

  • Initial load 52% lighter while the front-end codebase grew by 16% over the same period
  • Static-analysis debt cleared (207 → 0 PHPStan errors) and a stack fully up to date on LTS versions
  • A much stronger safety net: ×28 front-end tests, ×2.8 back-end test methods
  • 1,134 commits (503 back end, 631 front end): a full-stack application run with full autonomy, in production for several thousand users
  • SCI closing features shipped: users generate their tax documents directly from the application
React TypeScript Symfony API Platform PostgreSQL Docker

Need something similar?

Let's talk about your project and how I can help, fully remote.