'use client'; import { useState, FormEvent } from 'react'; import { useRouter } from 'next/navigation'; export default function AdminLoginPage() { const router = useRouter(); const [username, setUsername] = useState(''); const [password, setPassword] = useState(''); const [error, setError] = useState(''); const [loading, setLoading] = useState(false); const handleSubmit = async (e: FormEvent) => { e.preventDefault(); setError(''); setLoading(true); try { const res = await fetch('/api/admin/login/', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ username, password }), }); const data = await res.json(); if (res.ok) { router.push('/admin/'); router.refresh(); } else { setError(data.error ?? 'Login failed'); } } catch { setError('Network error. Please try again.'); } finally { setLoading(false); } }; return (
πŸ”

Admin Login

Lootah Robotics β€” G1 Configurator

setUsername(e.target.value)} style={inputStyle} onFocus={(e) => (e.currentTarget.style.borderColor = 'rgba(59, 130, 246, 0.5)')} onBlur={(e) => (e.currentTarget.style.borderColor = 'rgba(0, 0, 0, 0.1)')} placeholder="admin" />
setPassword(e.target.value)} style={inputStyle} onFocus={(e) => (e.currentTarget.style.borderColor = 'rgba(59, 130, 246, 0.5)')} onBlur={(e) => (e.currentTarget.style.borderColor = 'rgba(0, 0, 0, 0.1)')} placeholder="β€’β€’β€’β€’β€’β€’β€’β€’" />
{error && (
{error}
)}
); } const pageStyle: React.CSSProperties = { minHeight: '100vh', background: '#ffffff', display: 'flex', alignItems: 'center', justifyContent: 'center', padding: '2rem', fontFamily: 'system-ui, -apple-system, sans-serif', }; const cardStyle: React.CSSProperties = { width: '100%', maxWidth: '380px', background: 'rgba(255, 255, 255, 0.95)', backdropFilter: 'blur(20px)', border: '1px solid rgba(0, 0, 0, 0.06)', borderRadius: '1rem', padding: '2rem', }; const labelStyle: React.CSSProperties = { display: 'block', fontSize: '0.75rem', fontWeight: 600, color: '#374151', marginBottom: '0.375rem', letterSpacing: '0.02em', }; const inputStyle: React.CSSProperties = { width: '100%', padding: '0.6rem 0.875rem', borderRadius: '0.5rem', border: '1px solid rgba(0, 0, 0, 0.1)', background: '#ffffff', color: '#1a1a2e', fontSize: '0.875rem', outline: 'none', transition: 'border-color 0.2s ease', boxSizing: 'border-box', };