StudySnap

Inspiration

As students, we have all experienced the frustration of staring at pages of messy notes the night before an exam, wishing there was a faster way to organize and review everything. Traditional study tools require you to manually create flashcards and quizzes, which takes up valuable time that could be spent actually learning.

We wanted to build something that eliminates that friction. A tool where you simply paste your notes or upload a PDF and instantly get everything you need to study effectively.

The idea behind StudySnap was born from a simple question: What if AI could do the tedious part of studying for you, so you can focus on actually learning?

What It Does

StudySnap is a mobile study app that takes your raw notes or PDF documents and transforms them into structured learning materials using AI.

When you paste text or upload a PDF, the app generates:

Reviewer Summaries Concise bullet point breakdowns with key terms highlighted.

Flashcards Interactive, swipeable cards for quick memorization.

Multiple Choice Quizzes Auto-generated questions with explanations for each answer.

Oral Q&A Question and answer pairs designed for verbal self-testing with text-to-speech and voice recording capabilities.

Audio Q&A Mode (NEW!) Hands-free study mode with automatic playback:

  • Text-to-speech reads questions and answers automatically
  • Smart sequence: Question → Wait 3s → Answer → Wait 2s → Next
  • Pause/resume controls for flexible studying
  • Works even with screen off for true hands-free learning
  • Voice recording for self-assessment
  • Perfect for commuting, exercising, or multitasking

On top of that, StudySnap includes a spaced repetition system that tracks your performance on flashcards using:

  • Knew
  • Unsure
  • Forgot

It then schedules reviews at optimal intervals.

A streak tracker keeps you motivated to study every day.

The app works 100% offline - all your data is stored locally on your device, and only AI generation requires internet.

How We Built It

Frontend

  • React Native with Expo SDK 54
  • expo-router for file-based navigation
  • react-native-reanimated for smooth card flip and transition animations
  • AsyncStorage for local, offline-first data persistence
  • expo-file-system for PDF handling
  • expo-image-picker and expo-document-picker for file uploads
  • expo-speech for text-to-speech in Audio Q&A mode
  • expo-av for audio recording and playback
  • expo-keep-awake for background audio playback

AI Integration

  • Google Gemini API (direct integration, no backend proxy)
  • Multiple Gemini models with automatic fallback (Gemini 3, 2.5, 2.0, 1.5)
  • Enforced responseMimeType: "application/json" for clean structured output
  • PDF documents sent directly to AI as base64 for native analysis
  • Dynamic prompt generation based on user-specified quantities

Data Storage

  • Fully offline-first architecture
  • All study sets, flashcards, schedules, and progress stored in AsyncStorage
  • No database or server required
  • API rate limit tracking from Gemini response headers

Design

  • Custom dark theme with a navy blue palette (#0A1628)
  • Inter font family
  • Haptic feedback for a polished native feel
  • Responsive design that works on all device sizes
  • Beautiful onboarding flow with API key setup

Challenges We Ran Into

Structured AI Output

Getting Gemini to consistently return valid, well-structured JSON with the correct number of flashcards, quiz questions, and summaries required extensive prompt engineering and response validation. We solved this by:

  • Creating dynamic prompts that specify exact quantities
  • Implementing robust JSON extraction from various response formats
  • Adding multiple model fallback with automatic retry logic

PDF Direct Analysis

Initially, we tried extracting text from PDFs manually, but this lost formatting and context. We switched to sending PDFs directly to Gemini as base64 inline data, allowing the AI to read and understand the document natively.

Spaced Repetition Logic

Implementing the scheduling algorithm client-side, with ease factors, interval calculations, and due dates, was mathematically tricky.

The core formula:

interval(n+1) = interval(n) × ease

Where:

  • If the user selects "knew", ease increases
  • If the user selects "forgot", ease resets
  • If the user selects "unsure", ease adjusts slightly

Cross-Platform Consistency

Making animations, gestures, and safe area handling work smoothly across iOS, Android, and web required careful platform-specific adjustments and responsive scaling functions.

Offline-First Architecture

Keeping all data in AsyncStorage while still supporting AI generation required carefully designing the data flow so nothing gets lost. We implemented:

  • Automatic data persistence after every change
  • Rate limit tracking and display
  • Source file storage for regeneration

Background Audio Playback

Making audio continue playing when the screen is off required:

  • Configuring iOS background audio modes
  • Using setInterval polling instead of setTimeout for reliability
  • Implementing expo-keep-awake to prevent device sleep
  • Managing audio session state across app lifecycle

Accomplishments We're Proud Of

✅ The entire study generation pipeline works end-to-end. Upload a PDF or paste notes and get flashcards, quizzes, summaries, and Q&A in seconds.

✅ The swipeable flashcard UI with flip animations and haptic feedback feels genuinely satisfying to use.

✅ The spaced repetition system intelligently schedules reviews based on user performance.

AI Lab feature shows all source materials and allows regeneration with custom quantities.

Regenerate functionality on all content types with user-specified counts (e.g., "generate 20 Q&A questions").

✅ The app looks and feels like a polished, market-ready product with its custom dark theme and smooth animations.

100% offline operation except for AI generation - no server, no database, no sign-in required.

Audio Q&A Mode with automatic playback that works even with screen off for true hands-free studying.

✅ Beautiful onboarding flow that guides users through API key setup.

✅ API usage statistics displayed in Settings showing real-time rate limits.

What We Learned

Prompt Engineering Is an Art

Small changes in how you instruct an AI model can dramatically affect output quality and consistency. We learned to:

  • Use "EXACTLY X items" instead of "X+ items"
  • Provide clear JSON structure examples
  • Add quality guidelines and content requirements

Offline-First Design Requires Discipline

It forces you to think carefully about data flow, persistence, and what truly needs a server. We discovered that most features work better offline.

Mobile UX Matters

Haptic feedback, smooth animations, and proper safe area handling make the difference between an app that feels amateur and one that feels professional.

Spaced Repetition Research Is Powerful

Diving into the science behind memory retention and building it into the app gave us a deeper appreciation for evidence-based learning techniques.

Direct AI Integration Is Better

Instead of building a backend proxy, sending requests directly to Gemini from the mobile app simplified architecture and improved reliability.

Background Audio Is Tricky

Mobile platforms handle background tasks differently. We learned that:

  • setInterval is more reliable than setTimeout in background
  • iOS requires specific background mode permissions
  • Keeping the audio session active is crucial for uninterrupted playback

What's Next for StudySnap

Enhanced PDF Support

  • Multi-page PDF analysis
  • PDF annotation and highlighting
  • Extract specific pages for focused study

Cloud Sync (Optional)

  • Optional cloud backup for users who want it
  • Keep the offline-first approach as default
  • End-to-end encryption for privacy

Social Features (✔️)

  • Share study sets with classmates via QR codes

Performance Analytics

  • Detailed charts showing your study trends
  • Identify weak areas and improvement over time
  • Study session history and time tracking

More AI Models

  • Support additional providers beyond Gemini
  • Let users choose their preferred AI model
  • Compare results from different models

Smart Study Recommendations

  • AI suggests which topics to review based on performance
  • Optimal study session timing
  • Personalized learning paths

Built For

DeveloperWeek 2026 Hackathon - Replit Track

Developer

Jerson Cerezo (@jersondev)

Tech Stack

React Native • Expo • TypeScript • Google Gemini AI • AsyncStorage • Reanimated

Built With

Share this project:

Updates

posted an update

StudySnap Update - Cloud Sharing with Auto-Expiration!

We're excited to announce a major update to StudySnap - now you can share your study sets with anyone, anywhere!


What's New

Cloud Sharing with Auto-Expiration

  • Share study sets via QR code with anyone
  • Two sharing modes:
    • Quick Share (QR Only): Instant QR code generation (text only)
    • Full Share (Cloud): Upload to cloud storage (includes PDFs & images)
  • Auto-delete after 24 hours, 7 days, or 30 days
  • Perfect for study groups and classmates

QR Code Sharing

  • Generate QR codes instantly
  • Scan to import study sets
  • Works offline after download
  • No account or login required

Smart Expiration System

  • Choose expiration time: 24 hours, 7 days, or 30 days
  • Files automatically deleted after expiration
  • Saves storage space automatically
  • Default: 24 hours for quick shares

Full Media Support

  • Share PDFs with your study sets
  • Include images and photos
  • Up to 10MB per file
  • All content preserved in cloud shares

Technical Highlights

Auto-Expiring Cloud Uploads

// Files automatically deleted after chosen time
const expirationTimestamp = Math.floor(Date.now() / 1000) + (24 * 60 * 60);
formData.append('expiration', expirationTimestamp.toString());

// Cloudinary handles deletion automatically - no cleanup needed!

Dual Sharing Methods

// Quick Share - Instant, no upload
const qrData = generateQRData(studySet);

// Full Share - Includes media files
const cloudUrl = await uploadToCloudinary(studySet, onProgress, '24h');
const qrData = generateCloudinaryQRData(cloudUrl);

Smart File Handling

// Absolute paths for proper file storage
const filePath = `${FileSystem.documentDirectory}${studySet.id}.pdf`;
const file = new File(filePath);
await file.create();
await file.write(base64Data);

How It Works

Sharing a Study Set

  1. Open any study set
  2. Tap the Share button
  3. Choose sharing method:
    • Quick Share: Instant (text only)
    • Full Share: Upload to cloud (includes PDFs/images)
  4. Select expiration time (24h, 7d, or 30d)
  5. Generate QR code
  6. Share with friends!

Receiving a Study Set

  1. Tap Receive on home screen
  2. Scan the QR code
  3. Study set imports automatically
  4. All content downloaded (including PDFs/images)
  5. Start studying immediately!

Use Cases

For Study Groups:

  • Share flashcards and quizzes instantly
  • Include PDFs and images in shares
  • Set 24h expiration for exam prep sessions
  • Everyone gets the same materials

For Classmates:

  • Share lecture notes after class
  • Include professor's slides (PDFs)
  • Share whiteboard photos
  • Quick shares for group study sessions

For Teachers:

  • Distribute study materials to students
  • Set expiration for assignment deadlines
  • Temporary access to resources
  • No permanent storage needed

Features

Quick Share (QR Only)

  • Instant generation
  • No upload required
  • Data embedded in QR code
  • Text only (no PDFs/images)
  • Perfect for flashcards and quizzes

Full Share (Cloud)

  • Uploads to Cloudinary
  • Includes PDFs and images
  • Auto-deletes after expiration

- Upload progress indicator

Privacy & Security

  • Optional sharing only (nothing uploaded by default)
  • Auto-expiring content (no permanent storage)
  • No account required
  • No tracking or analytics

Performance

  • <1s QR code generation
  • <10s cloud uploads (typical)
  • <5s download and import
  • Works offline after download

Get Started

Quick Start:

  1. Create or open a study set
  2. Tap the Share button
  3. Choose Quick Share or Full Share
  4. Generate QR code and share!

Tips & Tricks

Maximize Sharing:

  • Use 24h expiration for quick study sessions
  • Use Full Share to include lecture PDFs
  • Take photos of whiteboards and share them
  • Share before exams for group study

Pro Tips:

  • Quick Share is instant but text-only
  • Full Share takes a few seconds but includes everything
  • 7-day expiration is good for weekly study groups
  • 30-day expiration for semester-long courses

Log in or sign up for Devpost to join the conversation.

posted an update

StudySnap Update - New AI Chat Feature & Model Selection!

We're excited to announce major updates to StudySnap, your AI-powered study companion!

What's New

** AI Study Assistant Chat**

  • Chat directly with AI about your study materials
  • Ask questions, get explanations, and quiz yourself
  • Context-aware responses based on your notes, PDFs, and images
  • Chat history saved locally for each study set
  • Beautiful markdown formatting for better readability

** Multiple AI Model Support**

  • Choose from 15+ Gemini AI models
  • Includes latest Gemini 3, Gemini 2.5, and Gemini 2.0 models
  • Open-source Gemma models (1B to 27B parameters)
  • Smart fallback system - automatically tries alternative models if one is rate-limited
  • Rate limit information displayed for each model

** Professional Chat UI**

  • Clean, modern chat interface
  • Markdown rendering for formatted responses (bold, italic, code blocks, lists)
  • AI messages now use 95% screen width for better readability
  • Typing indicators and smooth animations
  • Quick suggestion chips to get started

** UI Improvements**

  • Fixed keyboard handling - input field stays visible when typing
  • Optimized message layout to reduce scrolling
  • Model picker modal with detailed descriptions
  • Clear chat history option

Technical Highlights

// Smart model fallback system
const modelsToTry = selectedModel 
  ? [selectedModel, ...GEMINI_MODELS.filter(m => m !== selectedModel)] 
  : GEMINI_MODELS;

// Markdown rendering in chat
<Markdown style={markdownStyles}>
  {msg.content}
</Markdown>

Log in or sign up for Devpost to join the conversation.