TuniBless is a production-ready web application for a Tunisian-German volunteer organization with 24 regional branches across Tunisia.
tunibless/
├── index.html # Home page (regions + activity feed)
├── login.html # Auth page (login + register)
├── dashboard.html # Coordinator dashboard
├── leaderboard.html # Regional rankings
├── style.css # All styles (RTL/LTR, responsive)
├── script.js # Shared utilities, i18n, helpers
├── firebase.js # Firebase SDK + config (ESM)
├── assets/
│ └── logo.png # App logo
├── lang/
│ ├── ar.json # Arabic translations
│ └── de.json # German translations
├── README.md
└── .gitignore
- Go to https://console.firebase.google.com/
- Click Add project → name it
tunibless - Disable Google Analytics if not needed → Create project
- Go to Authentication → Sign-in method
- Enable Email/Password
- Go to Firestore Database → Create database
- Start in production mode
- Choose a region close to your users
Paste in Firestore → Rules tab:
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
match /users/{uid} {
allow read, write: if request.auth != null && request.auth.uid == uid;
allow read: if request.auth != null;
}
match /activities/{id} {
allow read: if true;
allow create: if request.auth != null;
allow update, delete: if request.auth != null
&& request.auth.uid == resource.data.createdBy;
}
}
}
- In Project Settings → Your apps → click </> (Web)
- Register app name:
TuniBless Web - Copy the
firebaseConfigobject
Open firebase.js and replace the placeholder values:
const FIREBASE_CONFIG = {
apiKey: "AIza...",
authDomain: "your-project.firebaseapp.com",
projectId: "your-project",
storageBucket: "your-project.appspot.com",
messagingSenderId: "1234567890",
appId: "1:1234567890:web:abc123"
};Translations live in lang/ar.json (Arabic) and lang/de.json (German).
To translate any HTML element, add the data-i18n attribute:
<h1 data-i18n="hero.title"></h1>To translate a placeholder:
<input data-i18n-ph="auth.email" />The t("key.path") function in script.js does the lookup.
The language toggle button switches between Arabic (RTL) and German (LTR) and saves the preference in localStorage.
-
Push the project to a GitHub repository:
git init git add . git commit -m "Initial commit" git remote add origin https://github.com/YOUR_USER/tunibless.git git push -u origin main
-
In GitHub → Settings → Pages
-
Source: Deploy from a branch →
main/root -
Visit:
https://YOUR_USER.github.io/tunibless/
⚠️ Make sure Firebase config is filled in before deploying.
| Activity Type | Points |
|---|---|
| Normal | 10 |
| Big | 20 |
| Special | 30 |
| Badge | Condition |
|---|---|
| 🥇 Top State | Highest points overall |
| 🔥 Most Active | Highest number of activities |
| 🚀 Rising Star | 100–299 points |
| 💎 Impact Leader | 300+ points |
| Role | Permissions |
|---|---|
| Coordinator | Add activities (no duplicate links), view dashboard |
| Viewer | Browse activities and leaderboard only |
MIT License — Free to use and modify.