Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

8 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

 █████╗ ██████╗ ██████╗ ████████╗██████╗  █████╗  ██████╗██╗  ██╗
██╔══██╗██╔══██╗██╔══██╗╚══██╔══╝██╔══██╗██╔══██╗██╔════╝██║ ██╔╝
███████║██████╔╝██████╔╝   ██║   ██████╔╝███████║██║     █████╔╝ 
██╔══██║██╔═══╝ ██╔═══╝    ██║   ██╔══██╗██╔══██║██║     ██╔═██╗ 
██║  ██║██║     ██║        ██║   ██║  ██║██║  ██║╚██████╗██║  ██╗
╚═╝  ╚═╝╚═╝     ╚═╝        ╚═╝   ╚═╝  ╚═╝╚═╝  ╚═╝ ╚═════╝╚═╝  ╚═╝

Anonymous Real-Time Room Chat & Community Platform for Android

Platform Language Firebase Cloudinary License Hackathon


"Speak freely. Stay hidden. Connect anyway."


Features · Architecture · Installation · Usage · Roadmap


📖 Project Description

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.


❗ Problem Statement

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.

💡 Proposed Solution

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

✨ Key Features

🔐 Identity & Privacy

  • Zero-signup anonymous auth — Powered by Firebase Authentication
  • Auto-generated personas — Randomized codenames like PhantomWolf091 or GhostFalcon447
  • 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

🏠 Room System

  • 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

💬 Messaging

  • 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

🛡️ Security & Moderation

  • Rate limiting — Post cooldown (15s), comment cooldown (5s)
  • Device integrity checksDeviceIntegrityChecker validates environment
  • Encryption layerEncryptionManager for sensitive local data
  • Report system — Flag spam, harassment, hate speech, self-harm, or illegal content
  • Moderation engine — Domain-level ModerationEngine for rule enforcement

🌟 Premium Tiers

Plan Identity Reveals Features
Basic 10/month Standard access
Pro 30/month Extended reveals
Elite 90/month Full reveal access

🔔 Notifications

  • FCM-powered push — Firebase Cloud Messaging via AppTrackMessagingService
  • Notification types — Comments, replies, identity reveals
  • Per-room toggle — Enable or disable notifications per room

📸 Screenshots


🏗️ System Design

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 │
└─────────────────────────────────────────────────────┘

Design Patterns Used

  • MVVM — Reactive ViewModel + LiveData separation from Activities
  • Repository Pattern — All data access abstracted behind Repository classes
  • Result Wrappercore/Result.java wraps 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

🔭 System Architecture

╔══════════════════════════════════════════════════════════════════╗
║                        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 ║
                    ╚═════════════════════╝

🔄 Application Workflow

 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 Stack

Frontend

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

Backend & Services

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

Media

Service Purpose
Cloudinary API Image upload, CDN delivery, transforms

Build System

Tool Version
Android Gradle Plugin 9.0.1
Gradle Latest stable
Google Services Plugin 4.4.4

📁 Code Structure

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

🗄️ Database Structure

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

🔒 Security Rules

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.


⚙️ Installation Guide

Prerequisites

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

Step 1 — Clone the Repository

git clone https://github.com/YOUR_USERNAME/AppTrack.git
cd AppTrack

Step 2 — Firebase Setup

  1. Go to Firebase Console and create a new project.
  2. Add an Android app with package name com.AppTrack.
  3. Download google-services.json and place it in:
AppTrack/app/google-services.json
  1. Enable Authentication → Sign-in method → Anonymous.
  2. Enable Firestore Database → Start in test mode.
  3. Enable Cloud Messaging for push notifications.
  4. Apply the Security Rules from the section above.

Step 3 — Cloudinary Setup

  1. Create a free account at cloudinary.com.
  2. From your dashboard, note your Cloud Name, API Key, and API Secret.
  3. Create an upload preset (unsigned, for mobile uploads).
  4. Add your Cloudinary config to core/Constants.java or local.properties:
# local.properties (never commit this)
CLOUDINARY_CLOUD_NAME=your_cloud_name
CLOUDINARY_API_KEY=your_api_key
CLOUDINARY_UPLOAD_PRESET=your_preset

Step 4 — Build & Sync

# Open in Android Studio, then:
./gradlew clean
./gradlew assembleDebug

▶️ Running the Project

From Android Studio

  1. Open the AppTrack/ folder in Android Studio.
  2. Wait for Gradle sync to complete.
  3. Connect an Android device or start an emulator (API 26+).
  4. Click Run ▶ or press Shift+F10.

From Command Line

# Debug build
./gradlew installDebug

# Release build (requires keystore setup)
./gradlew assembleRelease

Required Permissions

The 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" />

📱 Usage Instructions

First Launch

  1. Open AppTrack — you are instantly signed in anonymously. No form. No email.
  2. Your identity is auto-generated (e.g. SilentTiger284).

Creating a Room

  1. Tap Create Room.
  2. Enter a room name, topic, and optional member cap.
  3. Your Room ID (e.g. ABX9KZ3M) is generated automatically.
  4. Share the Room ID with anyone you want to invite.

Joining a Room

  1. Tap Join Room.
  2. Enter the 8-character Room ID you received.
  3. You enter the room instantly.

Messaging

  • 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.

Room Settings

  • Tap the settings icon inside any room to manage notification preferences, view member count, or share the room.

Reporting Content

  • Long-press any post or message → Report → Select category (spam, harassment, etc.)

🚀 Innovation & Uniqueness

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

📊 Performance & Scalability

Client-Side Optimizations

  • 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 = 20 posts at a time.

Firebase Scalability

  • 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.

Cloudinary CDN

  • Images are served from Cloudinary's global CDN — fast delivery regardless of user region.
  • Automatic format optimization (WebP where supported).

Rate Limiting

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

🔮 Future Improvements

  • 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

👥 Team Contribution

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

🏁 Conclusion

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.


📄 License

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.

Built with 🖤 for the Hackathon

Anonymous by design. Real-time by default. Private by principle.

Stars Forks

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages