A modern task management web app to help you organize life, boost productivity, and stay focused.
Built with Flask, Firebase, Google OAuth, and TailwindCSS.
- π Authentication
- Sign in with Google OAuth
- Sign in with Phone Authentication via Firebase
- Secure session management with Flask
- π User Data Management
- Store user profiles in Firebase Firestore
- Track last login and user activity
- β³ Pomodoro Timer
- Pomodoro, Short Break, and Long Break modes
- Responsive timer with reset functionality
- π Smart Geo Detection
- Auto-detect user country for phone login
- π¨ Beautiful UI
- Fully responsive landing page
- Smooth animations & TailwindCSS design
- π Security Features
- No-cache headers for sensitive pages
- Firebase custom tokens for client authentication
-
Backend: Flask (Python)
-
Frontend: TailwindCSS + Jinja Templates
-
Authentication: Firebase Auth
-
Deployment: Compatible with Heroku / Render / AWS / GCP
-
Environment Management: Python-dotenv
-
Database: Firebase Firestore
-
Database-Er-diagram:
-
Data Dictionaryπ
Collection: users
Field Type Description uid string Firebase UID (Primary Key) email string User's email phone string User's phone number created_at datetime Account creation timestamp Subcollection: tasks
Field Type Description task_id string Task Document ID title string Title of the task description string Detailed description due_date datetime Task deadline status string Task status (e.g., pending, completed) remarks string Optional notes created_on datetime Creation timestamp updated_on datetime Last updated timestamp
- Approach: Code-First (Firestore documents are defined via Python logic and js, not SQL).
- Firestore Indexes Firestore auto-creates indexes for all single fields.
Live link- (https://betsito.com/) server get not maintained due to cost issues visit this link instead β https://focusly-task.onrender.com/
Follow these steps to run Focusly locally.
git clone https://github.com/shvnix/focusly.git
cd focuslypython -m venv venv
venv\Scripts\activate # Windows
source venv/bin/activate # Mac/Linuxpip install -r requirements.txtπΉ Firebase
Create a Firebase project.
Enable Authentication β Email, Google & Phone Sign-in.
Download your Admin SDK JSON and save it as: "firebase_key.json"
{
"type": "service_account",
"project_id": "your-project-id",
"private_key_id": "your-private-key-id",
"private_key": "-----BEGIN PRIVATE KEY-----\nYOUR-PRIVATE-KEY\n-----END PRIVATE KEY-----\n",
"client_email": "your-service-account@your-project-id.iam.gserviceaccount.com",
"client_id": "your-client-id",
"auth_uri": "https://accounts.google.com/o/oauth2/auth",
"token_uri": "https://oauth2.googleapis.com/token",
"auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
"client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/your-service-account%40your-project-id.iam.gserviceaccount.com",
"universe_domain": "googleapis.com"
}πΉ Update Firebase Config in Templates
Go to your frontend Firebase initialization code (typically found in a config or .env file used in templates) and update the following fields with your Firebase project details:
// Firebase config (replace with your own project values)
const firebaseConfig = {
apiKey: "YOUR_API_KEY",
authDomain: "YOUR_PROJECT_ID.firebaseapp.com",
projectId: "YOUR_PROJECT_ID",
storageBucket: "YOUR_PROJECT_ID.appspot.com",
messagingSenderId: "YOUR_MESSAGING_SENDER_ID",
appId: "YOUR_APP_ID",
measurementId: "YOUR_MEASUREMENT_ID"
};
π Make sure the Firebase web config matches the one found in your [Firebase Console β Project Settings β General β Web App Config].
cd backend
python app.pyNow all set.
Visit π http://127.0.0.1:5000
π Project Structure
focusly/
β
βββ backend/
β βββ app.py # Main Flask app
β βββ firebase_key.json # Firebase Admin SDK credentials
β βββ requirements.txt # Python dependencies
β βββ templates/ # Jinja2 templates (HTML)
β β βββ index.html
β β βββ login.html
β β βββ register.html
β β βββ dashboard.html
β β βββ pomodoro.html
β β βββ ...others
β βββ static/ # Videos, images, CSS, JS files
β
βββ .env # Environment variables (optional)
βββ README.md # Project documentation
The app is deployed on a privately owned domain using a Germany-based VPS for full control over deployment and performance.
- Domain: https://betsito.com
- Registrar: Njalla
- Server Location: Germany
- SSL: Enabled via Let's Encrypt
- Firewall: UFW with allowed ports for HTTP/HTTPS
The app was manually tested to ensure readiness for production:
β
Register/Login using Email/Password
β
Login with Phone OTP (Firebase)
β
Add/Edit/Delete/Update Tasks
β
Pomodoro Timer Functionality
β
Cross-browser checks (Chrome, Firefox, Edge)
β
Responsive Design on Mobile and Desktop
β
Firebase rules verified for security
No critical bugs found at the time of testing.
try-
use id- top@gmail.com,
password- 1234567890 (only for testing and review the web app in condition sign up not working.)
This project is licensed under the MIT License. Feel free to modify and use it.
π¨βπ» Author
Shivansh Panwar
β‘ βFocusly doesnβt just manage your tasks β it manages your time, your goals, and your life.β


