Prettier format pending files

This commit is contained in:
Builder.io 2025-10-18 02:16:30 +00:00
parent a2b99554be
commit 3e47387639
7 changed files with 419 additions and 266 deletions

View file

@ -76,7 +76,10 @@ export default function CodeLayout({ children, hideFooter }: LayoutProps) {
<header className="sticky top-0 z-50 border-b border-border/40 bg-background/95 backdrop-blur supports-[backdrop-filter]:bg-background/60 animate-slide-down"> <header className="sticky top-0 z-50 border-b border-border/40 bg-background/95 backdrop-blur supports-[backdrop-filter]:bg-background/60 animate-slide-down">
<div className="container mx-auto flex min-h-16 h-auto items-center justify-between px-4 py-2 gap-2 min-w-0"> <div className="container mx-auto flex min-h-16 h-auto items-center justify-between px-4 py-2 gap-2 min-w-0">
{/* Logo */} {/* Logo */}
<Link to="/" className="flex items-center space-x-3 hover-glow group shrink-0"> <Link
to="/"
className="flex items-center space-x-3 hover-glow group shrink-0"
>
<div className="flex items-center space-x-3"> <div className="flex items-center space-x-3">
<img <img
src="https://cdn.builder.io/api/v1/image/assets%2Ffc53d607e21d497595ac97e0637001a1%2F3979ec9a8a28471d900a80e94e2c45fe?format=webp&width=800" src="https://cdn.builder.io/api/v1/image/assets%2Ffc53d607e21d497595ac97e0637001a1%2F3979ec9a8a28471d900a80e94e2c45fe?format=webp&width=800"
@ -375,226 +378,226 @@ export default function CodeLayout({ children, hideFooter }: LayoutProps) {
<main className="flex-1 w-full overflow-x-hidden">{children}</main> <main className="flex-1 w-full overflow-x-hidden">{children}</main>
{!hideFooter && ( {!hideFooter && (
<footer className="border-t border-border/40 bg-background/95 backdrop-blur supports-[backdrop-filter]:bg-background/60 animate-slide-up"> <footer className="border-t border-border/40 bg-background/95 backdrop-blur supports-[backdrop-filter]:bg-background/60 animate-slide-up">
<div className="container mx-auto px-4 py-12"> <div className="container mx-auto px-4 py-12">
<div className="grid grid-cols-1 md:grid-cols-4 gap-8"> <div className="grid grid-cols-1 md:grid-cols-4 gap-8">
{/* Company Info */} {/* Company Info */}
<div className="space-y-4 animate-fade-in"> <div className="space-y-4 animate-fade-in">
<div className="flex items-center space-x-3 group"> <div className="flex items-center space-x-3 group">
<img <img
src="https://cdn.builder.io/api/v1/image/assets%2Ffc53d607e21d497595ac97e0637001a1%2F3979ec9a8a28471d900a80e94e2c45fe?format=webp&width=800" src="https://cdn.builder.io/api/v1/image/assets%2Ffc53d607e21d497595ac97e0637001a1%2F3979ec9a8a28471d900a80e94e2c45fe?format=webp&width=800"
alt="AeThex Logo" alt="AeThex Logo"
className="h-6 w-6 transition-all duration-300 group-hover:scale-110 group-hover:rotate-6" className="h-6 w-6 transition-all duration-300 group-hover:scale-110 group-hover:rotate-6"
/> />
<span className="font-bold text-gradient group-hover:animate-pulse"> <span className="font-bold text-gradient group-hover:animate-pulse">
AeThex AeThex
</span> </span>
</div>
<p className="text-sm text-muted-foreground hover:text-muted-foreground/80 transition-colors">
Pushing the boundaries of technology through cutting-edge
research and breakthrough discoveries.
</p>
<div className="space-y-2 text-sm text-muted-foreground">
<p className="flex items-center gap-2">
<span className="h-1.5 w-1.5 rounded-full bg-aethex-400/70" />
Queen Creek, Arizona
</p>
<p className="flex items-center gap-2">
<span className="h-1.5 w-1.5 rounded-full bg-aethex-400/70" />
<a
href="mailto:info@aethex.biz"
className="hover:text-aethex-400 transition-colors"
>
info@aethex.biz
</a>
</p>
<p className="flex items-center gap-2">
<span className="h-1.5 w-1.5 rounded-full bg-aethex-400/70" />
(346) 556-7100
</p>
</div>
</div> </div>
<p className="text-sm text-muted-foreground hover:text-muted-foreground/80 transition-colors">
Pushing the boundaries of technology through cutting-edge {/* Services */}
research and breakthrough discoveries. <div
className="space-y-4 animate-slide-up"
style={{ animationDelay: "0.1s" }}
>
<h3 className="font-semibold text-foreground hover:text-gradient transition-all duration-300">
Services
</h3>
<ul className="space-y-2 text-sm text-muted-foreground">
<li>
<Link
to="/game-development"
onClick={scrollToTop}
className="hover:text-aethex-400 transition-all duration-300 hover:translate-x-1 inline-block"
>
Game Development
</Link>
</li>
<li>
<Link
to="/consulting"
onClick={scrollToTop}
className="hover:text-aethex-400 transition-all duration-300 hover:translate-x-1 inline-block"
>
Development Consulting
</Link>
</li>
<li>
<Link
to="/mentorship"
onClick={scrollToTop}
className="hover:text-aethex-400 transition-all duration-300 hover:translate-x-1 inline-block"
>
Mentorship Programs
</Link>
</li>
<li>
<Link
to="/research"
onClick={scrollToTop}
className="hover:text-aethex-400 transition-all duration-300 hover:translate-x-1 inline-block"
>
Research & Labs
</Link>
</li>
</ul>
</div>
{/* Company */}
<div
className="space-y-4 animate-slide-up"
style={{ animationDelay: "0.2s" }}
>
<h3 className="font-semibold text-foreground hover:text-gradient transition-all duration-300">
Company
</h3>
<ul className="space-y-2 text-sm text-muted-foreground">
<li>
<Link
to="/about"
onClick={scrollToTop}
className="hover:text-aethex-400 transition-all duration-300 hover:translate-x-1 inline-block"
>
About AeThex
</Link>
</li>
<li>
<Link
to="/opportunities"
onClick={scrollToTop}
className="hover:text-aethex-400 transition-all duration-300 hover:translate-x-1 inline-block"
>
Opportunities
</Link>
</li>
<li>
<Link
to="/community"
onClick={scrollToTop}
className="hover:text-aethex-400 transition-all duration-300 hover:translate-x-1 inline-block"
>
Community Hub
</Link>
</li>
<li>
<Link
to="/changelog"
onClick={scrollToTop}
className="hover:text-aethex-400 transition-all duration-300 hover:translate-x-1 inline-block"
>
Changelog
</Link>
</li>
<li>
<Link
to="/status"
onClick={scrollToTop}
className="hover:text-aethex-400 transition-all duration-300 hover:translate-x-1 inline-block"
>
System Status
</Link>
</li>
</ul>
</div>
{/* Resources */}
<div
className="space-y-4 animate-slide-up"
style={{ animationDelay: "0.3s" }}
>
<h3 className="font-semibold text-foreground hover:text-gradient transition-all duration-300">
Resources
</h3>
<ul className="space-y-2 text-sm text-muted-foreground">
<li>
<Link
to="/docs"
onClick={scrollToTop}
className="hover:text-aethex-400 transition-all duration-300 hover:translate-x-1 inline-block"
>
Documentation
</Link>
</li>
<li>
<Link
to="/tutorials"
onClick={scrollToTop}
className="hover:text-aethex-400 transition-all duration-300 hover:translate-x-1 inline-block"
>
Tutorials
</Link>
</li>
<li>
<Link
to="/blog"
onClick={scrollToTop}
className="hover:text-aethex-400 transition-all duration-300 hover:translate-x-1 inline-block"
>
Blog
</Link>
</li>
<li>
<Link
to="/support"
onClick={scrollToTop}
className="hover:text-aethex-400 transition-all duration-300 hover:translate-x-1 inline-block"
>
Support Center
</Link>
</li>
</ul>
</div>
</div>
<div
className="mt-8 pt-8 border-t border-border/40 flex flex-col sm:flex-row justify-between items-center animate-fade-in"
style={{ animationDelay: "0.4s" }}
>
<p className="text-xs text-muted-foreground hover:text-aethex-400 transition-colors">
© 2024 AeThex Corporation. All rights reserved.
</p> </p>
<div className="space-y-2 text-sm text-muted-foreground"> <div className="flex items-center space-x-4 mt-4 sm:mt-0">
<p className="flex items-center gap-2"> <Link
<span className="h-1.5 w-1.5 rounded-full bg-aethex-400/70" /> to="/privacy"
Queen Creek, Arizona onClick={scrollToTop}
</p> className="text-xs text-muted-foreground hover:text-aethex-400 transition-all duration-300 hover:scale-105"
<p className="flex items-center gap-2"> >
<span className="h-1.5 w-1.5 rounded-full bg-aethex-400/70" /> Privacy Policy
<a </Link>
href="mailto:info@aethex.biz" <Link
className="hover:text-aethex-400 transition-colors" to="/terms"
> onClick={scrollToTop}
info@aethex.biz className="text-xs text-muted-foreground hover:text-aethex-400 transition-all duration-300 hover:scale-105"
</a> >
</p> Terms of Service
<p className="flex items-center gap-2"> </Link>
<span className="h-1.5 w-1.5 rounded-full bg-aethex-400/70" />
(346) 556-7100
</p>
</div> </div>
</div> </div>
{/* Services */}
<div
className="space-y-4 animate-slide-up"
style={{ animationDelay: "0.1s" }}
>
<h3 className="font-semibold text-foreground hover:text-gradient transition-all duration-300">
Services
</h3>
<ul className="space-y-2 text-sm text-muted-foreground">
<li>
<Link
to="/game-development"
onClick={scrollToTop}
className="hover:text-aethex-400 transition-all duration-300 hover:translate-x-1 inline-block"
>
Game Development
</Link>
</li>
<li>
<Link
to="/consulting"
onClick={scrollToTop}
className="hover:text-aethex-400 transition-all duration-300 hover:translate-x-1 inline-block"
>
Development Consulting
</Link>
</li>
<li>
<Link
to="/mentorship"
onClick={scrollToTop}
className="hover:text-aethex-400 transition-all duration-300 hover:translate-x-1 inline-block"
>
Mentorship Programs
</Link>
</li>
<li>
<Link
to="/research"
onClick={scrollToTop}
className="hover:text-aethex-400 transition-all duration-300 hover:translate-x-1 inline-block"
>
Research & Labs
</Link>
</li>
</ul>
</div>
{/* Company */}
<div
className="space-y-4 animate-slide-up"
style={{ animationDelay: "0.2s" }}
>
<h3 className="font-semibold text-foreground hover:text-gradient transition-all duration-300">
Company
</h3>
<ul className="space-y-2 text-sm text-muted-foreground">
<li>
<Link
to="/about"
onClick={scrollToTop}
className="hover:text-aethex-400 transition-all duration-300 hover:translate-x-1 inline-block"
>
About AeThex
</Link>
</li>
<li>
<Link
to="/opportunities"
onClick={scrollToTop}
className="hover:text-aethex-400 transition-all duration-300 hover:translate-x-1 inline-block"
>
Opportunities
</Link>
</li>
<li>
<Link
to="/community"
onClick={scrollToTop}
className="hover:text-aethex-400 transition-all duration-300 hover:translate-x-1 inline-block"
>
Community Hub
</Link>
</li>
<li>
<Link
to="/changelog"
onClick={scrollToTop}
className="hover:text-aethex-400 transition-all duration-300 hover:translate-x-1 inline-block"
>
Changelog
</Link>
</li>
<li>
<Link
to="/status"
onClick={scrollToTop}
className="hover:text-aethex-400 transition-all duration-300 hover:translate-x-1 inline-block"
>
System Status
</Link>
</li>
</ul>
</div>
{/* Resources */}
<div
className="space-y-4 animate-slide-up"
style={{ animationDelay: "0.3s" }}
>
<h3 className="font-semibold text-foreground hover:text-gradient transition-all duration-300">
Resources
</h3>
<ul className="space-y-2 text-sm text-muted-foreground">
<li>
<Link
to="/docs"
onClick={scrollToTop}
className="hover:text-aethex-400 transition-all duration-300 hover:translate-x-1 inline-block"
>
Documentation
</Link>
</li>
<li>
<Link
to="/tutorials"
onClick={scrollToTop}
className="hover:text-aethex-400 transition-all duration-300 hover:translate-x-1 inline-block"
>
Tutorials
</Link>
</li>
<li>
<Link
to="/blog"
onClick={scrollToTop}
className="hover:text-aethex-400 transition-all duration-300 hover:translate-x-1 inline-block"
>
Blog
</Link>
</li>
<li>
<Link
to="/support"
onClick={scrollToTop}
className="hover:text-aethex-400 transition-all duration-300 hover:translate-x-1 inline-block"
>
Support Center
</Link>
</li>
</ul>
</div>
</div> </div>
</footer>
<div
className="mt-8 pt-8 border-t border-border/40 flex flex-col sm:flex-row justify-between items-center animate-fade-in"
style={{ animationDelay: "0.4s" }}
>
<p className="text-xs text-muted-foreground hover:text-aethex-400 transition-colors">
© 2024 AeThex Corporation. All rights reserved.
</p>
<div className="flex items-center space-x-4 mt-4 sm:mt-0">
<Link
to="/privacy"
onClick={scrollToTop}
className="text-xs text-muted-foreground hover:text-aethex-400 transition-all duration-300 hover:scale-105"
>
Privacy Policy
</Link>
<Link
to="/terms"
onClick={scrollToTop}
className="text-xs text-muted-foreground hover:text-aethex-400 transition-all duration-300 hover:scale-105"
>
Terms of Service
</Link>
</div>
</div>
</div>
</footer>
)} )}
{/* Supabase Configuration Status */} {/* Supabase Configuration Status */}

View file

@ -863,7 +863,7 @@ export const AuthProvider: React.FC<{ children: React.ReactNode }> = ({
const { data, error } = await withTimeout( const { data, error } = await withTimeout(
supabase.auth.updateUser({ password: newPassword }), supabase.auth.updateUser({ password: newPassword }),
8000, 8000,
"Password update timed out" "Password update timed out",
); );
if (error) throw error; if (error) throw error;
if (data?.user) { if (data?.user) {

View file

@ -868,7 +868,9 @@ export default function Dashboard() {
onChange={async (e) => { onChange={async (e) => {
const ensureBuckets = async () => { const ensureBuckets = async () => {
try { try {
await fetch("/api/storage/ensure-buckets", { method: "POST" }); await fetch("/api/storage/ensure-buckets", {
method: "POST",
});
} catch {} } catch {}
}; };
const file = e.target.files?.[0]; const file = e.target.files?.[0];
@ -888,7 +890,10 @@ export default function Dashboard() {
let { error } = await supabase.storage let { error } = await supabase.storage
.from("avatars") .from("avatars")
.upload(path, file, { upsert: true }); .upload(path, file, { upsert: true });
if (error && /bucket/i.test(error?.message || "")) { if (
error &&
/bucket/i.test(error?.message || "")
) {
await ensureBuckets(); await ensureBuckets();
({ error } = await supabase.storage ({ error } = await supabase.storage
.from("avatars") .from("avatars")
@ -941,7 +946,9 @@ export default function Dashboard() {
onChange={async (e) => { onChange={async (e) => {
const ensureBuckets = async () => { const ensureBuckets = async () => {
try { try {
await fetch("/api/storage/ensure-buckets", { method: "POST" }); await fetch("/api/storage/ensure-buckets", {
method: "POST",
});
} catch {} } catch {}
}; };
const file = e.target.files?.[0]; const file = e.target.files?.[0];
@ -961,7 +968,10 @@ export default function Dashboard() {
let { error } = await supabase.storage let { error } = await supabase.storage
.from("banners") .from("banners")
.upload(path, file, { upsert: true }); .upload(path, file, { upsert: true });
if (error && /bucket/i.test(error?.message || "")) { if (
error &&
/bucket/i.test(error?.message || "")
) {
await ensureBuckets(); await ensureBuckets();
({ error } = await supabase.storage ({ error } = await supabase.storage
.from("banners") .from("banners")

View file

@ -8,7 +8,18 @@ import {
CardTitle, CardTitle,
} from "@/components/ui/card"; } from "@/components/ui/card";
import { Link } from "react-router-dom"; import { Link } from "react-router-dom";
import { Microscope, Sparkles, ArrowRight, Rocket, Layers, Users, BookOpen, Terminal, Shield, Compass } from "lucide-react"; import {
Microscope,
Sparkles,
ArrowRight,
Rocket,
Layers,
Users,
BookOpen,
Terminal,
Shield,
Compass,
} from "lucide-react";
import { useMemo } from "react"; import { useMemo } from "react";
export default function Explore() { export default function Explore() {
@ -153,7 +164,6 @@ export default function Explore() {
return ( return (
<Layout> <Layout>
{/* Achievements Section */} {/* Achievements Section */}
<section id="overview" className="py-16 sm:py-20 bg-background/30"> <section id="overview" className="py-16 sm:py-20 bg-background/30">
<div className="container mx-auto px-4"> <div className="container mx-auto px-4">
@ -194,8 +204,12 @@ export default function Explore() {
<section id="services" className="py-16 sm:py-20"> <section id="services" className="py-16 sm:py-20">
<div className="container mx-auto px-4"> <div className="container mx-auto px-4">
<div className="text-center mb-12"> <div className="text-center mb-12">
<h2 className="text-3xl lg:text-4xl font-bold text-gradient">Core Areas</h2> <h2 className="text-3xl lg:text-4xl font-bold text-gradient">
<p className="text-muted-foreground mt-2">Services, programs, resources, and community</p> Core Areas
</h2>
<p className="text-muted-foreground mt-2">
Services, programs, resources, and community
</p>
</div> </div>
{(() => { {(() => {
@ -221,13 +235,18 @@ export default function Explore() {
</div> </div>
)} )}
</div> </div>
<CardDescription className={`text-sm ${offering.descriptionClass}`}> <CardDescription
className={`text-sm ${offering.descriptionClass}`}
>
{offering.description} {offering.description}
</CardDescription> </CardDescription>
{offering.tags && ( {offering.tags && (
<div className="flex flex-wrap gap-2 pt-1"> <div className="flex flex-wrap gap-2 pt-1">
{offering.tags.map((t: string) => ( {offering.tags.map((t: string) => (
<span key={t} className="text-[10px] uppercase tracking-wide px-2 py-0.5 rounded border border-white/10 text-white/80"> <span
key={t}
className="text-[10px] uppercase tracking-wide px-2 py-0.5 rounded border border-white/10 text-white/80"
>
{t} {t}
</span> </span>
))} ))}
@ -236,7 +255,10 @@ export default function Explore() {
</CardHeader> </CardHeader>
<CardContent className="relative pt-2 mt-auto"> <CardContent className="relative pt-2 mt-auto">
{offering.link ? ( {offering.link ? (
<Button asChild className={`w-full ${offering.buttonClass || "bg-gradient-to-r from-aethex-500 to-neon-blue"}`}> <Button
asChild
className={`w-full ${offering.buttonClass || "bg-gradient-to-r from-aethex-500 to-neon-blue"}`}
>
<Link to={offering.link}>Learn More</Link> <Link to={offering.link}>Learn More</Link>
</Button> </Button>
) : ( ) : (
@ -248,25 +270,43 @@ export default function Explore() {
className={`w-full ${offering.actions[0].buttonClass || "border-border"}`} className={`w-full ${offering.actions[0].buttonClass || "border-border"}`}
> >
{offering.actions[0].external ? ( {offering.actions[0].external ? (
<a href={offering.actions[0].href} target="_blank" rel="noreferrer">{offering.actions[0].label}</a> <a
href={offering.actions[0].href}
target="_blank"
rel="noreferrer"
>
{offering.actions[0].label}
</a>
) : ( ) : (
<Link to={offering.actions[0].href}>{offering.actions[0].label}</Link> <Link to={offering.actions[0].href}>
{offering.actions[0].label}
</Link>
)} )}
</Button> </Button>
) : null} ) : null}
{offering.actions && offering.actions.length > 1 ? ( {offering.actions && offering.actions.length > 1 ? (
<div className="mt-2 flex flex-wrap gap-3 justify-center text-xs text-muted-foreground"> <div className="mt-2 flex flex-wrap gap-3 justify-center text-xs text-muted-foreground">
{offering.actions.slice(1).map((a: any) => ( {offering.actions.slice(1).map((a: any) =>
a.external ? ( a.external ? (
<a key={a.label} href={a.href} target="_blank" rel="noreferrer" className="hover:text-foreground/80"> <a
key={a.label}
href={a.href}
target="_blank"
rel="noreferrer"
className="hover:text-foreground/80"
>
{a.label} {a.label}
</a> </a>
) : ( ) : (
<Link key={a.label} to={a.href} className="hover:text-foreground/80"> <Link
key={a.label}
to={a.href}
className="hover:text-foreground/80"
>
{a.label} {a.label}
</Link> </Link>
) ),
))} )}
</div> </div>
) : null} ) : null}
</> </>
@ -287,20 +327,36 @@ export default function Explore() {
<div className="pointer-events-none absolute inset-0 bg-gradient-to-br from-yellow-500/10 via-transparent to-transparent" /> <div className="pointer-events-none absolute inset-0 bg-gradient-to-br from-yellow-500/10 via-transparent to-transparent" />
<CardContent className="p-8 grid grid-cols-1 md:grid-cols-2 gap-8 items-center"> <CardContent className="p-8 grid grid-cols-1 md:grid-cols-2 gap-8 items-center">
<div className="space-y-3"> <div className="space-y-3">
<div className="inline-flex items-center gap-2 rounded-full border border-yellow-400/40 px-3 py-1 text-xs uppercase tracking-widest">R&D</div> <div className="inline-flex items-center gap-2 rounded-full border border-yellow-400/40 px-3 py-1 text-xs uppercase tracking-widest">
R&D
</div>
<h3 className="text-2xl font-bold flex items-center gap-2"> <h3 className="text-2xl font-bold flex items-center gap-2">
<Microscope className="h-5 w-5 text-yellow-300" /> AeThex Labs <Microscope className="h-5 w-5 text-yellow-300" /> AeThex Labs
</h3> </h3>
<p className="text-yellow-100/80"> <p className="text-yellow-100/80">
Experimental interfaces, prototypes, and internal tooling. Enter the BlackSite to see what's next. Experimental interfaces, prototypes, and internal tooling.
Enter the BlackSite to see what's next.
</p> </p>
</div> </div>
<div className="flex flex-col sm:flex-row gap-3 justify-end"> <div className="flex flex-col sm:flex-row gap-3 justify-end">
<Button asChild className="bg-yellow-400 text-black hover:bg-yellow-300"> <Button
asChild
className="bg-yellow-400 text-black hover:bg-yellow-300"
>
<Link to="/research">Open Interface</Link> <Link to="/research">Open Interface</Link>
</Button> </Button>
<Button asChild variant="outline" className="border-yellow-400/60 text-yellow-200 hover:bg-yellow-500/10"> <Button
<a href="https://labs.aethex.biz" target="_blank" rel="noreferrer">Visit labs.aethex.biz</a> asChild
variant="outline"
className="border-yellow-400/60 text-yellow-200 hover:bg-yellow-500/10"
>
<a
href="https://labs.aethex.biz"
target="_blank"
rel="noreferrer"
>
Visit labs.aethex.biz
</a>
</Button> </Button>
</div> </div>
</CardContent> </CardContent>
@ -309,7 +365,10 @@ export default function Explore() {
</section> </section>
{/* Technology Showcase */} {/* Technology Showcase */}
<section id="technology" className="py-16 sm:py-20 relative overflow-hidden"> <section
id="technology"
className="py-16 sm:py-20 relative overflow-hidden"
>
<div className="absolute inset-0 bg-gradient-to-r from-aethex-900/20 via-transparent to-neon-blue/20" /> <div className="absolute inset-0 bg-gradient-to-r from-aethex-900/20 via-transparent to-neon-blue/20" />
<div className="container mx-auto px-4 relative z-10"> <div className="container mx-auto px-4 relative z-10">
@ -325,12 +384,48 @@ export default function Explore() {
<div className="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-6 animate-fade-in"> <div className="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-6 animate-fade-in">
{[ {[
{ name: "Game Studios", status: "Active", color: "from-purple-500 to-blue-600", icon: Rocket, desc: "Production pipelines, content tooling, and live ops." }, {
{ name: "Design Systems", status: "Evolving", color: "from-blue-500 to-green-600", icon: Layers, desc: "Unified components and patterns across apps." }, name: "Game Studios",
{ name: "Creator Tools", status: "Live", color: "from-green-500 to-yellow-600", icon: Terminal, desc: "CLI, automation, and workflow accelerators." }, status: "Active",
{ name: "Launch Ops", status: "Scaling", color: "from-yellow-500 to-red-600", icon: Shield, desc: "Release orchestration, quality gates, and metrics." }, color: "from-purple-500 to-blue-600",
{ name: "Content Pipeline", status: "In Progress", color: "from-red-500 to-purple-600", icon: BookOpen, desc: "Publishing, assets, and distribution systems." }, icon: Rocket,
{ name: "Edge Experiences", status: "Deployed", color: "from-purple-500 to-pink-600", icon: Users, desc: "Low-latency interfaces on the edge." }, desc: "Production pipelines, content tooling, and live ops.",
},
{
name: "Design Systems",
status: "Evolving",
color: "from-blue-500 to-green-600",
icon: Layers,
desc: "Unified components and patterns across apps.",
},
{
name: "Creator Tools",
status: "Live",
color: "from-green-500 to-yellow-600",
icon: Terminal,
desc: "CLI, automation, and workflow accelerators.",
},
{
name: "Launch Ops",
status: "Scaling",
color: "from-yellow-500 to-red-600",
icon: Shield,
desc: "Release orchestration, quality gates, and metrics.",
},
{
name: "Content Pipeline",
status: "In Progress",
color: "from-red-500 to-purple-600",
icon: BookOpen,
desc: "Publishing, assets, and distribution systems.",
},
{
name: "Edge Experiences",
status: "Deployed",
color: "from-purple-500 to-pink-600",
icon: Users,
desc: "Low-latency interfaces on the edge.",
},
].map((tech, index) => ( ].map((tech, index) => (
<Card <Card
key={index} key={index}
@ -340,16 +435,24 @@ export default function Explore() {
<CardContent className="p-6 space-y-3"> <CardContent className="p-6 space-y-3">
<div className="flex items-center justify-between"> <div className="flex items-center justify-between">
<div className="flex items-center gap-3"> <div className="flex items-center gap-3">
<div className={`w-9 h-9 rounded-md bg-gradient-to-r ${tech.color} grid place-items-center`}> <div
className={`w-9 h-9 rounded-md bg-gradient-to-r ${tech.color} grid place-items-center`}
>
{/* @ts-ignore */} {/* @ts-ignore */}
<tech.icon className="h-4 w-4 text-white" /> <tech.icon className="h-4 w-4 text-white" />
</div> </div>
<h3 className="font-semibold text-foreground">{tech.name}</h3> <h3 className="font-semibold text-foreground">
{tech.name}
</h3>
</div> </div>
<span className="text-xs px-2 py-0.5 rounded-full border border-white/10 text-muted-foreground">{tech.status}</span> <span className="text-xs px-2 py-0.5 rounded-full border border-white/10 text-muted-foreground">
{tech.status}
</span>
</div> </div>
<p className="text-sm text-muted-foreground">{tech.desc}</p> <p className="text-sm text-muted-foreground">{tech.desc}</p>
<div className={`mt-1 h-[2px] w-16 rounded-full bg-gradient-to-r ${tech.color} opacity-60 group-hover:opacity-100 transition-opacity`} /> <div
className={`mt-1 h-[2px] w-16 rounded-full bg-gradient-to-r ${tech.color} opacity-60 group-hover:opacity-100 transition-opacity`}
/>
</CardContent> </CardContent>
</Card> </Card>
))} ))}

View file

@ -303,7 +303,8 @@ export default function Index() {
Crafting Digital Realities Crafting Digital Realities
</h2> </h2>
<p className="text-lg text-muted-foreground max-w-2xl mx-auto animate-slide-up"> <p className="text-lg text-muted-foreground max-w-2xl mx-auto animate-slide-up">
Where vision meets execution. We craft experiences through design, development, and community. Where vision meets execution. We craft experiences through
design, development, and community.
</p> </p>
</div> </div>
</div> </div>
@ -325,14 +326,22 @@ export default function Index() {
> >
<div className="pointer-events-none absolute inset-0 opacity-0 group-hover:opacity-100 transition-opacity duration-500 bg-gradient-to-br from-white/6 via-transparent to-white/0" /> <div className="pointer-events-none absolute inset-0 opacity-0 group-hover:opacity-100 transition-opacity duration-500 bg-gradient-to-br from-white/6 via-transparent to-white/0" />
<CardContent className="p-5 sm:p-6 flex flex-col items-center text-center gap-3"> <CardContent className="p-5 sm:p-6 flex flex-col items-center text-center gap-3">
<div className={`relative w-12 h-12 rounded-lg bg-gradient-to-r ${feature.color} grid place-items-center shadow-inner`}> <div
className={`relative w-12 h-12 rounded-lg bg-gradient-to-r ${feature.color} grid place-items-center shadow-inner`}
>
<div className="absolute -inset-[2px] rounded-xl bg-gradient-to-r from-white/20 to-transparent blur-md opacity-0 group-hover:opacity-100 transition-opacity" /> <div className="absolute -inset-[2px] rounded-xl bg-gradient-to-r from-white/20 to-transparent blur-md opacity-0 group-hover:opacity-100 transition-opacity" />
<Icon className="h-6 w-6 text-white drop-shadow" /> <Icon className="h-6 w-6 text-white drop-shadow" />
</div> </div>
<h3 className="font-semibold text-sm tracking-wide">{feature.title}</h3> <h3 className="font-semibold text-sm tracking-wide">
{feature.title}
</h3>
<div className="flex flex-wrap justify-center gap-2 min-h-[24px]"> <div className="flex flex-wrap justify-center gap-2 min-h-[24px]">
{(feature.tags || []).slice(0, 2).map((tag, i) => ( {(feature.tags || []).slice(0, 2).map((tag, i) => (
<Badge key={i} variant="outline" className="border-white/10 text-xs text-foreground/80"> <Badge
key={i}
variant="outline"
className="border-white/10 text-xs text-foreground/80"
>
{tag} {tag}
</Badge> </Badge>
))} ))}
@ -340,10 +349,15 @@ export default function Index() {
<p className="text-xs text-muted-foreground line-clamp-2"> <p className="text-xs text-muted-foreground line-clamp-2">
{feature.description} {feature.description}
</p> </p>
<div className={`mt-1 h-[2px] w-16 rounded-full bg-gradient-to-r ${feature.color} opacity-60 group-hover:opacity-100 transition-opacity`} /> <div
className={`mt-1 h-[2px] w-16 rounded-full bg-gradient-to-r ${feature.color} opacity-60 group-hover:opacity-100 transition-opacity`}
/>
{feature.link ? ( {feature.link ? (
<div className="pt-1"> <div className="pt-1">
<Link to={feature.link} className="text-xs inline-flex items-center gap-1 text-aethex-300 hover:text-aethex-200"> <Link
to={feature.link}
className="text-xs inline-flex items-center gap-1 text-aethex-300 hover:text-aethex-200"
>
Explore Explore
<ArrowRight className="h-3 w-3" /> <ArrowRight className="h-3 w-3" />
</Link> </Link>
@ -372,14 +386,22 @@ export default function Index() {
> >
<div className="pointer-events-none absolute inset-0 opacity-0 group-hover:opacity-100 transition-opacity duration-500 bg-gradient-to-br from-white/6 via-transparent to-white/0" /> <div className="pointer-events-none absolute inset-0 opacity-0 group-hover:opacity-100 transition-opacity duration-500 bg-gradient-to-br from-white/6 via-transparent to-white/0" />
<CardContent className="p-5 sm:p-6 flex flex-col items-center text-center gap-3"> <CardContent className="p-5 sm:p-6 flex flex-col items-center text-center gap-3">
<div className={`relative w-12 h-12 rounded-lg bg-gradient-to-r ${feature.color} grid place-items-center shadow-inner`}> <div
className={`relative w-12 h-12 rounded-lg bg-gradient-to-r ${feature.color} grid place-items-center shadow-inner`}
>
<div className="absolute -inset-[2px] rounded-xl bg-gradient-to-r from-white/20 to-transparent blur-md opacity-0 group-hover:opacity-100 transition-opacity" /> <div className="absolute -inset-[2px] rounded-xl bg-gradient-to-r from-white/20 to-transparent blur-md opacity-0 group-hover:opacity-100 transition-opacity" />
<Icon className="h-6 w-6 text-white drop-shadow" /> <Icon className="h-6 w-6 text-white drop-shadow" />
</div> </div>
<h3 className="font-semibold text-sm tracking-wide">{feature.title}</h3> <h3 className="font-semibold text-sm tracking-wide">
{feature.title}
</h3>
<div className="flex flex-wrap justify-center gap-2 min-h-[24px]"> <div className="flex flex-wrap justify-center gap-2 min-h-[24px]">
{(feature.tags || []).slice(0, 2).map((tag, i) => ( {(feature.tags || []).slice(0, 2).map((tag, i) => (
<Badge key={i} variant="outline" className="border-white/10 text-xs text-foreground/80"> <Badge
key={i}
variant="outline"
className="border-white/10 text-xs text-foreground/80"
>
{tag} {tag}
</Badge> </Badge>
))} ))}
@ -387,10 +409,15 @@ export default function Index() {
<p className="text-xs text-muted-foreground line-clamp-2"> <p className="text-xs text-muted-foreground line-clamp-2">
{feature.description} {feature.description}
</p> </p>
<div className={`mt-1 h-[2px] w-16 rounded-full bg-gradient-to-r ${feature.color} opacity-60 group-hover:opacity-100 transition-opacity`} /> <div
className={`mt-1 h-[2px] w-16 rounded-full bg-gradient-to-r ${feature.color} opacity-60 group-hover:opacity-100 transition-opacity`}
/>
{feature.link ? ( {feature.link ? (
<div className="pt-1"> <div className="pt-1">
<Link to={feature.link} className="text-xs inline-flex items-center gap-1 text-aethex-300 hover:text-aethex-200"> <Link
to={feature.link}
className="text-xs inline-flex items-center gap-1 text-aethex-300 hover:text-aethex-200"
>
Explore Explore
<ArrowRight className="h-3 w-3" /> <ArrowRight className="h-3 w-3" />
</Link> </Link>

View file

@ -49,7 +49,10 @@ export default function ResetPassword() {
const access_token = params.get("access_token"); const access_token = params.get("access_token");
const refresh_token = params.get("refresh_token"); const refresh_token = params.get("refresh_token");
if (access_token && refresh_token) { if (access_token && refresh_token) {
const { error: setErr } = await supabase.auth.setSession({ access_token, refresh_token }); const { error: setErr } = await supabase.auth.setSession({
access_token,
refresh_token,
});
if (setErr) { if (setErr) {
setLinkError("Reset link is invalid or has expired."); setLinkError("Reset link is invalid or has expired.");
return; return;

View file

@ -203,19 +203,26 @@ export function createServer() {
// Storage administration endpoints (service role) // Storage administration endpoints (service role)
app.post("/api/storage/ensure-buckets", async (_req, res) => { app.post("/api/storage/ensure-buckets", async (_req, res) => {
if (!adminSupabase) { if (!adminSupabase) {
return res.status(500).json({ error: "Supabase admin client unavailable" }); return res
.status(500)
.json({ error: "Supabase admin client unavailable" });
} }
try { try {
const targets = [ const targets = [
{ name: "avatars", public: true }, { name: "avatars", public: true },
{ name: "banners", public: true }, { name: "banners", public: true },
]; ];
const { data: buckets } = await (adminSupabase as any).storage.listBuckets(); const { data: buckets } = await (
adminSupabase as any
).storage.listBuckets();
const existing = new Set((buckets || []).map((b: any) => b.name)); const existing = new Set((buckets || []).map((b: any) => b.name));
const created: string[] = []; const created: string[] = [];
for (const t of targets) { for (const t of targets) {
if (!existing.has(t.name)) { if (!existing.has(t.name)) {
const { error } = await (adminSupabase as any).storage.createBucket(t.name, { public: t.public }); const { error } = await (adminSupabase as any).storage.createBucket(
t.name,
{ public: t.public },
);
if (error) { if (error) {
console.warn("Failed to create bucket", t.name, error); console.warn("Failed to create bucket", t.name, error);
} else { } else {