Hjema
A modern salon discovery platform connecting customers with hair salons and helping salon owners grow their online visibility.

Overview
Hjema (hjema.tn) is a French-language discovery platform for hair and beauty salons in Tunisia. Customers can find salons by name, governorate, city and audience, compare them through review-based ranking and open detailed profiles with photos, services and prices, opening hours and directions. Salon owners get a free listing, verified by the team before publication, and an optional sponsored placement for extra visibility, all run from a moderation back office with a full audit trail. The platform is live and onboarding its first salons, so these are built, ready capabilities rather than current traffic.
Problem
In Tunisia there is no single place to compare hair and beauty salons by region, city, audience, services, prices, opening hours and reviews. Many salon owners have no simple, credible way to be seen online.
Solution
A salon directory built on Next.js 16 and Supabase, deployed on Cloudflare Workers. Visitors can search and filter salons; results are ranked by Google-authenticated customer reviews, and each salon gets a complete profile page. Owners create a free listing that an admin approves before it goes live, then can add a 30-day sponsored placement in a dedicated “Recommandés” section without affecting the review-based ranking. Roles, search and ranking are enforced in the database with row-level security and SQL functions. The platform is live and onboarding its first salons.
Features
Salon search and filters
Accent-insensitive search by salon name, all 24 governorates with a dependent city list, and an audience filter (all, women, men, mixed). Filters live in the URL, and the audience switch works without JavaScript.
Review-based ranking
Salons are ranked by average rating, then by number of reviews, with unrated salons last and paginated results.
Salon profile pages
Photo gallery, rating, services and prices in TND, weekly hours with today highlighted, call and directions, reviews, a Google Map that loads only on click and a sticky action bar on phones.
Customer reviews
Customers signed in with Google leave one review per salon (1–5 stars and a comment), can edit or delete it and report abusive reviews. Writes are rate-limited in the database.
Free listing for salon owners
Owners sign up and fill in their salon: details, services and prices, opening hours, up to 8 photos and an optional location. The team verifies every listing before it is published.
Sponsored visibility
Owners of published salons can buy a 30-day placement in a rotating “Recommandés” section with a “Sponsorisé” badge, paid through an external payment link and confirmed by an admin. Organic ranking is unaffected.
Moderation back office
Approve, refuse or suspend salons and manage owners, customers, reviews, reports and promotions. Every moderation action runs through an audited database function into an append-only log.
SEO and structured data
Per-salon metadata and Open Graph tags, HairSalon JSON-LD built only from real fields, a sitemap of published salons and noindex on filter variants and private areas.
Screens

Owner onboarding in three steps 
Launch state and the professional space

Technical Stack
- Next.js 16 (App Router)Server-rendered routes, Server Actions, metadata, sitemap and robots
- React 19UI rendering
- TypeScriptThe whole codebase
- Tailwind CSS 4Styling and design tokens
- Supabase PostgresData with row-level security, column grants and SQL functions for search and ranking
- Supabase AuthEmail and password for owners, Google sign-in for customers
- Supabase StoragePrivate salon-photo bucket served through short-lived signed URLs
- Cloudflare Workers + OpenNextProduction hosting on Cloudflare's edge
- next/fontDM Sans and Manrope typography
- PGlite · Playwright · axe-coreAuthorization tests on in-process Postgres, live browser checks and accessibility checks
Engineering notes
- The home page runs the listing and sponsored-salon queries in parallel; filter combinations are noindex with a canonical back to the home page.
- Security lives in the database: roles are enforced by row-level security and column grants, and search and ranking run as SQL functions over a ratings view.
- Salon photos stay in a private bucket and are delivered through short-lived signed URLs.
- Per-request nonce Content Security Policy, HSTS, X-Frame-Options and a restrictive Permissions-Policy, with Origin checks on Server Actions.
- Privacy-friendly location: the map embed and browser geolocation load only when the visitor asks for them.
- Authorization, workflow, promotion and moderation tests run against an in-process Postgres with the Node test runner.
See it in production
hjema.tn
Need a site like this?
I design and build websites and web apps for businesses: landing pages for €199, business websites for €499, custom projects by quote.