Skip to content

Commit 79cb956

Browse files
authored
feat: finalize 2025 Feed page
Finish FullyHacks 2025 Feed
2 parents be29be1 + cf8a141 commit 79cb956

File tree

16 files changed

+142
-277
lines changed

16 files changed

+142
-277
lines changed

public/assets/feed.png

943 KB
Loading

src/app/(site)/feed/events/page.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,8 @@ export default function EventsPage() {
66
<div className="pb-4">
77
<h1 className="feed-title">Events</h1>
88
<p className="custom-text-shadow font-audiowide text-white md:text-md">
9-
Timeline of hackathon events
9+
Timeline of hackathon events. Filter by clicking on the event type!
10+
Click again to remove the filter.
1011
</p>
1112
</div>
1213
<div className="mt-10">

src/app/(site)/feed/fullypacks/_components/fully-pack-card.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,12 @@ const FullyPackCard: React.FC<FullyPackProps> = ({ fullypack }) => {
1818
const particles = useMemo(() => generateParticles(PARTICLE_CONFIG.COUNT), []);
1919

2020
return (
21-
<div className="inline-block w-full max-w-md">
21+
<div className="w-full max-w-md">
2222
<div
2323
className="group relative"
2424
onMouseEnter={() => setIsHovered(true)}
2525
onMouseLeave={() => setIsHovered(false)}>
26-
<div className="relative flex w-full">
26+
<div className="relative flex min-h-[300px] w-full md:min-h-[400px]">
2727
{/* Base card with glow effect */}
2828
<div className="relative flex w-full flex-col rounded-lg bg-purple_card p-4 transition-all duration-500 group-hover:shadow-[0_0_30px_rgba(70,200,229,0.3)]">
2929
{/* Only render particles if lightspeed is enabled */}

src/app/(site)/feed/fullypacks/page.tsx

Lines changed: 4 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -95,14 +95,6 @@ const discordBot: fullyPacksType[] = [
9595
}
9696
];
9797

98-
const fullypacks: fullyPacksType[] = [
99-
...webDev,
100-
...backendDev,
101-
...mobileDev,
102-
...dataScience,
103-
...discordBot
104-
];
105-
10698
// Helper function to group fullypacks by category
10799
const groupedFullypacks = {
108100
"Web Development": webDev,
@@ -121,19 +113,12 @@ export default function FullyPacks() {
121113
enabled: lightspeedEnabled,
122114
toggleLightspeed: () => setLightspeedEnabled((prev) => !prev)
123115
}}>
124-
<section className="w-full max-w-7xl px-4 text-white sm:px-6 md:px-8">
116+
<section className="w-full max-w-7xl text-white">
125117
<div className="feed-title">FULLYPACKS</div>
126118
<div className="w-full pb-8">
127119
<div className="custom-text-shadow md:text-md">
128-
beginner friendly templates for participants
120+
Beginner friendly templates for participants
129121
</div>
130-
{/* Effects Button
131-
<button
132-
onClick={() => setLightspeedEnabled((prev) => !prev)}
133-
className="ml-4 rounded-lg bg-cyan px-4 py-2 text-purple_card hover:opacity-90">
134-
{lightspeedEnabled ? "Disable" : "Enable"} Effects
135-
</button>
136-
*/}
137122
</div>
138123

139124
{/* Sections */}
@@ -142,11 +127,11 @@ export default function FullyPacks() {
142127
([category, packs]) =>
143128
packs.length > 0 && (
144129
<div key={category} className="space-y-8">
145-
<h2 className="mb-10 text-center text-3xl font-semibold text-purple_main">
130+
<h2 className="custom-text-shadow mb-10 text-3xl font-semibold text-white">
146131
{category}
147132
</h2>
148133

149-
<div className="mx-auto grid grid-cols-1 items-start gap-8 sm:gap-12 md:grid-cols-2 lg:grid-cols-3">
134+
<div className="mx-auto grid grid-cols-1 grid-rows-1 gap-8 sm:grid-cols-2 md:grid-cols-1 md:gap-12 lg:grid-cols-2 xl:grid-cols-3">
150135
{packs.map((fullypack) => (
151136
<FullyPackCard key={fullypack.id} fullypack={fullypack} />
152137
))}

src/app/(site)/feed/layout.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ export default async function FeedLayout({
3434
<div className="portal-background-container motion-reduce:animate-none"></div>
3535
<FeedNavBar />
3636
{user.bio == null && <FeedPopUp />}
37-
<div className="relative mb-8 flex w-full gap-12 px-4 md:px-8">
37+
<div className="relative mx-auto mb-8 flex w-full max-w-[1920px] gap-12 px-4 md:px-8">
3838
<FeedSideBar />
3939
<section className="flex-1">{children}</section>
4040
</div>

src/app/(site)/feed/loading.tsx

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
import { AiOutlineLoading } from "react-icons/ai";
2+
3+
export default function Loading() {
4+
return (
5+
<div className="mt-4 flex items-center justify-center">
6+
<AiOutlineLoading size={48} className="animate-spin text-[#72d6e6]" />;
7+
</div>
8+
);
9+
}

src/app/(site)/feed/prizes/page.tsx

Lines changed: 24 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { mainCategory, subCategory } from "@/lib/data/prizes";
1+
import { mainCategory } from "@/lib/data/prizes";
22
import { tracksType } from "@/types/interface";
33
import { BsMusicPlayer } from "react-icons/bs";
44
import { CgSmartphoneChip } from "react-icons/cg";
@@ -38,7 +38,7 @@ const tracks: tracksType[] = [
3838

3939
function Card({ track }: { track: tracksType }) {
4040
return (
41-
<div className="relative flex h-[494px] w-full max-w-[480px] cursor-pointer flex-col items-center rounded-[61.64px] bg-[#173162] p-6 shadow-xl duration-200 ease-in-out hover:bg-[rgb(52,11,103)] hover:text-white">
41+
<div className="relative flex min-h-[480px] w-full max-w-[480px] flex-col items-center rounded-[2.5rem] bg-[#173162] p-6 shadow-xl duration-200 ease-in-out hover:text-white">
4242
<div className="absolute top-0 left-0 -translate-x-1/2 -translate-y-1/2">
4343
<img src="/assets/hex.svg" alt="hex" className="h-8 w-8" />
4444
</div>
@@ -70,7 +70,7 @@ function Card({ track }: { track: tracksType }) {
7070
<img src="/assets/circles.svg" alt="circles" />
7171
</div>
7272

73-
<p className="w-[355px] text-center text-lg font-bold text-white">
73+
<p className="custom-text-shadow text-center text-lg font-bold text-[#72D6E6]">
7474
{track.name}
7575
</p>
7676

@@ -79,15 +79,8 @@ function Card({ track }: { track: tracksType }) {
7979
</div>
8080
</div>
8181

82-
<div className="mt-6 flex h-[180px] w-[273px] flex-col items-center text-center">
83-
{track.team && (
84-
<p className="mb-4 font-normal leading-7 text-white">
85-
Total: {track.team} team(s)
86-
</p>
87-
)}
88-
<p className="font-audiowide text-[20px] font-[400] leading-[30px] text-white">
89-
{track.description}
90-
</p>
82+
<div className="mt-6 flex flex-col items-center p-4 text-center">
83+
<p className="font-audiowide text-md text-white">{track.description}</p>
9184
</div>
9285
</div>
9386
);
@@ -97,63 +90,46 @@ export default function Prizes() {
9790
return (
9891
<div>
9992
<h1 className="feed-title">Tracks & Prizes</h1>
100-
<p className="custom-text-shadow font-audiowide text-[16px] leading-snug text-white sm:text-[18px] lg:text-[24px]">
93+
<p className="custom-text-shadow mt-2 font-audiowide leading-snug text-white lg:text-lg">
10194
Find all details about tracks, prize categories here
10295
</p>
10396

10497
<div className="mt-10">
10598
<div className="mb-4 flex items-center gap-4">
106-
<p className="font-rubik text-[27px] font-[700] leading-[20px] text-[#72D6E6]">
107-
TRACKS
108-
</p>
99+
<h2 className="text-3xl font-semibold text-[#72D6E6]">TRACKS</h2>
109100
</div>
110-
<p className="font-audiowide text-white md:text-md">
101+
<p className="mt-4 font-audiowide text-white md:text-md">
111102
Hackers have to build their projects around one of these 4 tracks
112103
</p>
113104
</div>
114-
<div className="mt-10 grid grid-cols-1 gap-y-16 gap-x-0 sm:grid-cols-2 lg:grid-cols-2">
105+
<div className="mt-10 grid grid-cols-1 items-center justify-center gap-x-8 gap-y-12 sm:grid-cols-2 md:grid-cols-1 lg:grid-cols-2">
115106
{tracks.map((track: tracksType) => {
116107
return <Card key={track.id} track={track} />;
117108
})}
118109
</div>
119110

120111
<div className="mt-14">
121112
<div className="mb-8">
122-
<p className="font-rubik text-[20px] font-[700] leading-[20px] text-[#72D6E6] md:text-[27px]">
123-
Prizes
124-
</p>
125-
<p className="mt-4 font-audiowide text-[16px] leading-[22px] text-white md:text-[20px] md:leading-[30px]">
113+
<h2 className="text-3xl font-semibold text-[#72D6E6]">PRIZES</h2>
114+
<p className="mt-4 font-audiowide text-white md:text-md">
126115
Each team has to sign up for one prize category in order to be
127116
considered for the corresponding prize.
128117
</p>
129118
</div>
130119

131-
<div
132-
className="relative mx-auto rounded-[20px] bg-[#173162] px-4 py-4 md:rounded-[61.64px]"
133-
style={{ width: "100%", maxWidth: "1060px" }}>
134-
<div className="grid h-full grid-cols-1 place-items-center gap-4 sm:grid-cols-2 md:gap-x-3 md:gap-y-2">
135-
{mainCategory.slice(0, 4).map((prize: tracksType) => (
136-
<div
137-
key={prize.id}
138-
className="flex flex-col items-center justify-center space-y-4 p-4 sm:p-6">
139-
<p className="font-audiowide text-[20px] font-[400] text-[#72D6E6] md:text-[36px]">
140-
{prize.name}
141-
</p>
142-
143-
<div
144-
className="w-full rounded-[10px] bg-[#C5C5C5] text-center md:rounded-[20px]"
145-
style={{
146-
maxWidth: "497px",
147-
height: "auto",
148-
padding: "1rem"
149-
}}>
150-
<p className="mt-4 px-2 text-sm font-normal md:px-4 md:text-base">
151-
{prize.description}
152-
</p>
153-
</div>
154-
</div>
155-
))}
156-
</div>
120+
<div className="flex w-full flex-wrap gap-4">
121+
{mainCategory.map((prize: tracksType) => (
122+
<div
123+
key={prize.id}
124+
className="flex min-h-[130px] flex-col items-center rounded-lg bg-[#173162] p-4">
125+
<h3 className="custom-text-shadow font-audiowide text-md font-[400] text-[#72D6E6] md:text-lg">
126+
{prize.name}
127+
</h3>
128+
<p className="mt-4 px-2 text-white md:text-md">
129+
{prize.description}
130+
</p>
131+
</div>
132+
))}
157133
</div>
158134
</div>
159135
</div>

src/app/(site)/feed/profile/_components/user-form.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ export default function UserForm() {
8989
{...register("bio")}
9090
name="bio"
9191
value={updatedProfile.bio}
92-
className={`feed-form-input h-[300px] w-[min(700px,_95%)] rounded-md mb-[15px]${
92+
className={`feed-form-input mb-[15px] h-[300px] w-full max-w-[700px] rounded-md ${
9393
errors.bio ? "error-form" : ""
9494
}`}
9595
onChange={handleInfoChange}
@@ -103,12 +103,12 @@ export default function UserForm() {
103103
{...register("discordId")}
104104
name="discordId"
105105
value={updatedProfile.discordId}
106-
className={`feed-form-input mb-[15px] w-[min(700px,_95%)] rounded-md ${
106+
className={`feed-form-input mb-[15px] w-full max-w-[700px] rounded-md ${
107107
errors.discordId ? "error-form" : ""
108108
}`}
109109
onChange={handleInfoChange}
110110
type="text"
111-
placeholder="Fully #4567"
111+
placeholder="Fullyhacker"
112112
/>
113113
<p className="error-msg">{errors.discordId?.message}</p>
114114
<p className="text-white">

src/app/(site)/feed/resources/page.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -61,12 +61,12 @@ const sponsorGifts: sponsorGiftType[] = [
6161

6262
export default function Resources() {
6363
return (
64-
<section className="mr-20 w-full max-w-3xl text-white">
64+
<section className="w-full text-white">
6565
<div className="feed-title">Resources</div>
6666
<div className="custom-text-shadow border-b-2 border-[#72d6e6] pb-12 md:text-md">
6767
Tools to succeed beyond FullyHacks.
6868
</div>
69-
<div className="my-8 grid justify-center gap-6 lg:grid-cols-1">
69+
<div className="my-8 grid justify-center gap-6 lg:grid-cols-2">
7070
{sponsorGifts.map((gift: sponsorGiftType) => {
7171
return (
7272
<div

src/components/nav-bar.tsx

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -170,7 +170,12 @@ export const FeedNavBar = () => {
170170
/>
171171
</Link>
172172
<div className="text-md text-white">
173-
<button onClick={() => signOut()}>Sign out</button>
173+
<button
174+
onClick={() => signOut()}
175+
className="group relative py-1 text-md">
176+
Sign out
177+
<span className="absolute bottom-1 block h-0.5 w-0 bg-white transition-all duration-300 group-hover:w-full group-focus:w-full" />
178+
</button>
174179
</div>
175180
</nav>
176181
);
@@ -296,14 +301,14 @@ export const FeedSideBar: React.FC = () => {
296301
</div>
297302

298303
{/* Desktop View */}
299-
<div className="hidden w-[250px] flex-shrink-0 text-sm font-semibold text-[#696969] md:block md:text-[1.125rem]">
304+
<div className="hidden w-[250px] flex-shrink-0 text-sm font-semibold text-[#bdbdbd] md:block md:text-[1.125rem]">
300305
<ul className="flex flex-col gap-4 border-b-2 border-[#72d6e6] p-2">
301306
{feedItems.map((item) => {
302307
return (
303308
<Link
304309
key={item.id}
305310
href={item.href}
306-
className={`flex w-full rounded-lg p-2 transition-colors duration-300 hover:text-white ${pathname === item.href || (item.name === "Home" && pathname.startsWith(item.href)) ? "text-white" : ""}`}>
311+
className={`flex w-full rounded-lg p-2 transition-colors duration-300 hover:text-white ${pathname === item.href || (item.name === "Home" && pathname.startsWith(item.href)) ? "custom-text-shadow text-white" : ""}`}>
307312
{pathname === item.href ||
308313
(item.name === "Home" && pathname.startsWith(item.href)) ? (
309314
<MdArrowRight size={28} color="#c2f2ff" />

0 commit comments

Comments
 (0)