Welcome back!

Study smarter for
UCC exams.

Past papers for 100+ courses — always free. Pro unlocks marking schemes, MCQ quiz practice, and module discussions.

—exam papers
—marking schemes
—quiz questions
—courses covered
—modules indexed

Browse by Degree

Pick a degree type to see all courses and past papers.

Simple pricing

Past papers are always free. Pro unlocks everything else.

Free

€0/mo
  • All past exam papers
  • Every module across 100+ courses
  • No account required

Turn your notes into flashcards & MCQs

Paste your lecture notes, upload a file, or drop in a YouTube link — StudyAI generates flashcards and multiple-choice questions from your own material instantly.

🃏 Flashcards ❓ MCQ Practice 💡 Explanations
✨ Pro feature
Type or paste notes
📂
Drop a file here, or click to browse
Supports .pdf, .txt and .md files
0 characters
Cards / Questions
Focus keywords (optional)
Study Set

📅 My Planner

Deadlines & study schedule in one place.

Loading…
No tasks this week yet
Add a study task

Admin Dashboard

Live stats from Supabase — owner access only.

—
Total users
—
Sign-ups today
—
New this week
—
Pro subscribers
—
Free users
—
Conversion rate
—
Quizzes this week
—
1st Year
—
2nd Year
—
3rd Year
—
4th Year
—
Final Year
🔥 Most Viewed Courses (last 7 days)
Click Refresh to load data.
🎓 Most Signed-Up Courses
Click Refresh to load data.
📊 Quiz Activity (this week)
Click Refresh to load data.
👥 All Members
Click Refresh to load data.
👤 Recent Sign-ups (last 30)
Click Refresh to load data.
⚙️ Supabase Tables Required
Run these once in Supabase SQL Editor to enable course view tracking and quiz score history:
-- Course views (for Most Viewed)
CREATE TABLE IF NOT EXISTS course_views (
  id UUID DEFAULT gen_random_uuid() PRIMARY KEY,
  course_id TEXT NOT NULL,
  user_id UUID REFERENCES auth.users(id) ON DELETE SET NULL,
  created_at TIMESTAMPTZ DEFAULT NOW()
);
ALTER TABLE course_views ENABLE ROW LEVEL SECURITY;
CREATE POLICY "insert_views" ON course_views FOR INSERT WITH CHECK (true);
CREATE POLICY "owner_read_views" ON course_views FOR SELECT USING (true);

-- Quiz attempts (for weekly email + analytics)
CREATE TABLE IF NOT EXISTS quiz_attempts (
  id UUID DEFAULT gen_random_uuid() PRIMARY KEY,
  user_id UUID REFERENCES auth.users(id) ON DELETE CASCADE,
  module_code TEXT NOT NULL,
  topic TEXT NOT NULL,
  score INTEGER NOT NULL,
  total INTEGER NOT NULL,
  pct INTEGER NOT NULL,
  created_at TIMESTAMPTZ DEFAULT NOW()
);
ALTER TABLE quiz_attempts ENABLE ROW LEVEL SECURITY;
CREATE POLICY "insert_own" ON quiz_attempts FOR INSERT WITH CHECK (auth.uid() = user_id);
CREATE POLICY "read_own"   ON quiz_attempts FOR SELECT USING (auth.uid() = user_id);

-- Notifications (reply alerts)
CREATE TABLE IF NOT EXISTS notifications (
  id UUID DEFAULT gen_random_uuid() PRIMARY KEY,
  user_id UUID REFERENCES auth.users(id) ON DELETE CASCADE,
  type TEXT NOT NULL DEFAULT 'reply',
  post_id UUID,
  reply_id UUID,
  module_code TEXT,
  preview TEXT,
  read_at TIMESTAMPTZ,
  created_at TIMESTAMPTZ DEFAULT NOW()
);
ALTER TABLE notifications ENABLE ROW LEVEL SECURITY;
CREATE POLICY "read_own_notifs"   ON notifications FOR SELECT USING (auth.uid() = user_id);
CREATE POLICY "update_own_notifs" ON notifications FOR UPDATE USING (auth.uid() = user_id);
CREATE POLICY "service_insert_notifs" ON notifications FOR INSERT WITH CHECK (true);

MCQ Quiz Practice ⚡

Pick a module below to start a quiz. Questions are written specifically for UCC exams.

Quick Quiz — 5 questions
?
—
Free
📊 Stats
—
quizzes done
—
avg score
—
courses visited
🕐 Recently Visited
No courses visited yet.
📝 Quiz History
Loading…
🔔 Notifications
Loading…
Upgrade to unlock marking schemes and quiz practice.

Delete account

Permanently deletes your account, quiz history, and all associated data. This cannot be undone.

Privacy Policy · Terms of Service