Every UCC Past Exam Paper.
One Place.

Browse courses across UCC. Past papers are always free — Pro unlocks marking schemes and quiz practice.

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

Admin Dashboard

Live stats from Supabase — owner access only.

Total users
New this week
Pro subscribers
Free users
Conversion rate
Quizzes this week
🔥 Most Viewed Courses
Click Refresh to load data.
📊 Quiz Activity (this week)
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);

Your Account

Subscription Free

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