const { useState, useEffect, createContext, useContext, useRef } = React; const Icon = ({ name, className, style }) => ; const Package = (p) => ; const Search = (p) => ; const MapPin = (p) => ; const Truck = (p) => ; const CheckCircle2 = (p) => ; const Clock = (p) => ; const Globe = (p) => ; const User = (p) => ; const LogOut = (p) => ; const Plus = (p) => ; const Edit2 = (p) => ; const Trash2 = (p) => ; const Send = (p) => ; const MessageSquare = (p) => ; const Menu = (p) => ; const X = (p) => ; const Info = (p) => ; const TrendingUp = (p) => ; // --- MULTI-LANGUAGE DICTIONARY --- const translations = { en: { hero_title: "Global Logistics & Tracking", hero_subtitle: "Track your shipment instantly with real-time updates and seamless communication.", track_placeholder: "Enter Tracking Number...", track_btn: "Track Package", admin_login: "Admin Login", language: "Language", status: "Status", from: "From", to: "To", est_delivery: "Est. Delivery", chat_with_us: "Chat with us", send: "Send", type_msg: "Type a message...", not_found: "Tracking number not found.", pending: "Pending", in_transit: "In Transit", delivered: "Delivered", dashboard: "Dashboard", manage_trackings: "Manage Trackings", create_new: "Create New", logout: "Logout", save: "Save" }, es: { hero_title: "Logística y Seguimiento Global", hero_subtitle: "Rastree su envío al instante con actualizaciones en tiempo real.", track_placeholder: "Ingrese el número de seguimiento...", track_btn: "Rastrear", admin_login: "Acceso Admin", language: "Idioma", status: "Estado", from: "De", to: "A", est_delivery: "Entrega Est.", chat_with_us: "Chatea con nosotros", send: "Enviar", type_msg: "Escribe un mensaje...", not_found: "Número no encontrado.", pending: "Pendiente", in_transit: "En Tránsito", delivered: "Entregado", dashboard: "Panel", manage_trackings: "Gestionar Envíos", create_new: "Crear Nuevo", logout: "Cerrar sesión", save: "Guardar" }, fr: { hero_title: "Logistique et Suivi Mondial", hero_subtitle: "Suivez votre envoi instantanément avec des mises à jour en temps réel.", track_placeholder: "Entrez le numéro de suivi...", track_btn: "Suivre", admin_login: "Connexion Admin", language: "Langue", status: "Statut", from: "De", to: "À", est_delivery: "Livraison Est.", chat_with_us: "Discutez avec nous", send: "Envoyer", type_msg: "Tapez un message...", not_found: "Numéro de suivi introuvable.", pending: "En attente", in_transit: "En transit", delivered: "Livré", dashboard: "Tableau de bord", manage_trackings: "Gérer les suivis", create_new: "Créer un nouveau", logout: "Déconnexion", save: "Enregistrer" } }; const I18nContext = createContext(); const useI18n = () => useContext(I18nContext); // --- MAIN APP COMPONENT --- function App() { const [lang, setLang] = useState('en'); const [view, setView] = useState(() => { return window.location.hash.includes('#admin') ? 'admin' : 'home'; }); // home, admin const t = translations[lang]; useEffect(() => { const handleHashChange = () => { if (window.location.hash.includes('#admin')) { setView('admin'); } else { setView('home'); } }; window.addEventListener('hashchange', handleHashChange); return () => window.removeEventListener('hashchange', handleHashChange); }, []); const changeLang = (l) => setLang(l); const handleViewChange = (v) => { if (v === 'admin') window.location.hash = '#admin'; else window.location.hash = ''; setView(v); }; return (
{view === 'home' && } {view === 'admin' && }
); } // --- NAVBAR --- function Navbar({ view, setView }) { const { t, lang, changeLang } = useI18n(); const [showLang, setShowLang] = useState(false); return ( ); } // --- USER HOME --- function UserHome() { const { t } = useI18n(); const [trackingNumber, setTrackingNumber] = useState(''); const [trackingData, setTrackingData] = useState(null); const [loading, setLoading] = useState(false); const [error, setError] = useState(''); const handleSearch = async (e) => { e.preventDefault(); if(!trackingNumber.trim()) return; setLoading(true); setError(''); setTrackingData(null); try { const res = await fetch(`api.php?action=get_tracking_details&tn=${trackingNumber}`); const data = await res.json(); if(data.status === 'success') { setTrackingData(data.data); } else { setError(t.not_found); } } catch (err) { setError("Network error."); } setLoading(false); }; // Auto-refresh tracking data useEffect(() => { let interval; if(trackingData) { interval = setInterval(async () => { const res = await fetch(`api.php?action=get_tracking_details&tn=${trackingData.tracking_number}`); const data = await res.json(); if(data.status === 'success') { setTrackingData(data.data); } }, 5000); // refresh every 5 sec } return () => clearInterval(interval); }, [trackingData?.tracking_number]); return (
{/* Background Grid & Blobs */}
{!trackingData ? (
{/* Floating decorative elements */}
{/* New Premium Floating Widgets */}
Support Agent 1 Support Agent 2 Support Agent 3

24/7 Support

Online Now

Delivery Success

99.9%

On-Time Global

Next-Generation Global Logistics

{t.hero_title.split(' ').slice(0, -2).join(' ')}
{t.hero_title.split(' ').slice(-2).join(' ')}

{t.hero_subtitle}

setTrackingNumber(e.target.value)} placeholder={t.track_placeholder} className="w-full bg-transparent border-none px-4 py-4 sm:py-6 text-slate-900 text-2xl focus:outline-none placeholder-slate-300 font-bold tracking-wider uppercase" />
Real-time GPS Secure Transport 24/7 Support
{error &&

{error}

}
) : ( setTrackingData(null)} /> )} {!trackingData && ( <> {/* Companies Marquee */}

Trusted by Global Industry Leaders

{/* Duplicate for infinite effect */}

AMAZON

FEDEX

DHL

UPS

MAERSK

EBAY

WALMART

ALIEXPRESS

AMAZON

FEDEX

DHL

UPS

MAERSK

EBAY

WALMART

ALIEXPRESS

{/* Stats Section */}

10M+

Packages Delivered

150+

Countries Served

99%

On-time Delivery

24/7

Live Support

{/* Features / How it works */}

Why Choose LogisX?

Experience the next generation of global logistics with real-time tracking, unmatched security, and lightning-fast delivery speeds.

Global Network

Our infrastructure spans across 150+ countries, ensuring your packages reach any corner of the globe securely and on time.

Real-Time Updates

Never wonder where your package is. Get instant status updates directly to your screen with precise GPS timestamps.

Live Support

Directly chat with our dispatchers and admin team regarding your specific tracking number in real-time, 24/7.

{/* Premium Services */}

Our Premium Services

We offer end-to-end logistics solutions tailored for businesses of all sizes. From standard parcels to heavy freight.

{[ { title: 'Air Freight', icon: 'plane', color: 'brand', text: 'brand-600', desc: 'Fastest delivery for your urgent global shipments.' }, { title: 'Ocean Freight', icon: 'ship', color: 'cyan', text: 'cyan-600', desc: 'Cost-effective solutions for massive cargo volumes.' }, { title: 'Road Transport', icon: 'truck', color: 'yellow', text: 'yellow-600', desc: 'Reliable cross-border and domestic trucking.' }, { title: 'Warehousing', icon: 'warehouse', color: 'purple', text: 'purple-600', desc: 'Secure storage and fulfillment centers worldwide.' } ].map((s, i) => (

{s.title}

{s.desc}

))}
{/* Testimonials */}

What Our Clients Say

"LogisX changed how we track shipments. The real-time updates and live support chat are absolutely incredible!"

S

Sarah Jenkins
CEO, RetailCo

"Unmatched delivery speeds and an admin panel that is out of this world. Highly recommend to any logistics business."

M

Mark Thompson
Operations Manager

"The best tracking system we have ever used. The UI is simply beautiful and so easy to navigate."

A

Amanda R.
E-commerce Seller

{/* Call to Action */}

Ready to revolutionize
your supply chain?

Join thousands of businesses that trust LogisX for reliable, fast, and transparent global shipping.

{/* Footer */} )}
); } function TrackingView({ data, onBack }) { const { t } = useI18n(); return (
{/* Left Column: Tracking Timeline */}

{data.tracking_number}

{data.current_status} {data.updated_at}

Carrier

{data.carrier_name || 'LogisX Express'}

{/* Route Summary */}

{t.from}

{data.from_location}

{(()=>{ const progressValue = (data.progress !== null && data.progress !== undefined && data.progress !== '') ? `${data.progress}%` : (data.current_status === 'Delivered' ? '100%' : '50%'); return (
{progressValue}
); })()}

{t.to}

{data.to_location}

{/* Timeline */}

Tracking History

{data.updates && data.updates.map((up, i) => (

{up.status_text}

{up.timestamp} • {up.location}

{up.note &&

{up.note}

}
))}
{/* Right Column: Details & Chat */}

Shipment Details

Reference No.

{data.reference_number || 'N/A'}

Pieces

{data.pieces || '1'}

Package Type

{data.package_type || 'Standard Box'}

Weight

{data.weight || 'N/A'}

Pickup Time

{data.pickup_time || 'Pending'}

Departure Time

{data.departure_time || 'Pending'}

{t.est_delivery}

{data.estimated_delivery || 'Pending'}

{/* Chat Widget inside page */}

Live Support

); } // --- CHAT BOX COMPONENT --- function ChatBox({ trackingNumber, role }) { const { t } = useI18n(); const [messages, setMessages] = useState([]); const [input, setInput] = useState(''); const [templates, setTemplates] = useState([]); const chatContainerRef = useRef(null); const sessionStart = useRef(Date.now()); const loadChat = async () => { const sinceParam = role === 'user' ? `&since=${sessionStart.current}` : ''; const res = await fetch(`api.php?action=get_chat&tn=${trackingNumber}${sinceParam}`); const data = await res.json(); if(data.status === 'success') { setMessages(data.data); } }; useEffect(() => { loadChat(); if (role === 'admin') { fetch('api.php?action=get_chat_templates') .then(r => r.json()) .then(d => { if(d.status === 'success') setTemplates(d.data); }); } const interval = setInterval(loadChat, 3000); // Polling for real-time chat return () => clearInterval(interval); }, [trackingNumber, role]); useEffect(() => { if(chatContainerRef.current) { chatContainerRef.current.scrollTop = chatContainerRef.current.scrollHeight; } }, [messages]); const sendMsg = async (e, forceMsg = null) => { if(e) e.preventDefault(); const msgText = forceMsg || input; if(!msgText.trim()) return; if(!forceMsg) setInput(''); // Optimistic UI update setMessages(prev => [...prev, { sender: role, message: msgText, created_at: new Date().toISOString() }]); await fetch('api.php?action=send_chat', { method: 'POST', headers: {'Content-Type': 'application/json'}, body: JSON.stringify({ tracking_number: trackingNumber, message: msgText }) }); loadChat(); }; return (
{messages.map((m, i) => { const isMe = m.sender === role; return (

{m.message}

{new Date(m.created_at).toLocaleTimeString()}
) })}
{role === 'admin' && templates.length > 0 && (
{templates.map(tpl => ( ))}
)}
sendMsg(e)} className="p-4 border-t border-slate-200 bg-slate-50 rounded-b-2xl flex gap-2"> setInput(e.target.value)} placeholder={t.type_msg} className="flex-1 bg-white border border-slate-300 rounded-lg px-4 py-2 text-sm text-slate-900 focus:outline-none focus:border-brand-500 transition" />
); } // --- ADMIN APP --- function AdminApp() { const [isAuthenticated, setIsAuthenticated] = useState(false); const [loading, setLoading] = useState(true); useEffect(() => { fetch('api.php?action=check_auth') .then(res => res.json()) .then(data => { if(data.status === 'success') setIsAuthenticated(true); setLoading(false); }); }, []); if(loading) return
; if(!isAuthenticated) return setIsAuthenticated(true)} />; return setIsAuthenticated(false)} />; } function AdminLogin({ onLogin }) { const [username, setUsername] = useState(''); const [password, setPassword] = useState(''); const [error, setError] = useState(''); const handleLogin = async (e) => { e.preventDefault(); const res = await fetch('api.php?action=admin_login', { method: 'POST', body: JSON.stringify({ username, password }) }); const data = await res.json(); if(data.status === 'success') onLogin(); else setError(data.message); }; return (

Admin Access

{error &&

{error}

}
setUsername(e.target.value)} className="w-full bg-white border border-slate-300 rounded-lg px-4 py-3 text-slate-900 focus:border-brand-500 focus:outline-none transition" />
setPassword(e.target.value)} className="w-full bg-white border border-slate-300 rounded-lg px-4 py-3 text-slate-900 focus:border-brand-500 focus:outline-none transition" />
); } function AdminDashboard({ onLogout }) { const [stats, setStats] = useState(null); const [trackings, setTrackings] = useState([]); const [view, setView] = useState('list'); // list, create, edit const [selectedTracking, setSelectedTracking] = useState(null); const [activeChatTn, setActiveChatTn] = useState(null); const loadData = async () => { const resStats = await fetch('api.php?action=get_admin_stats'); const dStats = await resStats.json(); if(dStats.status === 'success') setStats(dStats.data); const resTrk = await fetch('api.php?action=get_trackings'); const dTrk = await resTrk.json(); if(dTrk.status === 'success') setTrackings(dTrk.data); }; useEffect(() => { loadData(); const intv = setInterval(loadData, 10000); return () => clearInterval(intv); }, []); const logout = async () => { await fetch('api.php?action=admin_logout'); onLogout(); }; return (
{/* Sidebar */}

Menu

Active Chats

{stats?.active_chats?.map(c => ( ))}
{/* Main Content */}
{stats && view === 'list' && (

Total Trackings

{stats.total}

Pending

{stats.pending}

Delivered

{stats.delivered}

)} {view === 'templates' && } {view === 'list' && (
{trackings.map(t => ( ))}
Tracking No. From/To Status Actions
{t.tracking_number}
{t.from_location}
↓ {t.to_location}
{t.current_status}
)} {(view === 'create' || view === 'edit') && ( { setView('list'); loadData(); }} onCancel={() => setView('list')} /> )} {/* Floating Admin Chat Modal */} {activeChatTn && (

Chat: {activeChatTn}

)}
); } function TrackingForm({ tracking, onSaved, onCancel }) { const isEdit = !!tracking; const [form, setForm] = useState(tracking || { sender_name: '', sender_address: '', receiver_name: '', receiver_address: '', from_location: '', to_location: '', weight: '', package_type: '', estimated_delivery: '', carrier_name: 'LogisX Express', reference_number: '', pickup_time: '', departure_time: '', pieces: '1', created_at: '', progress: '' }); // Status update logic (only for edit) const [newStatus, setNewStatus] = useState(''); const [newLocation, setNewLocation] = useState(''); const [newNote, setNewNote] = useState(''); const [newTimestamp, setNewTimestamp] = useState(''); const [updates, setUpdates] = useState([]); useEffect(() => { if(isEdit) loadUpdates(); }, [tracking]); const loadUpdates = async () => { const res = await fetch(`api.php?action=get_tracking_details&tn=${tracking.tracking_number}`); const data = await res.json(); if(data.status === 'success') setUpdates(data.data.updates || []); }; const handleSubmit = async (e) => { e.preventDefault(); const action = isEdit ? 'update_tracking' : 'create_tracking'; await fetch(`api.php?action=${action}`, { method: 'POST', body: JSON.stringify(form) }); onSaved(); }; const handleAddStatus = async () => { if(!newStatus) return; await fetch(`api.php?action=add_status`, { method: 'POST', body: JSON.stringify({ tracking_id: tracking.id, status_text: newStatus, location: newLocation, note: newNote, timestamp: newTimestamp }) }); setNewStatus(''); setNewLocation(''); setNewNote(''); setNewTimestamp(''); loadUpdates(); onSaved(); // just to refresh parent }; const handleDeleteStatus = async (updateId) => { if(!confirm('Delete this status update?')) return; await fetch(`api.php?action=delete_status`, { method: 'POST', body: JSON.stringify({ update_id: updateId, tracking_id: tracking.id }) }); loadUpdates(); onSaved(); }; const handleChange = (e) => setForm({...form, [e.target.name]: e.target.value}); return (

{isEdit ? 'Edit Tracking' : 'Create Tracking'} {isEdit && #{tracking.tracking_number}}

{isEdit && (

Add Status Update

setNewStatus(e.target.value)} placeholder="e.g. In Transit, Out for Delivery" className="w-full bg-white border border-slate-300 rounded-lg px-3 py-2 text-slate-900 focus:border-indigo-500 focus:outline-none" />
setNewLocation(e.target.value)} className="w-full bg-white border border-slate-300 rounded-lg px-3 py-2 text-slate-900 focus:border-indigo-500 focus:outline-none" />
setNewTimestamp(e.target.value)} className="w-full bg-white border border-slate-300 rounded-lg px-3 py-2 text-slate-900 focus:border-indigo-500 focus:outline-none" />

Manage History

{updates.map(up => (

{up.status_text}

{up.timestamp} • {up.location}

{up.note &&

{up.note}

}
))}
)}
); } function AdminTemplates() { const [templates, setTemplates] = useState([]); const [isEditing, setIsEditing] = useState(false); const [editId, setEditId] = useState(null); const [title, setTitle] = useState(''); const [message, setMessage] = useState(''); const loadTemplates = async () => { const res = await fetch('api.php?action=get_chat_templates'); const data = await res.json(); if(data.status === 'success') setTemplates(data.data); }; useEffect(() => { loadTemplates(); }, []); const handleSave = async (e) => { e.preventDefault(); await fetch('api.php?action=save_chat_template', { method: 'POST', body: JSON.stringify({ id: editId, title, message }) }); setIsEditing(false); setEditId(null); setTitle(''); setMessage(''); loadTemplates(); }; const handleDelete = async (id) => { if(!confirm('Are you sure you want to delete this template?')) return; await fetch('api.php?action=delete_chat_template', { method: 'POST', body: JSON.stringify({ id }) }); loadTemplates(); }; const setAutoReply = async (id) => { await fetch('api.php?action=set_auto_reply', { method: 'POST', body: JSON.stringify({ id }) }); loadTemplates(); }; return (

Chat Templates & Auto-Reply

{!isEditing && ( )}
{isEditing ? (

{editId ? 'Edit Template' : 'New Template'}

setTitle(e.target.value)} className="w-full bg-white border border-slate-300 rounded-lg px-4 py-2 text-slate-900 focus:border-brand-500 focus:outline-none" />
) : (

Auto-Reply Configuration

Select one template as an "Auto-Reply". When a user sends a message, the system will automatically reply with that template instantly. Set to "None" to disable auto-replies.

{templates.map(tpl => (
{tpl.is_auto_reply == 1 && ( Active Auto-Reply )}

{tpl.title}

{tpl.message}

))} {templates.length === 0 && (

No chat templates created yet.

)}
)}
); } const root = ReactDOM.createRoot(document.getElementById('root')); root.render();