█████╗ ██████╗ ██████╗ ████████╗██████╗ █████╗ ██████╗██╗ ██╗
██╔══██╗██╔══██╗██╔══██╗╚══██╔══╝██╔══██╗██╔══██╗██╔════╝██║ ██╔╝
███████║██████╔╝██████╔╝ ██║ ██████╔╝███████║██║ █████╔╝
██╔══██║██╔═══╝ ██╔═══╝ ██║ ██╔══██╗██╔══██║██║ ██╔═██╗
██║ ██║██║ ██║ ██║ ██║ ██║██║ ██║╚██████╗██║ ██╗
╚═╝ ╚═╝╚═╝ ╚═╝ ╚═╝ ╚═╝ ╚═╝╚═╝ ╚═╝ ╚═════╝╚═╝ ╚═╝
Anonymous Real-Time Room Chat & Community Platform for Android
"Speak freely. Stay hidden. Connect anyway."
Features · Architecture · Installation · Usage · Roadmap
AppTrack is a privacy-first, anonymous community platform for Android that lets users enter, create, and participate in topic-based rooms — all without registering an account or revealing a single detail about themselves.
The moment a user opens the app, they are silently authenticated via Firebase Anonymous Auth and assigned a randomly generated identity (e.g. ShadowFox712). They can immediately create or join rooms using a unique Room ID, send real-time messages, reply to others, post images, and interact as a full community member — entirely anonymously.
AppTrack is built with a clean MVVM architecture layered over Firebase Firestore for real-time data sync, Firebase Auth for anonymous sessions, and Cloudinary for media storage.
Modern social platforms are built on identity. Registration walls, profile pages, follower counts, and real names create an environment where people self-censor, fear judgment, and are perpetually tracked.
This creates several compounding issues:
- Fear of expression — Users don't share honest opinions because their real identity is attached.
- Registration fatigue — Sign-up flows drive users away before they even experience the product.
- Privacy erosion — Every interaction is tied to a persistent profile that can be scraped, sold, or leaked.
- Community fragmentation — There is no frictionless way to spin up a temporary, topic-specific room for a group of people without handing over personal data.
AppTrack eliminates all of these barriers with a single principle: enter first, ask nothing.
| Problem | AppTrack's Solution |
|---|---|
| Registration friction | Firebase Anonymous Auth — zero signup |
| Identity exposure | SHA-256 hashed device seed + random username generation |
| Persistent surveillance | Anonymous sessions with no PII stored |
| Closed communities | Open Room IDs — share a code, join instantly |
| Media privacy | Cloudinary with no user-linked metadata |
- Zero-signup anonymous auth — Powered by Firebase Authentication
- Auto-generated personas — Randomized codenames like
PhantomWolf091orGhostFalcon447 - SHA-256 identity hashing — Device ID combined with UUID random seed, irreversibly hashed
- No PII stored anywhere — Not in Firestore, not in logs, not in metadata
- Create rooms — Set a name, topic, and max member cap
- Join rooms via Room ID — 8-character alphanumeric code shared out-of-band
- Real-time member count — Live presence tracking
- Room settings — Manage and configure your own room
- Share room — Native Android share sheet integration
- Real-time messaging — Firestore snapshot listeners, zero-latency delivery
- Reply-to-message — Threaded reply context inline in the chat
- Left/Right bubble layout — Own messages on the right, others on the left
- Image posts — Upload photos directly to Cloudinary, display in feed
- Fullscreen image preview — Long-press to expand any image
- Rate limiting — Post cooldown (15s), comment cooldown (5s)
- Device integrity checks —
DeviceIntegrityCheckervalidates environment - Encryption layer —
EncryptionManagerfor sensitive local data - Report system — Flag spam, harassment, hate speech, self-harm, or illegal content
- Moderation engine — Domain-level
ModerationEnginefor rule enforcement
| Plan | Identity Reveals | Features |
|---|---|---|
| Basic | 10/month | Standard access |
| Pro | 30/month | Extended reveals |
| Elite | 90/month | Full reveal access |
- FCM-powered push — Firebase Cloud Messaging via
AppTrackMessagingService - Notification types — Comments, replies, identity reveals
- Per-room toggle — Enable or disable notifications per room
AppTrack follows a layered MVVM (Model-View-ViewModel) architecture with a clear separation of concerns across five layers:
┌─────────────────────────────────────────────────────┐
│ PRESENTATION LAYER │
│ Activities · Adapters · XML Layouts · Material UI │
├─────────────────────────────────────────────────────┤
│ VIEWMODEL LAYER │
│ FeedViewModel · PostViewModel · CommentVM │
│ IdentityViewModel · PremiumViewModel │
├─────────────────────────────────────────────────────┤
│ DOMAIN LAYER │
│ FeedEngine · ModerationEngine · ReputationEngine │
│ PremiumEngine │
├─────────────────────────────────────────────────────┤
│ REPOSITORY LAYER │
│ AuthRepo · PostRepo · FeedRepo · CommentRepo │
│ PremiumRepo · ModerationRepo · IdentityRepo │
├─────────────────────────────────────────────────────┤
│ NETWORK / DATA LAYER │
│ FirebaseService · FirestoreService · StorageService│
│ CloudFunctionsService · CacheManager · PrefManager │
└─────────────────────────────────────────────────────┘
- MVVM — Reactive ViewModel + LiveData separation from Activities
- Repository Pattern — All data access abstracted behind Repository classes
- Result Wrapper —
core/Result.javawraps success/failure states uniformly - Singleton Services — Firebase and Cloudinary services are singleton-scoped
- Engine Pattern — Business logic (Feed, Moderation, Premium, Reputation) isolated in Domain layer
╔══════════════════════════════════════════════════════════════════╗
║ ANDROID CLIENT ║
║ ║
║ ┌──────────────┐ ┌───────────────┐ ┌────────────────────┐ ║
║ │ SplashScreen│ │ AnonymousLogin│ │ TopicsActivity │ ║
║ └──────┬───────┘ └───────┬───────┘ └────────┬───────────┘ ║
║ │ │ │ ║
║ ┌──────▼───────────────────▼───────────────────▼───────────┐ ║
║ │ ROOM SUBSYSTEM │ ║
║ │ CreateRoomActivity ◄──► RoomFeedActivity ◄──► JoinRoom │ ║
║ │ │ │ │ ║
║ │ RoomMessageAdapter RoomPostAdapter │ ║
║ └──────────────────────────────────────────────────────────┘ ║
║ ║
║ ┌──────────────────┐ ┌──────────────┐ ┌───────────────────┐ ║
║ │ FeedActivity │ │ CreatePost │ │ CommentActivity │ ║
║ │ FeedAdapter │ │ FullImageView│ │ CommentAdapter │ ║
║ └────────┬─────────┘ └──────┬───────┘ └────────┬──────────┘ ║
║ │ │ │ ║
║ ┌────────▼───────────────────▼───────────────────▼──────────┐ ║
║ │ SECURITY SUBSYSTEM │ ║
║ │ AnonymityManager · EncryptionManager · RateLimiter │ ║
║ │ DeviceIntegrityChecker │ ║
║ └───────────────────────────┬───────────────────────────────┘ ║
╚══════════════════════════════╪═══════════════════════════════════╝
│
┌────────────────┼────────────────┐
│ │ │
╔═════════▼═══════╗ ╔══════▼══════╗ ╔══════▼═══════╗
║ FIREBASE AUTH ║ ║ FIRESTORE ║ ║ CLOUDINARY ║
║ ║ ║ ║ ║ ║
║ Anonymous Login ║ ║ rooms/ ║ ║ post_media/ ║
║ Session Tokens ║ ║ users/ ║ ║ CDN Delivery║
║ UID Generation ║ ║ posts/ ║ ║ Image Resize║
╚═════════════════╝ ║ comments/ ║ ╚══════════════╝
║ topics/ ║
║ reports/ ║
╚═════════════╝
│
╔══════════▼══════════╗
║ FIREBASE CLOUD ║
║ MESSAGING (FCM) ║
║ Push Notifications ║
╚═════════════════════╝
User Opens App
│
▼
SplashActivity
│
▼
AnonymousLoginActivity ──── Firebase signInAnonymously()
│ │
│ ✓ Auth Success
│ │
│ Generate AnonymousID (SHA-256)
│ Generate Username (ShadowFox712)
│
├──── [CREATE ROOM] ──────────────────────────┐
│ │ │
│ CreateRoomActivity │
│ Input: name, topic, maxMembers │
│ Generate: 8-char Room ID │
│ Write: Firestore /rooms/{roomId} │
│ │ │
│ └──► RoomFeedActivity ◄───────────┤
│ │ │
└──── [JOIN ROOM] ──────┘ │
│ JoinRoomActivity
Enter Room ID Validate Room ID
│ │
└──────────────────────────────────┘
│
RoomFeedActivity
┌──────┴──────┐
│ │
[Messages] [Posts/Feed]
│ │
Real-time CreatePostActivity
Firestore └── Cloudinary Upload
Listener └── Image URL → Firestore
│
Reply / React
Long-press → FullImageActivity
| Technology | Version | Purpose |
|---|---|---|
| Java | 17 | Primary language |
| Android SDK | Latest | Platform APIs |
| XML Layouts | — | UI declarative design |
| RecyclerView | AndroidX | Scrollable lists & adapters |
| Glide | Latest | Efficient image loading & caching |
| OkHttp | Latest | HTTP client for Cloudinary API |
| Material Components 3 | 1.10.0 | UI components & theming |
| ConstraintLayout | 2.1.4 | Responsive layouts |
| Service | SDK Version | Purpose |
|---|---|---|
| Firebase Authentication | 24.0.1 | Anonymous login |
| Firebase Firestore | 26.1.1 | Real-time NoSQL database |
| Firebase Cloud Messaging | 25.0.1 | Push notifications |
| Firebase Storage | 22.0.1 | (Available for future use) |
| Firebase Functions | 22.1.0 | Cloud-side logic |
| Service | Purpose |
|---|---|
| Cloudinary API | Image upload, CDN delivery, transforms |
| Tool | Version |
|---|---|
| Android Gradle Plugin | 9.0.1 |
| Gradle | Latest stable |
| Google Services Plugin | 4.4.4 |
AppTrack/
└── app/
└── src/
└── main/
├── java/com/AppTrack/
│ │
│ ├── core/ # App-wide infrastructure
│ │ ├── AppController.java # Application class
│ │ ├── Constants.java # All app constants
│ │ ├── Logger.java # Logging abstraction
│ │ └── Result.java # Success/Error wrapper
│ │
│ ├── security/ # Security subsystem
│ │ ├── AnonymityManager.java # ID & username generation
│ │ ├── EncryptionManager.java # Local data encryption
│ │ ├── RateLimiter.java # Post/comment cooldowns
│ │ └── DeviceIntegrityChecker.java
│ │
│ ├── network/ # Firebase service wrappers
│ │ ├── FirebaseService.java
│ │ ├── FirestoreService.java
│ │ ├── StorageService.java
│ │ └── CloudFunctionsService.java
│ │
│ ├── data/
│ │ ├── model/ # Plain data models
│ │ │ ├── UserModel.java
│ │ │ ├── PostModel.java
│ │ │ ├── CommentModel.java
│ │ │ ├── TopicModel.java
│ │ │ ├── NotificationModel.java
│ │ │ ├── ReportModel.java
│ │ │ └── PremiumPlanModel.java
│ │ ├── repository/ # Data access layer
│ │ │ ├── AuthRepository.java
│ │ │ ├── PostRepository.java
│ │ │ ├── FeedRepository.java
│ │ │ ├── CommentRepository.java
│ │ │ ├── PremiumRepository.java
│ │ │ ├── ModerationRepository.java
│ │ │ └── IdentityRevealRepository.java
│ │ └── local/
│ │ ├── PreferenceManager.java # SharedPreferences wrapper
│ │ └── CacheManager.java # In-memory cache
│ │
│ ├── domain/ # Business logic engines
│ │ ├── FeedEngine.java # Feed ranking & filtering
│ │ ├── ModerationEngine.java # Content moderation rules
│ │ ├── ReputationEngine.java # User reputation scoring
│ │ └── PremiumEngine.java # Premium feature gating
│ │
│ └── ui/ # Presentation layer
│ ├── splash/
│ │ └── SplashActivity.java
│ ├── auth/
│ │ └── AnonymousLoginActivity.java
│ ├── rooms/
│ │ ├── CreateRoomActivity.java
│ │ ├── JoinRoomActivity.java
│ │ ├── RoomFeedActivity.java
│ │ ├── RoomMessageAdapter.java
│ │ └── RoomPostAdapter.java
│ ├── feed/
│ │ ├── FeedActivity.java
│ │ ├── FeedAdapter.java
│ │ └── FeedViewModel.java
│ ├── post/
│ │ ├── CreatePostActivity.java
│ │ ├── FullImageActivity.java
│ │ └── PostViewModel.java
│ ├── comments/
│ │ ├── CommentActivity.java
│ │ ├── CommentAdapter.java
│ │ └── CommentViewModel.java
│ ├── identity/
│ │ ├── IdentityRevealActivity.java
│ │ └── IdentityViewModel.java
│ ├── topics/
│ │ ├── TopicsActivity.java
│ │ └── TopicAdapter.java
│ ├── settings/
│ │ ├── SettingsActivity.java
│ │ └── RoomSettingsActivity.java
│ ├── reports/
│ │ ├── ReportDialog.java
│ │ └── ReportViewModel.java
│ ├── premium/
│ │ ├── PremiumActivity.java
│ │ ├── PremiumViewModel.java
│ │ └── PurchaseActivity.java
│ └── notifications/
│ └── AppTrackMessagingService.java
│
└── res/
├── layout/ # XML UI layouts (17 screens)
├── values/ # Colors, strings, themes
├── values-night/ # Dark theme overrides
├── drawable/ # Vector & raster assets
├── mipmap-*/ # Launcher icons (all DPIs)
└── xml/ # Backup & data extraction rules
AppTrack uses Firebase Firestore with the following document schema:
firestore-root/
│
├── rooms/
│ └── {roomId}/ # e.g. "ABX9KZ3M"
│ ├── roomId: String
│ ├── name: String
│ ├── topic: String
│ ├── maxMembers: Number
│ ├── createdAt: Timestamp
│ │
│ ├── messages/
│ │ └── {messageId}/
│ │ ├── text: String
│ │ ├── imageUrl: String | null
│ │ ├── senderId: String # Anonymous UID
│ │ ├── senderName: String # e.g. "GhostFalcon447"
│ │ ├── replyText: String | null
│ │ └── timestamp: Timestamp
│ │
│ └── members/
│ └── {userId}/
│ ├── joinedAt: Timestamp
│ └── anonymous: true
│
├── users/
│ └── {userId}/ # Firebase Anonymous UID
│ ├── anonymousId: String # SHA-256 hashed identity
│ ├── username: String # Auto-generated codename
│ ├── premiumPlan: String # "basic" | "pro" | "elite"
│ └── createdAt: Timestamp
│
├── posts/
│ └── {postId}/
│ ├── text: String
│ ├── imageUrl: String | null
│ ├── senderId: String
│ ├── topicId: String
│ └── timestamp: Timestamp
│
├── comments/
│ └── {commentId}/
│ ├── postId: String
│ ├── text: String
│ ├── senderId: String
│ └── timestamp: Timestamp
│
├── topics/
│ └── {topicId}/ # "confession", "tech", "memes" …
│ ├── label: String
│ └── type: String
│
├── reports/
│ └── {reportId}/
│ ├── targetId: String
│ ├── reportType: String # "spam" | "harassment" | …
│ ├── reportedBy: String
│ └── timestamp: Timestamp
│
├── notifications/
│ └── {notificationId}/
│ ├── userId: String
│ ├── type: String # "comment" | "reply" | "identity_reveal"
│ ├── read: Boolean
│ └── timestamp: Timestamp
│
└── identity_reveals/
└── {revealId}/
├── requesterId: String
├── targetId: String
└── timestamp: Timestamp
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
// Authenticated anonymous users can read and write
match /{document=**} {
allow read, write: if request.auth != null;
}
// Rooms: any authenticated user can create/join
match /rooms/{roomId} {
allow read, write: if request.auth != null;
// Messages within rooms
match /messages/{messageId} {
allow read: if request.auth != null;
allow create: if request.auth != null
&& request.resource.data.senderId == request.auth.uid;
allow delete: if resource.data.senderId == request.auth.uid;
}
// Members subcollection
match /members/{userId} {
allow read, write: if request.auth != null;
}
}
// Users can only write their own profile
match /users/{userId} {
allow read: if request.auth != null;
allow write: if request.auth.uid == userId;
}
// Reports: create only, no reads from client
match /reports/{reportId} {
allow create: if request.auth != null;
}
}
}
⚠️ Production Note: The above rules are suitable for development. For production, tighten rules to validate field types, enforce rate limiting via Cloud Functions, and restrict report reads to admin roles only.
| Requirement | Version |
|---|---|
| Android Studio | Hedgehog or newer |
| Java JDK | 17+ |
| Android SDK | API 26+ (min), API 35 (target) |
| Firebase Account | Free Spark plan works |
| Cloudinary Account | Free tier works |
| Git | Any recent version |
git clone https://github.com/YOUR_USERNAME/AppTrack.git
cd AppTrack- Go to Firebase Console and create a new project.
- Add an Android app with package name
com.AppTrack. - Download
google-services.jsonand place it in:
AppTrack/app/google-services.json
- Enable Authentication → Sign-in method → Anonymous.
- Enable Firestore Database → Start in test mode.
- Enable Cloud Messaging for push notifications.
- Apply the Security Rules from the section above.
- Create a free account at cloudinary.com.
- From your dashboard, note your Cloud Name, API Key, and API Secret.
- Create an
upload preset(unsigned, for mobile uploads). - Add your Cloudinary config to
core/Constants.javaorlocal.properties:
# local.properties (never commit this)
CLOUDINARY_CLOUD_NAME=your_cloud_name
CLOUDINARY_API_KEY=your_api_key
CLOUDINARY_UPLOAD_PRESET=your_preset# Open in Android Studio, then:
./gradlew clean
./gradlew assembleDebug- Open the
AppTrack/folder in Android Studio. - Wait for Gradle sync to complete.
- Connect an Android device or start an emulator (API 26+).
- Click Run ▶ or press
Shift+F10.
# Debug build
./gradlew installDebug
# Release build (requires keystore setup)
./gradlew assembleReleaseThe app requests the following at runtime:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_MEDIA_IMAGES" />
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />- Open AppTrack — you are instantly signed in anonymously. No form. No email.
- Your identity is auto-generated (e.g.
SilentTiger284).
- Tap Create Room.
- Enter a room name, topic, and optional member cap.
- Your Room ID (e.g.
ABX9KZ3M) is generated automatically. - Share the Room ID with anyone you want to invite.
- Tap Join Room.
- Enter the 8-character Room ID you received.
- You enter the room instantly.
- Type a message and send — it appears in real-time for all members.
- Long-press any message to reply with context.
- Send an image by tapping the attachment icon → Cloudinary handles the upload.
- Long-press any image to open fullscreen preview.
- Tap the settings icon inside any room to manage notification preferences, view member count, or share the room.
- Long-press any post or message → Report → Select category (spam, harassment, etc.)
AppTrack challenges the assumption that social platforms need identity.
| Dimension | How AppTrack is Different |
|---|---|
| Onboarding | 0-second signup. You're in before you can second-guess it. |
| Identity | Cryptographically generated — not just a random name, but a SHA-256 hashed fingerprint + random salt |
| Architecture | Full MVVM with distinct Domain engines (Feed, Moderation, Reputation, Premium) — beyond typical hackathon MVC |
| Security Layer | Dedicated security/ package: rate limiter, device integrity, encryption manager, anonymity manager |
| Real-time by Default | Firestore snapshot listeners — no polling, no refresh buttons |
| Premium with Purpose | Identity reveal system — you can optionally discover who someone is, with tier-gated limits |
| Moderation-first | Report dialog + ModerationEngine baked in at day one, not added later |
- Glide handles image caching, resizing, and memory management automatically.
- RecyclerView with view recycling ensures smooth 60fps scrolling at any list size.
- CacheManager reduces redundant Firestore reads via in-memory cache.
- Firestore pagination — Feed loads
FEED_PAGE_SIZE = 20posts at a time.
- Firestore scales horizontally to millions of concurrent connections out of the box.
- Anonymous Auth is stateless and scales without configuration.
- FCM handles push delivery at scale without custom infrastructure.
- Images are served from Cloudinary's global CDN — fast delivery regardless of user region.
- Automatic format optimization (WebP where supported).
POST_COOLDOWN_SECONDS = 15 // Prevents message flooding
COMMENT_COOLDOWN_SECONDS = 5 // Prevents spam bursts
MAX_POST_LENGTH = 500 // Caps payload size
MAX_COMMENT_LENGTH = 300- End-to-End Encryption — Encrypt room messages client-side before Firestore write
- Ephemeral Rooms — Auto-delete rooms and all messages after X hours
- Voice Messages — Record and send anonymous audio clips
- Reaction System — Emoji reactions on messages without revealing identity
- Room Discovery — Public room browser with topic filtering
- Offline Mode — Firestore offline persistence for reading cached content
- Mention System — @SilentFox tag users within a room by codename
- Admin Dashboard — Web-based moderation console for report management
- Content Moderation AI — Auto-flag harmful content using ML Kit or Cloud Vision
- Room Expiry — Configurable TTL when creating a room
- WebRTC Rooms — Anonymous voice/video rooms
| Role | Responsibility |
|---|---|
| Android Developer | UI/UX implementation, Activity lifecycle, RecyclerView adapters |
| Firebase Engineer | Firestore schema design, real-time listeners, security rules |
| Security Engineer | Anonymity layer, SHA-256 ID generation, rate limiting, encryption |
| Backend Architect | MVVM structure, Domain engines, Repository pattern |
| Media Integration | Cloudinary upload flow, OkHttp integration, image handling |
AppTrack demonstrates that a fully-featured social platform can exist without a single piece of personally identifiable information. By combining Firebase's real-time infrastructure with a carefully designed anonymity layer and a clean MVVM architecture, we've built a system that is:
- Private by design — SHA-256 hashed identities, no PII anywhere
- Real-time by default — Firestore listeners, not polling
- Scalable from day one — Firebase handles growth without re-architecture
- Production-ready in structure — MVVM, Repository, Domain engines, security package
AppTrack is more than a hackathon project — it's a working proof-of-concept for the next generation of privacy-first community platforms.
MIT License
Copyright (c) 2025 AppTrack
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.






