Skip to content

Commit 3da46da

Browse files
committed
first version
1 parent e57e45b commit 3da46da

32 files changed

Lines changed: 7486 additions & 0 deletions

.gitignore

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
2+
3+
# dependencies
4+
/node_modules
5+
/.pnp
6+
.pnp.*
7+
.yarn/*
8+
!.yarn/patches
9+
!.yarn/plugins
10+
!.yarn/releases
11+
!.yarn/versions
12+
13+
# testing
14+
/coverage
15+
16+
# next.js
17+
/.next/
18+
/out/
19+
20+
# production
21+
/build
22+
23+
# misc
24+
.DS_Store
25+
*.pem
26+
27+
# debug
28+
npm-debug.log*
29+
yarn-debug.log*
30+
yarn-error.log*
31+
.pnpm-debug.log*
32+
33+
# env files (can opt-in for committing if needed)
34+
.env*
35+
36+
# vercel
37+
.vercel
38+
39+
# typescript
40+
*.tsbuildinfo
41+
next-env.d.ts

.nojekyll

Whitespace-only changes.

README.md

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
This is a [Next.js](https://nextjs.org) project bootstrapped with [`create-next-app`](https://nextjs.org/docs/app/api-reference/cli/create-next-app).
2+
3+
## Getting Started
4+
5+
First, run the development server:
6+
7+
```bash
8+
npm run dev
9+
# or
10+
yarn dev
11+
# or
12+
pnpm dev
13+
# or
14+
bun dev
15+
```
16+
17+
Open [http://localhost:3000](http://localhost:3000) with your browser to see the result.
18+
19+
You can start editing the page by modifying `app/page.tsx`. The page auto-updates as you edit the file.
20+
21+
This project uses [`next/font`](https://nextjs.org/docs/app/building-your-application/optimizing/fonts) to automatically optimize and load [Geist](https://vercel.com/font), a new font family for Vercel.
22+
23+
## Learn More
24+
25+
To learn more about Next.js, take a look at the following resources:
26+
27+
- [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API.
28+
- [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial.
29+
30+
You can check out [the Next.js GitHub repository](https://github.com/vercel/next.js) - your feedback and contributions are welcome!
31+
32+
## Deploy on Vercel
33+
34+
The easiest way to deploy your Next.js app is to use the [Vercel Platform](https://vercel.com/new?utm_medium=default-template&filter=next.js&utm_source=create-next-app&utm_campaign=create-next-app-readme) from the creators of Next.js.
35+
36+
Check out our [Next.js deployment documentation](https://nextjs.org/docs/app/building-your-application/deploying) for more details.

app/100nossao/page.tsx

Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
'use client';
2+
3+
import { Black_Ops_One } from 'next/font/google';
4+
import Image from 'next/image';
5+
import { useState, useEffect } from 'react';
6+
import { YouTubeEmbed } from '@next/third-parties/google';
7+
import Link from 'next/link';
8+
9+
const blackOpsOne = Black_Ops_One({ subsets: ['latin'], weight: '400' });
10+
11+
export default function CemNossao() {
12+
const [loaded, setLoaded] = useState(false);
13+
14+
useEffect(() => {
15+
setLoaded(true);
16+
}, []);
17+
18+
return (
19+
<div className="bg-black overflow-x-hidden">
20+
21+
<div className="h-screen border-b-4 border-dashed border-zinc-700 flex flex-col justify-center items-center">
22+
23+
<div className={`flex flex-col items-center justify-center text-center`}>
24+
<h1 className={`${blackOpsOne.className} text-7xl md:text-9xl lg:text-[180px] xl:text-[200px] text-transparent bg-clip-text bg-gradient-to-b from-neutral-100 to-neutral-600 transition-opacity duration-1500 delay-300 ease-in-out transform ${loaded ? 'opacity-100' : 'opacity-0'}`}>
25+
100NOSSÃO
26+
</h1>
27+
</div>
28+
</div>
29+
30+
<section className="max-w-7xl mx-auto px-4 py-20 grid grid-cols-1 md:grid-cols-2 gap-12 items-center">
31+
<div className="p-5 bg-neutral-950 flex items-center justify-center border-4 border-dashed border-neutral-700">
32+
<Image
33+
src="/100nossao.webp"
34+
alt="Logo do 100Nossão"
35+
width={600}
36+
height={600}
37+
/>
38+
</div>
39+
40+
<div className="order-1 md:order-2 space-y-8 px-2">
41+
<h2 className={`${blackOpsOne.className} text-5xl md:text-6xl text-white`}>
42+
O MAIOR <span className="text-red-600">SOM AUTOMOTIVO UNIVERSITÁRIO</span> DO BRASIL
43+
</h2>
44+
45+
<div className="flex flex-col items-center md:items-start space-y-6 text-neutral-300 font-light text-lg leading-relaxed">
46+
<p>
47+
Um sistema de som de alta potência acoplado numa estrutura de transporte personalizada (originalmente, um carrinho de supermercado).
48+
Há mais de 20 anos, o 100NOSSÃO é um ícone da cultura universitária da UNICAMP, sendo presença garantida nos eventos da AAACEC e nas melhores festas de Barão Geraldo.
49+
</p>
50+
51+
<Link href="https://ig.me/m/100nossao4x4">
52+
<button className="bg-red-600 text-black font-bold py-3 px-6 rounded-lg transition-colors duration-300 nowrap cursor-pointer">
53+
Quero alugar o 100NOSSÃO
54+
</button>
55+
</Link>
56+
</div>
57+
</div>
58+
</section>
59+
60+
<div className="w-full px-4 py-24 mb-10">
61+
<div className="relative mx-auto w-full max-w-[700px] aspect-video">
62+
63+
<YouTubeEmbed videoid="B9SAgKnNaxw" style="width: 100%" params="controls=0&start=68&end=113&loop=1" />
64+
65+
<div className="absolute -top-8 -right-4 md:-right-10 bg-red-600 text-white w-32 h-32 md:w-40 md:h-40 flex flex-col items-center justify-center rounded-full border-2 border-dashed border-white transform rotate-12 z-20 shadow-2xl">
66+
<p className="font-extrabold text-xs md:text-sm tracking-widest mb-1">DESDE 2004</p>
67+
<p className={`${blackOpsOne.className} text-base md:text-2xl leading-[0.9] text-center px-4`}>
68+
ENCHENDO<br />O SACO
69+
</p>
70+
</div>
71+
72+
</div>
73+
</div>
74+
75+
</div>
76+
);
77+
}

app/favicon.ico

15 KB
Binary file not shown.

app/globals.css

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
@import "tailwindcss";
2+
3+
:root {
4+
--background: #ffffff;
5+
--foreground: #171717;
6+
}
7+
8+
@theme inline {
9+
--color-background: var(--background);
10+
--color-foreground: var(--foreground);
11+
--font-sans: var(--font-geist-sans);
12+
--font-mono: var(--font-geist-mono);
13+
}
14+
15+
@media (prefers-color-scheme: dark) {
16+
:root {
17+
--background: #0a0a0a;
18+
--foreground: #ededed;
19+
}
20+
}
21+
22+
body {
23+
background: var(--background);
24+
color: var(--foreground);
25+
font-family: Arial, Helvetica, sans-serif;
26+
}

app/layout.tsx

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
import type { Metadata } from "next";
2+
import { Bricolage_Grotesque } from "next/font/google";
3+
import Navbar from "@/components/Navbar";
4+
import Footer from "@/components/Footer";
5+
6+
import "./globals.css";
7+
8+
const bricolageGrotesque = Bricolage_Grotesque({
9+
subsets: ["latin"],
10+
});
11+
12+
export const metadata: Metadata = {
13+
title: "AAACEC",
14+
description: "Site oficial da Associação Atlética Acadêmica da Ciência e Engenharia de Computação",
15+
};
16+
17+
export default function RootLayout({
18+
children,
19+
}: Readonly<{
20+
children: React.ReactNode;
21+
}>) {
22+
return (
23+
<html lang="pt-br" className="bg-white">
24+
<head>
25+
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
26+
</head>
27+
<body
28+
className={`${bricolageGrotesque.className} antialiased`}
29+
>
30+
<Navbar />
31+
<main className="min-h-screen bg-white">
32+
{children}
33+
</main>
34+
<Footer />
35+
</body>
36+
</html>
37+
);
38+
}

app/page.tsx

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
'use client';
2+
3+
import Image from "next/image";
4+
import MessageBoard from "@/components/MessageBoard";
5+
import ProcessoSeletivo from "@/components/ProcessoSeletivo";
6+
import Link from "next/link";
7+
import Calendar, { Event } from "@/components/Calendar";
8+
import PageTitle from "@/components/PageTitle";
9+
10+
export default function Home() {
11+
const events: Event[] = [
12+
{
13+
date: new Date(2026, 2, 27),
14+
category: "Evento",
15+
name: "Churras à Trois 2026",
16+
},
17+
];
18+
19+
return (
20+
<div>
21+
<PageTitle
22+
title="AAACEC"
23+
subtitle={<>A Atlética da <span className="font-bold">Computação Unicamp</span></>}
24+
/>
25+
26+
<MessageBoard text="🥳 BEM-VINDES BIXES 026 🥳" />
27+
28+
<div className="w-full text-center p-10 my-10">
29+
<p className="text-4xl md:text-6xl xl:text-8xl text-center text-zinc-900 font-medium max-w-6xl mx-auto mb-10"><span className="font-extrabold">{new Date().getFullYear() - 1994} anos</span> fomentando o esporte universitário</p>
30+
<Link href="/sobre" className="text-3xl text-zinc-900 font-medium">Saiba mais ⟶</Link>
31+
</div>
32+
33+
<Calendar events={events} />
34+
35+
<ProcessoSeletivo />
36+
37+
<div className="flex flex-wrap justify-center gap-10 pt-10 pb-20">
38+
<Image
39+
src="/parcerias/cheers.svg"
40+
alt="Logo da Cheers"
41+
width={250}
42+
height={50}
43+
/>
44+
<Image
45+
src="/parcerias/cem.png"
46+
alt="Logo da Liga CEM"
47+
width={250}
48+
height={161}
49+
/>
50+
</div>
51+
</div>
52+
);
53+
}

app/sobre/page.tsx

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
import Image from 'next/image';
2+
import PageTitle from '@/components/PageTitle';
3+
4+
export default function Sobre() {
5+
return (
6+
<div>
7+
<PageTitle
8+
title="SOBRE"
9+
/>
10+
11+
<div className="max-w-7xl mx-auto px-6 py-20 space-y-32">
12+
{/* Section 1: Institutional */}
13+
<div className="flex flex-col md:flex-row items-center gap-16">
14+
<div className="flex-1 space-y-6 text-2xl text-zinc-700 leading-relaxed text-justify">
15+
<p>
16+
Fundada em 1994, a <span className="font-bold text-zinc-900">AAACEC</span> (Associação Atlética Acadêmica da Ciência e Engenharia de Computação) é a entidade discente do <span className="font-bold text-zinc-900">IC</span> (Instituto de Computação) e da <span className="font-bold text-zinc-900">FEEC</span> (Faculdade de Engenharia Elétrica e de Computação) da UNICAMP
17+
responsável por promover atividades esportivas, culturais e sociais para
18+
os estudantes dos cursos de Ciência e Engenharia de Computação.
19+
</p>
20+
<p>
21+
Além de alegrar a vida des computeires com festas, produtos e outros projetos,
22+
a AAACEC também tem o importante papel de fortalecer a integração e o
23+
pertencimento da comunidade, sendo um grande pilar da identidade
24+
computeira da UNICAMP.
25+
</p>
26+
<p>
27+
Na parte esportiva, a AAACEC, junto com a AAARMM (Associação Atlética
28+
Acadêmica Rubens Murillo Marques), integra a <span className="font-bold text-zinc-900">Liga CEM</span> (composta por discentes da Computação, Estatística e Matemática), que é
29+
quem organiza os treinos, monta os times e representa a AAACEC em campeonatos universitários.
30+
Em contrapartida, a AAACEC apoia a Liga CEM institucional e financeiramente.
31+
</p>
32+
<p>
33+
Essa parceria serve para aumentar o número de atletas e, consequentemente, a
34+
competitividade dos times, viabilizando a participação robusta da
35+
Computação Unicamp em importantes campeonatos universitários, como o <span className="font-bold text-zinc-900">Intercomp</span>,
36+
garantindo que nós tenhamos tanto atletas preparados quanto uma
37+
torcida vibrante fora de campo.
38+
</p>
39+
</div>
40+
</div>
41+
</div>
42+
</div>
43+
);
44+
}

components/Calendar.tsx

Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
import React from 'react';
2+
3+
export interface Event {
4+
date: string | Date;
5+
category: "Evento" | "Produto";
6+
name: string;
7+
}
8+
9+
interface CalendarProps {
10+
events: Event[];
11+
}
12+
13+
export default function Calendar({ events }: CalendarProps) {
14+
if (!events || events.length === 0) {
15+
return null;
16+
}
17+
18+
// 1. Sort events by date
19+
const sortedEvents = [...events].sort((a, b) => {
20+
return new Date(a.date).getTime() - new Date(b.date).getTime();
21+
});
22+
23+
const groupedEvents: Record<string, Event[]> = {};
24+
25+
sortedEvents.forEach((event) => {
26+
const d = new Date(event.date);
27+
const monthYear = new Intl.DateTimeFormat('pt-BR', {
28+
month: 'long',
29+
}).format(d).replace(/^\w/, (c) => c.toUpperCase());
30+
31+
if (!groupedEvents[monthYear]) {
32+
groupedEvents[monthYear] = [];
33+
}
34+
groupedEvents[monthYear].push(event);
35+
});
36+
37+
return (
38+
<div className="w-full border-zinc-900 lg:border-2 p-10 rounded-xl max-w-4xl mx-auto">
39+
{Object.keys(groupedEvents).length === 0 ? (
40+
<p className="text-zinc-600 text-center py-4">Nenhum evento agendado.</p>
41+
) : (
42+
Object.entries(groupedEvents).map(([month, monthEvents]) => (
43+
<div key={month} className="mb-8">
44+
<h2 className="text-2xl font-bold text-zinc-900 border-b-2 border-zinc-900 mb-4 pb-2">
45+
{month}
46+
</h2>
47+
48+
<ul className="space-y-4">
49+
{monthEvents.map((event, index) => {
50+
const eventDate = new Date(event.date);
51+
const day = eventDate.getDate();
52+
const weekday = new Intl.DateTimeFormat('pt-BR', { weekday: 'short' }).format(eventDate).replace('.', '');
53+
54+
return (
55+
<li key={`${event.name}-${index}`} className="flex gap-4">
56+
<div className="flex-shrink-0 flex flex-col items-center justify-center bg-zinc-900 text-white rounded-md p-3 min-w-[4rem] text-center">
57+
<span className="text-xs font-semibold uppercase">{weekday}</span>
58+
<span className="text-2xl font-bold leading-none">{day}</span>
59+
</div>
60+
61+
<div className="flex-grow flex flex-col justify-center">
62+
<span className="py-0.5 font-extrabold text-zinc-900">
63+
{event.category}
64+
</span>
65+
<h3 className="text-lg font-medium text-gray-900">{event.name}</h3>
66+
</div>
67+
</li>
68+
);
69+
})}
70+
</ul>
71+
</div>
72+
))
73+
)}
74+
</div>
75+
);
76+
}

0 commit comments

Comments
 (0)