Jason Moynihan

Anchor

An anonymous, AI-powered accountability app helping users be porn-free and find real connection during moments of struggle

SCROLL

Overview

Anchor is a non-profit, anonymous accountability app that helps people break isolation and find real support as they work to become porn-free. Users can reach out for help in moments of struggle, receive encouragement from peers, and stay motivated with AI-powered daily prompts and streak tracking—all in a safe, judgment-free space.

Project Goals

1

Foster a judgment-free space for anonymous accountability and real support

2

Deliver AI-generated daily content and dynamic streak tracking

3

Maintain a safe, supportive community with strong moderation tools

4

Protect user privacy through strict anonymity in every interaction

Problems & Solutions

1

Fear of Judgment and Shame

People feel shame reaching out to their accountability partners, especially when struggling. Admitting vulnerability to someone you know personally is powerful, but can raise the barrier to actually reaching out.

100% Anonymity, No Account Required

Built a one-click anonymous SOS system that broadcasts help requests to the entire community without requiring account creation or revealing identity. Users are assigned generated identifiers to maintain complete privacy.

Firebase Cloud FunctionsAnonymous AuthReal-time Database
2

Risk of Harmful Responses

Users at their most vulnerable moments could receive trolling, inappropriate suggestions, or harmful advice that would damage trust and discourage future help-seeking.

AI-Powered Moderation

Implemented comprehensive content moderation using OpenAI that screens interactions before delivery. Filters harmful content, trolling, and inappropriate responses to protect users when they're most vulnerable.

OpenAI APIApproval UXReal-time Moderation
3

Need for Deeper, Ongoing Connection

Single messages of encouragement are valuable, but many users benefit from building longer-term relationships with those who support them. Without an option for ongoing conversation, it's difficult to form lasting accountability and genuine connection.

Optional Anonymous One-on-One Chat

Encouragers can opt in to allow requesters to start an anonymous, private chat for ongoing support. This enables deeper, long-term accountability and meaningful relationships, while still protecting user privacy and anonymity.

Firebase FirestoreAnonymous Threaded MessagingOpt-In Chat Permissions
4

Sustaining Daily Engagement

Beyond crisis moments, users needed reasons to engage with the app daily to build consistent accountability habits and maintain spiritual growth.

Streak Tracking & AI-Generated Daily Content

Added streak tracking, and built scheduled Cloud Functions that generate personalized daily Bible verses and prayers using OpenAI. Provides consistent daily value to encourage regular app usage and spiritual engagement.

Scheduled FunctionsOpenAI APICron Jobs

Key Features

One-Click Anonymous Help

Send an anonymous SOS to the entire community with a single tap. Optionally add context about your struggle. No account needed, complete privacy maintained.

Receive Encouragement

Get immediate anonymous help from other app users in times of temptation and struggle.

AI-Protected Replies

Every reply to help requests is screened by AI before reaching you, filtering out harmful content, trolling, and inappropriate responses to keep you safe when you're most vulnerable.

Verse Of The Day

Receive daily scripture to maintain spiritual engagement and build consistent habits beyond crisis moments.

Daily Prayer

Receive AI-generated personalized prayers to maintain spiritual engagement and build consistent habits beyond crisis moments.

Progress Tracking

Visual dashboards showing your consistency streaks, check-in history, and goal progress over time. Hide your streak if you prefer to keep it private.

Optional Deeper Connection

If both parties consent, continue conversations privately while maintaining anonymity. Control your privacy with options to hide streaks and personal details.

Community Posts

Share testimonies and resources in a community space. LIke posts, add comments, and make posts of your own, all anonymous and AI-screened for safety.

Tech Stack

Built with modern mobile development tools and cloud infrastructure for reliability and scale.

Frontend

React Native
Expo
TypeScript
Tailwind CSS
React Navigation
Expo Notifications

Backend

Firebase
Cloud Functions
Firestore
Firebase Auth
OpenAI API

Tools & Services

EAS Build
App Store Connect
Firebase Console
Expo Go

Development

Git
GitHub
VS Code
Expo CLI
ESLint
TestFlight

Technical Challenges

Selected engineering highlights behind Anchor’s anonymous, safety-critical social app. Each card expands with diagrams, code peeks, trade-offs, and observed results.

Context / Constraints

Every public interaction is screened pre-delivery; users can only reach out or post at sane rates to protect the community and reduce noise.

Approach

  • Client-side rate limiter: max 2 reach outs or posts / 5 minutes with clear, friendly modals.
  • Single-tier AI moderation: fetch an editable moderation prompt from Firestore, append user text, call GPT, then gate delivery based on the decision.
  • Creator experience: dedicated pending state + smooth transitions; clear rejection copy with Community Guidelines link and 'Try again'.

Trade-offs

  • Small risk of false positives from the AI → users can revise and retry with clearer context.
  • Model precision depends on prompt quality → prompts are editable in Firestore for fast iteration.

Outcome

A consistently safe space with a clean creation flow—content is screened before delivery, spam is rate-limited, and rejected posts are explained with a path to retry.

Technologies

Cloud FunctionsFirestoreOpenAI APIClient-side rate limiting

Context / Constraints

Users should receive timely alerts for new pleas and encouragements, but not be interrupted by redundant notifications if already viewing the relevant screen.

Approach

  • Cloud Functions trigger on new Firestore activity and send notifications to all relevant users except the creator.
  • On the client, use React Context to track the current app screen; if a notification matches the current view, suppress the OS push and show an in-app toast instead.
  • Unread counters and badge icons are updated locally to reflect new activity.

Trade-offs

  • Requires accurate client-side tracking of app state for reliable suppression.
  • Rare edge case: Users may get a notification if state changes during delivery window.

Outcome

Users always get timely, relevant alerts, but never get interrupted by duplicate pushes for content they’re already viewing.

Technologies

Firebase Cloud FunctionsExpo NotificationsReact Context (active screen tracking)

Context / Constraints

Community pleas for help must sort and update LIVE based on real user interactions, but naive listeners on every document would explode Firestore costs and crash performance.

Approach

  • Shard live listeners: use a single top-level listener for the latest N approved pleas (excluding the current user), sorted and filtered as needed.
  • For each visible plea, dynamically attach a subcollection listener for encouragements; clean these up as pleas scroll out of view.
  • Merge base plea data and live encouragement subcounts client-side, ensuring efficient state updates and smooth real-time feed sorting.
  • In-memory, memoized sort: Prioritize pleas with fewest encouragements, then by oldest first.

Trade-offs

  • Slightly higher code complexity: dynamic management of subcollection listeners and cleanup.
  • Recent-feed scope: only the N most recent pleas update live; older items update when scrolled into view.
  • Each user can open up to N+1 listeners (feed + subcollections), but this is capped and far cheaper than naive global listeners.

Outcome

Stable, low-cost real-time feed with instant updates and fair ordering—listener usage stays low even during bursty community activity.

Technologies

Firestore onSnapshotReact useEffectClient-side refs & cleanupDynamic subcollection listeners

Context / Constraints

Users must remain anonymous and retain a stable personal history (streaks, preferences) without creating a formal account or storing any PII.

Approach

  • Device-bound anonymous identity: each app install gets a unique, stable UID (no username, email, or phone required).
  • Firestore Security Rules: strict per-UID access—users can only read or write their own data.
  • Zero PII stored anywhere in Firestore, including for moderation.

Trade-offs

  • If the app is deleted or device changes, history is lost (unless user exports a recovery key—planned feature).
  • On shared devices, multiple people may share the same anonymous identity.

Outcome

True user privacy and persistence—users stay fully anonymous, never create an account, and their personal progress is always local to their device.

Technologies

Firebase Anonymous AuthFirestore Security Rules

Context / Constraints

Any tappable element can morph into a full-screen modal with pixel-perfect visual continuity, creating a signature, premium app experience.

Approach

  • Single API: pass anchor refs and destination; Bridge measures, snapshots, and animates shared geometry.
  • Optimized for React Native/Expo: uses Reanimated and real-time layout snapshots, with safe area handling and interaction disabling mid-morph.
  • Ultra-smooth even for heavy modals: FlatList/lazy loading ensures heavy content (like comments or messages) is loaded only *after* the transition completes, maintaining flawless animation performance.

Trade-offs

  • Measuring on low-end devices requires throttling frames to ensure performance.

Outcome

Signature, premium feel reused across Help Requests, Messages, and Settings—modal transitions that feel as seamless as native iOS.

Technologies

React NativeReanimatedExpoTypeScript

Results & Impact

Anchor launched as a grassroots project within my local church community, aiming to provide a safe, anonymous space for accountability and support. Early feedback has been deeply encouraging.

Real Impact

  • Users like the anonmymity associated with reaching out
  • One-on-one encouragement and daily check-ins are cited as the app’s most valuable features.
  • Several users have already begun building new streaks and habits with Anchor’s help.

Technical Foundation

  • Launched on the Apple App Store with 100% anonymous accounts.
  • Zero reported bugs or crashes in first weeks of use.
  • Push notification flow and daily content pipeline fully automated.

What’s Next

  • Planned android launch based on early feedback.
  • Exploring adding a small 'close group' of trusted peers to reach out to
  • Gathering more stories to help others find hope and support.