This commit is contained in:
gpt-engineer-app[bot]
2026-01-06 15:17:10 +00:00
parent c855594680
commit 596c77a6da
8 changed files with 95 additions and 23 deletions
+5 -7
View File
@@ -3,14 +3,12 @@
<head> <head>
<meta charset="UTF-8" /> <meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" />
<!-- TODO: Set the document title to the name of your application --> <title>Gatehouse — Identity & Access</title>
<title>Lovable App</title> <meta name="description" content="Gatehouse is a self-hosted identity and access platform providing secure authentication, organization-level security policy, and OIDC-based Single Sign-On." />
<meta name="description" content="Lovable Generated Project" /> <meta name="author" content="Gatehouse" />
<meta name="author" content="Lovable" />
<!-- TODO: Update og:title to match your application name --> <meta property="og:title" content="Gatehouse — Identity & Access" />
<meta property="og:title" content="Lovable App" /> <meta property="og:description" content="Secure authentication and access management for your organization." />
<meta property="og:description" content="Lovable Generated Project" />
<meta property="og:type" content="website" /> <meta property="og:type" content="website" />
<meta property="og:image" content="https://lovable.dev/opengraph-image-p98pqg.png" /> <meta property="og:image" content="https://lovable.dev/opengraph-image-p98pqg.png" />
+76
View File
@@ -0,0 +1,76 @@
import { cn } from "@/lib/utils";
interface GatehouseLogoProps {
size?: "sm" | "md" | "lg";
variant?: "default" | "light";
className?: string;
}
/**
* Gatehouse Logo - Abstract gate/doorway mark
* Represents controlled entry and policy enforcement
* Two vertical pillars forming a gateway with negative space
*/
export function GatehouseLogo({
size = "md",
variant = "default",
className
}: GatehouseLogoProps) {
const sizeClasses = {
sm: "w-8 h-8",
md: "w-9 h-9",
lg: "w-12 h-12",
};
const bgClasses = {
default: "bg-primary",
light: "bg-sidebar-primary",
};
const iconColor = variant === "light"
? "text-sidebar-primary-foreground"
: "text-primary-foreground";
return (
<div
className={cn(
"rounded-lg flex items-center justify-center flex-shrink-0",
sizeClasses[size],
bgClasses[variant],
className
)}
>
<svg
viewBox="0 0 24 24"
fill="none"
className={cn(
iconColor,
size === "sm" ? "w-4 h-4" : size === "md" ? "w-5 h-5" : "w-6 h-6"
)}
>
{/* Abstract gate - two pillars with archway */}
<path
d="M4 4h3v16H4V4z"
fill="currentColor"
/>
<path
d="M17 4h3v16h-3V4z"
fill="currentColor"
/>
<path
d="M7 4h10v3H7V4z"
fill="currentColor"
opacity="0.7"
/>
{/* Keyhole/entry indicator */}
<circle
cx="12"
cy="14"
r="2"
fill="currentColor"
opacity="0.5"
/>
</svg>
</div>
);
}
+5 -7
View File
@@ -1,5 +1,5 @@
import { Shield } from "lucide-react";
import { Outlet, Link } from "react-router-dom"; import { Outlet, Link } from "react-router-dom";
import { GatehouseLogo } from "@/components/branding/GatehouseLogo";
export default function PublicLayout() { export default function PublicLayout() {
return ( return (
@@ -10,11 +10,9 @@ export default function PublicLayout() {
{/* Header */} {/* Header */}
<header className="relative z-10 w-full py-6 px-4"> <header className="relative z-10 w-full py-6 px-4">
<div className="max-w-md mx-auto"> <div className="max-w-md mx-auto">
<Link to="/" className="flex items-center gap-2 justify-center"> <Link to="/" className="flex items-center gap-2.5 justify-center">
<div className="w-9 h-9 rounded-lg bg-primary flex items-center justify-center"> <GatehouseLogo size="md" />
<Shield className="w-5 h-5 text-primary-foreground" /> <span className="text-xl font-semibold text-foreground tracking-tight">Gatehouse</span>
</div>
<span className="text-xl font-semibold text-foreground tracking-tight">Authy2</span>
</Link> </Link>
</div> </div>
</header> </header>
@@ -30,7 +28,7 @@ export default function PublicLayout() {
<footer className="relative z-10 py-6 px-4"> <footer className="relative z-10 py-6 px-4">
<div className="max-w-md mx-auto text-center"> <div className="max-w-md mx-auto text-center">
<p className="text-sm text-muted-foreground"> <p className="text-sm text-muted-foreground">
© {new Date().getFullYear()} Authy2. Secure identity management. © {new Date().getFullYear()} Gatehouse. Identity & Access.
</p> </p>
</div> </div>
</footer> </footer>
+3 -4
View File
@@ -10,6 +10,7 @@ import {
FileText, FileText,
Key, Key,
} from "lucide-react"; } from "lucide-react";
import { GatehouseLogo } from "@/components/branding/GatehouseLogo";
import { NavLink } from "@/components/NavLink"; import { NavLink } from "@/components/NavLink";
import { import {
Sidebar, Sidebar,
@@ -64,12 +65,10 @@ export function AppSidebar() {
{/* Logo */} {/* Logo */}
<SidebarHeader className="p-4 border-b border-sidebar-border"> <SidebarHeader className="p-4 border-b border-sidebar-border">
<div className="flex items-center gap-3"> <div className="flex items-center gap-3">
<div className="w-8 h-8 rounded-lg bg-sidebar-primary flex items-center justify-center flex-shrink-0"> <GatehouseLogo size="sm" variant="light" />
<Shield className="w-4 h-4 text-sidebar-primary-foreground" />
</div>
{!collapsed && ( {!collapsed && (
<span className="text-lg font-semibold text-sidebar-foreground tracking-tight"> <span className="text-lg font-semibold text-sidebar-foreground tracking-tight">
Authy2 Gatehouse
</span> </span>
)} )}
</div> </div>
+2 -1
View File
@@ -2,7 +2,8 @@
@tailwind components; @tailwind components;
@tailwind utilities; @tailwind utilities;
/* Authy2 Design System - Enterprise Authentication Platform /* Gatehouse Design System - Enterprise Identity & Access Platform
Authoritative, infrastructure-grade aesthetic with slate/charcoal/muted blue palette
Colors are HSL for theming flexibility Colors are HSL for theming flexibility
*/ */
+1 -1
View File
@@ -131,7 +131,7 @@ export default function RegisterPage() {
Create your account Create your account
</h1> </h1>
<p className="text-muted-foreground mt-2"> <p className="text-muted-foreground mt-2">
Get started with Authy2 in seconds Get started with Gatehouse in seconds
</p> </p>
</div> </div>
+2 -2
View File
@@ -61,7 +61,7 @@ export default function OIDCClientsPage() {
<div> <div>
<h1 className="page-title">OIDC Clients</h1> <h1 className="page-title">OIDC Clients</h1>
<p className="page-description"> <p className="page-description">
Manage applications that authenticate via Authy2 Manage applications that authenticate via Gatehouse
</p> </p>
</div> </div>
<Dialog open={isCreateOpen} onOpenChange={setIsCreateOpen}> <Dialog open={isCreateOpen} onOpenChange={setIsCreateOpen}>
@@ -75,7 +75,7 @@ export default function OIDCClientsPage() {
<DialogHeader> <DialogHeader>
<DialogTitle>Create OIDC Client</DialogTitle> <DialogTitle>Create OIDC Client</DialogTitle>
<DialogDescription> <DialogDescription>
Register a new application to authenticate via Authy2 Register a new application to authenticate via Gatehouse
</DialogDescription> </DialogDescription>
</DialogHeader> </DialogHeader>
<div className="space-y-4 py-4"> <div className="space-y-4 py-4">
+1 -1
View File
@@ -74,7 +74,7 @@ export default function LinkedAccountsPage() {
<Alert className="mb-6"> <Alert className="mb-6">
<AlertCircle className="w-4 h-4" /> <AlertCircle className="w-4 h-4" />
<AlertDescription> <AlertDescription>
Linked accounts can only be used to sign in to an existing Authy2 account. Linked accounts can only be used to sign in to an existing Gatehouse account.
They cannot be used to create new accounts. They cannot be used to create new accounts.
</AlertDescription> </AlertDescription>
</Alert> </Alert>