web app development

quick instruction step by step for web app dev

Web App

You’ve already built a solid Web + GIS dashboard system. Now we’ll upgrade it into a full ecosystem:

✅ Android App (Data Control Panel) ✅ Realtime Database (replace Google Sheets) ✅ Web App (auto-sync updates)

🧠 System Architecture (Upgraded)

🔄 Current (Your Setup) Google Sheet → Web App (Vercel) → Map UI

🚀 New System (Recommended) Android App → Firebase / Supabase DB → Web App (Vercel)

✔ No more manual Google Sheet editing ✔ Real-time sync ✔ Mobile control panel ✔ Scalable + faster

⚙️ STEP 1: Choose Backend (VERY IMPORTANT)

🥇 Best Option: Firebase (Recommended)

  • Realtime database
  • Easy Android integration
  • Free tier enough

Alternative:

  • Supabase (PostgreSQL)
  • Node.js API + MongoDB (more control)

👉 I’ll proceed with Firebase Firestore (best for your case)

🔥 STEP 2: Database Structure

Replace your Excel with this structure:

Collection: upazila_progress { “id”: “123”, “division”: “Dhaka”, “district”: “Gazipur”, “upazila”: “Kaliganj”, “status”: “done”, // done | ongoing | todo “updated_at”: “2026-03-24T10:00:00” }

🌐 STEP 3: Update Your Web App (IMPORTANT)

Replace Google Sheets API with Firebase fetch.

Install Firebase in your web project npm install firebase

Firebase config (JS) import { initializeApp } from “firebase/app”; import { getFirestore, collection, getDocs } from “firebase/firestore”;

const firebaseConfig = { apiKey: “XXXX”, authDomain: “XXXX”, projectId: “XXXX”, };

const app = initializeApp(firebaseConfig); const db = getFirestore(app);

export async function fetchUpazilaData() { const querySnapshot = await getDocs(collection(db, “upazila_progress”)); return querySnapshot.docs.map(doc => doc.data()); }

👉 Replace your Google Sheet logic with this.

📱 STEP 4: Android App (Core Part)

We build a Minimal Admin App

Features:

  • Upazila list
  • Status change (Done / Ongoing / ToDo)
  • Search
  • Dashboard summary

🏗 Tech Stack

  • Kotlin
  • Firebase Firestore
  • Jetpack Compose (or XML if you prefer)

📲 Android UI Structure Screens:

  • Dashboard
  • Upazila List
  • Edit Status

🧩 Example Code

  1. Firebase Setup (Android) val db = FirebaseFirestore.getInstance()

  2. Fetch Data fun getUpazilas(onResult: (List) -> Unit) { db.collection(“upazila_progress”) .get() .addOnSuccessListener { result -> val list = result.map { doc -> Upazila( id = doc.id, name = doc.getString(“upazila”) ?: “”, status = doc.getString(“status”) ?: “todo” ) } onResult(list) } }

  3. Update Status (🔥 KEY PART) fun updateStatus(id: String, newStatus: String) { db.collection(“upazila_progress”) .document(id) .update(“status”, newStatus) }

👉 This is what replaces Google Sheets editing.

  1. Simple UI (XML idea)

🔄 STEP 5: Real-Time Sync (Important Upgrade)

Instead of getDocs(), use listener:

Web + Android both onSnapshot(collection(db, “upazila_progress”), (snapshot) => { // auto update map });

👉 Now: ✔ Android change → instantly updates web map ✔ No refresh needed

📊 STEP 6: Dashboard Logic (Same as Web)

Count status:

val done = list.count { it.status == “done” } val ongoing = list.count { it.status == “ongoing” } val todo = list.count { it.status == “todo” }

🎯 FINAL RESULT Android App

✔ Change status ✔ View progress ✔ Control system

Web App

✔ Map auto-updates ✔ No Google Sheets ✔ Real-time sync

🚀 OPTIONAL ADVANCED FEATURES

If you want next-level:

🔐 Login system (Admin only) 📍 GPS tagging per update 📸 Upload field images 📶 Offline sync (Firestore supports) 📊 Analytics dashboard

⚠️ Important Advice

👉 Do NOT keep Google Sheets now 👉 Firebase = faster + scalable 👉 Your current map code can stay mostly same

🧱 STEP 1: Add Firebase to Your Project

Go to: https://console.firebase.google.com

→ Create project: landzoning

Then:

Enable: ✅ Firestore Database ✅ (Optional) Authentication later

🔑 Get Config

You’ll get something like:

const firebaseConfig = { apiKey: “XXXX”, authDomain: “XXXX”, projectId: “XXXX”, };

📦 STEP 2: Modify Your GitHub Code

In your repo 👉 Landzoning-main

  1. Install Firebase npm install firebase

  2. Create New File 📁 /src/firebase.js import { initializeApp } from “firebase/app”; import { getFirestore } from “firebase/firestore”;

const firebaseConfig = { apiKey: “YOUR_KEY”, authDomain: “YOUR_DOMAIN”, projectId: “YOUR_PROJECT_ID”, };

const app = initializeApp(firebaseConfig); export const db = getFirestore(app);

🔁 STEP 3: Replace Google Sheet Logic

Find your current file where you load Excel/Sheet data (Probably something like fetchData.js, App.js, or map.js)

❌ REMOVE (Old) // Google Sheet / XLSX loading fetch(“bdupazila.xlsx”)

✅ ADD (New Firebase Fetch) import { collection, onSnapshot } from “firebase/firestore”; import { db } from “./firebase”;

export function listenToUpazilaData(callback) { const unsub = onSnapshot(collection(db, “upazila_progress”), (snapshot) => { const data = snapshot.docs.map(doc => ({ id: doc.id, …doc.data() })); callback(data); });

return unsub; }

🗺 STEP 4: Connect with Your Map

Where you currently update map colors:

Replace your data source with:

listenToUpazilaData((data) => { updateMap(data); // your existing function updateStats(data); // your dashboard logic });

🎨 STEP 5: Keep Your Map Styling (NO CHANGE)

Your existing:

  • Leaflet map
  • GeoJSON boundaries
  • Color logic

👉 KEEP EVERYTHING SAME 👉 Only change data source

📊 STEP 6: Status Color Mapping (Ensure This)

function getColor(status) { switch (status) { case “done”: return “#22c55e”; // green case “ongoing”: return “#facc15”; // yellow default: return “#9ca3af”; // gray } }

🧪 STEP 7: Upload Initial Data to Firebase

Go to Firestore → Collection: upazila_progress

Add documents manually OR use script:

import { collection, addDoc } from “firebase/firestore”;

const data = [ { upazila: “Kaliganj”, status: “done” }, ];

data.forEach(async (item) => { await addDoc(collection(db, “upazila_progress”), item); }); 🔄 RESULT Now your system becomes: Android App → Firebase → Web Map (Auto Update)

✔ No refresh needed ✔ Real-time updates ✔ Centralized control

📱 NEXT (Android Integration)

Your Android app will:

db.collection(“upazila_progress”) .document(id) .update(“status”, “done”)

👉 Web updates instantly 🔥

🚀 BONUS: Performance Upgrade

Use indexing:

Firestore → Indexes → Add:

status ASC district ASC ⚠️ Common Mistakes

❌ Using getDocs() (not realtime) ✅ Use onSnapshot()

❌ Keeping Excel logic ✅ Fully remove it

MD SUMAN MIAH
MD SUMAN MIAH
Environmental Specialist, Hydrogeologist, and Evaluation Practitioner

An Environmental Specialist with expertise in climate change impact and resilience, combining hydrogeology and data analytics to drive sustainable solutions in South Asia. Passionate about advancing environmental sustainability through research and community-centered projects.