Express yourself better with GIFs! A modern Android messaging app built with Kotlin, Jetpack Compose, Supabase, and a Node.js backend.
JIFFY is a next-generation GIF-powered messaging application that makes conversations more fun and expressive. Built with modern Android development practices and a scalable Node.js backend deployed on Railway.
- π Secure Authentication - Google and Apple Sign-In via Supabase Auth
- π¬ Real-Time Messaging - Instant message delivery using Supabase Realtime
- π¨ Dual GIF Sources - Search and share GIFs from both GIPHY and Tenor
- π₯ Group Chats - Create and manage group conversations (up to 100 members)
- π± Social Sharing - Share GIFs directly to Facebook, Twitter, and Instagram
- π Push Notifications - Firebase Cloud Messaging for instant alerts
- π Analytics - PostHog integration for user insights
- π Offline Support - Queue messages when offline, sync when online
- π― Friend System - Discover, add, and manage friends
- β‘ High Performance - Built with Jetpack Compose and optimized backend
ββββββββββββββββββββββββ
β Android App β
β (Kotlin/Compose) β
ββββββββββββ¬ββββββββββββ
β
ββββββββ΄βββββββ
β β
βββββββββββ ββββββββββββββββ
β Backend β β Supabase β
β Node.js β β (Direct) β
β Railway β β β’ Realtime β
β β β β’ Storage β
β β’ APIs β β β’ Auth β
β β’ FCM β β β’ Database β
βββββββββββ ββββββββββββββββ
- Language: Kotlin 1.9.22
- UI: Jetpack Compose + Material 3
- Architecture: Clean Architecture (MVVM)
- DI: Hilt
- Local DB: Room
- Image Loading: Coil (GIF support)
- Min SDK: 24 | Target SDK: 34
- Runtime: Node.js 18+
- Framework: Express.js
- Language: JavaScript (ES6+)
- Logging: Winston
- Caching: node-cache
- Testing: Jest
- Deployment: Railway (Docker)
- Database: Supabase PostgreSQL
- Authentication: Supabase Auth (Google & Apple)
- Real-time: Supabase Realtime
- Storage: Supabase Storage
- Push Notifications: Firebase Cloud Messaging (FCM ONLY)
- Analytics: PostHog
- GIF APIs: GIPHY SDK + Tenor API
- Deployment: Railway
jiffy/
βββ app/ # Android app
β βββ src/main/
β β βββ java/com/darshan/jiffy/
β β β βββ data/
β β β βββ domain/
β β β βββ presentation/
β β β βββ di/
β β βββ res/
β βββ build.gradle.kts
β
βββ backend/ # Node.js backend
β βββ src/
β β βββ config/ # Configuration
β β βββ controllers/ # Request handlers
β β βββ middleware/ # Express middleware
β β βββ routes/ # API routes
β β βββ services/ # Business logic
β β βββ utils/ # Utilities
β β βββ server.js # Main server
β βββ tests/ # Backend tests
β βββ scripts/ # Deployment scripts
β βββ Dockerfile
β βββ railway.json
β βββ package.json
β βββ README.md # Backend docs
β
βββ database/
β βββ schema.sql # Supabase PostgreSQL schema
β
βββ .github/
β βββ workflows/
β β βββ backend-ci.yml # Backend CI/CD
β βββ ISSUE_TEMPLATE/
β
βββ README.md # This file
βββ TECH_STACK.md
βββ SETUP.md
βββ BACKEND_INTEGRATION.md
βββ LICENSE
For Android Development:
- Android Studio Hedgehog (2023.1.1+)
- JDK 17+
- Android SDK (API 24-34)
For Backend Development:
- Node.js 18+
- npm 9+
Required Accounts:
- Supabase account
- Firebase account (FCM)
- GIPHY developer account
- Google Cloud (Tenor API)
- PostHog account
- Railway account
# Clone repository
git clone https://github.com/darshanpania/jiffy.git
cd jiffy
# Configure Android
cp local.properties.example local.properties
# Edit local.properties with API keys
# Build
./gradlew assembleDebug# Navigate to backend
cd backend
# Install dependencies
npm install
# Configure environment
cp .env.example .env
# Edit .env with credentials
# Run development server
npm run dev
# Server starts at http://localhost:3000See SETUP.md for complete setup instructions.
Use Backend API:
- π¨ GIF search (GIPHY/Tenor) - caching + security
- π Push notifications (FCM) - token management
- π Analytics aggregation (future)
Use Supabase Direct:
- π¬ Real-time messaging - WebSocket efficiency
- πΎ Database CRUD - RLS security
- π File uploads - Direct to Storage
- π Authentication - OAuth flows
See BACKEND_INTEGRATION.md for details.
Backend provides RESTful API:
- Auth:
/api/auth/* - Users:
/api/users/* - Chats:
/api/chats/* - GIFs:
/api/gifs/* - Notifications:
/api/notifications/*
Full API documentation: backend/API.md
Supabase PostgreSQL (12 Tables):
profiles- User profilesfriendships- Friend relationshipsfriend_requests- Friend requestschat_rooms- Chat metadatachat_participants- Chat membershipmessages- All messagesfavorite_gifs- Saved GIFsuser_devices- FCM tokensgroup_settings- Group configgroup_invites- Group invitationsmessage_reads- Read receiptschat_notification_preferences- Notification settings
All protected by Row Level Security (RLS)
Schema: database/schema.sql
- Build:
./gradlew assembleRelease - Distribution: Google Play Store
- Signing: Configure in
app/build.gradle.kts
- Platform: Railway
- Method: Docker (Dockerfile)
- Deploy:
railway upor GitHub push - URL:
https://your-app.railway.app
Deployment guide: backend/DEPLOYMENT.md
# Unit tests
./gradlew test
# UI tests
./gradlew connectedAndroidTestcd backend
# Run tests
npm test
# With coverage
npm test -- --coverage- README.md - This file
- TECH_STACK.md - Complete tech stack
- SETUP.md - Detailed setup guide
- QUICKSTART.md - Quick start (10 min)
- BACKEND_INTEGRATION.md - Backend integration
- backend/README.md - Backend overview
- backend/API.md - API documentation
- backend/DEPLOYMENT.md - Deployment guide
- backend/ARCHITECTURE.md - Architecture
- backend/GETTING_STARTED.md - Quick start
- CONTRIBUTING.md - How to contribute
- ROADMAP.md - Development roadmap
- Authentication (Google/Apple)
- User profiles
- Friend system
- One-on-one chat
- GIF integration (GIPHY + Tenor)
- Group chats (100 members)
- Social media sharing
- Read receipts
- Enhanced notifications
- Comprehensive testing
- Load testing
- Security audit
- Beta testing
- Production launch
Track progress: Issue #49 - Master Roadmap
- β Supabase Row Level Security (RLS)
- β JWT authentication
- β OAuth 2.0 (Google/Apple)
- β Encrypted token storage
- β ProGuard/R8 obfuscation
- β HTTPS only
- β Backend rate limiting
- β GDPR compliant
- β No password storage (OAuth only)
- β PostHog privacy-focused
- β No message content in analytics
- β User data control
We welcome contributions! See CONTRIBUTING.md.
# Fork and clone
git clone https://github.com/YOUR_USERNAME/jiffy.git
# Create feature branch
git checkout -b feature/amazing-feature
# Commit changes
git commit -m 'feat: add amazing feature'
# Push and create PR
git push origin feature/amazing-featureMIT License - see LICENSE
Project Lead: Darshan Pania
GitHub: @darshanpania
Email: dev@jiffy.app
- Supabase - Backend infrastructure
- Railway - Deployment platform
- GIPHY - GIF content
- Tenor - GIF content
- PostHog - Analytics
- Firebase - Cloud messaging
- Jetpack Compose - UI toolkit
- Issues: GitHub Issues
- Email: support@jiffy.app
- Documentation: Wiki