Skip to content

Commit

Permalink
Made general structure of website
Browse files Browse the repository at this point in the history
  • Loading branch information
kaneki003 committed Dec 27, 2024
1 parent 3e53279 commit e41c2f5
Show file tree
Hide file tree
Showing 20 changed files with 1,623 additions and 255 deletions.
49 changes: 49 additions & 0 deletions app/api/hackathons/route.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
import { NextResponse } from 'next/server'

export async function GET() {
const mockData = [
{
title: "2025 Season Schedule // Major League Hacking",
description: "Find, compete, and earn points at the largest, most diverse hacker events in the world.",
dates: ["Dec 28th - 29th", "Jan 3rd - 5th", "Jan 3rd - 5th", "Jan 10th - 16th"],
about: [
"Find, compete, and earn points",
"at the largest, most diverse hacker events",
"in the world."
]
},
{
title: "HackMIT 2025",
description: "Join us for 24 hours of hacking, learning, and innovation at MIT!",
dates: ["Sep 15th - 16th"],
about: [
"24-hour hackathon",
"Workshops and tech talks",
"Networking opportunities"
]
},
{
title: "Global AI Hackathon",
description: "Develop cutting-edge AI solutions to real-world problems.",
dates: ["Mar 22nd - 24th"],
about: [
"Focus on artificial intelligence",
"Open to developers worldwide",
"Mentorship from industry experts"
]
},
{
title: "EcoHack 2025",
description: "Create sustainable tech solutions for a greener future.",
dates: ["Apr 5th - 7th"],
about: [
"Sustainability-focused hackathon",
"Collaboration with environmental organizations",
"Prizes for most impactful projects"
]
}
]

return NextResponse.json(mockData)
}

79 changes: 65 additions & 14 deletions app/globals.css
Original file line number Diff line number Diff line change
Expand Up @@ -2,21 +2,7 @@
@tailwind components;
@tailwind utilities;

:root {
--background: #ffffff;
--foreground: #171717;
}

@media (prefers-color-scheme: dark) {
:root {
--background: #0a0a0a;
--foreground: #ededed;
}
}

body {
color: var(--foreground);
background: var(--background);
font-family: Arial, Helvetica, sans-serif;
}

Expand All @@ -25,3 +11,68 @@ body {
text-wrap: balance;
}
}

@layer base {
:root {
--background: 0 0% 100%;
--foreground: 0 0% 3.9%;
--card: 0 0% 100%;
--card-foreground: 0 0% 3.9%;
--popover: 0 0% 100%;
--popover-foreground: 0 0% 3.9%;
--primary: 0 0% 9%;
--primary-foreground: 0 0% 98%;
--secondary: 0 0% 96.1%;
--secondary-foreground: 0 0% 9%;
--muted: 0 0% 96.1%;
--muted-foreground: 0 0% 45.1%;
--accent: 0 0% 96.1%;
--accent-foreground: 0 0% 9%;
--destructive: 0 84.2% 60.2%;
--destructive-foreground: 0 0% 98%;
--border: 0 0% 89.8%;
--input: 0 0% 89.8%;
--ring: 0 0% 3.9%;
--chart-1: 12 76% 61%;
--chart-2: 173 58% 39%;
--chart-3: 197 37% 24%;
--chart-4: 43 74% 66%;
--chart-5: 27 87% 67%;
--radius: 0.5rem;
}
.dark {
--background: 0 0% 3.9%;
--foreground: 0 0% 98%;
--card: 0 0% 3.9%;
--card-foreground: 0 0% 98%;
--popover: 0 0% 3.9%;
--popover-foreground: 0 0% 98%;
--primary: 0 0% 98%;
--primary-foreground: 0 0% 9%;
--secondary: 0 0% 14.9%;
--secondary-foreground: 0 0% 98%;
--muted: 0 0% 14.9%;
--muted-foreground: 0 0% 63.9%;
--accent: 0 0% 14.9%;
--accent-foreground: 0 0% 98%;
--destructive: 0 62.8% 30.6%;
--destructive-foreground: 0 0% 98%;
--border: 0 0% 14.9%;
--input: 0 0% 14.9%;
--ring: 0 0% 83.1%;
--chart-1: 220 70% 50%;
--chart-2: 160 60% 45%;
--chart-3: 30 80% 55%;
--chart-4: 280 65% 60%;
--chart-5: 340 75% 55%;
}
}

@layer base {
* {
@apply border-border;
}
body {
@apply bg-background text-foreground;
}
}
113 changes: 17 additions & 96 deletions app/page.tsx
Original file line number Diff line number Diff line change
@@ -1,101 +1,22 @@
import Image from "next/image";
import Header from "../components/Header";
import HackathonList from "../components/HackathonList";
import SearchBar from "../components/SearchBar";
import Filters from "../components/Filters";
import { ThemeProvider } from "../components/ThemeProvider";

export default function Home() {
return (
<div className="grid grid-rows-[20px_1fr_20px] items-center justify-items-center min-h-screen p-8 pb-20 gap-16 sm:p-20 font-[family-name:var(--font-geist-sans)]">
<main className="flex flex-col gap-8 row-start-2 items-center sm:items-start">
<Image
className="dark:invert"
src="https://nextjs.org/icons/next.svg"
alt="Next.js logo"
width={180}
height={38}
priority
/>
<ol className="list-inside list-decimal text-sm text-center sm:text-left font-[family-name:var(--font-geist-mono)]">
<li className="mb-2">
Get started by editing{" "}
<code className="bg-black/[.05] dark:bg-white/[.06] px-1 py-0.5 rounded font-semibold">
app/page.tsx
</code>
.
</li>
<li>Save and see your changes instantly.</li>
</ol>

<div className="flex gap-4 items-center flex-col sm:flex-row">
<a
className="rounded-full border border-solid border-transparent transition-colors flex items-center justify-center bg-foreground text-background gap-2 hover:bg-[#383838] dark:hover:bg-[#ccc] text-sm sm:text-base h-10 sm:h-12 px-4 sm:px-5"
href="https://vercel.com/new?utm_source=create-next-app&utm_medium=appdir-template-tw&utm_campaign=create-next-app"
target="_blank"
rel="noopener noreferrer"
>
<Image
className="dark:invert"
src="https://nextjs.org/icons/vercel.svg"
alt="Vercel logomark"
width={20}
height={20}
/>
Deploy now
</a>
<a
className="rounded-full border border-solid border-black/[.08] dark:border-white/[.145] transition-colors flex items-center justify-center hover:bg-[#f2f2f2] dark:hover:bg-[#1a1a1a] hover:border-transparent text-sm sm:text-base h-10 sm:h-12 px-4 sm:px-5 sm:min-w-44"
href="https://nextjs.org/docs?utm_source=create-next-app&utm_medium=appdir-template-tw&utm_campaign=create-next-app"
target="_blank"
rel="noopener noreferrer"
>
Read our docs
</a>
</div>
</main>
<footer className="row-start-3 flex gap-6 flex-wrap items-center justify-center">
<a
className="flex items-center gap-2 hover:underline hover:underline-offset-4"
href="https://nextjs.org/learn?utm_source=create-next-app&utm_medium=appdir-template-tw&utm_campaign=create-next-app"
target="_blank"
rel="noopener noreferrer"
>
<Image
aria-hidden
src="https://nextjs.org/icons/file.svg"
alt="File icon"
width={16}
height={16}
/>
Learn
</a>
<a
className="flex items-center gap-2 hover:underline hover:underline-offset-4"
href="https://vercel.com/templates?framework=next.js&utm_source=create-next-app&utm_medium=appdir-template-tw&utm_campaign=create-next-app"
target="_blank"
rel="noopener noreferrer"
>
<Image
aria-hidden
src="https://nextjs.org/icons/window.svg"
alt="Window icon"
width={16}
height={16}
/>
Examples
</a>
<a
className="flex items-center gap-2 hover:underline hover:underline-offset-4"
href="https://nextjs.org?utm_source=create-next-app&utm_medium=appdir-template-tw&utm_campaign=create-next-app"
target="_blank"
rel="noopener noreferrer"
>
<Image
aria-hidden
src="https://nextjs.org/icons/globe.svg"
alt="Globe icon"
width={16}
height={16}
/>
Go to nextjs.org →
</a>
</footer>
</div>
<ThemeProvider attribute="class" defaultTheme="system" enableSystem>
<div className="min-h-screen">
<Header />
<main className="container mx-auto px-4 py-8">
<div className="mb-8 space-y-4">
<SearchBar />
<Filters />
</div>
<HackathonList />
</main>
</div>
</ThemeProvider>
);
}
21 changes: 21 additions & 0 deletions components.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
{
"$schema": "https://ui.shadcn.com/schema.json",
"style": "new-york",
"rsc": true,
"tsx": true,
"tailwind": {
"config": "tailwind.config.ts",
"css": "app/globals.css",
"baseColor": "neutral",
"cssVariables": true,
"prefix": ""
},
"aliases": {
"components": "@/components",
"utils": "@/lib/utils",
"ui": "@/components/ui",
"lib": "@/lib",
"hooks": "@/hooks"
},
"iconLibrary": "lucide"
}
54 changes: 54 additions & 0 deletions components/Filters.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
'use client'

import { useState } from 'react'
import { Button } from '@/components/ui/button'
import {
DropdownMenu,
DropdownMenuCheckboxItem,
DropdownMenuContent,
DropdownMenuLabel,
DropdownMenuSeparator,
DropdownMenuTrigger,
} from '@/components/ui/dropdown-menu'

const months = [
'January', 'February', 'March', 'April', 'May', 'June',
'July', 'August', 'September', 'October', 'November', 'December'
]

export default function Filters() {
const [selectedMonths, setSelectedMonths] = useState<string[]>([])

const handleMonthToggle = (month: string) => {
setSelectedMonths((prev) =>
prev.includes(month)
? prev.filter((m) => m !== month)
: [...prev, month]
)
}

return (
<div className="flex gap-2">
<DropdownMenu>
<DropdownMenuTrigger asChild>
<Button variant="outline">Filter by Month</Button>
</DropdownMenuTrigger>
<DropdownMenuContent className="w-56">
<DropdownMenuLabel>Select Months</DropdownMenuLabel>
<DropdownMenuSeparator />
{months.map((month) => (
<DropdownMenuCheckboxItem
key={month}
checked={selectedMonths.includes(month)}
onCheckedChange={() => handleMonthToggle(month)}
>
{month}
</DropdownMenuCheckboxItem>
))}
</DropdownMenuContent>
</DropdownMenu>
{/* Add more filters here as needed */}
</div>
)
}

41 changes: 41 additions & 0 deletions components/HackathonCard.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card'
import { Badge } from '@/components/ui/badge'

interface HackathonCardProps {
title: string
description: string
dates: string[]
about: string[]
}

export default function HackathonCard({ title, description, dates, about }: HackathonCardProps) {
return (
<Card className="overflow-hidden">
<CardHeader className="bg-primary text-primary-foreground">
<CardTitle className="text-lg">{title}</CardTitle>
</CardHeader>
<CardContent className="p-4 space-y-4">
<p className="text-sm text-gray-600 dark:text-gray-300">{description}</p>
<div>
<h3 className="font-semibold mb-2">Dates:</h3>
<div className="flex flex-wrap gap-2">
{dates.map((date, index) => (
<Badge key={index} variant="secondary">
{date}
</Badge>
))}
</div>
</div>
<div>
<h3 className="font-semibold mb-2">About:</h3>
<ul className="list-disc list-inside text-sm text-gray-600 dark:text-gray-300">
{about.map((item, index) => (
<li key={index}>{item}</li>
))}
</ul>
</div>
</CardContent>
</Card>
)
}

Loading

0 comments on commit e41c2f5

Please sign in to comment.