Initial commit: booking-ewa v1.0.0

Embedded Web App for EV charging slot bookings. Express backend with JWT
auth and AMPECO Public API proxy. React SPA with booking CRUD, availability
checking, and runtime design token theming.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Kaloyan Danchev
2026-03-18 19:34:13 +02:00
commit 87dadf1def
44 changed files with 8126 additions and 0 deletions
+57
View File
@@ -0,0 +1,57 @@
import { SessionProvider } from './context/SessionContext';
import { useSession } from './hooks/useSession';
import { AppRouter } from './router';
import { UserIdFallback } from './pages/UserIdFallback/UserIdFallback';
function AppContent() {
const { session, loading, error } = useSession();
if (loading) {
return (
<div className="flex items-center justify-center min-h-screen">
<div className="flex flex-col items-center gap-3">
<div
className="w-8 h-8 border-2 border-t-transparent rounded-full animate-spin"
style={{ borderColor: 'var(--btn-primary-bg, #2563eb)', borderTopColor: 'transparent' }}
/>
<p className="text-sm" style={{ color: 'var(--text-secondary, #6b7280)' }}>
Loading...
</p>
</div>
</div>
);
}
if (error) {
return (
<div className="flex items-center justify-center min-h-screen p-6">
<div className="text-center space-y-2">
<p className="text-sm font-medium" style={{ color: '#dc2626' }}>
{error}
</p>
<button
onClick={() => window.location.reload()}
className="text-sm font-medium"
style={{ color: 'var(--btn-primary-bg, #2563eb)' }}
>
Retry
</button>
</div>
</div>
);
}
if (!session?.userId) {
return <UserIdFallback />;
}
return <AppRouter />;
}
export function App() {
return (
<SessionProvider>
<AppContent />
</SessionProvider>
);
}