Real estate platform, on a team
BrickUp
A real estate platform I worked on as a software developer on a team.
Employed 06/2025 to 02/2026
Who may do what?
Pick an action and a role.
- Login
AuthGuard - Role
CaslGuard - Filter
accessibleBy
- New match
- Customer replied
- New leadnot theirs
Partly allowed. Agents see only their own, the rest stays in the database.
A simplified example: the flow matches my setup with custom NestJS guards and CASL, the roles and data are made up.
Core skills
- Security and privacy
- Integrations
- Infrastructure and ops
- Frontend
- Backend and APIs
- AI-assisted engineering
Tech stack
- Expo
- React Native Web
- NativeWind
- TanStack Query
- Zustand
- Leaflet
- NestJS
- Prisma
- PostgreSQL
- CASL
- Socket.IO
- AWS SES
- S3
- Lambda
- Pulumi
- HubSpot
- PriceHubble
- ThinkImmo
- Heyflow
- ImmoScout24
The hardest part
When the only interface is an email
A prototype can prove the flow before you commit to the infrastructure.
The whole story
What it looked like
When someone inquires about a property on ImmoScout24, all that arrives is an email. The data sits in an XML attachment whose format isn't documented anywhere. It still has to become a contact in the CRM automatically, without duplicates.
What was really going on
The first version read a Gmail inbox and started from a Windows script. That proved the flow, but a business can't run on it.
The fix
Reverse-engineered the format. Mail now lands in S3 through AWS SES, a Lambda function pulls out the data and sends it to the backend, which takes care of the contact in HubSpot.
- 112
- commits of mine until 01/2026, of 547 in total
- ~28.9k
- lines I added, 24% of the project
- ~7,200
- lines removed in five cleanup commits
In plain words
Agents match buyers' search mandates with listings, customers rate the matches in their own dashboard, and inquiries flow into the CRM automatically. I worked across every phase, especially infrastructure, UI, permissions and lead handling.
This is my team project in a real business domain: from portal inquiry to lead, mandate, match and exposé, shipped through tickets and pull requests.
How it works
Step 1 of 5
Portal
Someone inquires on ImmoScout24. The inquiry arrives as an email with an XML attachment.
What was built
- Platform authorisation based on CASL: a hierarchical role model, a central AbilityFactory and declarative NestJS decorators (per my employment reference)
- An ImmoScout24 pipeline on AWS: mail via SES and S3 to Lambda, undocumented XML, backend logic with CRM sync, duplicate handling and exposé delivery
- A customer dashboard with its own role: mandates, matches, rating with feedback and agent notes
- Notifications with a bell and unread counts. A customer's reaction finds the responsible agent through HubSpot
- A Heyflow webhook for leads, public project pages with filters and an admin switch that hides addresses
- Removed about 7,200 lines of features cleanly
How those skills were used
- Security and privacy
- Roles and attribute-based checks with CASL across the core modules (RBAC and ABAC)
- Integrations
- HubSpot with contacts, leads, notes and duplicates, plus PriceHubble, ThinkImmo, Heyflow and ImmoScout24
- Infrastructure and ops
- Event-driven mail processing with AWS SES, S3 and Lambda, as infrastructure code in Pulumi
- Frontend
- A dashboard, notifications with optimistic updates and project pages with Expo, React Native Web and TanStack Query
- Backend and APIs
- NestJS modules for webhooks and notifications, Prisma Migrate on a team
- AI-assisted engineering
- Brought AI tools into the codebase and workflows, including internal automations (per my employment reference)
My role
Software developer on a team who helped build the architecture and took features end to end, from concept to production rollout.



