See it on your own face before the scissors come out — one photo, one generation.



Mane is a look try-on app that works from a single photo. You see a hairstyle, hair colour, beard, moustache, smile or piercing on your own face — before you try to describe “something like this” to a stylist.
There are more than twenty-five hairstyles (long, medium, short, braids, gothic), nineteen preset hair colours and a custom colour of your own. Beard, moustache, smile and piercing sit in their own groups and can all be selected at once.
The result screen opens on a before/after comparison and lists which selections were applied underneath, so a combination you liked does not get lost.
The client is React Native with Expo. A generation request goes to a Fastify service on the backend, is queued on BullMQ, and the result is stored on Cloudflare R2.
Hair, colour, beard and smile are not processed separately and pasted on top of each other. All the selections turn into a single image generation request, which is why the result does not look assembled — lighting and skin tone stay consistent.
Usage runs on credits. There is no subscription and purchased credits never expire — unused credits do not burn at the end of the month. If a generation fails, the credit it consumed is refunded automatically; nobody has to open a support ticket for it.
No subscription, and credits never expire. This is not an app anybody opens daily — it gets opened while deciding on a haircut and then not again for months. A monthly subscription punishes exactly that usage pattern.
Credits never expiring follows from the same logic: something you paid for should not evaporate because you did not use it fast enough.
Refunds are automatic. If a job fails in the queue, the credit it consumed goes straight back to the user — nobody has to notice it, write in and wait.
That is not generosity, it falls out of the queue design: when a job ends in a failed state, the refund runs as part of that same job.
The uploaded image and its result are stored in the app’s own storage (Cloudflare R2) for the generation job. The full account of how the data is handled lives in the app’s own privacy policy, linked from the store listing and from manehairs.com.
No. Usage is credit based and purchased credits never expire — they are not wiped for going unused.
No. The credit is refunded automatically when a generation fails; there is no support ticket to open.
No. Hairstyle, colour, beard, moustache, smile and piercing can be combined, and they all merge into a single generation request.
I build products from idea to store release. Reach me by e-mail.