diff --git a/.gitignore b/.gitignore index 772f5c21..7ce8fb56 100644 --- a/.gitignore +++ b/.gitignore @@ -6,3 +6,4 @@ data *.log .env* /.idea +tsconfig.tsbuildinfo diff --git a/app/(dashboard)/DashboardLayoutClient.tsx b/app/(dashboard)/DashboardLayoutClient.tsx index bb6cd139..c8693df5 100644 --- a/app/(dashboard)/DashboardLayoutClient.tsx +++ b/app/(dashboard)/DashboardLayoutClient.tsx @@ -22,49 +22,59 @@ export default function DashboardLayoutClient({ user, children }: { user: UserRe const pathname = usePathname(); return ( - + - - - Caddy Proxy Manager + + + Caddy - + + Proxy Manager + + {user.name ?? user.email} - + {NAV_ITEMS.map((item) => { const selected = pathname === item.href; return ( - + ); @@ -72,14 +82,44 @@ export default function DashboardLayoutClient({ user, children }: { user: UserRe
-
- - {children} + + + {children}
); diff --git a/app/(dashboard)/OverviewClient.tsx b/app/(dashboard)/OverviewClient.tsx index 9f0587f3..1c57fee9 100644 --- a/app/(dashboard)/OverviewClient.tsx +++ b/app/(dashboard)/OverviewClient.tsx @@ -1,7 +1,8 @@ "use client"; import Link from "next/link"; -import { Card, CardActionArea, CardContent, Grid, Paper, Stack, Typography } from "@mui/material"; +import Grid from "@mui/material/Grid"; +import { Card, CardActionArea, CardContent, Paper, Stack, Typography } from "@mui/material"; type StatCard = { label: string; @@ -25,29 +26,58 @@ export default function OverviewClient({ recentEvents: RecentEvent[]; }) { return ( - - - + + + + Control Center + + Welcome back, {userName} - - Manage your Caddy reverse proxies, TLS certificates, and services with confidence. + + Everything you need to orchestrate Caddy proxies, certificates, and secure edge services lives here. - + {stats.map((stat) => ( - - - - - + + + + + {stat.icon} - + {stat.count} - {stat.label} + + {stat.label} + @@ -56,11 +86,19 @@ export default function OverviewClient({ - + Recent Activity {recentEvents.length === 0 ? ( - + No activity recorded yet. ) : ( @@ -69,7 +107,15 @@ export default function OverviewClient({ {event.summary} diff --git a/app/(dashboard)/proxy-hosts/ProxyHostsClient.tsx b/app/(dashboard)/proxy-hosts/ProxyHostsClient.tsx index a6442266..a1e1e228 100644 --- a/app/(dashboard)/proxy-hosts/ProxyHostsClient.tsx +++ b/app/(dashboard)/proxy-hosts/ProxyHostsClient.tsx @@ -1,23 +1,8 @@ "use client"; import ExpandMoreIcon from "@mui/icons-material/ExpandMore"; -import { - Accordion, - AccordionDetails, - AccordionSummary, - Box, - Button, - Card, - CardContent, - Chip, - FormControlLabel, - Grid, - MenuItem, - Stack, - TextField, - Typography, - Checkbox -} from "@mui/material"; +import Grid from "@mui/material/Grid"; +import { Accordion, AccordionDetails, AccordionSummary, Box, Button, Card, CardContent, Chip, FormControlLabel, MenuItem, Stack, TextField, Typography, Checkbox } from "@mui/material"; import type { AccessList } from "@/src/lib/models/access-lists"; import type { Certificate } from "@/src/lib/models/certificates"; import type { ProxyHost } from "@/src/lib/models/proxy-hosts"; @@ -31,43 +16,89 @@ type Props = { export default function ProxyHostsClient({ hosts, certificates, accessLists }: Props) { return ( - - - + + + + HTTP Edge + + Proxy Hosts - - Define HTTP(S) reverse proxies managed by Caddy with built-in TLS orchestration. + + Define HTTP(S) reverse proxies orchestrated by Caddy with automated certificates, shields, and zero-downtime + reloads. {hosts.map((host) => ( - - - - - - + + + + + + {host.name} - + {host.domains.join(", ")} - - } sx={{ px: 0 }}> + + } + sx={{ px: 2, bgcolor: "rgba(15, 23, 42, 0.45)" }} + > Edit configuration - - updateProxyHostAction(host.id, formData)} spacing={2}> + + updateProxyHostAction(host.id, formData)} spacing={2.5}> - - - + - @@ -146,12 +177,22 @@ export default function ProxyHostsClient({ hosts, certificates, accessLists }: P - - Create proxy host - - - - + + + Create proxy host + + + Deploy a new reverse proxy route powered by Caddy. + + + + + ))} - - } label="Force HTTPS" /> - } label="HSTS" /> - } label="Allow WebSocket" /> - } label="Preserve host header" /> - } label="Enabled" /> + + + + } + label="Include subdomains in HSTS" + sx={{ width: "100%", m: 0 }} + /> + + + + } + label="Skip HTTPS hostname validation" + sx={{ width: "100%", m: 0 }} + /> + + + + } + label="Enabled" + sx={{ width: "100%", m: 0 }} + /> +