Please sign in to access this page
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
pretzel
Check their projects out: My Task Online, CADPath, Project Portfolio, Infinite Dimensions Website, Study Guide Website, Game Main Menu
Nirvaan
Whoops! Looks like they don't have a project yet. Maybe ask them to start one?
lohith
Check their projects out: DevHub, Quote Generator
Anointed Enahoro
Check their project out: Personalized Study Scheduler
Mustafa Ali
Check their projects out: Portfolio, Beyblade, Book Corp, Scoopy, Wave Rider, Fast tracking app, Platform Panic
Abū al-Barāʾ
Check their projects out: Moaz Website generator, Image Compressor, Typing Speed Test, QR Code Scanner, QR Code Generator, Hangman Code Generator, Text Transformer, Text to voice converter, Currency Convertor , Python Learning Website, Moaz Video Downloader, Pac Man Game, Text to Handwriting Converter, Beautiful Chess
Once you ship this you can't edit the description of the project, but you'll be able to add more devlogs and re-ship it as you add new features!
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!
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.
Built the pomodoro. Lowkey easier than the timer but probably cuz I practiced it with both the timer and stopwatch before.
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.
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.
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.
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)
Worked on changing the Log component to use states so that I can collect and send user input via the API
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 :)
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).
Added APIs for adding the subject, as well as a refresh button on the subjects list because it (sadly) doesn't automatically update.
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.
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 :)
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.
Worked on log UI. Added dropdown and duration enter fields and remove and submit button (not functional just UI).
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.
Added more animations and fixed grid and flexbox layouts. Started working on Log Session menu.
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)
Created VITE app in frontend folder (React + TS). Started building the base dashboard with Greeting and Subjects.
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.
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)
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).
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.
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).
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.
Lots and lots of refactoring :)
I keep forgetting to devlog :/
Check repo for more frequent commits (still not frequent enough i just get too locked in)
Extracted a log_session function so that I can use parameters to automatically log a session when the user uses the timer function.
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.
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.
Made the convtimespent function cleaner after I learnt about divmod() and realising I had a ton of repeated code that could have been condensed.
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
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.
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
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.
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.
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.
I created the next function, logsession. I also extracted 2 abstract functions: readfile and write_file, that are used throughout other functions.
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.