You are browsing as a guest. Sign up (or log in) to start making projects!

Prep App

  • 5 Devlogs
  • 84 Total hours

I'm building a Flutter + Firebase + Gemini-powered SAT prep app designed specifically for international students, who are not aware about US education system. It's also the practical implementation of my research project studying how AI-powered, context-aware tutoring affects SAT outcomes for non-US students across different education systems

Open comments for this post

4h 0m 6s logged

Devlog #4 — Splash Screen + Setup Screen (˶ᵔᗜᵔ˶)ノ゙
Hello everyone!! This is my last devlog for that 80 hrs ( busy with school stuffs) . BEfore it had only 15 language in a big dart file now i did it better and debugged for 3 hrs and had like 28 json files to make it devlog presentable .This one covers the splash screen and the setup screen.
The Splash Screen
the splash screen is the first thing you see when you open Tutorio. The Tutorio logo fades in smoothly on a white background over 1.5 seconds, with a “LOADING…” label and a blue progress bar fading in underneath. Stays for 3 seconds then moves to login. I wrapped the progress bar in a ClipRRect to give it rounded edges instead of the ugly default sharp corners, and made sure to check mounted before navigating so it doesn’t crash if the user somehow exits early.
The Setup Screen
After login and signup, new users hit the setup screen before accessing anything else. This is genuinely the most important part of Tutorio’s whole concept — because the app is built specifically for international students, I need to know who you are before the AI can actually help you properly.
The screen is split into two steps using a PageView with NeverScrollableScrollPhysics so users can only move forward using the button, not by swiping. Step 2 captures the student profile — grade, school system , home country, learning style, daily study time, and target SAT score. All six required. Once done it saves to Firestore under the user’s UID with setupComplete: true so this screen never appears again.
Step 1 is where it got interesting. I needed to support 28 languages with their flags in a grid — Arabic, Bengali, Hindi, Nepali, Mandarin, Vietnamese, Turkish and more. My first instinct was to just keep everything in a giant Dart map directly in the code, something like:
dartconst Map<String, Map<String, String» localizedValues = {
‘en’: {‘welcome’: ‘Welcome to Tutorio!’},
‘ar’: {‘welcome’: ‘مرحباً بك في Tutorio!’},
};
And honestly for like 2-3 languages this works fine. Zero setup, no async loading, VS Code catches typos instantly. But the second I scaled to 27 languages it completely fell apart.
The Dart files were getting thousands of lines long and impossible to read. If I wanted someone to fix a typo in Vietnamese or Turkish I’d have to hand them a raw .dart code file which is both a security risk and a syntax disaster waiting to happen. And worst of all, Flutter would load every single language’s strings into RAM at launch even though the user only needs one language active at a time. Complete waste.
So I switched everything to external JSON files — en.json, ar.json, ne.json, one per language — all sitting inside assets/translations/. Then integrated the easy_localization package which lets me just call .tr() on any text widget anywhere in the app:
dartText(‘welcome_msg’.tr())
The package dynamically opens the correct JSON file based on whatever language the user picked in setup, extracts the right string, and swaps it in on the fly. The Dart code went back to being clean UI logic with zero hardcoded text sitting in it.
The best part — if I want to add language number 29, I don’t touch a single line of Flutter code. I just drop a new .json file into the translations folder and it works.
Bugs I hit along the way 😭

Broken Imports: Restructuring into subfolders broke every import path reference and I had to fix them all manually. Not fun.
Cascade Failure: An empty placeholder .dart file caused a domino effect and broke 4 other working files at once. Took forever to figure out what happened lol.
Deprecation Warnings: Had to swap every .withOpacity() call across the project for the new .withValues(alpha:) method.

Anyway that’s everything!! Next devlog covers the home screen and AI question engine. See you then (˶ᵔᗜᵔ˶) ✧

0
0
2
Open comments for this post

20m 29s logged

(#devlog4)
Hello everyone(˶ᵔᗜᵔ˶)ノ゙,
Welcome to Devlog #04 of my SAT Prep app of covering wot i did
Hope you all are doing great. So right after finishing the log-in page, I jumped straight into getting the signup screen fully sorted out. Just like before, I made sure it connects smoothly to the home screen and lets you quickly tap back to the login page if you already have an account. I kept the exact same three options here too: full name with email/password, phone number signup, and a quick Google link. Since I had already gone through the absolute ringer getting Firebase and the whole ./gradlew signingReport SHA key situation set up for the phone auth on the login side, getting it running here wasn’t as brutal… but ugh, making sure the new account creation logic passed the user’s name correctly to the Firebase database so it actually updates their profile still took some annoying tweaking under the hood ∘ ∘ ∘ ( °ヮ° )I also cleaned up the styling here to match the new look completely! I dumped the old circular buttons and that top dark gap, changing it to the clean, edge-to-edge white layout. The fields and rectangular social buttons now stretch all the way across the screen beautifully ദ്ദി(˵ •̀ ᴗ - ˵ ) ✧It feels way less cramped now, and everything aligns perfectly from the top to the bottom of the phone screen. Having both screens look identical makes the whole app feel like a real product now. So, yea and has like that asking ur education system so that the ai explanation and learning environment system will know and help u better. I’ll upload a read me on monday and this is my sign up screen. Thank You all so much for reading. Have a nice day =) ( i also learned we can upload more than one ss) :)

0
0
1
Open comments for this post

29m 31s logged

(#devlog3)
I’m covering wot i did
So yeah, for the login screen, I finally got it all hooked up and navigating properly to the home screen and the signup page. For the actual login options, I went with email/password, phone number, and Google sign-in. Getting all of that working with Firebase was honestly a massive headache, especially the phone auth side of things. It was tripping up so much that I literally had to rip it all out at one point, start over, and re-add it from scratch.To finally get it to cooperate, I had to create a separate auth_service.dart file to handle the logic and open up the terminal to run ./gradlew signingReport. That gave me the SHA keys I needed to paste into the Firebase console so the SMS codes would actually send. Design-wise, I wasn’t totally feeling the color choices and layout at first. It had these circular buttons and after that i changed to rectangle and i am not still sure with colour combo some times i want like classic and sometimes bubbly all of the options work by firebase ( since i using all google like gemini api,firebase n alll so i use firebase)

0
0
3
Open comments for this post

67h 30m 21s logged

bruhhhh!!! its my first event so I didn’t know that we have to write devlog ( my first devlog had 1 view so i didnt upload other devlog i thought i’ll cover at end) so dumb okie now i cover wot ever i did in 5 devlogs okie this is my 1st one (#devlog2) soo yea after i set my flutter bg and all i created a new file login screen and i spent alot of time first selecting wot wot to keep like first i kept options: facebook,google,github,email and phone but i dont use fb yea so I was about to create one (for meta developer acc and testing) but i thought maybe i shouldnt add fb cuz yk young people rarely use it and i also removed github cuz there is rarely one in a sat app, so yea at last i kept phone,email and google and look this is my finalized app logo and in next devlog i’ll tell wot i finalized in my log in screen ( in next 15 min)

0
0
2
Open comments for this post

11h 12m 30s logged

Devlog #1 Heyyy!!! i’m sweta and i’m making a SAT prep app for international students. So, most prep apps assume cultural context American students already have — idioms, references, essay phrasing. International students often lose points not from weak math, but from never having heard a phrase like “the writing was compelling.” This app gives AI-generated explanations that adapt to the student’s education system and English level.
Stack: Flutter (one app for Android/iOS/web), Dart (Flutter’s language), Firebase (handles accounts/data, no server needed), Gemini API (generates explanations).
Installing Flutter
winget didn’t have it, so I cloned it from GitHub:
git clone https://github.com/flutter/flutter.git C:\flutter
Added it to PATH so the terminal recognizes the flutter command:
$env:Path += “;C:\flutter\bin”
Ran flutter doctor to check the setup.
VS Code + Android SDK
Installed the Flutter extension (pulls in Dart too) — had to restart VS Code before commands appeared. Installed Android Studio only to get the Android SDK in the background; all real coding happens in VS Code. Fixed missing command-line tools via Android Studio’s SDK Manager, and accepted licenses with flutter doctor –android-licenses.
Skipping the emulator
Emulators eat RAM my laptop doesn’t have spare. Testing on my real phone over USB instead — enabled Developer Options + USB debugging, allowed the popup, confirmed detection with flutter devices.
First run
flutter create sat_prep_app
cd sat_prep_app
flutter run
create makes a starter project with a demo app built in. run compiles and installs it on the connected phone. Slow first build, but it worked — proof the whole chain (Flutter → SDK → phone) connected properly.
Firebase setup
Created a free Firebase project (no billing), registered an Android app, placed the generated google-services.json config into android/app/. Added packages:
flutter pub add firebase_core
flutter pub add firebase_auth
flutter pub add google_sign_in
pub add installs pre-written code instead of writing it myself. firebase_core is required for any Firebase feature, firebase_auth handles sign up/login, google_sign_in adds Google login.
Linking Flutter to Firebase
dart pub global activate flutterfire_cli
npm install -g firebase-tools
firebase login
flutterfire configure
The FlutterFire CLI needed the separate official Firebase CLI too. The last command generated firebase_options.dart, auto-configuring Android, iOS, web, macOS, and Windows at once.
Making the app use it
Added Firebase initialization to the app’s startup code, swapped the demo app for a placeholder “Sign Up Screen Coming Soon” screen. Ran it again — showed up cleanly, no crashes, confirming Firebase is wired in.
What’s next
Real Sign Up and Login screens, connected to Firebase Authentication, then (country, education system, English level, SAT goals) (i’m using my phone not a emulator)

0
0
1

Delete project?

Are you sure you want to permanently delete this project? This action cannot be undone.

All devlogs, followers, and associated data will be removed.

Followers

Loading…