import React, { useState, useEffect } from 'react'; import { initializeApp } from 'firebase/app'; import { getAuth, signInAnonymously, signInWithCustomToken, onAuthStateChanged, signOut } from 'firebase/auth'; import { getFirestore, collection, doc, addDoc, onSnapshot, updateDoc, deleteDoc, query, where } from 'firebase/firestore'; import { Truck, BarChart3, ShieldCheck, Globe, Clock, FileText, CheckCircle2, ArrowRight, Phone, Mail, MapPin, Menu, X, LayoutDashboard, LogOut, Plus, Search, Settings, User, Linkedin, Facebook, Twitter, Instagram, AlertCircle, Building2, FileUp, ChevronRight, Calendar, DollarSign, TrendingUp, FileBadge, UserPlus, HardDrive, Activity, ClipboardList, Filter } from 'lucide-react'; // --- Firebase Configuration --- const firebaseConfig = JSON.parse(__firebase_config); const app = initializeApp(firebaseConfig); const auth = getAuth(app); const db = getFirestore(app); const appId = typeof __app_id !== 'undefined' ? __app_id : 'forward-dispatch-crm'; const App = () => { const [currentPage, setCurrentPage] = useState('home'); const [crmTab, setCrmTab] = useState('loads'); const [isMenuOpen, setIsMenuOpen] = useState(false); const [user, setUser] = useState(null); const [loads, setLoads] = useState([]); const [carriers, setCarriers] = useState([]); const [drivers, setDrivers] = useState([]); const [selectedCarrier, setSelectedCarrier] = useState(null); const [selectedLoad, setSelectedLoad] = useState(null); const [isDispatchModalOpen, setIsDispatchModalOpen] = useState(false); const [isLoading, setIsLoading] = useState(true); const [error, setError] = useState(null); // --- Search and Filters State --- const [searchQuery, setSearchQuery] = useState(""); const [statusFilter, setStatusFilter] = useState("All"); const [carrierFilter, setCarrierFilter] = useState("All"); // --- Auth Logic --- useEffect(() => { const initAuth = async () => { try { if (typeof __initial_auth_token !== 'undefined' && __initial_auth_token) { await signInWithCustomToken(auth, __initial_auth_token); } else { await signInAnonymously(auth); } } catch (err) { console.error("Auth Error:", err); setError("Authentication failed. Please refresh."); } }; initAuth(); const unsubscribe = onAuthStateChanged(auth, (u) => { setUser(u); setIsLoading(false); }); return () => unsubscribe(); }, []); // --- Database Sync --- useEffect(() => { if (!user) return; const loadsCol = collection(db, 'artifacts', appId, 'public', 'data', 'loads'); const carriersCol = collection(db, 'artifacts', appId, 'public', 'data', 'carriers'); const driversCol = collection(db, 'artifacts', appId, 'public', 'data', 'drivers'); const unsubLoads = onSnapshot(loadsCol, (snap) => { setLoads(snap.docs.map(d => ({ id: d.id, ...d.data() }))); }, () => setError("Failed to sync load data.")); const unsubCarriers = onSnapshot(carriersCol, (snap) => { setCarriers(snap.docs.map(d => ({ id: d.id, ...d.data() }))); }, () => setError("Failed to sync carrier data.")); const unsubDrivers = onSnapshot(driversCol, (snap) => { setDrivers(snap.docs.map(d => ({ id: d.id, ...d.data() }))); }, () => setError("Failed to sync driver data.")); return () => { unsubLoads(); unsubCarriers(); unsubDrivers(); }; }, [user]); const navigate = (page) => { setCurrentPage(page); setIsMenuOpen(false); window.scrollTo(0, 0); }; const handleSignOut = async () => { await signOut(auth); navigate('home'); }; // --- CRM Actions --- const addLoad = async (e) => { e.preventDefault(); if (!user) return; const formData = new FormData(e.target); const newLoad = { carrierId: formData.get('carrierId'), origin: formData.get('origin'), destination: formData.get('destination'), rate: parseFloat(formData.get('rate')), status: 'Unassigned', assignedDriverId: null, trackingHistory: [{ status: 'Created', timestamp: new Date().toISOString() }], createdAt: new Date().toISOString(), dispatcherId: user.uid }; try { await addDoc(collection(db, 'artifacts', appId, 'public', 'data', 'loads'), newLoad); e.target.reset(); setIsDispatchModalOpen(false); } catch (err) { setError("Failed to add load."); } }; const assignDriverToLoad = async (loadId, driverId) => { try { const loadRef = doc(db, 'artifacts', appId, 'public', 'data', 'loads', loadId); const driver = drivers.find(d => d.id === driverId); await updateDoc(loadRef, { assignedDriverId: driverId, assignedDriverName: driver.name, status: 'Assigned', trackingHistory: [...(selectedLoad.trackingHistory || []), { status: 'Assigned', timestamp: new Date().toISOString() }] }); setSelectedLoad(prev => ({ ...prev, status: 'Assigned', assignedDriverId: driverId, assignedDriverName: driver.name })); } catch (err) { setError("Failed to assign driver."); } }; const updateLoadStatus = async (loadId, newStatus) => { try { const loadRef = doc(db, 'artifacts', appId, 'public', 'data', 'loads', loadId); await updateDoc(loadRef, { status: newStatus, trackingHistory: [...(selectedLoad.trackingHistory || []), { status: newStatus, timestamp: new Date().toISOString() }] }); setSelectedLoad(prev => ({ ...prev, status: newStatus })); } catch (err) { setError("Failed to update status."); } }; const addCarrier = async (e) => { e.preventDefault(); const formData = new FormData(e.target); const newCarrier = { companyName: formData.get('name'), mcNumber: formData.get('mc'), email: formData.get('email'), truckCount: formData.get('trucks') || "0", contractStatus: 'Pending', createdAt: new Date().toISOString() }; try { await addDoc(collection(db, 'artifacts', appId, 'public', 'data', 'carriers'), newCarrier); e.target.reset(); } catch (err) { setError("Failed to add carrier."); } }; const addDriver = async (e) => { e.preventDefault(); const formData = new FormData(e.target); const newDriver = { carrierId: selectedCarrier.id, companyName: selectedCarrier.companyName, name: formData.get('driverName'), licenseNumber: formData.get('license'), licensePlate: formData.get('plate'), phone: formData.get('phone'), createdAt: new Date().toISOString() }; try { await addDoc(collection(db, 'artifacts', appId, 'public', 'data', 'drivers'), newDriver); e.target.reset(); } catch (err) { setError("Failed to add driver."); } }; // --- Filtering Logic --- const filteredLoads = loads.filter(load => { const carrier = carriers.find(c => c.id === load.carrierId); const matchesSearch = load.origin?.toLowerCase().includes(searchQuery.toLowerCase()) || load.destination?.toLowerCase().includes(searchQuery.toLowerCase()) || carrier?.companyName?.toLowerCase().includes(searchQuery.toLowerCase()) || load.assignedDriverName?.toLowerCase().includes(searchQuery.toLowerCase()); const matchesStatus = statusFilter === "All" || load.status === statusFilter; const matchesCarrier = carrierFilter === "All" || load.carrierId === carrierFilter; return matchesSearch && matchesStatus && matchesCarrier; }); // --- Components --- const Navbar = () => ( ); const CRM_Dashboard = () => (
{/* Sidebar */}

{crmTab === 'loads' && (selectedLoad ? "Load Tracking & Workflow" : "Dispatcher Workspace")} {crmTab === 'carriers' && (selectedCarrier ? "Carrier Profile" : "Carrier Directory")} {crmTab === 'invoices' && "Financial Hub"} {crmTab === 'analytics' && "Performance Analytics"}

{crmTab === 'loads' && (selectedLoad ? `ID: ${selectedLoad.id}` : `Monitoring ${filteredLoads.length} shipments.`)}

{crmTab === 'loads' && !selectedLoad && ( )}
{user?.uid.substring(0,8)}...
{error &&
{error}
} {/* Load Board Content */} {crmTab === 'loads' && !selectedLoad && (
{/* Filter Bar */}
setSearchQuery(e.target.value)} />
Filters Active: { (searchQuery || statusFilter !== "All" || carrierFilter !== "All") ? "Yes" : "No" }
{filteredLoads.length === 0 ? ( ) : ( filteredLoads.map((load) => { const carrier = carriers.find(c => c.id === load.carrierId); return ( setSelectedLoad(load)}> ); }) )}
Carrier / Driver Route Rate Status Action
No matching loads found.
{carrier?.companyName || "Unknown Carrier"}
{load.assignedDriverName || "No Driver Assigned"}
{load.origin}{load.destination}
${load.rate?.toLocaleString()} {load.status}
)} {/* Dispatch New Load Modal */} {isDispatchModalOpen && (
setIsDispatchModalOpen(false)}>

New Load Entry

)} {/* Load Details View (Workflow) */} {crmTab === 'loads' && selectedLoad && (
{/* Workflow Status Tracking */}

Load Lifecycle Tracking

{['Unassigned', 'Assigned', 'In Transit', 'Delivered'].map((step, idx) => (
{idx < ['Unassigned', 'Assigned', 'In Transit', 'Delivered'].indexOf(selectedLoad.status) ? : idx + 1}
{step}
))}

Assign Driver

{!selectedLoad.assignedDriverId ? (
{drivers.filter(d => d.carrierId === selectedLoad.carrierId).map(driver => ( ))} {drivers.filter(d => d.carrierId === selectedLoad.carrierId).length === 0 && (
No drivers registered for {carriers.find(c => c.id === selectedLoad.carrierId)?.companyName}
)}
) : (
{selectedLoad.assignedDriverName}
Active Assignment
Phone: {drivers.find(d => d.id === selectedLoad.assignedDriverId)?.phone}
Plate: {drivers.find(d => d.id === selectedLoad.assignedDriverId)?.licensePlate}
)}

Load Documentation

Rate Confirmation
Wait for Upload
Bill of Lading
Scan Required
{/* Sidebar: Tracking History */}

Live Events

{(selectedLoad.trackingHistory || []).map((log, i) => (
{i !== (selectedLoad.trackingHistory || []).length - 1 &&
}
{log.status}
{new Date(log.timestamp).toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' })}
))}
)} {/* Carrier Tab Logic */} {crmTab === 'carriers' && !selectedCarrier && (

Register Carrier

{carriers.map(carrier => (
setSelectedCarrier(carrier)} className="bg-white p-6 rounded-[32px] border hover:shadow-lg transition cursor-pointer group">

{carrier.companyName}

MC#{carrier.mcNumber}

{carrier.truckCount || 0} Trucks

))}
)} {crmTab === 'carriers' && selectedCarrier && (

{selectedCarrier.companyName}

MC#{selectedCarrier.mcNumber} • {selectedCarrier.email}

{drivers.filter(d => d.carrierId === selectedCarrier.id).map(driver => (

{driver.name}

{driver.phone} • {driver.licensePlate}

))}

Add Driver

)} {crmTab === 'invoices' && (

Financial History

{loads.map((l, i) => ( ))}
Invoice #CarrierAmountStatus
INV-00{i+1} {carriers.find(c => c.id === l.carrierId)?.companyName || "Unknown"} ${(l.rate * 0.1).toFixed(2)} Pending
)} {crmTab === 'analytics' && (
{[ { label: "Total Gross", val: `$${loads.reduce((a, b) => a + (b.rate || 0), 0).toLocaleString()}`, icon: , color: "text-green-600" }, { label: "Active Loads", val: loads.length, icon: , color: "text-blue-600" }, { label: "Avg. Rate", val: `$${(loads.reduce((a, b) => a + (b.rate || 0), 0) / (loads.length || 1)).toFixed(0)}`, icon: , color: "text-purple-600" }, { label: "Partners", val: carriers.length, icon: , color: "text-amber-600" } ].map((stat, i) => (
{stat.icon}
{stat.val}
{stat.label}
))}
)}
); const LoginPage = () => (

Dispatcher Login

Access your CRM dashboard

{ e.preventDefault(); navigate('crm'); }}>
); const HomePage = () => (
Trucking Background

Stop Chasing Loads.
Maximize Your RPM.

Premium 24/7 Dispatching & Operations for US Owner-Operators. We handle the paperwork, you handle the miles.

{[ { title: "High-Pay Lanes", icon: , desc: "We use DAT & Truckstop data to secure the highest RPM in your preferred lanes." }, { title: "24/7 Back-Office", icon: , desc: "From packets to factoring, we handle every piece of paper so you stay hands-off." }, { title: "No Forced Dispatch", icon: , desc: "You are the boss. We provide the options, you make the final call on every load." } ].map((item, i) => (
{item.icon}

{item.title}

{item.desc}

))}
); const ServicesPage = () => (

Our Specializations

We don't just move freight; we optimize your business structure.

Reefer Dispatching

Precision monitoring for temp-sensitive cargo. We manage cold-chain compliance and reefer-specific fuel surcharges.

Dry Van Power

Focus on consistent gross revenue through high-volume lane triangulation and power-only drop-and-hook loads.

); const Footer = () => ( ); if (isLoading) return
Initializing Systems...
; return (
{currentPage !== 'crm' && }
{currentPage === 'home' && } {currentPage === 'services' && } {currentPage === 'onboarding' && } {currentPage === 'login' && } {currentPage === 'crm' && }
{currentPage !== 'crm' &&
); }; export default App;