Inspiration

Buying an instrument online means translating what you hear in your head into filters: brand, price range, category. GearMate lets you say it the way you would say it to a friend — "a light bass under $500 for a beginner" — and does the translating for you.

What it does

GearMate is an iOS app for finding guitars, basses, amps and multi-effects.

  • Browse 100 instruments with full details, stock and prices
  • Ask about gear in plain English and get an answer that says why
  • Get recommendations based on your budget, taste and past orders
  • Add to cart and try a simulated checkout

Every answer carries its reasons: the price against your budget, whether it is in stock, and what the catalog says about it. The catalog is a sample set and no real order is placed.

Browsing is free. Consultation and recommendations are GearMate Pro, sold as a monthly or annual subscription through RevenueCat.

How we built it

The app is Swift and SwiftUI. The backend is a .NET API on Azure Container Apps with Azure SQL, and the catalog is searched by vector similarity over embeddings (text-embedding-3-small). Claude (claude-sonnet-5, through Microsoft Foundry) reads the request and writes the explanation. Subscriptions, paywall and entitlements are RevenueCat.

The whole app was built spec-first: a constitution, a spec with numbered requirements, a plan, then tasks. Every requirement carries a test that proves it, and the tests are matched back to the requirement numbers by a script, so "done" is something a machine checks rather than something the agent claims.

Challenges we ran into

Recommendations had never worked in production: the OpenAPI response schema was composed from the input schema, which forbade additional properties, so decoding always failed. It was invisible until the app ran against the real backend on a real device.

The first subscription group has to be submitted together with an app build, which is what MISSING_METADATA means — and that also explains a RevenueCat configuration error on device that looked unrelated.

What we learned

Tests that pass are not the same as an app that works. The bugs that mattered showed up the first time a human held the phone.

What's next for GearMate

Connecting a real catalog so the orders become real ones.

Built With

  • .net
  • azure
  • azure-container-apps
  • azure-openai
  • c#
  • claude
  • docker
  • entity-framework-core
  • microsoft-foundry
  • openapi
  • revenuecat
  • swift
  • swiftui
  • terraform
  • xcode
  • xcuitest
  • xunit
Share this project:

Updates

Submission history