AI-powered deepfake and scam detection for videos, audio, and images using Gemma 4 12B Unified model.
- Project Overview
- Features
- Architecture
- Complete Requirements
- Quick Start Guide
- Detailed Setup Instructions
- Configuration Guide
- Running the Project
- Testing
- Deployment
- Troubleshooting
- Contributing
- License
- Support
SachCheck is a production-grade deepfake detection system that analyzes media files (videos, audio, images) to identify potential manipulation, deepfakes, or scam content. Built for the Gemma 4 Hackathon by Team Monaco_Gem, this system uses Google's Gemma 4 12B Unified model for multimodal analysis.
- Video Analysis: Detects lip-sync mismatches, unnatural blink rates, lighting inconsistencies
- Audio Analysis: Identifies voice clones, TTS artifacts, unnatural pacing
- Image Analysis: Screenshots for scam text, urgency language, fake authority symbols
- Cross-Modal Reasoning: Checks audio-video consistency using Gemma 4's encoder-free architecture
- Explainable AI: Provides detailed reasons for each verdict in plain language
- Multilingual Support: Native support for 140+ languages including Hindi and Marathi
- Personal Safety: Help elderly and non-tech-savvy users verify suspicious content
- Scam Prevention: Detect financial scams and fraudulent schemes
- Media Verification: Check authenticity of viral content
- Family Protection: Shield families from misinformation and deepfakes
- ๐ AI-Powered Analysis: Uses Gemma 4 12B Unified model for accurate detection
- ๐ฅ Video Deepfake Detection: Lip-sync, blink rate, and lighting analysis
- ๐ต Voice Clone Detection: Audio analysis for TTS artifacts and manipulation
- ๐ผ๏ธ Screenshot Analysis: Scam text and fake authority detection
- ๐ฑ Mobile Share Intent: Direct sharing from WhatsApp on Android/iOS
- ๐ฌ WhatsApp Bot: Optional WhatsApp integration for easy access
- ๐ Web Interface: Responsive web application for all devices
- ๐ Scan History: Track previous analyses with detailed results
- ๐ Multilingual: Support for 140+ languages
- ๐ Privacy-First: Auto-deletion of media after 48 hours
- โก Fallback System: Google AI Studio API + Ollama local model
- ๐ก๏ธ Security: Rate limiting, encryption, RLS policies
- ๐ Monitoring: Sentry error tracking, health checks
- ๐ CI/CD: Automated deployment via GitHub Actions
- ๐ณ Docker: Containerized deployment with Docker Compose
- ๐ SSL/HTTPS: Automatic SSL with Caddy and Let's Encrypt
- ๐ Feedback Loop: User feedback system for model improvement
- ๐ฏ DPDP Compliant: India's Digital Personal Data Protection Act compliance
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ Client Layer โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ Web App โ Mobile App โ WhatsApp Bot โ
โ (Next.js) โ (React Native) โ (Cloud API) โ
โโโโโโโโโโโโโโโดโโโโโโโโโโโโโโโโโดโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ API Gateway (Caddy) โ
โ SSL Termination + Load Balancing โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ Backend (FastAPI) โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ โโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโ โ
โ โ Scan API โ โ Auth API โ โ WhatsApp โ โ
โ โโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโ โ
โ โ โ โ โ
โ โโโโโโโโโโโโโโโโโโโดโโโโโโโโโโโโโโโโโโ โ
โ โ โ
โ โโโโโโโโโผโโโโโโโโโ โ
โ โ Model Router โ โ
โ โโโโโโโโโฌโโโโโโโโโ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโ
โ โ โ
โผ โผ โผ
โโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโ
โ Google AI โ โ Ollama โ โ Supabase โ
โ Studio API โ โ (Fallback) โ โ (PostgreSQL) โ
โโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโ
โ โ โ
โโโโโโโโโโโโโโโโโโโโโดโโโโโโโโโโโโโโโโโโโโ
โ
โผ
โโโโโโโโโโโโโโโโโโ
โ Cloudflare R2 โ
โ (Media Storage)โ
โโโโโโโโโโโโโโโโโโ
| Layer | Technology | Purpose |
|---|---|---|
| AI Model | Gemma 4 12B Unified | Primary analysis model |
| Model API | Google AI Studio | Cloud model access (free tier) |
| Fallback | Ollama | Local model fallback |
| Backend | FastAPI + Uvicorn | Async API framework |
| Database | Supabase (PostgreSQL) | Data storage + Auth |
| Storage | Cloudflare R2 | Media file storage |
| Web | Next.js 15 (App Router) | React web framework |
| Mobile | React Native + Expo | Cross-platform mobile |
| Proxy | Caddy | Reverse proxy + SSL |
| Containers | Docker + Compose | Container orchestration |
| CI/CD | GitHub Actions | Automated deployment |
| Monitoring | Sentry | Error tracking |
-
Python 3.11 or higher
- Download: python.org
- During installation: โ Check "Add Python to PATH"
- Verify:
python --version
-
Node.js 18 or higher
- Download: nodejs.org
- Choose LTS version for stability
- Verify:
node --versionandnpm --version
-
Git
- Download: git-scm.com
- Verify:
git --version
-
Docker Desktop (for production deployment)
- Download: docker.com
- Verify:
docker --versionanddocker-compose --version
-
PostgreSQL Client (for direct database access)
- Download: postgresql.org
- Or use Supabase web interface
-
Expo CLI (for mobile development)
- Install:
npm install -g expo-cli - Or use Expo Go app on mobile
- Install:
-
Google AI Studio Account (Free)
- URL: ai.google.dev
- Purpose: Gemma 4 API access
- Cost: Free (rate-limited)
- Setup time: 5 minutes
-
Supabase Account (Free)
- URL: supabase.com
- Purpose: Database + Authentication
- Cost: Free (500MB DB, 50K MAU)
- Setup time: 10 minutes
-
Cloudflare Account (Free)
- URL: cloudflare.com
- Purpose: R2 media storage
- Cost: Free (10GB storage, zero egress)
- Setup time: 10 minutes
-
GitHub Account (Free)
- URL: github.com
- Purpose: CI/CD, code hosting
- Cost: Free for public repos
- Setup time: 5 minutes
-
Sentry Account (Free tier)
- URL: sentry.io
- Purpose: Error monitoring
- Cost: Free (5K events/month)
- Setup time: 10 minutes
-
Domain Name (Paid)
- Cost: ~โน700-900/year
- Purpose: Custom domain for production
- Setup time: Varies
- CPU: Dual-core processor
- RAM: 8GB RAM
- Storage: 20GB free space
- Network: Stable internet connection
- CPU: Quad-core processor
- RAM: 16GB RAM
- Storage: 50GB free space
- Network: Stable internet connection
- Oracle Cloud Always Free: 2 OCPU, 12GB RAM, 200GB storage
- Hetzner CX22: 2 vCPU, 4GB RAM, 40GB storage (~โน380-420/month)
- Windows: 10/11 (tested)
- macOS: 10.15+ (tested)
- Linux: Ubuntu 20.04+, Debian 11+ (tested)
# 1. Clone the repository
git clone https://github.com/yourusername/sachcheck.git
cd sachcheck
# 2. Set up backend
cd backend
python -m venv venv
# Windows: venv\Scripts\activate
# Mac/Linux: source venv/bin/activate
pip install -r requirements.txt
cp .env.example .env
# Edit .env with your credentials
# 3. Set up frontend
cd ../web
npm install
cp .env.example .env.local
# Edit .env.local with your API URL
# 4. Run backend (in backend directory)
cd ../backend
python -m uvicorn app.main:app --reload
# 5. Run frontend (in web directory)
cd ../web
npm run dev
# 6. Access the application
# Web: http://localhost:3000
# API: http://localhost:8000
# API Docs: http://localhost:8000/docsgit clone https://github.com/yourusername/sachcheck.git
cd sachcheckgit clone git@github.com:yourusername/sachcheck.git
cd sachcheck- Go to the repository on GitHub
- Click "Code" โ "Download ZIP"
- Extract the ZIP file
- Navigate to the extracted directory
-
Create Account
- Go to ai.google.dev
- Sign in with your Google account
- Accept the terms of service
-
Generate API Key
- Click "Get API Key" or "Create API Key"
- Name your key (e.g., "SachCheck Production")
- Copy the API key (starts with
AIza...)
-
Configure Project
- Go to Google Cloud Console
- Create a new project for SachCheck
- Enable the Generative Language API
- Note: No billing required for free tier
-
Create Project
- Go to supabase.com
- Click "Start your project"
- Sign up or log in
- Click "New Project"
-
Project Configuration
- Name: sachcheck
- Database Password: Generate a strong password (save it!)
- Region: Choose the region closest to you
- Pricing Plan: Free tier
-
Wait for Project Creation
- Takes 2-3 minutes
- You'll receive an email when ready
-
Get API Credentials
- Go to Settings โ API
- Copy these values:
- Project URL:
https://xxx.supabase.co - anon public key:
eyJ... - service_role key:
eyJ...(keep this secret!)
- Project URL:
-
Set Up Database Schema
- Go to SQL Editor in Supabase
- Click "New Query"
- Copy the contents of
infra/schema.sql - Paste and click "Run"
- Verify tables were created successfully
-
Create Account
- Go to cloudflare.com
- Sign up for free account
- Verify your email address
-
Create R2 Bucket
- Go to R2 โ Overview
- Click "Create Bucket"
- Bucket Name: sachcheck-media
- Region: Choose nearest region
- Click "Create Bucket"
-
Get API Credentials
- Go to R2 โ Manage R2 API Tokens
- Click "Create API Token"
- Permissions:
- Object Read & Write
- Admin Read
- TTL: Unlimited or set expiry
- Copy:
- Access Key ID
- Secret Access Key
- Account ID (from dashboard URL)
-
Configure Lifecycle Rule
- Go to your bucket settings
- Click "Lifecycle Rules"
- Create rule:
- Name: Auto-delete after 48 hours
- Apply to: All objects in bucket
- Action: Delete
- Delete after: 2 days
- Save the rule
cd backend
python -m venv venvWindows:
venv\Scripts\activateMac/Linux:
source venv/bin/activatepip install -r requirements.txt# Copy the example file
cp .env.example .env
# Edit the .env file with your credentialsWindows: Use Notepad or VS Code Mac/Linux: Use nano, vim, or VS Code
Edit .env with your actual credentials:
# Google AI Studio API
GOOGLE_AI_STUDIO_API_KEY=AIzaSy... (your actual key)
GEMMA_MODEL_ID=gemma-4-12b-unified
# Supabase Configuration
SUPABASE_URL=https://your-project.supabase.co
SUPABASE_ANON_KEY=your_anon_key_here
SUPABASE_SERVICE_ROLE_KEY=your_service_role_key_here
# Cloudflare R2 Configuration
R2_ACCOUNT_ID=your_account_id_here
R2_ACCESS_KEY=your_access_key_here
R2_SECRET_KEY=your_secret_key_here
R2_BUCKET=sachcheck-media
# Ollama Configuration (optional, for local fallback)
OLLAMA_BASE_URL=http://localhost:11434
# Sentry Configuration (optional)
SENTRY_DSN=your_sentry_dsn_here
# Environment Settings
ENVIRONMENT=development
ALLOWED_ORIGINS=http://localhost:3000,http://localhost:8000python -m uvicorn app.main:app --reloadExpected output:
INFO: Started server process
INFO: Waiting for application startup.
INFO: Application startup complete.
INFO: Uvicorn running on http://0.0.0.0:8000
Test the API:
- Open browser: http://localhost:8000
- API Docs: http://localhost:8000/docs
- Health check: http://localhost:8000/health
cd web
npm installCreate .env.local file:
# For development
NEXT_PUBLIC_API_URL=http://localhost:8000
# For production
# NEXT_PUBLIC_API_URL=https://api.sachcheck.yourdomain.comnpm run devExpected output:
ready - started server on 0.0.0.0:3000, url: http://localhost:3000
Test the web app:
- Open browser: http://localhost:3000
- Should see the SachCheck interface
cd mobile
npm installCreate .env file:
EXPO_PUBLIC_API_URL=http://localhost:8000npx expo startExpected output:
Starting development server...
Tunnel ready: https://xxx.exp.direct
Test the mobile app:
- Install Expo Go app on your phone
- Scan the QR code shown in terminal
- Or press 'w' to open in web browser
- Go to Supabase Dashboard
- Navigate to Table Editor
- Verify these tables exist:
scansfeedback
# From backend directory
python -c "from app.db import db; import asyncio; asyncio.run(db.connect())"# From backend directory
python -c "from app.storage import storage; print('R2 configured')"- Go to Cloudflare Dashboard
- Navigate to R2 โ sachcheck-media
- Verify bucket is empty (ready for uploads)
| Variable | Required | Description | Example |
|---|---|---|---|
GOOGLE_AI_STUDIO_API_KEY |
Yes | Google AI API key | AIzaSy... |
GEMMA_MODEL_ID |
No | Model identifier | gemma-4-12b-unified |
SUPABASE_URL |
Yes | Supabase project URL | https://xxx.supabase.co |
SUPABASE_ANON_KEY |
Yes | Supabase anon key | eyJ... |
SUPABASE_SERVICE_ROLE_KEY |
Yes | Supabase service key | eyJ... |
R2_ACCOUNT_ID |
Yes | Cloudflare account ID | abc123... |
R2_ACCESS_KEY |
Yes | R2 access key | access_key... |
R2_SECRET_KEY |
Yes | R2 secret key | secret_key... |
R2_BUCKET |
No | R2 bucket name | sachcheck-media |
OLLAMA_BASE_URL |
No | Ollama server URL | http://localhost:11434 |
SENTRY_DSN |
No | Sentry DSN for error tracking | https://... |
ENVIRONMENT |
No | Environment name | development |
ALLOWED_ORIGINS |
No | CORS allowed origins | http://localhost:3000 |
| Variable | Description | Example |
|---|---|---|
NEXT_PUBLIC_API_URL |
Backend API URL | http://localhost:8000 |
| Variable | Description | Example |
|---|---|---|
EXPO_PUBLIC_API_URL |
Backend API URL | http://localhost:8000 |
Terminal 1 - Backend:
cd backend
venv\Scripts\activate # Windows
# source venv/bin/activate # Mac/Linux
python -m uvicorn app.main:app --reloadTerminal 2 - Frontend:
cd web
npm run devTerminal 3 - Mobile (Optional):
cd mobile
npx expo startcd infra
docker-compose up -d --buildThis will start:
- Backend API on port 8000
- Web frontend on port 3000
- Caddy reverse proxy on ports 80/443
- Ollama fallback model
cd infra
docker-compose up -d --builddocker exec -it sachcheck-ollama ollama pull gemma4:e4bdocker-compose ps
docker-compose logs -f backend
docker-compose logs -f webOnce running, access the services at:
- Web Application: http://localhost:3000
- Backend API: http://localhost:8000
- API Documentation: http://localhost:8000/docs
- Health Check: http://localhost:8000/health
- Mobile: Via Expo Go app (scan QR code)
curl http://localhost:8000/healthExpected response:
{
"status": "healthy",
"version": "1.0.0",
"timestamp": "2026-07-15T10:30:00.000Z"
}# Test scan endpoint with a sample file
curl -X POST http://localhost:8000/api/scan \
-F "file=@sample_image.jpg" \
-F "device_id=test_device_123"cd backend
python -c "
import asyncio
from app.db import db
async def test():
await db.connect()
print('Database connected successfully!')
await db.disconnect()
asyncio.run(test())
"- Open http://localhost:3000
- Upload a test image/video
- Verify analysis result appears
- Check scan history updates
- Test feedback submission
cd web
npm test- Install Expo Go app on your phone
- Run
npx expo startin mobile directory - Scan QR code with Expo Go
- Test all screens and features
- Build the app:
eas build --platform android --profile preview - Install the APK on your phone
- Open WhatsApp and share a media file
- Verify SachCheck appears in share sheet
-
Get a VPS
- Oracle Cloud Always Free (recommended)
- Hetzner CX22 (~โน380-420/month)
-
SSH into VPS
ssh user@your-vps-ip
-
Install Docker
curl -fsSL https://get.docker.com -o get-docker.sh sudo sh get-docker.sh sudo usermod -aG docker $USER -
Clone Repository
git clone https://github.com/yourusername/sachcheck.git cd sachcheck -
Configure Environment
cd backend cp .env.example .env # Edit .env with production credentials
-
Update Caddyfile
cd ../infra nano Caddyfile # Replace domain names with your actual domain
-
Deploy
docker-compose up -d --build docker exec -it sachcheck-ollama ollama pull gemma4:e4b
-
Configure GitHub Secrets
- Go to repository Settings โ Secrets
- Add these secrets:
VPS_HOST: Your VPS IP/hostnameVPS_USER: SSH usernameVPS_SSH_KEY: Private SSH keyVPS_PORT: SSH port (default 22)API_URL: Your production API URLSUPABASE_URL: Supabase project URLSUPABASE_ANON_KEY: Supabase anon key
-
Push to Main Branch
git add . git commit -m "Deploy to production" git push origin main
-
Monitor Deployment
- Go to Actions tab in GitHub
- Watch the deployment workflow
- Check logs for any errors
Deploy to Oracle Cloud:
- Create Oracle Cloud account
- Create Always Free ARM instance
- Follow Manual VPS Deployment steps above
Deploy to Hetzner:
- Create Hetzner account
- Create CX22 server
- Follow Manual VPS Deployment steps above
-
Buy Domain
- Go to Namecheap, GoDaddy, or similar
- Purchase your domain
-
Configure DNS
- Point A record to your VPS IP
- Wait for DNS propagation (1-48 hours)
-
Update Caddyfile
sachcheck.yourdomain.com { reverse_proxy web:3000 encode gzip } api.sachcheck.yourdomain.com { reverse_proxy backend:8000 encode gzip }
-
Restart Caddy
docker-compose restart caddy
-
SSL Certificate
- Caddy automatically handles SSL
- Certificate will be auto-generated by Let's Encrypt
Problem: Module not found errors
Solution: Ensure virtual environment is activated
Windows: venv\Scripts\activate
Mac/Linux: source venv/bin/activate
pip install -r requirements.txtProblem: Database connection errors
Solution:
1. Check Supabase project is active (not paused)
2. Verify credentials in .env file
3. Check network connectivity
4. Ensure Supabase allows connections from your IPProblem: Google AI API errors
Solution:
1. Verify API key is correct
2. Check API key has proper permissions
3. Ensure you haven't exceeded rate limits
4. Try the fallback Ollama modelProblem: Port already in use
Solution:
# Find process using port 8000
netstat -ano | findstr :8000 # Windows
lsof -i :8000 # Mac/Linux
# Kill the process or use different port
python -m uvicorn app.main:app --port 8001Problem: Next.js build errors
Solution:
# Clear cache and reinstall
rm -rf node_modules .next
npm install
npm run devProblem: API connection errors
Solution:
1. Check NEXT_PUBLIC_API_URL in .env.local
2. Ensure backend is running
3. Check CORS configuration
4. Verify browser console for specific errorsProblem: Docker build fails
Solution:
# Clear Docker cache
docker system prune -a
docker-compose build --no-cacheProblem: Expo won't start
Solution:
# Clear Expo cache
npx expo start -c
# Or
rm -rf .expo
npx expo startProblem: Share intent not working
Solution:
1. Share intent only works in production builds
2. Build the app: eas build --platform android
3. Install APK on device (not Expo Go)
4. Test with real WhatsApp shareProblem: Supabase project paused
Solution:
1. Go to Supabase dashboard
2. Resume the project
3. Set up keepalive workflow in GitHub ActionsProblem: RLS policy errors
Solution:
1. Check RLS policies in Supabase
2. Ensure policies allow device_id access
3. Review schema.sql for correct policy setupProblem: R2 upload failures
Solution:
1. Verify R2 credentials are correct
2. Check bucket exists and is accessible
3. Ensure bucket lifecycle rules are set
4. Check file size doesn't exceed limits-
Check Logs
# Docker logs docker-compose logs -f backend docker-compose logs -f web # Application logs # Check terminal output for each service
-
Health Checks
curl http://localhost:8000/health curl http://localhost:3000
-
Documentation
- Read
SETUP.mdfor detailed setup guide - Read
AGENTS.mdfor development guide - Check inline code comments
- Read
-
Community Support
- GitHub Issues: Report bugs and ask questions
- Email: support@sachcheck.com
sachcheck/
โโโ backend/ # FastAPI Backend
โ โโโ app/
โ โ โโโ __init__.py
โ โ โโโ main.py # FastAPI application entry point
โ โ โโโ config.py # Configuration management
โ โ โโโ schemas.py # Pydantic models for validation
โ โ โโโ db.py # Supabase database operations
โ โ โโโ storage.py # Cloudflare R2 integration
โ โ โโโ model_router.py # Gemma 4 AI model integration
โ โ โโโ rate_limit.py # Rate limiting middleware
โ โ โโโ routers/ # API endpoint definitions
โ โ โ โโโ __init__.py
โ โ โ โโโ scan.py # Scan endpoints
โ โ โ โโโ auth.py # Authentication endpoints
โ โ โ โโโ whatsapp.py # WhatsApp webhook
โ โ โโโ prompts/ # AI prompts
โ โ โโโ system_prompt.txt # Main system prompt
โ โโโ tests/ # Backend tests
โ โโโ requirements.txt # Python dependencies
โ โโโ Dockerfile # Backend container definition
โ โโโ .env.example # Environment variables template
โโโ web/ # Next.js Frontend
โ โโโ app/ # App Router pages
โ โ โโโ layout.tsx # Root layout
โ โ โโโ page.tsx # Home page
โ โ โโโ globals.css # Global styles
โ โ โโโ privacy/ # Privacy policy page
โ โ โ โโโ page.tsx
โ โ โโโ terms/ # Terms of service page
โ โ โโโ page.tsx
โ โโโ components/ # React components
โ โ โโโ UploadCard.tsx # File upload component
โ โ โโโ VerdictCard.tsx # Results display component
โ โ โโโ RecentScans.tsx # Scan history component
โ โ โโโ ConsentNotice.tsx # Privacy consent component
โ โโโ package.json # Node.js dependencies
โ โโโ tsconfig.json # TypeScript configuration
โ โโโ tailwind.config.ts # Tailwind CSS configuration
โ โโโ next.config.js # Next.js configuration
โ โโโ postcss.config.js # PostCSS configuration
โ โโโ Dockerfile # Frontend container definition
โโโ mobile/ # React Native Mobile App
โ โโโ app/ # Expo Router screens
โ โ โโโ _layout.tsx # Root layout
โ โ โโโ index.tsx # Home screen
โ โ โโโ analyzing.tsx # Analysis progress screen
โ โ โโโ result.tsx # Results display screen
โ โ โโโ history.tsx # Scan history screen
โ โโโ assets/ # Mobile assets (icons, images)
โ โโโ package.json # Node.js dependencies
โ โโโ app.json # Expo configuration
โ โโโ README.md # Mobile-specific readme
โโโ infra/ # Infrastructure Configuration
โ โโโ docker-compose.yml # Docker orchestration
โ โโโ Caddyfile # Reverse proxy configuration
โ โโโ schema.sql # Database schema
โ โโโ github-actions/ # CI/CD workflows
โ โโโ deploy.yml # Deployment workflow
โ โโโ keepalive.yml # Supabase keepalive
โโโ demo_data/ # Test media files
โโโ .github/ # GitHub Configuration
โ โโโ workflows/ # GitHub Actions workflows
โ โโโ deploy.yml # Deployment workflow
โ โโโ keepalive.yml # Keepalive workflow
โโโ .gitignore # Git ignore rules
โโโ README.md # This file
โโโ SETUP.md # Detailed setup guide
โโโ AGENTS.md # Development guide
โโโ agent.md # Original production guide
- Encryption in Transit: All data transmitted over HTTPS
- Encryption at Rest: Database and storage encrypted by default
- Data Minimization: Media files auto-deleted after 48 hours
- No Training Data: Uploaded media never used for AI training without consent
- Row-Level Security: Database access restricted per device/user
- Rate Limiting: 20 requests/hour per device to prevent abuse
- Input Validation: File type and size limits enforced
- CORS Protection: Cross-origin requests restricted to allowed domains
- DPDP Compliant: Follows India's Digital Personal Data Protection Act
- Privacy Policy: Clear, accessible privacy policy
- Consent Management: User consent before data processing
- Data Portability: Users can request their data
- Right to Deletion: Users can request data deletion
- Health Endpoints:
/healthfor service status - Sentry Integration: Error tracking and alerting
- Docker Health Checks: Container health monitoring
- Uptime Monitoring: Optional UptimeRobot integration
- Application Logs: Structured JSON logging
- Docker Logs: Container logs via
docker-compose logs - Error Tracking: Sentry for production errors
- Access Logs: Caddy access logs for API monitoring
- Database Backups: Supabase automatic backups
- Configuration Backups: Version control for all config
- Media Storage: R2 durability (99.999999999%)
- Disaster Recovery: Documentation for recovery procedures
| Service | Cost | Notes |
|---|---|---|
| Oracle Cloud Always Free | โน0 | 2 OCPU, 12GB RAM, 200GB storage |
| Google AI Studio API | โน0 | Rate-limited free tier |
| Supabase (PostgreSQL) | โน0 | 500MB DB, 50K MAU free tier |
| Cloudflare R2 | โน0 | 10GB storage, zero egress fees |
| Domain Name | ~โน60-75/month | Amortized yearly cost |
| Hetzner (backup option) | ~โน380-420/month | If Oracle unavailable |
Total Monthly Cost: โน0โ420/month
| Service | Cost | Notes |
|---|---|---|
| Google Play Console | $25 one-time | Required for Android publishing |
| Apple Developer | $99/year | Optional (can defer iOS) |
We welcome contributions to SachCheck! Here's how to get started:
-
Fork the Repository
https://github.com/yourusername/sachcheck/fork
-
Create a Feature Branch
git checkout -b feature/your-feature-name
-
Make Your Changes
- Follow existing code style
- Add tests for new features
- Update documentation
- Ensure all tests pass
-
Commit Your Changes
git add . git commit -m "Add your feature description"
-
Push to Branch
git push origin feature/your-feature-name
-
Open a Pull Request
- Describe your changes
- Reference related issues
- Ensure CI checks pass
- Python: Follow PEP 8, use type hints
- TypeScript: Use strict mode, follow existing patterns
- React: Use functional components, hooks
- File Naming: kebab-case for files, PascalCase for components
- Use GitHub Issues for bug reports
- Provide detailed reproduction steps
- Include environment details
- Add relevant logs/error messages
This project is licensed under the MIT License - see the LICENSE file for details.
MIT License
Copyright (c) 2026 Team Monaco_Gem
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.
-
Documentation
- Read this README thoroughly
- Check
SETUP.mdfor detailed setup instructions - Review
AGENTS.mdfor development guidance
-
Community
- GitHub Issues: Report bugs and ask questions
- Discussions: Join community discussions
-
Direct Support
- Email: support@sachcheck.com
- Response time: Within 48 hours
- FastAPI Documentation
- Next.js Documentation
- Expo Documentation
- Supabase Documentation
- Cloudflare R2 Documentation
- Gemma 4 Documentation
- Video KYC Fraud Prevention: For banks and NBFCs
- Real-time Telecom Integration: Flag suspicious calls in real-time
- Digital Literacy Partnerships: NGO collaborations for education
- Advanced Language Support: Enhanced regional language support
- Browser Extension: Chrome/Firefox extension for web scanning
- API for Developers: Public API for third-party integration
- Enterprise Features: Team management, advanced analytics
- Mobile SDK: Integration kit for other apps
- Improved Detection Accuracy: Fine-tuning with user feedback
- Faster Processing: Optimized model inference
- Better Privacy: On-device processing options
- Scalability: Multi-region deployment
- Analysis Time: < 10 seconds for typical media files
- API Response Time: < 200ms for health checks
- Uptime: > 99.5% availability
- Accuracy: > 85% on test dataset
- Real-time performance monitoring via Sentry
- Regular accuracy testing with demo dataset
- User feedback integration for continuous improvement
- Number of scans performed
- User retention rate
- Feedback submission rate
- Mobile app adoption
- Scams prevented
- Users educated about deepfakes
- Media literacy improvement
- Community trust built
- Google DeepMind: For Gemma 4 model
- Supabase: For generous free tier
- Cloudflare: For R2 free storage
- Expo Team: For excellent React Native tooling
- Open Source Community: For amazing tools and libraries
- Project: SachCheck
- Hackathon: Gemma 4 Hackathon 2026
- Email: team@monaco-gem.com
- GitHub: https://github.com/monaco-gem
- Partnerships: partnerships@sachcheck.com
- Press: press@sachcheck.com
- Support: support@sachcheck.com
- โ Core deepfake detection
- โ Web interface
- โ Mobile app with share intent
- โ Basic security features
- ๐ WhatsApp bot integration
- ๐ Advanced analytics
- ๐ User accounts
- ๐ Feedback system
- ๐ Enterprise features
- ๐ API platform
- ๐ Multi-region deployment
- ๐ Advanced privacy features
Built with โค๏ธ by Team Monaco_Gem for Gemma 4 Hackathon
Last Updated: July 15, 2026