Private by default.
An anonymous social platform where people post, discuss, and react without ever revealing who they are.
Overview · Features · Engineering · Tech Stack · Architecture · Getting Started
Home Feed · Create Post · Communities · Profile
Most anonymous-message apps make users share a link and collect replies by hand. ANON replaces that with a real social space: a public feed and private, invite-only communities where people can post, comment, vote, and react while staying fully anonymous.
Anonymity is enforced on the server, not just hidden in the interface. The API never sends another user's identity to the client, so it can't be recovered even by inspecting network traffic.
| Feature | Description |
|---|---|
| Anonymous Posting | Text, images, polls, and 24-hour disappearing posts, with no identity attached |
| Private Communities | Invite-only rooms with generated join codes, admin roles, member approval, and moderation |
| Real-Time Feed | New posts appear instantly over WebSockets, with no manual refresh |
| Reactions & Voting | Emoji reactions (tap or long-press) plus upvote and downvote |
| Threaded Comments | Focused discussions on any post |
| Search | Server-side search across the entire feed |
| Notifications | In-app and push alerts for replies, votes, community activity, and moderation |
| Account Security | Email and password sign-in, email verification, and password reset by emailed code |
| Saved Posts | Bookmark posts to revisit later |
| Admin Dashboard | A web moderation panel whose actions show in the live app immediately |
- Server-side anonymity: responses are stripped of other users' identities before they leave the API, so privacy doesn't depend on the client.
- Real-time updates: a Socket.IO layer pushes new posts, reactions, and community messages to connected clients as they happen.
- Security hardening: passwords are hashed with scrypt, sessions use JWTs, and the API uses Helmet security headers and per-route rate limiting.
- Smooth mobile UX: infinite-scroll pagination, skeleton loaders, haptic feedback, and swipe navigation between tabs.
- Production deployment: the API and admin dashboard are defined as infrastructure-as-code on Render, and Android builds ship through EAS Build.
| Layer | Technologies |
|---|---|
| Mobile | React Native, Expo SDK 54, TypeScript, React Navigation, Expo Notifications |
| Backend | Node.js, Express, Socket.IO, JWT, Helmet, express-rate-limit |
| Database | PostgreSQL |
| Services | Cloudinary (media), Resend (email), Expo Push (notifications) |
| DevOps | Render (hosting), EAS Build (Android releases) |
┌────────────────────┐ REST + WebSocket ┌────────────────────────┐ ┌──────────────┐
│ Mobile App │ ─────────────────────────▶ │ Express API │ ────▶ │ PostgreSQL │
│ (React Native) │ ◀───────────────────────── │ + Socket.IO Server │ └──────────────┘
└────────────────────┘ anonymized payloads └────────────────────────┘
▲ │
┌────────────────────┐ │ ├────▶ Cloudinary (media)
│ Admin Dashboard │ ───────────────────────────────┘ ├────▶ Resend (email)
│ (Web) │ └────▶ Expo Push (notifications)
└────────────────────┘
.
├── App.js # Entry point, providers, error boundary
├── src/
│ ├── screens/ # Home, Discover, Composer, Communities, Profile, Auth
│ ├── components/ # Shared UI components
│ ├── contexts/ # Auth and toast state
│ ├── services/ # API client
│ ├── utils/ # Haptics, saved posts, error handling
│ └── admin/ # Moderation dashboard
└── anonymous-app-backend/
├── controllers/ # Route handlers
├── middleware/ # Auth and rate limiting
├── models/ # Data access layer
├── routes/ # Express routers
├── services/ # Notifications, push, email, trending
└── database/schema.sql # PostgreSQL schema
Prerequisites: Node.js 20+, PostgreSQL, and Android Studio (or an Expo EAS account for cloud builds).
1. Backend
cd anonymous-app-backend
npm install
cp .env.example .env # configure DATABASE_URL, JWT_SECRET, Cloudinary and Resend keys
npm run db:migrate # apply the database schema
npm run dev # start the API on http://localhost:40002. Mobile app
Create a .env file in the project root:
EXPO_PUBLIC_API_BASE_URL=http://<your-local-ip>:4000The app uses native modules, so it needs a development build (Expo Go is not supported):
npm install
npx expo run:android # local build to a device or emulator
eas build --platform android --profile preview # cloud build that produces an installable APK3. Admin dashboard (optional)
npm run admin:webJeph: designer and developer of the mobile app, backend API, database, real-time layer, and admin tooling.
Copyright © 2026 Jeph. All rights reserved.
This repository is public for portfolio purposes only. No part of this code may be copied, modified, distributed, or used without prior written permission from the author. See LICENSE for details.



