feat: add authentication and user management features

- Implemented AuthButton component for Discord sign-in and sign-out functionality.
- Created CopyButton component for copying server IP addresses.
- Developed EventCard and GradeCard components for displaying events and grades.
- Added Footer and Navbar components for site navigation and information.
- Introduced PurchaseButton for handling grade purchases with Stripe integration.
- Created SectionHeader component for consistent section titles.
- Implemented session management with SessionProvider for NextAuth.
- Set up PostgreSQL database with Docker and Prisma for data management.
- Added admin guard functionality to restrict access to certain routes.
- Configured NextAuth with Discord provider for user authentication.
- Defined Prisma schema for user, admin, grade, event, and purchase models.
- Seeded database with initial grades and events data.
- Added SVG hero image for the landing page.
- Extended NextAuth types to include additional user properties.
This commit is contained in:
Puechberty Arthur
2026-04-28 21:09:55 +02:00
parent 87deccb662
commit b7010a1704
43 changed files with 2794 additions and 126 deletions
+34
View File
@@ -0,0 +1,34 @@
<svg width="1600" height="900" viewBox="0 0 1600 900" fill="none" xmlns="http://www.w3.org/2000/svg">
<defs>
<linearGradient id="sky" x1="0" y1="0" x2="0" y2="1">
<stop offset="0" stop-color="#0f172a" />
<stop offset="0.6" stop-color="#111827" />
<stop offset="1" stop-color="#0b1020" />
</linearGradient>
<linearGradient id="glow" x1="0" y1="0" x2="1" y2="1">
<stop offset="0" stop-color="#7c3aed" stop-opacity="0.55" />
<stop offset="1" stop-color="#22d3ee" stop-opacity="0" />
</linearGradient>
</defs>
<rect width="1600" height="900" fill="url(#sky)" />
<circle cx="1220" cy="170" r="160" fill="#1e293b" opacity="0.55" />
<rect y="520" width="1600" height="380" fill="#0b1324" />
<rect y="560" width="1600" height="340" fill="#0a0f1f" />
<rect y="590" width="1600" height="4" fill="#1f2937" opacity="0.6" />
<rect y="640" width="1600" height="4" fill="#111827" opacity="0.6" />
<rect y="700" width="1600" height="200" fill="#05070d" opacity="0.7" />
<g opacity="0.85">
<rect x="120" y="430" width="80" height="80" fill="#1f2937" />
<rect x="210" y="430" width="80" height="80" fill="#334155" />
<rect x="300" y="430" width="80" height="80" fill="#1f2937" />
<rect x="390" y="430" width="80" height="80" fill="#0f172a" />
<rect x="520" y="400" width="80" height="80" fill="#1f2937" />
<rect x="610" y="400" width="80" height="80" fill="#334155" />
<rect x="700" y="400" width="80" height="80" fill="#1f2937" />
<rect x="980" y="420" width="80" height="80" fill="#1f2937" />
<rect x="1070" y="420" width="80" height="80" fill="#334155" />
<rect x="1160" y="420" width="80" height="80" fill="#1f2937" />
<rect x="1250" y="420" width="80" height="80" fill="#0f172a" />
</g>
<rect width="1600" height="900" fill="url(#glow)" opacity="0.25" />
</svg>

After

Width:  |  Height:  |  Size: 1.8 KiB