Files
binouz/components/grade-card.tsx
T
Puechberty Arthur b7010a1704 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.
2026-04-28 21:09:55 +02:00

34 lines
1010 B
TypeScript

import PurchaseButton from "@/components/purchase-button";
import { formatPrice } from "@/lib/format";
type GradeCardProps = {
grade: {
id: string;
name: string;
price: number;
description: string;
};
};
export default function GradeCard({ grade }: GradeCardProps) {
return (
<div className="flex h-full flex-col justify-between rounded-3xl border border-white/10 bg-white/5 p-6 backdrop-blur">
<div>
<p className="text-xs uppercase tracking-[0.3em] text-cyan-200/80">
{grade.name}
</p>
<p className="mt-4 text-3xl font-semibold text-white">
{formatPrice(grade.price)}
</p>
<p className="mt-3 text-sm text-slate-300">{grade.description}</p>
</div>
<div className="mt-6 flex items-center justify-between">
<span className="text-[10px] uppercase tracking-[0.3em] text-slate-400">
Instant access
</span>
<PurchaseButton gradeId={grade.id} />
</div>
</div>
);
}