devist 0.7.0

Project bootstrap CLI for AI-assisted development. Spin up new projects from templates, manage backends, and keep your codebase comprehensible.
import DashboardLayout from "@/components/DashboardLayout";
import SetupGuide from "@/components/SetupGuide";
import { AuthProvider, useAuth } from "@/contexts/AuthContext";
import { supabaseEnv } from "@/lib/supabase";
import Inbox from "@/pages/Inbox";
import Login from "@/pages/Login";
import Overview from "@/pages/Overview";
import ProjectTimeline from "@/pages/ProjectTimeline";
import { Navigate, Route, BrowserRouter as Router, Routes } from "react-router-dom";

function RequireAuth({ children }: { children: React.ReactNode }) {
  const { session, loading } = useAuth();
  if (loading) {
    return (
      <div className="min-h-screen flex items-center justify-center text-sm text-muted-foreground">
        Loading…
      </div>
    );
  }
  if (!session) return <Navigate to="/login" replace />;
  return <>{children}</>;
}

function RedirectIfAuthed({ children }: { children: React.ReactNode }) {
  const { session, loading } = useAuth();
  if (loading) return null;
  if (session) return <Navigate to="/" replace />;
  return <>{children}</>;
}

export default function App() {
  if (!supabaseEnv.configured) {
    return <SetupGuide />;
  }
  return (
    <AuthProvider>
      <Router>
        <Routes>
          <Route
            path="/login"
            element={
              <RedirectIfAuthed>
                <Login />
              </RedirectIfAuthed>
            }
          />
          <Route
            element={
              <RequireAuth>
                <DashboardLayout />
              </RequireAuth>
            }
          >
            <Route index element={<Overview />} />
            <Route path="inbox" element={<Inbox />} />
            <Route path="projects/:name" element={<ProjectTimeline />} />
          </Route>
          <Route path="*" element={<Navigate to="/" replace />} />
        </Routes>
      </Router>
    </AuthProvider>
  );
}