5ademni.tn
A freelancing marketplace with two faces — desktop and web — sharing one domain.
A freelancing platform built as a JavaFX desktop application and a Symfony 6.4 web application over one shared domain model and MySQL database. I worked on the gigs module across both clients.
5ademni.tn
The problem
A freelancing marketplace only works when freelancers can publish services clearly and clients can find them without noise. Keeping those rules coherent across a desktop client and a web app adds a second layer of complexity.
The approach
Build one platform with two front doors — a JavaFX desktop app and a Symfony web app — over a shared domain and database, with accounts, gigs, applications, contracts, payments, messaging and Face ID authentication.
What I built
- ✱Gig creation, editing and browsing across both the desktop and web clients
- ✱Search, category/status filters and dashboard statistics for managing listings
- ✱AI-assisted gig generation, price suggestions and content moderation services
- ✱Approval and email notification flow for newly published gigs
- ✱Shared MySQL schema and domain model used by both versions
Challenges
Keeping gig states, validation and business rules consistent between JavaFX and Symfony
Moderating user-generated listings with spam detection, bad-word checks and manual approval
Integrating the gigs module with the wider platform's contracts, payments, messaging and Face ID flows
What I learned
- ✱How much of a feature lives in the domain model rather than the interface
- ✱Working across Java, PHP and Python in one product
- ✱Designing moderation and approval into a marketplace from the start
Where it landed
A gigs module working in both clients — covering creation, discovery, search, statistics, moderation and approval — as part of the wider 5ademni.tn platform.
What I'd improve next
A shared API contract between the desktop and web clients, plus automated tests around gig status transitions.