Build AI Chief of Staff MVP: auth, mailbox sync, briefings, draft replies
Scaffolds a Next.js app with email/password auth, encrypted IMAP/SMTP/CalDAV mailbox connections, a background sync job, Claude-generated daily briefings, and an approve-before-send draft reply flow. Includes a clean design system (light/dark) and deployment config (systemd unit, credential rotation script). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_012o9j9RezxbZVKQMrB7oRLY
This commit is contained in:
1 parent
facd4d71bd
commit
bcf0e86618
65 files changed
+13413
-1
No files matched your search
@@ -0,0 +1,34 @@
|
||||
import { redirect } from "next/navigation";
|
||||
import { getCurrentSession } from "@/lib/auth/session";
|
||||
import { LogoutButton } from "./logout-button";
|
||||
import { NavLinks } from "./nav-links";
|
||||
|
||||
export default async function DashboardLayout({
|
||||
children,
|
||||
}: {
|
||||
children: React.ReactNode;
|
||||
}) {
|
||||
const session = await getCurrentSession();
|
||||
if (!session) {
|
||||
redirect("/login");
|
||||
}
|
||||
|
||||
return (
|
||||
<div style={{ display: "flex", flexDirection: "column", minHeight: "100%", flex: 1 }}>
|
||||
<header className="topnav">
|
||||
<div className="topnav-inner">
|
||||
<div className="brand">
|
||||
<div className="brand-mark" />
|
||||
Chief of Staff
|
||||
</div>
|
||||
<NavLinks />
|
||||
<div className="user-menu">
|
||||
<span className="user-email">{session.user.email}</span>
|
||||
<LogoutButton />
|
||||
</div>
|
||||
</div>
|
||||
</header>
|
||||
<main style={{ flex: 1 }}>{children}</main>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
Reference in new issue
Block a user