Inspiration
In Japan, staying unmarried is common - 38.5% of women aged 30-34 have never married (2020 National Census). Yet it is still met with pity, prejudice, or quiet judgment. Even in an age that talks about diversity, the idea that everyone should marry runs deep.
Almost everyone in Japan has a smartphone and uses social media. But on mainstream platforms, single women often hold back. Conversations drift toward partners, weddings, and children, and a post about living single can draw hurtful comments. Many end up editing themselves, or not posting at all.
And it is not only about posting. For many of them, simply scrolling can hurt. A friend they have known for years shares photos of her wedding or her kids on Instagram, and every time it stings - so they stop opening the apps altogether. When you can't talk openly in real life, and can't even ask for advice, share your day, or just relax and scroll on social media, there is nowhere left.
I built SOLA because I didn't want these women to be limited or hurt just for being who they are. I wanted a place where they can post freely, ask for advice, and scroll without bracing themselves - a place where they don't have to explain themselves.
Before writing a line of code, I ran a landing page and a small ad campaign: 48 women joined the waitlist at about ¥102 per sign-up. The message that resonated most was a single sentence - "A social network with no married users." That was the whole product.
What it does
SOLA is a Japanese photo-sharing social app for women aged 28+ who are not legally married. At sign-up, every member confirms three statements (woman / 28+ / no legal spouse). Inside, it deliberately looks like any ordinary SNS: a photo feed, follows, likes, comments, hashtags, and DMs with a request inbox. It also has an advice board where each post is shown under a temporary name and a "sky" icon chosen by the server - profile names and photos are never shown there.
There is no matchmaking, no swiping, no compatibility score, and no ranking. Monetization is a single optional subscription, "SOLA Supporter" (¥380/month, $1.99 in the US), which adds a small label to the supporter's profile and posts - and changes nothing else. No paywall, no feature gating, no ad removal. It is a way to keep the place alive, not a way to buy status.
Version 1.1 adds a Blog tab for longer posts - added after members asked for a place to write more than a photo caption - and "Otsukare": a one-tap way to tell another member "good job today" (a common Japanese phrase of care), sent from the day's sky row at the top of Home.
How we built it
- Client: Expo / React Native with expo-router, TypeScript.
- Backend: Supabase - Postgres with Row Level Security enabled on all 37 tables, Edge Functions for every write that needs moderation, and Storage with signed URLs for photos.
- Moderation: photo posts, board threads and board replies pass a banned-word check, a contact-information detector, and OpenAI Moderation before they are stored. Only four categories are auto-blocked; everything else goes to human review via reports.
- Privacy by design on the board: temporary names are chosen server-side from a fixed list enforced by a CHECK constraint, and the underlying author ID is never exposed through views.
- Payments: RevenueCat SDK (react-native-purchases) for purchase and restore, and a signature-verified RevenueCat webhook into a Supabase Edge Function that updates a
subscriptionstable. The "SOLA Supporter" label is read through RPCs that expose only a boolean - never the amount, tenure, or rank. - Analytics: an in-house events table behind an Edge Function; no third-party analytics SDK, and no post text or photos ever recorded.
- The whole app was built solo, with Claude Code as a pair programmer, in sprints with written acceptance criteria.
Challenges we ran into
- Deciding what NOT to moderate. Early versions flagged "I'm so tired of everything" as self-harm. For a community built around honest talk, that would have been fatal. We cut automatic blocking down to four narrowly defined categories and moved everything else - including threats - to human review through reports.
- Privacy that survives the operator. The advice board had to hide who wrote what even from an admin token, which meant moving the author-to-display-name mapping out of every view and RPC.
- Keeping "supporter" from becoming "status." We wrote into the Terms that the label never appears on the advice board, because in a small community, "age band + category + supporter" is enough to identify someone.
- App Review. Our first submission went through several rounds (demo content, account deletion, subscription disclosure, and finally store copy that read as exclusionary). We rewrote the listing to describe what the app does rather than who it keeps out - and launched on September 27.
Accomplishments that we're proud of
- Validated demand before building: ¥102 CPA, 48 waitlist sign-ups, from a one-page landing site.
- A moderation policy that explicitly refuses to judge opinions or values, and legal texts (Terms, Privacy, Age Policy, Deletion Policy) written before launch so that no re-consent is needed later.
- A DM "delete request" that is indistinguishable from the sender's side - modeled on Instagram, enforced by database triggers rather than UI.
- A subscription that gives nothing but a label - by design.
What we learned
- Differentiation can be a rule about who is in the room, not a feature.
- Safety design is mostly about restraint: the fewer things the machine decides, the more people are willing to write.
- Legal text is a product surface. Writing the Terms early changed the data model (what to log, what never to expose).
- Solo development with an AI pair programmer works when every sprint has a written contract and a checklist.
What's next for SOLA
- Done: on September 29 we opened SOLA to our 52 waitlist members first (48 from the ad test, 4 more who found us on social media). The public launch follows on October 3.
- An Android version.
- Public web pages for board threads that the author chooses to publish.
- Universal Links from shared posts into the app.
- Topic (hashtag) muting, chosen by the user - never by an AI classifier.
- English UI if overseas members ask for it.
Built With
- claude-code
- expo.io
- ios
- netlify
- openai
- postgresql
- react-native
- revenuecat
- supabase
- typescript
Log in or sign up for Devpost to join the conversation.