One of my partnerβs hobbies is nail polishβbut calling it a hobby doesnβt really do it justice. While we binge horror movies, Hollowβs playthroughs, or our favorite IASIP episodes, sheβs often painting her nails, and even that undersells it. These are elaborate, intricate designs I didnβt even realize were possible with nail polish. Iβve learned a lot.
As you might expect, she has an enormous collection. Clear, neatly organized boxesβreminiscent of the ones I used for my Hot Wheelsβare stacked high and packed with polish. Hundreds of bottles. I think it was soon after we started dating that I halfβjoked I could build an app to inventory them all. The βhalfβ is doing some heavy lifting there; the sheer amount of data entry would be massive.
A few weeks ago, I started thinking about that idea more seriously. There had to be a better way.
I kept turning the idea over while staying sharp with another project: a web app Iβd originally built to help parents understand the school systemβs redistricting options as we watched Good Mythical Morning.
The app no longer had a relevant user base, so it wasnβt much of a challenge, but Iβd been using it as an excuse to replace the long-outdated AngularJS frontend and finally move from myself from Angular proper to React.
I wanted something that felt like a real, full-fledged applicationβa project that needed the whole stack. That little app became a sandbox for a prototype-grade system with newer technologies, but I realized I needed a new problem space and a fresh challenge.
I kept thinking about the problem and surveyed the current nail polish inventory tools: they all suck. None of them solves the core challenge of onboarding a nail polish savantβs collection: turning hundreds of bottlesβincluding dozens of non-SKUβd indie brandsβinto an organized, searchable library. That initial setup is the real barrier. If we could streamline and automate it, we could unlock many powerful features.
The real issue was the data. How do you build a catalog thatβs complete enough to be genuinely useful? What features would a true nail fanatic actually care about? I asked whether color-matching to prevent dupesβas theyβre called in the bizβwould be helpful. βYes, of course,β she said. βDuh.β That led to another idea: not just finding matches, but also identifying the oppositeβshades that are underrepresented in a collection, a kind of gap analysis.
Then there was the question of tagging finishes. How do we keep cremes separate from crellys, holos distinct from duochromes, and make sure magnetics never get lumped in with ordinary glitter or flakies? Could we suggest harmonious color combinations?
Iβve learned a lot about nail polish through this processβmostly by peppering my girlfriend with questions while sheβs trying to concentrate on her nails. I swear she doesn’t mind it.
The ideas started to come together, and I began prototyping to see what was possibleβand itβs getting pretty cool. We came up with a temporary name, SwatchWatch, and ran with it. I could incorporate AI, draft React components, experiment with tools like Next.js, and leverage my AWS background while further exploring Azure.
At JHUAPL, I worked on integrating Azure services to analyze video, process data, improve search, and deliver analytics. This project felt like a good opportunity to experiment with Azureβs serverless technologies and deepen my experience in a few key areas: getting comfortable with server-side rendering, exploring their Lambda-equivalent services, integrating an LLM, building a custom model, and working with federated logins using OAuth-style authentication.
Iβve been tinkering with Azureβs OpenAI offerings like the new Foundry, static hosting, storage containers, and managed Postgres with pgvector support. With approval, I defined some core features and started building. Iβve made substantial progress in about three weekends and a few weekdaysβhelped by the fact that Iβm currently between jobs.
π§ still have to figure out βοΈ proven + will be in MVP β
in progress π done and in MVPπ π
Smart Polish Collection Manager β Track your nail polish collection with brand, shade, finish, and star ratings.π π¨ Color Wheel Search β Interactive canvas-based color wheel using OKLAB perceptual color matching to find the closest polishes in your collection.π π³οΈ Collection Gap Heatmap β Hue Γ lightness coverage map that reveals gaps in your collection and suggests what to buy next.π§ π£οΈ Voice Add β Dictate polish details; Azure Speech + OpenAI parse them into structured entries.π§ πΈ Rapid Capture β Scan barcodes, labels, or bottle colors, then use an adaptive question flow to quickly add new polishes βοΈ π Fuzzy Catalog Search β pg_trgm-powered search across brands, shade names, and aliases.π€ AI Hex Detection β Azure OpenAI analyzes product images to detect the true hex color of the base polish shade.π 𧬠Swatch Similarity / Dupe Finder β pgvector embeddings for finding near-dupes in your collection.β
π Connector Ingestion Pipeline β Async jobs pull polish data from OpenBeautyFacts, MakeupAPI, Shopify, and other sources.βοΈ π Azure AD B2C Auth β Full MSAL-based authentication with graceful dev-bypass fallback and federated logins.β
βοΈ Unified Admin Console β Manage finish types, harmony types, normalization aliases, ingestion jobs, and job history in one place.π§ π± Cross-Platform β Web (Next.js) + Mobile (Expo/React Native) sharing types via a monorepo.
π§ still have to figure out βοΈ proven + will be in MVP< β in progress π done and in MVP
π π Smart Polish Collection Manager β Track your nail polish collection with brand, shade, finish, and star ratings. π π¨ Color Wheel Search β Interactive canvas-based color wheel using OKLAB perceptual color matching to find the closest polishes in your collection. π π³οΈ Collection Gap Heatmap β Hue Γ lightness coverage map that reveals gaps in your collection and suggests what to buy next. π§ π£οΈ Voice Add β Dictate polish details; Azure Speech + OpenAI parse them into structured entries. π§ πΈ Rapid Capture β Scan barcodes, labels, or bottle colors, then use an adaptive question flow to quickly add new polishes βοΈ π Fuzzy Catalog Search β pg_trgm-powered search across brands, shade names, and aliases. π€ AI Hex Detection β Azure OpenAI analyzes product images to detect the true hex color of the base polish shade. π 𧬠Swatch Similarity / Dupe Finder β pgvector embeddings for finding near-dupes in your collection. β π Connector Ingestion Pipeline β Async jobs pull polish data from OpenBeautyFacts, MakeupAPI, Shopify, and other sources. βοΈ π Azure AD B2C Auth β Full MSAL-based authentication with graceful dev-bypass fallback and federated logins. β βοΈ Unified Admin Console β Manage finish types, harmony types, normalization aliases, ingestion jobs, and job history in one place. π§ π± Cross-Platform β Web (Next.js) + Mobile (Expo/React Native) sharing types via a monorepo.
π§ still have to figure out βοΈ proven + will be in MVP<
β
in progress π done and in MVP
π π
Smart Polish Collection Manager β Track your nail polish collection with brand, shade, finish, and star ratings.
π π¨ Color Wheel Search β Interactive canvas-based color wheel using OKLAB perceptual color matching to find the closest polishes in your collection.
π π³οΈ Collection Gap Heatmap β Hue Γ lightness coverage map that reveals gaps in your collection and suggests what to buy next.
π§ π£οΈ Voice Add β Dictate polish details; Azure Speech + OpenAI parse them into structured entries.
π§ πΈ Rapid Capture β Scan barcodes, labels, or bottle colors, then use an adaptive question flow to quickly add new polishes
βοΈ π Fuzzy Catalog Search β pg_trgm-powered search across brands, shade names, and aliases.
π€ AI Hex Detection β Azure OpenAI analyzes product images to detect the true hex color of the base polish shade.
π 𧬠Swatch Similarity / Dupe Finder β pgvector embeddings for finding near-dupes in your collection.
β
π Connector Ingestion Pipeline β Async jobs pull polish data from OpenBeautyFacts, MakeupAPI, Shopify, and other sources.
βοΈ π Azure AD B2C Auth β Full MSAL-based authentication with graceful dev-bypass fallback and federated logins.
β
βοΈ Unified Admin Console β Manage finish types, harmony types, normalization aliases, ingestion jobs, and job history in one place.
π§ π± Cross-Platform β Web (Next.js) + Mobile (Expo/React Native) sharing types via a monorepo.As I mentioned, itβs turning out to be pretty damn coolβa great chance to sharpen existing skills and explore new ones. Plus, I get to build a project from scratch, exactly the way I think it should be done, following best practices. Iβm aiming to release the MVP in about a month. Honestly, I really want the challenge of finding time to work on it while employedβitβs rough out here!
Sheβs already asking when she can show it off and get feedback from her nerdy-polish friends, and Iβm looking forward to that. Huzzah! Let me know what you think, and Iβll keep anyone who cares posted. Iβve left some code lying around and possibly a development environment as well.






Leave a Reply