Inspiration

I myself am an Autistic person who wears makeup, and I know from my own experiences (as well as the experiences of my community) that makeup is often inaccessible purely because it is a sensory gamble. That is to say, when you buy a product, you don't know how it's going to feel on your skin or hair until you wear it. Even if you can try things on in person, you might not truly experience how the product feels until you've worn it for a while.

One solution to this is using recommendations from other disabled people. Unfortunately, not everyone has access to a community of other disabled people, and even if they do, what one person considers a "good" lipgloss on a sensory level might actually be unbearably sticky or slimy to other people!

This is where Convergent Beauty comes in:

Convergent Beauty takes the sensory guess work out of buying beauty products. On it's surface, it's a place where you can log the products you have tried (and how you felt about them), as well as get recommendations from other user's inputted products.

But wait: Didn't I just say recommendations weren't reliable? Yes, I did! Recommendations based on value judgments by individuals can be too subjective to be reliable. That's why convergent beauty combines the data of multiple users to create a more "objective" list of sensory attributes for a product. For example: If one person says it was sticky, but five say it was slimy, we know not to recommend it to people who don't like sticky products, and we can also recommend it even less to people who dislike slimy products. The inverse is true too; if you really like light and smooth foundations, you can find the foundation that other users rated light and smooth most often!

That leaves one last problem: how do you know what you like? That's the beauty, pun intended, of Convergent Beauty. Convergent Beauty needs products in the database in order to generate recommendations. Convergent Beauty also needs to know how you feel about specific products so that it knows what you like. The solution: You enter your products, how they feel, and how you feel about them, and the app can take that data to build you a sensory profile that goes deeper than "do you want creamy lipstick or wet lipgloss?"

It's worth noting that people who are neurodivergent, like myself, often have trouble labelling sensations. By curating a small list of textures and smells that you can assign to a product, and then comparing these assignments to other peoples' judgments, we can better find a shared language around what we actually like and need from a sensory perspective.

How we built it

Convergent Beauty is built on a stack of Elasticsearch, PostgresQL, Python + Django + the Django Rest Framework, and is presented via a Vuejs 3 front end (which was designed in Figma). I started with the design to provide guidance on project needs and user flow, and then moved on to creating a backend that could supply the data that design needed. I then placed the backend on a Digital Ocean droplet with an Elasticsearch instance and a Postgres instance.

After a lot of API testing with Postman, I dove into Vue and attempted to replicate what I made in Figma. From there, I've been testing out the "live" version of the site, adding products of my own and inviting some friends to add their products as well. After all, it's an app and experience that's meant to be collaborative!

Challenges we ran into

I was very new to Vue when I started creating this app's frontend, and I still feel like I don't have a perfect grasp on all the things that Vue can do. There were quite a few roadblocks around hooking the frontend into the backend... mostly stemming from CORS (Cross Origin Resource Sharing) errors. These errors came back when it came time to secure the site with HTTPS. I also accidentally locked myself out of the Digital Ocean server by enabling the firewall before allowing secure shell access through it! That was fun. Thankfully I recovered it quickly!

Another challenge was developing the initial version of the recommendation algorithm. I spent a lot of time reading about recommendation engines on Elasticsearch and ways that they could be created, and in the end decided to homebrew something mostly-unique. There was a lot of diagram-drawing and math-calculating going on for a while!

Accomplishments that we're proud of

There's a very important part of the app that I'm incredibly proud of: When adding the brand or product name of a product into your logs, brands that are already submitted will pop up to allow you to select them (if they match the brand you're entering). This search suggestion is more than just nice for the users; it also is a key part of how I'm able to collect multiple users' thoughts on a single product. Instead of relying on users to fill out identical brand and product names on their own, they are guided to select existing, matching names. No fuzzy matching necessary on the code side of things!

What we learned

I learned a LOT about how Vue works. I also learned that Elasticsearch is even more amazing than I ever knew.

What's next for Convergent Beauty

I'm going to keep the site running and open it up to other disabled people in the public to input their products, so that hopefully it can become a useful tool for helping more people use beauty products!

Technically-wise, I want to add a few more quality of life things. Namely as of writing this:

-the ability to edit your product listings -the ability to view and adjust your sensory profile manually -An about page on the site itself, for when it's open to the public

Share this project:

Updates