PLATFORM · PORTAL · CLIENT UNDER NDA
Replacing Joomla with a modular Next.js and Firebase portal
A business association's portal moved from Joomla to Next.js and Firebase, with the public marketing site separated from the members' area and four modules that run on their own.
- 90+
- Lighthouse performance score
- 4
- autonomous modules
- −20h
- manual admin work / month

- Role
- Project and Tech Lead
- Duration
- 6 MONTHS
- Year
- 2024
- Client
- Under NDA
The problem
The portal of an association of businesses ran on an outdated Joomla installation. The monolith had built up technical debt, performance bottlenecks and high maintenance costs. Two groups felt it:
- 01
For marketing, managing content was complicated and slow.
- 02
For developers, the lack of modules made it impossible to scale the services: the company directory, the classifieds, the information section, the training module and the survey and poll system.
The brief
The goal was a full migration from Joomla to a scalable ecosystem. It had to:
- 01
Separate the public marketing part from the subscription area for members.
- 02
Run four autonomous modules: a company directory, classifieds, trainings (sign-ups and the lifecycle of links) and surveys and awards polls (with data export to XLSX and PDF).
- 03
Meet standards for SEO, geotargeting, accessibility (WCAG) and Core Web Vitals.
- 04
Prepare the infrastructure for AI search later.
What we built
- 01
A frontend and a backend, split
I ran architecture workshops with the board and the marketing department. They ended with a decision to split the layers into a Next.js frontend and a dedicated Firebase backend.
- 02
A custom CMS panel
I implemented a custom CMS panel. It keeps dynamic marketing content apart from the sensitive profile and subscription data of the member companies.
- 03
Data and access rules
The data model is NoSQL, in Firestore, with granular Firestore Security Rules that block unauthorized horizontal access. Firebase Authentication handles roles and permissions (RBAC) and multi-level sessions for business users who manage their own micro-pages.
- 04
Rendering and accessibility
Next.js renders pages with a hybrid of ISR, SSR and SSG, to cut loading times and make the content easier to find in search. The content follows WCAG 2.1 and is geolocated for the regional associations.
- 05
Training and survey modules
Each training and each survey gets its own unique public URL. The state in the database opens and closes sign-ups and voting on a schedule. Reports are generated by an asynchronous pipeline that aggregates the results and exports them to Excel (XLSX) and PDF.
- 06
Search prepared for AI
The data is indexed for fast full-text search, and the structure is designed so that a vector database or embeddings for an LLM can be added later. The AI search itself is not built yet.
- 07
Environments and deploys
Staging and production run on Vercel with an automated CI/CD pipeline. Deploys have no downtime, and pages are cached at the edge.
My role
I was the project and tech lead of a team of four: full-stack, frontend and QA. The project took six months.
Outcome
The Joomla system is gone, and the portal now runs as a serverless application. Marketing has an editing tool that is easy to use, and the member companies manage their own profiles and listings in a self-service area. Automated training sign-ups, automatic closing of polls and direct export of reports to XLSX and PDF saved about 20 hours of manual administration a month. The Lighthouse performance score is above 90, the site follows WCAG 2.1, and search crawlers pick up new content right away. Traffic scales without adding servers, and deploys have zero downtime. The structure is ready for semantic search with AI, which is not built yet.
TECH STACK
Built with
LANGUAGE
- TypeScript
STACK
- Next.js
- Firestore
- Firebase Authentication
- Cloud Functions
INFRASTRUCTURE
- Firebase
- Vercel
05 / CONTACT
ACCEPTING NEW STRATEGIC ROLES FOR 2027
I thrive where complex engineering meets commercial reality. Open to Head of Web & Product roles.
KRAKÓW, PL
BUILT WITH BEARMINION
