Skip to content

Commit 7e4116b

Browse files
UI redesign: Add compass branding, improve navigation, & simplify content (#1)
* UI redesign: Add compass branding, improve navigation, and simplify content * Add homepage improvements - Created "Why Compass" section with three value props - Worked on spacing - Made word "Search" styled with typing effect * Delete pic * Fix lint * Compress favicon --------- Co-authored-by: MartinBraquet <[email protected]>
1 parent 2a043db commit 7e4116b

File tree

11 files changed

+131
-49
lines changed

11 files changed

+131
-49
lines changed
Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import Link from "next/link";
44
import {aColor} from "@/lib/client/constants";
55
import {useEffect, useState} from "react";
66

7-
export default function LearnMorePage() {
7+
export default function About() {
88

99
const [totalUsers, setTotalUsers] = useState<number>(0);
1010
useEffect(() => {
@@ -36,24 +36,23 @@ export default function LearnMorePage() {
3636
<div className="mt-8 flex space-x-4 justify-center">
3737
<Link
3838
href="/manifesto"
39-
className="px-6 py-3 bg-gray-200 dark:bg-gray-600 text-gray-800 dark:text-white text-lg rounded-lg hover:bg-gray-300 dark:hover:bg-gray-500 transition"
39+
className="px-6 py-3 bg-gray-200 dark:bg-gray-600 text-gray-800 dark:text-white text-lg rounded-full hover:bg-gray-300 dark:hover:bg-gray-500 transition"
4040
>
4141
The Deeper Why
4242
</Link>
4343
</div>
4444
<h3 id="how-to-help">How to Help</h3>
4545
<h5 id="give-suggestions-or-contribute">Give Suggestions or Contribute</h5>
46-
<p>Give suggestions or show your inclination to contribute through this <a
46+
<p>Give suggestions or let us know you want to help through this <a
4747
href="https://forms.gle/tKnXUMAbEreMK6FC6">form</a>!</p>
4848
<h5 id="join-chats">Join Chats</h5>
49-
<p>You can join the community on <a
50-
href="https://discord.gg/8Vd7jzqjun">Discord</a> to shape and test the product—or just to chat with
49+
<p>Join the community on <a
50+
href="https://discord.gg/8Vd7jzqjun">Discord</a> to shape and test the product—or just chat with
5151
like-minded people.</p>
5252
<h5 id="share">Share</h5>
53-
<p>Share the idea and article with people who identify with the community values and may benefit from the
54-
product.</p>
53+
<p>Share the app and article with people who may benefit from the product.</p>
5554
<h5 id="donate">Donate</h5>
56-
<p>You can already donate to support the initial infrastructure via <a
55+
<p>Donate to support the initial infrastructure via <a
5756
href="https://www.paypal.com/paypalme/MartinBraquet">PayPal</a> or <a
5857
href="https://github.com/sponsors/MartinBraquet">GitHub</a> (GitHub has increased transparency, but requires
5958
an account).</p>

app/Header.tsx

Lines changed: 19 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import Link from "next/link";
55
import { signOut, useSession } from "next-auth/react";
66
import { FaHome } from "react-icons/fa";
77
import ThemeToggle from "@/lib/client/theme";
8+
import Image from "next/image";
89

910
export default function Header() {
1011
const { data: session } = useSession();
@@ -30,25 +31,30 @@ export default function Header() {
3031
return (
3132
<header className="w-full
3233
{/*shadow-md*/}
33-
py-4 px-8 xs:px-4">
34+
py-5 px-8 xs:px-4">
3435
<nav className="flex justify-between items-center">
3536
<Link
3637
href="/"
37-
className="text-xl font-bold hover:text-blue-600 transition-colors flex items-center"
38+
className="text-4xl font-bold hover:text-blue-600 transition-colors flex items-center"
3839
aria-label={isSmallScreen ? "Home" : "Compass"}
3940
>
40-
{isSmallScreen ? <FaHome className="w-5 h-5" /> : 'Compass'}
41+
{isSmallScreen ? <FaHome className="w-5 h-5" /> : (
42+
<span className="flex items-center gap-2">
43+
<Image src="/favicon.ico" alt="Compass logo" className="w-12 h-12 dark:invert"/>
44+
Compass
45+
</span>
46+
)}
4147
</Link>
42-
<div className="flex items-center space-x-2">
48+
<div className="flex items-center space-x-3">
4349

4450
<ThemeToggle/>
4551

4652
<div className="flex items-center space-x-2">
4753
<Link
48-
href="/learn-more"
49-
className={`${fontStyle} bg-gray-200 dark:bg-gray-600 text-gray-800 dark:text-white rounded-lg hover:bg-gray-300 dark:hover:bg-gray-500`}
54+
href="/About"
55+
className={`${fontStyle} bg-gray-200 dark:bg-gray-600 text-gray-800 dark:text-white rounded-full hover:bg-gray-300 dark:hover:bg-gray-500`}
5056
>
51-
Learn More
57+
About
5258
</Link>
5359
</div>
5460
{session ? (
@@ -62,27 +68,27 @@ export default function Header() {
6268
</Link>
6369
{/*<Link*/}
6470
{/* href="/profiles"*/}
65-
{/* className="bg-blue-500 text-white px-4 py-2 rounded-lg hover:bg-blue-600 transition"*/}
71+
{/* className="bg-blue-500 text-white px-4 py-2 rounded-full hover:bg-blue-600 transition"*/}
6672
{/*>*/}
6773
{/* Dashboard*/}
6874
{/*</Link>*/}
6975
<button
7076
onClick={() => signOut({callbackUrl: "/"})}
71-
className={`${fontStyle} bg-red-500 text-white rounded-lg hover:bg-red-600`}
77+
className={`${fontStyle} bg-red-500 text-white rounded-full hover:bg-red-600`}
7278
>
7379
Sign Out
7480
</button>
7581
</div>
7682
</>
7783
) : (
7884
<>
79-
<Link href="/login" className={`${fontStyle} bg-blue-500 text-white rounded-lg hover:bg-blue-600 `}>
85+
<Link href="/login" className={`${fontStyle} bg-gray-200 dark:bg-gray-600 text-gray-800 dark:text-white rounded-full hover:bg-gray-300 dark:hover:bg-gray-500`}>
8086
Sign In
8187
</Link>
82-
<Link href="/register"
83-
className={`${fontStyle} bg-blue-500 text-white rounded-lg hover:bg-blue-600`}>
88+
{/*<Link href="/register"
89+
className={`${fontStyle} bg-blue-500 text-white rounded-full hover:bg-blue-600`}>
8490
Sign Up
85-
</Link>
91+
</Link> */}
8692
</>
8793
)}
8894
</div>

app/complete-profile/page.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -380,7 +380,7 @@ function RegisterComponent() {
380380

381381
const dropdownConfig: DropdownConfig[] = [
382382
{
383-
id: 'connections', title: 'Type of Connection', allowAdd: false,
383+
id: 'connections', title: 'Connection Type', allowAdd: false,
384384
content: null
385385
},
386386
{

app/favicon.ico

429 Bytes
Binary file not shown.

app/favicon_color.ico

61.3 KB
Binary file not shown.

app/login/page.tsx

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import {useRouter, useSearchParams} from "next/navigation";
55
import {Suspense, useEffect, useState} from "react";
66
import Link from "next/link";
77
import {FcGoogle} from "react-icons/fc";
8+
import Image from "next/image";
89

910
export default function LoginPage() {
1011
return (
@@ -70,6 +71,9 @@ function RegisterComponent() {
7071
<div className="min-h-screen flex items-center justify-center py-12 px-4 sm:px-6 lg:px-8">
7172
<div className="max-w-md w-full space-y-8">
7273
<div>
74+
<div className="flex justify-center mb-6">
75+
<Image src="/favicon.ico" alt="Compass logo" className="w-24 h-24 dark:invert" />
76+
</div>
7377
<h2 className="mt-6 text-center text-3xl font-extrabold ">
7478
Sign in to your account
7579
</h2>
@@ -78,15 +82,15 @@ function RegisterComponent() {
7882
<div className="rounded-md shadow-sm -space-y-px">
7983
<div>
8084
<label htmlFor="email" className="sr-only">
81-
Email address
85+
Email
8286
</label>
8387
<input
8488
id="email"
8589
name="email"
8690
type="email"
8791
required
8892
className="appearance-none rounded-none relative block w-full px-3 py-2 border border-gray-300 placeholder-gray-500 rounded-t-md focus:outline-none focus:ring-blue-500 focus:border-blue-500 focus:z-10 sm:text-sm"
89-
placeholder="Email address"
93+
placeholder="Email"
9094
/>
9195
</div>
9296
<div>
@@ -112,7 +116,7 @@ function RegisterComponent() {
112116
<button
113117
type="submit"
114118
disabled={isLoading}
115-
className={`group relative w-full flex justify-center py-2 px-4 border border-transparent text-sm font-medium rounded-md text-white bg-blue-600 hover:bg-blue-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-blue-500 ${isLoading ? 'opacity-70 cursor-not-allowed' : ''}`}
119+
className={`group relative w-full flex justify-center py-2 px-4 border border-transparent text-sm font-medium rounded-full text-white bg-blue-600 hover:bg-blue-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-blue-500 ${isLoading ? 'opacity-70 cursor-not-allowed' : ''}`}
116120
>
117121
{isLoading ? 'Signing in...' : 'Sign in with Email'}
118122
</button>
@@ -130,7 +134,7 @@ function RegisterComponent() {
130134
type="button"
131135
onClick={handleGoogleSignIn}
132136
disabled={isLoading}
133-
className="w-full flex items-center justify-center gap-2 py-2 px-4 border border-gray-300 rounded-md shadow-sm text-sm font-medium text-gray-700 hover: focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-blue-500 disabled:opacity-70 disabled:cursor-not-allowed"
137+
className="w-full flex items-center justify-center gap-2 py-2 px-4 border border-gray-300 rounded-full shadow-sm text-sm font-medium text-gray-700 hover: focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-blue-500 disabled:opacity-70 disabled:cursor-not-allowed"
134138
>
135139
<FcGoogle className="w-5 h-5"/>
136140
Sign in with Google

app/page.tsx

Lines changed: 79 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import ProfilePage from "@/app/profiles/page";
44
import Link from "next/link";
5+
import React from 'react'; // ← Add this line here
56

67
export const dynamic = "force-dynamic"; // This disables SSG and ISR
78

@@ -14,8 +15,43 @@ export default function HomePage() {
1415
</main>
1516
)
1617
}
17-
const fontStyle = "transition px-6 py-4 text-4xl font-medium xs:text-xs"
18+
const fontStyle = "transition px-5 py-3 text-3xl font-medium xs:text-sm"
1819

20+
21+
React.useEffect(() => {
22+
const text = "Search.";
23+
const typewriter = document.getElementById("typewriter");
24+
let i = 0;
25+
let timeoutId: any;
26+
let intervalId;
27+
28+
// Clear any existing content
29+
if (typewriter) {
30+
typewriter.textContent = "";
31+
}
32+
33+
function typeWriter() {
34+
if (i < text.length && typewriter) {
35+
typewriter.textContent = text.substring(0, i + 1);
36+
i++;
37+
timeoutId = setTimeout(typeWriter, 150);
38+
}
39+
}
40+
41+
// Start typing after delay
42+
intervalId = setTimeout(() => {
43+
typeWriter();
44+
}, 500);
45+
46+
// Cleanup function - this runs when component unmounts
47+
return () => {
48+
clearTimeout(timeoutId);
49+
clearTimeout(intervalId);
50+
if (typewriter) {
51+
typewriter.textContent = "Search."; // Just show the full text
52+
}
53+
};
54+
}, []);
1955
return (
2056
<main className="min-h-screen flex flex-col">
2157
{/* Header */}
@@ -33,21 +69,54 @@ export default function HomePage() {
3369
{/*</header>*/}
3470

3571
{/* Hero Section */}
36-
<section className="flex flex-col items-center justify-center flex-1 text-center px-4">
37-
<h1 className="py-4 text-5xl md:text-6xl xs:text-4xl font-extrabold max-w-3xl leading-tight xl:whitespace-nowrap md:whitespace-nowrap ">
38-
Don't swipe. Just search.
72+
<section className="flex flex-col items-center justify-start flex-1 text-center px-4">
73+
<div className="h-20"></div>
74+
<h1 className="pt-48 pb-2 text-7xl md:text-8xl xs:text-6xl font-extrabold max-w-4xl leading-tight xl:whitespace-nowrap md:whitespace-nowrap ">
75+
Don't Swipe. <span id="typewriter"></span><span id="cursor" className="animate-pulse">|</span>
3976
</h1>
4077
{/*<p className="mt-6 text-lg md:text-xl text-gray-400 max-w-2xl">*/}
4178
{/* {"Tired of swiping? Search what you're looking for!"}*/}
4279
{/*</p>*/}
43-
44-
<div className="py-8">
45-
<Link href="/login" className={`${fontStyle} bg-blue-500 text-white rounded-lg hover:bg-blue-600`}>
46-
Sign In
80+
{/* Spacer */}
81+
<div className="h-10"></div>
82+
<div className="py-18">
83+
<Link href="/register" className={`${fontStyle} bg-gradient-to-r from-red-600 to-red-800 text-white rounded-full hover:from-red-700 hover:to-red-900`}>
84+
Join Compass
85+
4786
</Link>
48-
87+
{/* Spacer */}
88+
<div className="h-52"></div>
89+
</div>
90+
{/* Why Compass Bar */}
91+
<div className="w-full bg-gray-50 dark:bg-gray-900 py-16 mt-20">
92+
<div className="max-w-6xl mx-auto px-4">
93+
<div className="grid md:grid-cols-3 gap-8 text-center">
94+
<div className="space-y-2">
95+
<h3 className="text-lg font-bold">Radically Transparent</h3>
96+
<p className="text-gray-600 dark:text-gray-400">
97+
No algorithms. Every profile searchable.
98+
</p>
99+
</div>
100+
101+
<div className="space-y-2">
102+
<h3 className="text-lg font-bold">Built for Depth</h3>
103+
<p className="text-gray-600 dark:text-gray-400">
104+
Filter by any keyword and what matters most.
105+
</p>
106+
</div>
107+
108+
<div className="space-y-2">
109+
<h3 className="text-lg font-bold">Community Owned</h3>
110+
<p className="text-gray-600 dark:text-gray-400">
111+
Free forever. Built by users, for users.
112+
</p>
113+
</div>
114+
</div>
115+
</div>
49116
</div>
50-
<div className=" w-full py-4">
117+
{/* Spacer */}
118+
<div className="h-20"></div>
119+
<div className=" w-full py-18">
51120
{profilePage()}
52121
</div>
53122
</section>

app/profiles/ProfileFilters.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ interface FilterProps {
2828
}
2929

3030
export const dropdownConfig: { id: DropdownKey, name: string }[] = [
31-
{id: "connections", name: "Type of Connection"},
31+
{id: "connections", name: "Connection Type"},
3232
{id: "coreValues", name: "Values"},
3333
{id: "interests", name: "Interests"},
3434
// {id: "causeAreas", name: "Cause Areas"},

app/register/page.tsx

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@ import Link from "next/link";
55
import {signIn} from "next-auth/react";
66
import {FcGoogle} from "react-icons/fc";
77
import {useSearchParams} from "next/navigation";
8+
import Image from "next/image";
9+
810

911
export default function RegisterPage() {
1012
return (
@@ -144,12 +146,13 @@ function RegisterComponent() {
144146
<div>
145147
<div>
146148
{/*<h2 className="mt-6 text-center text-xl font-extrabold text-red-700">*/}
147-
{/* The project is still in development. You can sign up if you want to test it, but your account*/}
148-
{/* may be deleted at any time. To get release updates, fill in this <a*/}
149-
{/* href='https://forms.gle/tKnXUMAbEreMK6FC6'>form</a>.*/}
149+
{/* The project is still in development...*/}
150150
{/*</h2>*/}
151-
<h2 className="mt-6 text-center text-3xl font-extrabold ">
152-
Create your account
151+
<div className="flex justify-center mb-6">
152+
<Image src="/favicon.ico" alt="Compass logo" className="w-24 h-24 dark:invert" />
153+
</div>
154+
<h2 className="text-center text-3xl font-extrabold ">
155+
Get Started
153156
</h2>
154157
</div>
155158
<form className="mt-8 space-y-6" onSubmit={handleSubmit}>
@@ -165,20 +168,20 @@ function RegisterComponent() {
165168
maxLength={100}
166169
required
167170
className="appearance-none rounded-none relative block w-full px-3 py-2 border border-gray-300 placeholder-gray-500 rounded-t-md focus:outline-none focus:ring-blue-500 focus:border-blue-500 focus:z-10 sm:text-sm"
168-
placeholder="Full name"
171+
placeholder="Full Name"
169172
/>
170173
</div>
171174
<div>
172175
<label htmlFor="email" className="sr-only">
173-
Email address
176+
Email
174177
</label>
175178
<input
176179
id="email"
177180
name="email"
178181
type="email"
179182
required
180183
className="appearance-none rounded-none relative block w-full px-3 py-2 border border-gray-300 placeholder-gray-500 focus:outline-none focus:ring-blue-500 focus:border-blue-500 focus:z-10 sm:text-sm"
181-
placeholder="Email address"
184+
placeholder="Email"
182185
/>
183186
</div>
184187
<div>
@@ -217,7 +220,7 @@ function RegisterComponent() {
217220
<button
218221
type="submit"
219222
disabled={isLoading}
220-
className={`group relative w-full flex justify-center py-2 px-4 border border-transparent text-sm font-medium rounded-md text-white bg-blue-600 hover:bg-blue-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-blue-500 ${isLoading ? 'opacity-70 cursor-not-allowed' : ''}`}
223+
className={`group relative w-full flex justify-center py-2 px-4 border border-transparent text-sm font-medium rounded-full text-white bg-blue-600 hover:bg-blue-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-blue-500 ${isLoading ? 'opacity-70 cursor-not-allowed' : ''}`}
221224
>
222225
{isLoading ? 'Creating account...' : 'Sign up with Email'}
223226
</button>
@@ -235,7 +238,7 @@ function RegisterComponent() {
235238
type="button"
236239
onClick={handleGoogleSignUp}
237240
disabled={isLoading}
238-
className="w-full flex items-center justify-center gap-2 py-2 px-4 border border-gray-300 rounded-md shadow-sm text-sm font-medium text-gray-700 hover: focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-blue-500 disabled:opacity-70 disabled:cursor-not-allowed"
241+
className="w-full flex items-center justify-center gap-2 py-2 px-4 border border-gray-300 rounded-full shadow-sm text-sm font-medium text-gray-700 hover: focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-blue-500 disabled:opacity-70 disabled:cursor-not-allowed"
239242
>
240243
<FcGoogle className="w-5 h-5"/>
241244
Continue with Google

lib/client/profile.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,7 @@ export function Profile(url: string, header: any = null) {
120120
}
121121

122122
const tagsConfig: Tags[] = [
123-
{profileAttribute: 'desiredConnections', attribute: 'connection', title: 'Type of Connection'},
123+
{profileAttribute: 'desiredConnections', attribute: 'connection', title: 'Connection Type'},
124124
{profileAttribute: 'coreValues', attribute: 'value', title: 'Values'},
125125
{profileAttribute: 'intellectualInterests', attribute: 'interest', title: 'Interests'},
126126
// {profileAttribute: 'causeAreas', attribute: 'causeArea', title: 'Cause Areas'},

0 commit comments

Comments
 (0)