Cut-It
The speech and debate card-cutting tool of the future ✂️
Desktop App • Python • Selenium • Qt
There Has To Be A Better Way
High school debate is ultra-competitive. Debaters competing nationally can very well spend thousands of dollars flying across the country to participate in prestigious tournaments and face fierce competition. Even though there's certainly a performance aspect, debate is a research activity at its core.
In all divisions, competitors must understandably 'cut' (or format) various sources of evidence to substantiate their 'cases' (arguments). Ideally, this means taking the time to format evidence something like this:
<author name> '<year published>
<publisher/source>
<author qualification>
normal text normal text normal text EMPHASIZED TEXT
normal text normal text normal text normal text
normal text normal text EMPHASIZED TEXT normal text
normal text ...
Here, "EMPHASIZED TEXT" is the part of the evidence debaters read in speeches. It should be a larger font size than normal text, bolded, underlined and highlighted (depending on preference).
Unfortunately, debaters oftentimes have too much work and too little time, and the quality of evidence takes the hit. This isn't just a matter of styling preference - high quality evidence is key to ensuring the fairness of the game.
That's why I invented Cut-It, a desktop applicaiton that makes formatting cards a breeze.
What Does It Do?
Cut-It speeds up your workflow in 3 key ways:
- AutoCut: Cut-It will generate an MLA & debate-grade citation (using @http-samc/QuickCite) and get the full text of your article with only a URL.
- Custom Emphasis Levels: Cut-It offers 3 emphasis levels that can be fully customized to your liking (bolding, underlining, font-size, highlight color, etc.) that are accessible via shortcuts and buttons. These macros make formatting your evidence a breeze.
- Card History: The fastest way to cut a card is to not have to cut it in the first place. Debaters often reuse evidence, but recut the card simply because they couldn't find it. Cutting cards with Cut-It means that each card is locally saved to your device and searchable through Card History.
How Do I Get It?
Downloads (Windows, MacOS) for Cut-It are hosted (alongside a full features list) on cutit.cards, with documentation available at docs.cutit.cards.
The project is also open sourced on GitHub at @http-samc/Cut-It and API documentation is available at Cut-It/DOCS.md.
What I Learned
Cut-It uses a proper GUI framework, PyQt5, in order to power its desktop applications. I didn't have any prior experience with Qt, but Adithya (the R&D lead for Cut-It) reccommended that I use it because of its cross-platform nature (which allows us to deploy to both Windows and MacOS with one codebase).
Because I knew that I was going to push updates, I designed an autoupdating framework that polled a backend to check for new versions of the app. This allows the user to accept or deny the update (only if it is non-critical) while getting a fully-detailed breakdown of the update, including version number, date, bug fixes, new features, etc.
I knew that I wanted Cut-It to work for anyone, so user customizeability was going to be a key factor. I wanted to store all data in a standard .json file, so I used userpaths to allow me to get a cross-platform reference to the current user's documents folder (where I could store the app data). From there, I set up a durable dictionary schema that allows me to store and apply all the user's settings/preferences. Here's what it looks like from their perspective:
Even though the platform itself is very powerful, Qt's default look is very dated. To combat this, I used QtModern to give my app a simple yet beautiful theme that also greatly standardizes the appearance of the app on both Windows and MacOS. On top of that, it also lets me implement both light and dark modes easily.
As a fun bonus, I included a 'SuperBrowser' that uses Selenium to load a soft paywall bypass extension (open source and legal), which helps debaters maximize the number of sources they can turn to for evidence.