Online Travel Agency Platform -Safawell
A comprehensive OTA (Online Travel Agency) platform for booking stays, experiences, and car rentals. Led full rebranding and UI/UX redesign, rebuilt platform architecture for robust search and reservations, refactored codebase for reusability and maintainability, integrated online payments, automated emails, invoice generation, and 8-language support. Built with Next.js, PostgreSQL, Tailwind CSS, and BullMQ.

I joined Wafawell as a Full Stack Developer, taking ownership of major platform improvements for this online travel agency. The platform enables travelers to search and book stays, experiences, and car rentals with best price guarantees, secure payments, and certified partners. My primary mission was a complete visual transformation. I redesigned the entire site — creating a premium, elegant aesthetic with a dark tropical hero, gold accents, and a clean search interface that supports multiple booking types (stays, experiences, cars) with location, date range, and guest selection. Beyond design, I rebuilt the platform architecture to handle search and reservations more robustly. I also undertook a major code refactoring initiative — cleaning up existing code, eliminating duplication, creating reusable components and utilities, and establishing consistent patterns throughout the codebase. This improved maintainability and made future development significantly faster. Key features I implemented include online payment integration, automated email notifications, automatic invoice generation, and a complete hotel management CRUD system. BullMQ powers background job processing for async operations. The platform supports 8 languages through i18n implementation. I worked within agile sprints, continuously improving the platform's capabilities and code quality. This has been my full-time role since September.
My Tasks
- Led complete UI/UX rebranding — redesigned the entire site with a premium travel aesthetic
- Rebuilt platform architecture for more robust search and reservation handling
- Refactored and cleaned existing codebase — eliminated duplication, created reusable components and utilities, established consistent coding patterns
- Implemented online payment integration for secure booking transactions
- Developed automated email system for booking confirmations, updates, and notifications
- Built automatic invoice (facture) generation system
- Created full CRUD system for hotel management (partners adding/editing properties)
- Integrated BullMQ for background job processing (emails, invoices, async tasks)
- Implemented i18n with support for 8 languages
- Designed the search interface supporting multiple booking types (stays, experiences, cars)
- Built location search, date range picker, and guest selection components
- Set up and executed agile sprints for continuous platform improvements
- Worked on both frontend (Next.js, Tailwind CSS) and backend (PostgreSQL)
- Ensured responsive design across all devices
What I Learned
- Technical Growth: Rebuilding the search and reservation architecture taught me to think about scalability from day one. Travel platforms handle complex queries — filtering by location, dates, availability, price ranges, amenities — and I learned to structure data and indexes to keep searches fast even as the hotel database grows.
- Refactoring a legacy codebase was one of the most valuable experiences. I learned to identify code smells, extract reusable functions and components, and introduce consistent patterns without breaking existing functionality. The key insight: clean code isn't about perfection, it's about making the next developer's job easier — including future me.
- Implementing BullMQ for background jobs changed how I approach async operations. Instead of making users wait for emails or invoices, these processes run in the background with proper retry logic and failure handling.
- Supporting 8 languages at scale taught me that i18n isn't just about translation files — it's about designing components that handle text expansion, RTL languages, date formats, and currency displays gracefully.
- Soft Skills & Professional Growth: Joining an existing codebase and leading both rebranding and refactoring required balancing innovation with stability. I couldn't break existing functionality while transforming the UI and cleaning the code. This taught me to plan migrations carefully, work incrementally, and test thoroughly.
- Working in agile sprints with a team improved my estimation and communication skills. Breaking large initiatives into sprint-sized deliverables forced clarity about what "done" means at each stage.
- This role taught me that improving code quality is as important as shipping features. Technical debt compounds over time; investing in clean, reusable code pays dividends in every future sprint.
Project Info
- Type
- Featured Project
- Technologies
- 16
- Tasks
- 14
- Learnings
- 7
Screenshots (1)
Related Projects
Interested in working together?
I'm available for freelance projects and full-time opportunities.
Hire Me

