Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
34 commits
Select commit Hold shift + click to select a range
dfcd2c4
Adding trpc
BastedEggsRYummy Sep 27, 2025
822ac87
Just kidding no more trpc
BastedEggsRYummy Sep 28, 2025
6540b00
More changes to try to get MongoDB to work
BastedEggsRYummy Oct 7, 2025
1afd6c1
More Updates to Landing Page
aarugaut Oct 7, 2025
f12058c
Actually got the mongo backend working
BastedEggsRYummy Oct 14, 2025
97ca872
Made more interactive
aarugaut Oct 17, 2025
dcbc438
Merge pull request #129 from hack-rpi/Aaryan2025
BastedEggsRYummy Oct 18, 2025
a070463
Removed testing mongo files
BastedEggsRYummy Oct 20, 2025
ea8c7cb
Made description and host optional
BastedEggsRYummy Oct 20, 2025
43aff56
Cleaning up
BastedEggsRYummy Oct 20, 2025
30eaa5b
Cleaned up form and backend code more
BastedEggsRYummy Oct 20, 2025
ff859c5
Trying to fix merge conflicts
BastedEggsRYummy Oct 20, 2025
48edafd
Merge pull request #132 from hack-rpi/109-move-the-schedule-page-to-a…
BastedEggsRYummy Oct 20, 2025
7049163
Added the footer back into the main page
BastedEggsRYummy Oct 20, 2025
5f160e2
10/21
aarugaut Oct 21, 2025
fd86f20
Merge pull request #134 from hack-rpi/Aaryan2025
BastedEggsRYummy Oct 21, 2025
ee5cbc1
Changed Name of InteractiveNavigationMap
aarugaut Oct 21, 2025
2e717f8
Glitch Effect
aarugaut Oct 21, 2025
4f49ef1
Changed director photos
aarugaut Oct 21, 2025
afe1d44
Changed the prizes to be accurate in their names, cash amount and des…
BastedEggsRYummy Oct 21, 2025
c7cf436
Added more sponsors
aarugaut Oct 24, 2025
d913079
Made homepage more mobile compatible
BastedEggsRYummy Oct 24, 2025
a3e609c
Merge branch 'main' into Aaryan2025Again
BastedEggsRYummy Oct 24, 2025
3d1bef0
Merge pull request #135 from hack-rpi/Aaryan2025Again
BastedEggsRYummy Oct 24, 2025
5bd0f3c
Create text_redesign documentation.pdf
GokulGH Oct 24, 2025
ee3fada
Merge pull request #137 from hack-rpi/text-redesign-documentation
BastedEggsRYummy Oct 24, 2025
0be4366
Added background image locally
BastedEggsRYummy Oct 25, 2025
eeb7b93
Fully updated prize track information
BastedEggsRYummy Oct 25, 2025
3472e99
Merge pull request #140 from hack-rpi/96-update-current-prize-tracks-…
BastedEggsRYummy Oct 25, 2025
01e9a7b
Consistency text change
BastedEggsRYummy Oct 25, 2025
df40996
Create 2024_sponsors.json
BastedEggsRYummy Oct 25, 2025
f068e4f
Update the sponsors to be correct
BastedEggsRYummy Oct 25, 2025
c466132
Added over styling changes and sponsor logos from live
BastedEggsRYummy Oct 25, 2025
e504ba3
Merge branch 'text-redesign' into main
BastedEggsRYummy Oct 28, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion app/(with-layout)/event/prizes/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ export default function Page() {
return (
<div className="flex flex-col w-full h-fit min-h-screen items-center justify-center">
<div className="flex flex-col w-full flex-grow flex-shrink basis-auto mt-24 items-center">
<h1 className="text-4xl sm:text-6xl font-bold font-sans my-4 text-center">$5500+ In Prizes</h1>
<h1 className="text-4xl sm:text-6xl font-bold font-sans my-4 text-center">$3500+ In Prizes</h1>
<Podium podiumPrizes={podiumPrizes} />
<hr className="w-11/12 desktop:w-3/4 lg:w-2/3 2xl:w-3/5 mx-auto my-4 border-gray-300" />
<MajorPrizes majorPrizes={majorPrizes} />
Expand Down
2 changes: 2 additions & 0 deletions app/(without-layout)/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import NavBar from "@/components/nav-bar/nav-bar";
import AboutSection from "../../components/about-us";
import TeamComponent from "@/components/team/team";
import Sponsors from "@/components/sponsors";
import Footer from "@/components/footer/footer";

export default function Home() {
return (
Expand All @@ -20,6 +21,7 @@ export default function Home() {
<Sponsors />
<TeamComponent />
</div>
<Footer />
{/* Other components and elements */}
</div>
</>
Expand Down
18 changes: 18 additions & 0 deletions app/api/mongodb.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@

import * as dotenv from "dotenv";
import mongoose from "mongoose";

dotenv.config();

const MONGO_URI = process.env.MONGO_URI;

console.log("Mongo URI:", MONGO_URI);

export async function connectDB(){
if(MONGO_URI) {
const connectDB = mongoose
.connect(MONGO_URI)
.then(() => console.log("MongoDB Connected"))
.catch((err) => console.error("MongoDB Connection error:", err));
}
}
88 changes: 88 additions & 0 deletions app/api/schedule/route.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
import { NextResponse } from "next/server";
import { connectDB } from "../mongodb";
import Schedule from "./schedule";

const EVENT_TYPES = ["ceremony", "workshop", "food", "fireside chat", "mentoring", "event"] as const;

function parseBody(json: any) {
const errors: string[] = [];

const str = (v: any) => (typeof v === "string" ? v.trim() : "");
const bool = (v: any) => (typeof v === "boolean" ? v : v === "true");
const num = (v: any) => (typeof v === "number" ? v : Number(v));

const name = str(json.name);
const location = str(json.location);
const host = str(json.host ?? "");
const description = str(json.description ?? "");
const event_created_by = str(json.event_created_by);

const start_time = new Date(json.start_time);
const end_time = new Date(json.end_time);

const column = num(json.column);
const discord_auto_announce = bool(json.discord_auto_announce);

const event_type = str(json.event_type);

if (!name) errors.push("name");
if (!location) errors.push("location");
if (!event_created_by) errors.push("event_created_by");
if (!(start_time instanceof Date) || isNaN(start_time.getTime())) errors.push("start_time");
if (!(end_time instanceof Date) || isNaN(end_time.getTime())) errors.push("end_time");
if (start_time && end_time && start_time > end_time) errors.push("start_time <= end_time");
if (![1, 2, 3, 4].includes(column)) errors.push("column (1-4)");
if (!EVENT_TYPES.includes(event_type as any)) errors.push("event_type");

return {
ok: errors.length === 0,
errors,
doc: {
name,
location,
host,
description,
event_created_by,
start_time,
end_time,
column,
discord_auto_announce,
event_type,
},
};
}

export async function GET() {
try {
await connectDB();
const items = await Schedule.find().sort({ start_time: 1, createdAt: -1 });
return NextResponse.json(items);
} catch (err) {
console.error("Error fetching schedule:", err);
return NextResponse.json({ error: "Failed to fetch schedule" }, { status: 500 });
}
}

export async function POST(req: Request) {
try {
await connectDB();
const body = await req.json();
const parsed = parseBody(body);

console.log("WE GOT HERE")
console.log(parsed)

if (!parsed.ok) {
return NextResponse.json(
{ error: "Invalid/missing fields", fields: parsed.errors },
{ status: 400 }
);
}

const created = await Schedule.create(parsed.doc);
return NextResponse.json(created.toObject(), { status: 201 });
} catch (err) {
console.error("Error creating schedule:", err);
return NextResponse.json({ error: "Failed to create schedule" }, { status: 500 });
}
}
33 changes: 33 additions & 0 deletions app/api/schedule/schedule.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
import mongoose, { Schema, model, models, InferSchemaType } from "mongoose";

const ScheduleSchema = new Schema(
{
name: { type: String, required: true },
location: { type: String, required: true },
host: { type: String, default: "" },
description: { type: String, default: "" },
event_created_by: { type: String, required: true },

start_time: { type: Date, required: true },
end_time: { type: Date, required: true },

column: { type: Number, required: true, enum: [1, 2, 3, 4] },
discord_auto_announce: { type: Boolean, required: true, default: false },

event_type: {
type: String,
required: true,
enum: ["ceremony", "workshop", "food", "fireside chat", "mentoring", "event"],
},
},
{ timestamps: true }
);

//prevent schema staleness in Next.js dev
if (process.env.NODE_ENV === "development") {
delete (mongoose.connection.models as any).Schedule;
}

export type ScheduleDoc = InferSchemaType<typeof ScheduleSchema> & { _id: string };
export default (models.Schedule as mongoose.Model<ScheduleDoc>) ||
model<ScheduleDoc>("Schedule", ScheduleSchema);
106 changes: 106 additions & 0 deletions app/globals.css
Original file line number Diff line number Diff line change
Expand Up @@ -74,3 +74,109 @@
line-height: 2.5rem;
}
}

.bg {
background: url("/backgroundImage.jpg") no-repeat;
background-size: cover;
height: 100%;
width: 100%;
position: fixed;
top: 0;
left: 0;
z-index: -3;
}

.bg:before {
content: "";
width: 100%;
height: 100%;
background: #000;
position: fixed;
z-index: -1;
top: 0;
left: 0;
opacity: 0.3;
}

@keyframes sf-fly-by-1 {
from {
transform: translateZ(-600px);
opacity: 0.5;
}
to {
transform: translateZ(0);
opacity: 0.5;
}
}
@keyframes sf-fly-by-2 {
from {
transform: translateZ(-1200px);
opacity: 0.5;
}
to {
transform: translateZ(-600px);
opacity: 0.5;
}
}
@keyframes sf-fly-by-3 {
from {
transform: translateZ(-1800px);
opacity: 0.5;
}
to {
transform: translateZ(-1200px);
opacity: 0.5;
}
}

.star-field {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
perspective: 600px;
-webkit-perspective: 600px;
z-index: -2;
}

.star-field .layer {
box-shadow: -411px -476px #cccccc, 777px -407px #d4d4d4, -387px -477px #fcfcfc, -91px -235px #d4d4d4,
491px -460px #f7f7f7, 892px -128px #f7f7f7, 758px -277px #ededed, 596px 378px #cccccc, 647px 423px whitesmoke,
183px 389px #c7c7c7, 524px -237px #f0f0f0, 679px -535px #e3e3e3, 158px 399px #ededed, 157px 249px #ededed,
81px -450px #ebebeb, 719px -360px #c2c2c2, -499px 473px #e8e8e8, -158px -349px #d4d4d4, 870px -134px #cfcfcf,
446px 404px #c2c2c2, 440px 490px #d4d4d4, 414px 507px #e6e6e6, -12px 246px #fcfcfc, -384px 369px #e3e3e3,
641px -413px #fcfcfc, 822px 516px #dbdbdb, 449px 132px #c2c2c2, 727px 146px #f7f7f7, -315px -488px #e6e6e6,
952px -70px #e3e3e3, -869px -29px #dbdbdb, 502px 80px #dedede, 764px 342px #e0e0e0, -150px -380px #dbdbdb,
654px -426px #e3e3e3, -325px -263px #c2c2c2, 755px -447px #c7c7c7, 729px -177px #c2c2c2, -682px -391px #e6e6e6,
554px -176px #ededed, -85px -428px #d9d9d9, 714px 55px #e8e8e8, 359px -285px #cfcfcf, -362px -508px #dedede,
468px -265px #fcfcfc, 74px -500px #c7c7c7, -514px 383px #dbdbdb, 730px -92px #cfcfcf, -112px 287px #c9c9c9,
-853px 79px #d6d6d6, 828px 475px #d6d6d6, -681px 13px #fafafa, -176px 209px #f0f0f0, 758px 457px #fafafa,
-383px -454px #ededed, 813px 179px #d1d1d1, 608px 98px whitesmoke, -860px -65px #c4c4c4, -572px 272px #f7f7f7,
459px 533px #fcfcfc, 624px -481px #e6e6e6, 790px 477px #dedede, 731px -403px #ededed, 70px -534px #cccccc,
-23px 510px #cfcfcf, -652px -237px whitesmoke, -690px 367px #d1d1d1, 810px 536px #d1d1d1, 774px 293px #c9c9c9,
-362px 97px #c2c2c2, 563px 47px #dedede, 313px 475px #e0e0e0, 839px -491px #e3e3e3, -217px 377px #d4d4d4,
-581px 239px #c2c2c2, -857px 72px #cccccc, -23px 340px #dedede, -837px 246px white, 170px -502px #cfcfcf,
822px -443px #e0e0e0, 795px 497px #e0e0e0, -814px -337px #cfcfcf, 206px -339px #f2f2f2, -779px 108px #e6e6e6,
808px 2px #d4d4d4, 665px 41px #d4d4d4, -564px 64px #cccccc, -380px 74px #cfcfcf, -369px -60px #f7f7f7,
47px -495px #e3e3e3, -383px 368px #f7f7f7, 419px 288px #d1d1d1, -598px -50px #c2c2c2, -833px 187px #c4c4c4,
378px 325px whitesmoke, -703px 375px #d6d6d6, 392px 520px #d9d9d9, -492px -60px #c4c4c4, 759px 288px #ebebeb,
98px -412px #c4c4c4, -911px -277px #c9c9c9;
transform-style: preserve-3d;
position: absolute;
top: 50%;
left: 50%;
height: 4px;
width: 4px;
border-radius: 2px;
}

.star-field .layer:nth-child(1) {
animation: sf-fly-by-1 5s linear infinite;
}
.star-field .layer:nth-child(2) {
animation: sf-fly-by-2 5s linear infinite;
}
.star-field .layer:nth-child(3) {
animation: sf-fly-by-3 5s linear infinite;
}
Loading
Loading