Please sign in to access this page

Studymate Tracker

Studymate Tracker

49 devlogs
37h 37m
Created by Neer Sheth

StudyMate is an open-source, Python-based study-time tracker designed to help you stay focused and monitor your learning habits efficiently. Featuring both a Colorama-based CLI menu and a React based web GUI, StudyMate is accessible and fun to use for both terminal enthusiasts and people who love aesthetic, animated UIs. Core features StudyMate offers are:
- Log study sessions by subject and duration
- Auto-time your sessions using an integrated timer, stopwatch, or pomodoro mode, and automatically log them
- Track your progress through weekly and monthly statistics and session summaries by subject
- Create subjects on the fly and view all past sessions in a list format

Timeline

Fixed a few issues, finalised the backend, and finalised my README. I think I'll be ready to ship in a few days after my friend tests it!

Update attachment

Fixed some consistency issues and some bugs with the pomodoro and stopwatches. I might need to refactor a lot of my code, since some of it is buggy and it's very inconsistent because I've been building this across a long period of time while learning as well.

Update attachment

Built the pomodoro. Lowkey easier than the timer but probably cuz I practiced it with both the timer and stopwatch before.

Update attachment

Added the stopwatch. This was much easier than the timer and I did it much quicker.

Update attachment

243 lines of code later, and my Timer.tsx is finished (complete with logging and everything!)

AHHH WHY IS THIS SO COMPLICATED :( I've worked on the main timer section ig, now I need to figure out how the user is meant to log it

Make delete button in Log reset dropdown asw. Added a confirmation before deleting subject - something I should have done before.

Update attachment

Found a few bugs in my program that were causing the issues I had earlier. Also refactored my logging functions so they are easier for me to use in the timers.

Update attachment

Massive devlog because SoM was down yesterday. I attempted to create the timer system but got really confused since I've never built something like that before and I messed up all the code big time, so I decided to just spend some time refactoring all my code, rewriting some of the functions, adding comments to help me read the code (since JSX gets super messy), and reorganising the files. Might refactor a bit more before trying to do the timer again.

Update attachment

tried to attach a video but no worky :(

Changed all states to be type compliant. Got logging the session manually working!

Also while recording the clip I realised that I should probably implement some feedback for the user so they know if the logging worked (cuz rn there isn't any and the user probably doesn't have their sessions.json open on another screen like I do)

Update attachment

Worked on changing the Log component to use states so that I can collect and send user input via the API

Update attachment

Refractored all the pop-up menu code so that only 1 menu can be open at once. This involved combining 3 states into one. Also made adding a subject auto-refresh the subject list :)

Update attachment

Added the API for removing a subject, as well as making it auto-refresh the subject list when it's removed. I want to figure out how to auto-refresh when a subject is added asw (because right now that doesn't work).

Update attachment

Added APIs for adding the subject, as well as a refresh button on the subjects list because it (sadly) doesn't automatically update.

Update attachment

APIs! Got the APIs for Subjects, Streaks, and Stats working! Let's go. This was so much easier than I thought using Flask. The way it works is that when you run app.py (which is for the GUI, main.py is for the CLI), the flask server starts. Right now I'm using the Node Development Server to run this but once I've set everything up and built the React app into static code, I'll modify app.py to automatically launch a GUI for this app!

The best (and also the worst, depending on how you look at it) part of this is that it's completely local! All the code and files are stored on device and the servers are run locally, meaning full offline functionality (so you can stay locked in without youtube), full access and control over everything, and no need to login or use accounts or hosting or anything like that.

Created toggle functionality for add subject popup. Worked on add subject screen, also removed anything related to accounts since I'm keeping my app local-only. Got rid of a bunch of unnecessary files.

and I believe that completes the frontend! Now I need to figure out how to link the backend to it.

Update attachment

a bit more frontend
should be done soon before I start working with Flask

Update attachment

Have an exam tmr so haven't done much
Worked on the UI a bit more
Shouldn't take too long to finish the whole app soon :)

Update attachment

2 devlogs ago it didn't add any time for some reason?

More UI! Once I finish this, I need to figure out how to link the Python backend. Shouldn't be too hard after all that refactoring I did.

Update attachment

Worked on log UI. Added dropdown and duration enter fields and remove and submit button (not functional just UI).

Update attachment

More UI! Once I finish this, I need to figure out how to link the Python backend. Shouldn't be too hard after all that refactoring I did.

Update attachment

Worked on more of the UI. Haven't done much recently :(

Update attachment

Added more animations and fixed grid and flexbox layouts. Started working on Log Session menu.

Update attachment

Started animation work in Layout.tsx with Motion (formerly framer-motion). Got some really cool animation setup.

Created stats section and updated the subjects section. This involves creating a list of possible colours and looping through those colours to give visual separation to every subject. (NOTE: The duplicated subjects is just to test the arrangement)

Update attachment

Created VITE app in frontend folder (React + TS). Started building the base dashboard with Greeting and Subjects.

Update attachment

Started making the website, creating the main dashboard layout.

Update attachment

Pretty large devlog. I finalised some designs on Figma, then started building the frontend UI (website) using Vite React + TypeScript. I'll have a fair bit of a learning curve since I haven't used TS before, but I'm up for the challenge. Starting building the main dashboard page.

Update attachment

Continued prototyping the UI design.

Update attachment

Started prototyping UI design in Figma

Update attachment

Worked on adding streaks to my app. Also started planning how I'm going to turn the CLI interface into a website or desktop app. (did a bit more but didn't devlog since hackatime was down)

Update attachment

This marks the completion of StudyMate!

Well, the completion of the main app. Now my focus is on adding additional features the community wants, optimising the current app, and converting the CLI interface into an actual UI (though an app or website).

Update attachment

Added monthly stats feature. Also extracted a getstatsfromtimeframe(timeframe) function so that my weekly and monthly stat functions can just use the reusable getstats function.

Update attachment

fixed some bugs in the weekly stats

Update attachment

Started work on the weekly stats (github blocked rn so cant push commits)

Update attachment

Got pomodoro working (i think) but may be buggy since I haven't tested properly.

Update attachment

Optimised timer function and created stopwatch.

Update attachment

Made some minor changes to the timer function. Also made some minor bug fixes.

Update attachment

Finalised refactoring. Now time to start working on actual features.

Update attachment

Finished the last bit of major refactoring and deleted all the old files. Now all that's left is going through and optimising the codebase (and fixing any bugs I definetly introduced with refactoring).

Update attachment

Started refactoring to optimise for converting to an app or website in the future. This is done by extracting all functional functions away from CLI functions and making them only return data which is then used by CLI functions to display to the user. This means for the app/website, all I need to do is make a new UI function that just uses the logic of the functional function. This is a fairly long process so needs to be continued next time. So far I have finished the stats functions.

Update attachment

Lots and lots of refactoring :)

  1. Lots of code refactoring. Organised reusable functions into different files and removed lots of duplicated code.
  2. Some more refactoring, this time moving a bunch of files around into 2 main new folders (packages) and some more changes to make the code cleaner!
Update attachment

I keep forgetting to devlog :/
Check repo for more frequent commits (still not frequent enough i just get too locked in)

  1. Extracted a log_session function so that I can use parameters to automatically log a session when the user uses the timer function.

  2. Got the timer and auto-logging working! However, the timer system is running in seconds (and hence logging in seconds) so now I need to get it to work in hrs, min, secs.

  3. Stopped printing in stats if stats don't exist. Added subject entering, ctrl+c asks user to discard or keep, auto-logs timer, and a separate function for converting time to hours, minutes, seconds.

  4. Made the convtimespent function cleaner after I learnt about divmod() and realising I had a ton of repeated code that could have been condensed.

  5. One minor change: There was a bug when logging the time after the user Ctrl Cs the timer because I turned it into minutes instead of keeping it as seconds.

I'll try and devlog more often

Update attachment

This devlog contains 2 major commits because I forgot to log in between :/

1) Moved stat and session related functions to their respective new files. Also made some minor changes around the code to make it easier to read and decode and reduce the risks of bugs.

2) Changed all 'exit's to 'exit()'s because I'm stupid and new to Python and didn't realise that 'exit' itself doesn't do anything :/
Spent 20 minutes debugging a '<' that was used instead of a '>'. Created the functions for having an in-built timer to log sessions. I created the base countdown timer, which needs to be finalised with finishing touches and formatting.

Update attachment

Split the main CLI menu into sub-menus to allow for more features to be added without a really long menu. Also moved the func
tions related to the subjects file into their own file. This will be done for all functions

Update attachment

Pretty big commit since I forgot to do it regularly. Created the 'view all sessions' and 'View Total Time' commands, marking the completion of all the predefined MVPs. Also made the Ctrl+C quit look good instead of throwing an error. Also made some slight adjustments to variable names throughout to make them easier to understand and reduce the risk of bugs.

Update attachment

Used the colorama library to style my CLI app, making it a lot more pleasant to use. Also created a requirements .txt for users to install colorama to use the app. Also updated README to reflect that we now have a requirements file.

Update attachment

Added separate general functions for adding and removing subjects. Wrote a function to input a subject to add (using the general function created before), and another to remove a subject (again using a general function). Also added a QOL improvement to the logging mechanism where if a subject is not in the user's subject list, it will automatically add it to the list if the user accepts, instead of having to make the user manually add it then log. Additionally, moved all functions related to File/IO to a separate python file for cleaner code.

Update attachment

I created the next function, logsession. I also extracted 2 abstract functions: readfile and write_file, that are used throughout other functions.

Update attachment

I created all the files and started work on the code. This involved creating the main CLI menu and the first file-related function: add_subject.

Update attachment