A collaborative study app where students join shared Study Spaces to learn together. Each space supports flashcard decks and rich-text notes.
To run the Flutter project locally:
- Ensure you have the Flutter SDK installed.
- Clone this repository.
- Run
flutter pub getin your terminal to install dependencies. - Run
flutter run -d chrometo launch the web version, or run it on a connected mobile emulator.
To install the app directly on an Android device:
- Navigate to the "Releases" section.
- Download the latest
study_spaces.apkfile. - Transfer the downloaded APK file to your Android device.
- Open the file on your device to complete the installation and launch the app.
Users can easily create a new account or log into an existing one using Supabase authentication.
Your Home screen acts as a dashboard. The first icon on top right is to Join a study space, the second icon is to sign out and go back to Login page, and the third icon is to go to your profile.
From here, you can create a brand new personal space by click on the "+" on bottom right.
Inside a Space, you can create custom flashcard Decks. Once a deck is created, you can easily add, edit, or delete individual cards to build your study material.
Card Management:
Alongside flashcards, users can switch to the Notes tab to write, edit, and store rich-text notes directly within their study space.
Alongside creating your own spaces, you can join your friends' spaces too! Click on "Join" icon on the top right (1st Icon), and enter your friend's space code. Each public space has its own unique 6 digit code. Remember, you can ONLY join public spaces.
The 6 digit codes are present as selectable text on the top of the appbar alongside the Space name.
Space Creators' View:
Joinees' View:
Users can update their personal profile, including setting an avatar via a URL or selecting an image from your gallery.
- Frontend: Flutter
- Backend: Supabase
- State Management: Riverpod
- Routing: GoRouter
- Networking: Dio
- Utilities: image_picker, shimmer
- Editor: flutter_quill
- Initialise Flutter project with folder structure.
- Create and configure Supabase free-tier project; design full DB schema.
- Integrate supabase_flutter, riverpod, and dio for the core stack.
- Implement sign up, login, and logout functionality using Supabase Auth.
- Build auth guard and session persistence using GoRouter redirect.
- Build create space flow (name, description, visibility).
- Implement join space via invite code generation and validation.
- Configure RLS policies so users only access their own spaces.
- Build spaces list and individual space home screen.
- Add user profile screen with avatar via Supabase Storage.
- [Bonus Feature] URL based profile pic: Allows user to enter link of image from the internet, and uses it as the profile picture.
- Build flashcard deck list and deck creation UI within a space.
- Implement add/edit/delete individual flashcards (front & back).
- Add flip animation for review mode and swipe-through study session.
- Build notes list and editing UI with flutter_quill rich text editor.
- [WIP] Persist all content to Supabase with full CRUD operations.
- Build threaded comment UI on flashcards and notes.
- Set up Supabase Realtime subscriptions for live comment updates.
- Polish UI with loading skeletons, empty states, and error toasts.
- Handle edge cases: no internet, auth expiry, and duplicate join codes.
- [WIP] Write integration tests and finalise README documentation.
- AI-Generated Flashcards: Integrate Supabase Edge Functions with an LLM API to automatically generate flashcard decks from user notes.
- Spaced Repetition System (SRS): Implement a Mastery-based review algorithm using Postgres timestamps to schedule cards for optimal retention.
- AuthExpiry for GoRouter
- Integration Testing
- Flutter Official Documentation
- Dart Official Documentation
- MaterialApp Official Documentation
- Material Widgets Official Documentation
- Supabase Flutter Client Library
- Supabase Flutter Getting Started
- Supabase DBMS Fundamentals
- Riverpod Getting Started Guide
- Flutter Riverpod Tutorial Playlist
- Flutter Supabase Tutorial Playlist
- Flutter Supabase Auth Tutorial
AI tooling was used in a strictly limited capacity during this project. Usage was restricted to:
- Debugging and Ideation
- Supabase Storage Integration: Resolving errors and syntax issues while working with Supabase storage, image_picker, io.


















