Virtus banner

Virtus

11 devlogs
15h 19m 18s

“Virtus” means excellence and valor. This application is a terminal-based grades tracker and school assignment manager for those who strive to succeed with minimal distractions.

This project uses AI

GitHub Copilot to help me debug CMake not finding curses on my computer.

Demo Repository

Loading README...

sohiearth

Minor Update

  • Updated README according to rejection reason
  • Linux Support
Attachment
0
sohiearth

Shipped this project!

Hours: 14.87
Cookies: 🍪 305
Multiplier: 20.49 cookies/hr

Shipping Virtus (v1,0,0)!

Overview

Releasing this project because it’s starting to experience feature creep.
Had a blast with TUI development, and reminded me a lot of the SDL2 days where I had fun with immediate mode rendering. I might take on that project next. For now, virtus has finished initial development and the addition of new features may be slowed.

Trouble

  • Codebase woes
    I had trouble with managing the cleanliness of the codebase since it’s easy to get a lot of magic numbers when dealing with immediate mode. I was able to use some clever numeric operations to automate line increments and keep the codebase readable.
  • Cursed curses
    I used curses since it was relatively easy to use. The couple downsides that come with that is that: it’s sometimes a bit buggy, CMake compatibility is spotty, and no Windows support. The first and last were acceptable tradeoffs since I run a Mac/Linux setup, but the lack of clear CMake compatibility made me give up on writing all the CMake code myself and relied on StackOverflow and some Copilot. I’ll try to read more documentation/trial and error next time before pulling the trigger on AI.
sohiearth

The Prep Update

Updates

  • Improved the onboarding experience to introduce the navigation
  • Added a classes tab
Attachment
Attachment
Attachment
0
sohiearth

The Grades Update

Updates

Worked on improving grades calculation.

  • Added a Grade/GPA Breakdown by Class section in the grades page.
  • Added a Grade Contribution by Assignment section to see which assignments are affecting grades.
  • Added a setting that lets you configure which type of grade calculation should be used. For now, I only have averages and international baccalaureate calculation methods.
  • Updated the initial setup section since it hadn’t been updated since the start of the project.

What’s Next?

  • The ability to add custom calculation methods.
  • The app might be hard to use, so I think I’ll update the onboarding experience a bit more and introduce more parts of the program.
Attachment
Attachment
Attachment
Attachment
0
sohiearth

The Lazy Update

  • Added GitHub Actions build automation. (curses is only supported on Unix systems, so the program will be limited to Linux & macOS.)
Attachment
0
sohiearth
  • Added per-class GPA calculation and a “Remove Assignment” button in home.
Attachment
Attachment
0
sohiearth

Added a calendar view.

Attachment
0
sohiearth

The Human Readable Code Update

  • Added a unified “interface” structure that builds the interface and draws it at once, reducing the number of calls made and improving the performance and overall look of the program. By doing so, I was also able to add an interface setting that controls the behavior of the draw functions. The attachments show the difference the settings make.
Attachment
Attachment
0
sohiearth

The Clean Up Update

Updates

Clean up the interface a bit more. Made sure the horizontal space between levels of headings is always 2, added more space between elements/toggles, etc.

Dissatisfactions

The code looks pretty messy though, which is something that I am definitely not satisfied with.
In addition, the Assignments and Grades tab look really rushed. I think I’m going to focus on those two next.

Attachment
Attachment
Attachment
Attachment
0
sohiearth

The UI Update

  • Cleaned up the interface. I didn’t want to use the move() functions at first, but I ended up needing them to make clean grids.
  • Added a tab bar, and made some tabs that have some dummy info. Before I continue on with making the “assignment manager” part of the program, I think I’ll rewrite some more interface functions and clean up the code.
Attachment
Attachment
Attachment
Attachment
0
sohiearth

I added basic assignment management. Struggled a bit since it’s my first time using curses, but I think I got something pretty good here.

Attachment
0
sohiearth

Added initial project boilerplate

Attachment
0