diff --git a/frontend/public/activity.png b/frontend/public/activity.png new file mode 100644 index 000000000..0d99e7c2b Binary files /dev/null and b/frontend/public/activity.png differ diff --git a/frontend/public/contributors.png b/frontend/public/contributors.png new file mode 100644 index 000000000..678692f71 Binary files /dev/null and b/frontend/public/contributors.png differ diff --git a/frontend/public/dashboard.png b/frontend/public/dashboard.png new file mode 100644 index 000000000..5b7465032 Binary files /dev/null and b/frontend/public/dashboard.png differ diff --git a/frontend/public/front.png b/frontend/public/front.png new file mode 100644 index 000000000..ee6b70a34 Binary files /dev/null and b/frontend/public/front.png differ diff --git a/frontend/public/funds.png b/frontend/public/funds.png new file mode 100644 index 000000000..8f9a8872b Binary files /dev/null and b/frontend/public/funds.png differ diff --git a/frontend/src/app/landing/page.tsx b/frontend/src/app/landing/page.tsx index 2398e92d8..f075f9f2a 100644 --- a/frontend/src/app/landing/page.tsx +++ b/frontend/src/app/landing/page.tsx @@ -4,7 +4,6 @@ import { Button } from "@/components/ui/button" import { Card, CardContent } from "@/components/ui/card" import { ChevronDown, - User, ArrowUpRight, Code, HelpCircle, @@ -19,10 +18,22 @@ import { import Link from "next/link" import { useState } from "react" +const BRAND = "#1B6FA8" + + export default function OdysseyFundLanding() { const [mobileMenuOpen, setMobileMenuOpen] = useState(false) const [activeTab, setActiveTab] = useState("dashboard") + const tabs = [ + { id: "dashboard", label: "Product dashboard", src: "/dashboard.png" }, + { id: "activity", label: "Product activity", src: "/activity.png" }, + { id: "contributors", label: "Product contributors", src: "/contributors.png" }, + { id: "funds", label: "Product funds", src: "/funds.png" }, + ] + + const activeTabData = tabs.find((t) => t.id === activeTab) ?? tabs[0] + return (
{/* Header */} @@ -31,280 +42,286 @@ export default function OdysseyFundLanding() {
- CHEM + Odyssey Fund -
-
- + -
{mobileMenuOpen && ( -
- Download - - About Cornell Hack4Impact + + About Cornell Hack4Impact +
- + -
)}
- {/* Hero Section */} + {/* Hero */}
-
+
-

+

Endowments made manageable

-

- CHEM is the #1 free endowment manager your team will love +

+ Odyssey Fund is the #1 free endowment manager your team will love

-
-
- random pic +
+ Odyssey workspace
- {/* Clients Section */} + {/* Clients */}
-
-
-

Our Clients....

- logo 1 - logo 2 - logo 3 - logo 4 +
+
+

Our Clients

+ {[1, 2, 3, 4].map((n) => ( + + Nonprofit {n} + + ))}
- {/* Product Dashboard Preview Section */} + {/* All in One Dashboard */}
-

[Insert One Liner]

-

- gfvdfhghhhjjkkllloiuuopopppp +

+ All in One Dashboard +

+

+ Track contributions, monitor activity, and manage funds all in one unified workspace.

-
- - - - +
+ {tabs.map((tab) => ( + + ))}
-
- {activeTab === "dashboard" && ( - Product Dashboard - )} - {activeTab === "activity" && ( - Product Activity - )} - {activeTab === "contributors" && ( - Product Contributors - )} - {activeTab === "funds" && ( - Product Funds - )} +
+ {activeTabData.label}
+
-
+ {/* Testimonial */} +
+
-

"managing my endowments have never been more fun"

-
– david
+

+ "Managing my endowments has never been more fun." +

+
– David
- {/* Product Funds Section */} -
-

[Product Funds One Liner]

-

- tvfggghhjhjjkkkkkkjbnnkkk + {/* Grow Your Endowments */} +

+

+ Grow Your Endowments +

+

+ Add transactions and visualize growth with real-time insights into your fund performance.

- -
- Product Funds Dashboard -
- {/* Product One Liner Section */} -
-

[Insert Product One Liner]

-

- Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor. + {/* A Team Effort */} +

+

+ A Team Effort +

+

+ Built for collaboration so every member of your team can contribute with confidence.

-
- - -
-
- random pic -
-
-

Analytics

-

Designed to give the most valuable insights into your endowment's growth

-
-
- - - -
-
- random pic -
-
-

Collaboration

-

- No more using multiple platforms. One platform for your analysts and finance teams to track your - endowments. -

-
-
+
+ {[ + { + title: "Analytics", + body: "Designed to give the most valuable insights into your endowment's growth", + }, + { + title: "Collaboration", + body: "No more using multiple platforms. One platform for your analysts and finance teams to track your endowments.", + }, + ].map((card) => ( + + +

{card.title}

+

{card.body}

+
+
+ ))}
- {/* We Prioritize Section */} + {/* We Prioritize */}
-

We prioritize ...

+

We prioritize ...

-
- - fast implementation -
-
- - quick help -
-
- - protecting your data -
-
-
-
- - multi-level access -
-
- - smooth onboarding -
+ {[ + { icon: Code, label: "fast implementation" }, + { icon: HelpCircle, label: "quick help" }, + { icon: Lock, label: "protecting your data" }, + { icon: UsersRound, label: "multi-level access" }, + { icon: Zap, label: "smooth onboarding" }, + ].map(({ icon: Icon, label }) => ( +
+ + {label} +
+ ))}
- {/* Who Are We Section */} -
-
-
-

Who are we...?

-

- Team of undergraduate designers and developers looking to help nonprofits do what they do best. -

-

- This product was made with{" "} - {"<3 by Cornell Hack4Impact"}. -

- - Learn more about us - -
+ {/* Who Are We */} +
+
+

Who are we...?

+

+ Team of undergraduate designers and developers looking to help nonprofits do what they do best. +

+

+ This product was made with{" "} + {"<3 by Cornell Hack4Impact"}. +

+ + Learn more about us +
{/* Footer */} -
+
-
+
- - CHEM + + Odyssey Fund
- + - + - - hack4impact + + H4I - +
-

Product

- +

Product

+ Sign up
-

Company

+

Company

About @@ -315,7 +332,7 @@ export default function OdysseyFundLanding() {
-

Legal

+

Legal

Security diff --git a/frontend/src/app/page.tsx b/frontend/src/app/page.tsx index 79739b7a7..1b93352a2 100644 --- a/frontend/src/app/page.tsx +++ b/frontend/src/app/page.tsx @@ -5,7 +5,7 @@ import { useRouter } from "next/navigation"; const Home = () => { const router = useRouter(); useEffect(() => { - router.replace("/login"); + router.replace("/landing"); }, [router]); return null; }; diff --git a/frontend/src/app/profile/page.tsx b/frontend/src/app/profile/page.tsx index b0aee5f3d..256eae98a 100644 --- a/frontend/src/app/profile/page.tsx +++ b/frontend/src/app/profile/page.tsx @@ -108,8 +108,6 @@ const ProfilePage = () => {
- -
diff --git a/frontend/src/app/settings/page.tsx b/frontend/src/app/settings/page.tsx index a401a7cba..d6abecb5a 100644 --- a/frontend/src/app/settings/page.tsx +++ b/frontend/src/app/settings/page.tsx @@ -20,10 +20,9 @@ type CurrentUser = { }; export default function SettingsPage() { - const [activeTab, setActiveTab] = useState<'funds' | 'account'>('account'); const [user, setUser] = useState(null); const [editing, setEditing] = useState(false); - const [formData, setFormData] = useState({ firstName: '', lastName: '', email: '', phoneNumber: '' }); + const [formData, setFormData] = useState({ firstName: '', lastName: '', email: '' }); const [saving, setSaving] = useState(false); const [saveError, setSaveError] = useState(null); const [saveSuccess, setSaveSuccess] = useState(false); @@ -49,7 +48,7 @@ export default function SettingsPage() { if (!res.ok) { console.error('Failed to fetch user in settings', res.status); return; } const data = await res.json(); setUser(data.user); - setFormData({ firstName: data.user.firstName ?? '', lastName: data.user.lastName ?? '', email: data.user.email ?? '', phoneNumber: '' }); + setFormData({ firstName: data.user.firstName ?? '', lastName: data.user.lastName ?? '', email: data.user.email ?? '' }); } catch (err) { console.error('Error loading user in settings', err); } @@ -85,7 +84,7 @@ export default function SettingsPage() { }; const handleCancel = () => { - if (user) setFormData({ firstName: user.firstName, lastName: user.lastName, email: user.email, phoneNumber: '' }); + if (user) setFormData({ firstName: user.firstName, lastName: user.lastName, email: user.email }); setSaveError(null); setSaveSuccess(false); setEditing(false); @@ -96,28 +95,9 @@ export default function SettingsPage() {

Settings

- {/* Tabs */} -
- - -
- {/* Content */}
- {activeTab === 'funds' ? ( -

Fund Settings will go here.

- ) : ( -
+
{/* Your Profile */}
@@ -182,14 +162,6 @@ export default function SettingsPage() {

{user?.email ?? '—'}

)}
-
- - {editing ? ( - - ) : ( -

{formData.phoneNumber || '—'}

- )} -
@@ -221,8 +193,7 @@ export default function SettingsPage() {
-
- )} +