Charm

A dating app with honest match signals.

Charm dating app on two phones
Role
Engineer, with a co-founderSep 2021 – Jun 2022
Status
Pilot, then paused
In numbers
720 commits · app and backend · 1 pilot group
Hosted on
AWS, fully serverless: Serverless Framework for the backend, Amplify for the app
Stack
React NativeExpoAWS AmplifyAppSync GraphQLLambdaDjangoPostgreSQLGDALStripe

The problem

Dating apps hide the one thing you want to know: is the other person actually engaged, or swiping on everyone?

What I built

A mobile app that shows how engaged a match really is: swiping behaviour, activity in conversations, shared interests. Real-time chat, groups, push notifications, payments.

Outcome

In the stores for a pilot group, with chat, groups and payments live. Users liked the signals. Paused for reasons outside the product.

Sometimes things stop for reasons that have nothing to do with the code. Ship, learn, carry it into the next one.what I took from it

How it was built

Decisions

  • Entirely serverless: Django on Lambda behind an HTTP API with a Lambda authorizer. Nothing to keep alive for a pilot with unpredictable usage.
  • Chat over AppSync GraphQL subscriptions, with Lambda resolvers for messages and screen reloads, so the app never polls.
  • Geo matching with a GDAL layer next to PostgreSQL; Expo with Amplify for auth, Stripe for payments. Proven parts everywhere else, so the time went into the match signals, which were the actual idea.
  • Over-the-air updates through Expo, so a fix reached pilot users the same day without waiting for an app-store review.

Timeline

  1. Oct 2021App shell, navigation, profiles
  2. DecChat over AppSync
  3. Jan 2022Over-the-air updates
  4. Mar – AprGroups, theming, availability
  5. May – Jun 2022Pilot, then paused