A zero-auth academic hub for students to share verified resources. Upload past papers & notes, download peer-approved materials, and enjoy smooth animations - all without logging in!
- π€ One-Click Uploads Drag-and-drop interface with metadata tagging (year, semester, resource type)
- π‘οΈ Manual Verification Supabase dashboard moderation before publication
- π¨ Dynamic Animations Gradient hover effects & card entrance animations
- π Theme Toggler Smooth light/dark mode transition
- π± Mobile-First Design Fully responsive grid layout
- π Secure Backend Server-side operations with Prisma ORM
- Node.js 18.x+
- pnpm 9.x+
- Supabase account
git clone https://github.com/devalentineomonya/Okoa-Sem-NextJs-Ts-Prisma-Supabase.git
cd Okoa-Sem-NextJs-Ts-Prisma-Supabase
pnpm install
- Create
.env.local
:
NEXT_PUBLIC_SUPABASE_URL=your_project_url
NEXT_PUBLIC_SUPABASE_ANON_KEY=your_anon_key
SUPABASE_SERVICE_ROLE_KEY=your_service_key
- Initialize database:
pnpm prisma db push
- Start development server:
pnpm run dev
okoa-sem/
βββ app/
β βββ upload/ # Resource upload page
β βββ resources/ # Public download section
β βββ api/ # Secure server actions
βββ components/
β βββ ResourceCard/ # Animated card component
βββ lib/
β βββ supabase/ # Storage & DB client
βββ prisma/
βββ schema.prisma # Resource metadata model
-
Resource Card Animations Uses Framer Motion for:
<motion.div initial={{ y: 50, opacity: 0 }} animate={{ y: 0, opacity: 1 }} whileHover={{ background: "linear-gradient(...)" }} >
-
Theme Toggle Context API + CSS Variables:
:root { --primary-bg: #ffffff; --primary-text: #000000; } [data-theme="dark"] { --primary-bg: #000000; --primary-text: #ffffff; }
- Row-Level Security Supabase policies for resource moderation
- Server-Side Validation All uploads processed via Next.js API routes
- Env Protection Sensitive keys never exposed to client
- Content Scanning Manual verification prevents malware uploads
Upload Interface | Resource Cards |
---|---|
![]() |
![]() |
Dark Mode | Mobile View |
---|---|
![]() |
![]() |
Admin Setup:
- Enable Supabase Storage
- Create moderation policy in SQL:
CREATE POLICY "Manual approval" ON storage.objects
FOR INSERT WITH CHECK (bucket_id = 'pending-approval');
- Fork the repository
- Create feature branch:
git checkout -b feat/your-feature
- Follow our Contributiion
- Submit PR with:
- Component tests
- Screen recordings for UI changes
- Updated documentation
MIT License - See LICENSE for details.
π§ Missing something? Open an issue