diff --git a/client/App.tsx b/client/App.tsx index 638243a5..271226b5 100644 --- a/client/App.tsx +++ b/client/App.tsx @@ -53,7 +53,10 @@ const App = () => ( } /> } /> } /> - } /> + } + /> } /> = ({ user.id, updates, ); - setProfile((prev) => ({ ...(prev || {} as any), ...(updatedProfile || {} as any), ...updates } as any)); + setProfile( + (prev) => + ({ + ...(prev || ({} as any)), + ...(updatedProfile || ({} as any)), + ...updates, + }) as any, + ); aethexToast.success({ title: "Profile updated", description: "Your profile has been updated successfully", }); } catch (error: any) { - setProfile((prev) => ({ ...(prev || {} as any), ...updates } as any)); + setProfile((prev) => ({ ...(prev || ({} as any)), ...updates }) as any); aethexToast.error({ title: "Update failed", description: error.message, diff --git a/client/lib/aethex-database-adapter.ts b/client/lib/aethex-database-adapter.ts index 5ac1f5d4..b720c63e 100644 --- a/client/lib/aethex-database-adapter.ts +++ b/client/lib/aethex-database-adapter.ts @@ -81,13 +81,17 @@ export const aethexUserService = { // If table missing, fall back to mock for local dev only if (isTableMissing(error)) { const mock = await mockAuth.getUserProfile(user.id as any); - if (mock) return { ...(mock as any), email: user.email } as AethexUserProfile; - const created = await mockAuth.updateProfile(user.id as any, { - username: user.email?.split("@")[0] || "user", - email: user.email || "", - role: "member", - onboarded: true, - } as any); + if (mock) + return { ...(mock as any), email: user.email } as AethexUserProfile; + const created = await mockAuth.updateProfile( + user.id as any, + { + username: user.email?.split("@")[0] || "user", + email: user.email || "", + role: "member", + onboarded: true, + } as any, + ); return { ...(created as any), email: user.email } as AethexUserProfile; } // If no row, create initial DB profile instead of mock @@ -132,13 +136,19 @@ export const aethexUserService = { if (error) { if (isTableMissing(error)) { - const mock = await mockAuth.updateProfile(userId as any, updates as any); + const mock = await mockAuth.updateProfile( + userId as any, + updates as any, + ); return mock as unknown as AethexUserProfile; } if ((error as any)?.code === "PGRST116") { const { data: upserted, error: upsertError } = await supabase .from("user_profiles") - .upsert({ id: userId, user_type: "community_member", ...updates } as any, { onConflict: "id" }) + .upsert( + { id: userId, user_type: "community_member", ...updates } as any, + { onConflict: "id" }, + ) .select() .single(); if (upsertError) throw upsertError; diff --git a/client/pages/About.tsx b/client/pages/About.tsx index adbc1783..f79cb420 100644 --- a/client/pages/About.tsx +++ b/client/pages/About.tsx @@ -1,20 +1,59 @@ import Layout from "@/components/Layout"; -import { Card, CardContent, CardHeader, CardTitle, CardDescription } from "@/components/ui/card"; +import { + Card, + CardContent, + CardHeader, + CardTitle, + CardDescription, +} from "@/components/ui/card"; import { Badge } from "@/components/ui/badge"; import { Button } from "@/components/ui/button"; import { Rocket, Cpu, Users, Shield, Zap, GitBranch } from "lucide-react"; export default function About() { const values = [ - { icon: , title: "Integrity", desc: "Transparent processes, honest communication, dependable delivery." }, - { icon: , title: "Excellence", desc: "Relentless attention to quality, performance, and user experience." }, - { icon: , title: "Partnership", desc: "We win with our customers, not at their expense." }, + { + icon: , + title: "Integrity", + desc: "Transparent processes, honest communication, dependable delivery.", + }, + { + icon: , + title: "Excellence", + desc: "Relentless attention to quality, performance, and user experience.", + }, + { + icon: , + title: "Partnership", + desc: "We win with our customers, not at their expense.", + }, ]; const capabilities = [ - { title: "Product Engineering", points: ["Web & Mobile Apps", "Realtime & AI Systems", "3D & Game Experiences"] }, - { title: "Platform & Infra", points: ["Cloud-native Architecture", "DevOps & Observability", "Security & Compliance"] }, - { title: "Advisory & Enablement", points: ["Technical Strategy", "Codebase Modernization", "Team Upskilling"] }, + { + title: "Product Engineering", + points: [ + "Web & Mobile Apps", + "Realtime & AI Systems", + "3D & Game Experiences", + ], + }, + { + title: "Platform & Infra", + points: [ + "Cloud-native Architecture", + "DevOps & Observability", + "Security & Compliance", + ], + }, + { + title: "Advisory & Enablement", + points: [ + "Technical Strategy", + "Codebase Modernization", + "Team Upskilling", + ], + }, ]; const milestones = [ @@ -30,9 +69,13 @@ export default function About() {
-

About AeThex

+

+ About AeThex +

- We craft reliable, scalable software—shipping fast without compromising quality. From prototypes to global platforms, we partner end-to-end: strategy, design, engineering, and growth. + We craft reliable, scalable software—shipping fast without + compromising quality. From prototypes to global platforms, we + partner end-to-end: strategy, design, engineering, and growth.

TypeScript @@ -42,21 +85,31 @@ export default function About() { Edge
- Mission - Turn bold ideas into useful, loved software. + + Mission + + + Turn bold ideas into useful, loved software. + {capabilities.map((c) => (
{c.title}
    - {c.points.map((p) => (
  • {p}
  • ))} + {c.points.map((p) => ( +
  • {p}
  • + ))}
))} @@ -66,10 +119,17 @@ export default function About() {
{milestones.map((m) => ( - + -
{m.kpi}
-
{m.label}
+
+ {m.kpi} +
+
+ {m.label} +
))} @@ -77,13 +137,23 @@ export default function About() { - Our Approach - Opinionated engineering, measurable outcomes. + + Our Approach + + + Opinionated engineering, measurable outcomes. + {values.map((v) => ( -
-
{v.icon}{v.title}
+
+
+ {v.icon} + {v.title} +

{v.desc}

))} @@ -92,22 +162,32 @@ export default function About() { - Timeline - Highlights from recent builds and launches. + + Timeline + + + Highlights from recent builds and launches. +
2024 • Network + Dashboard
-
Shipped a creator-centric dashboard and social graph foundations.
+
+ Shipped a creator-centric dashboard and social graph + foundations. +
2025 • Realtime Feed
-
Vertical feed with follow, reactions, and frictionless profile onboarding.
+
+ Vertical feed with follow, reactions, and frictionless + profile onboarding. +
diff --git a/client/pages/Contact.tsx b/client/pages/Contact.tsx index 810d026e..214621f1 100644 --- a/client/pages/Contact.tsx +++ b/client/pages/Contact.tsx @@ -1,5 +1,11 @@ import Layout from "@/components/Layout"; -import { Card, CardContent, CardHeader, CardTitle, CardDescription } from "@/components/ui/card"; +import { + Card, + CardContent, + CardHeader, + CardTitle, + CardDescription, +} from "@/components/ui/card"; import { Button } from "@/components/ui/button"; import { Input } from "@/components/ui/input"; import { Textarea } from "@/components/ui/textarea"; @@ -17,16 +23,27 @@ export default function Contact() { const submit = async (e: React.FormEvent) => { e.preventDefault(); if (!name.trim() || !email.trim() || !message.trim()) { - aethexToast.error({ title: "Missing info", description: "Please fill out all fields." }); + aethexToast.error({ + title: "Missing info", + description: "Please fill out all fields.", + }); return; } setIsSending(true); try { // In production, send to your backend or a function endpoint - aethexToast.success({ title: "Message sent", description: "We’ll get back to you within 1–2 business days." }); - setName(""); setEmail(""); setMessage(""); + aethexToast.success({ + title: "Message sent", + description: "We’ll get back to you within 1–2 business days.", + }); + setName(""); + setEmail(""); + setMessage(""); } catch (err: any) { - aethexToast.error({ title: "Failed to send", description: err?.message || "Try again." }); + aethexToast.error({ + title: "Failed to send", + description: err?.message || "Try again.", + }); } finally { setIsSending(false); } @@ -38,13 +55,24 @@ export default function Contact() {
-

Contact Us

-

Have a project or question? We typically respond within 1–2 business days.

+

+ Contact Us +

+

+ Have a project or question? We typically respond within 1–2 + business days. +

-
support@aethex.biz
-
(530) 784-1287
-
Community hub
+
+ support@aethex.biz +
+
+ (530) 784-1287 +
+
+ Community hub +
@@ -52,24 +80,49 @@ export default function Contact() { Send a message - Tell us about your goals and timeline. + + Tell us about your goals and timeline. +
- setName(e.target.value)} placeholder="Your name" /> + setName(e.target.value)} + placeholder="Your name" + />
- setEmail(e.target.value)} placeholder="you@example.com" /> + setEmail(e.target.value)} + placeholder="you@example.com" + />
-