Please sign in to access this page
uil-dl (UIL Downloader) is a tool enabling easy and bulk download of Texas UIL Academics contest materials. See the repository for the most up-to-date information.
No followers yet
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!
Used svelte-headless-table plugin to offer a better display of the table. It now supports sorting and filtering. The UI is very basic for now.
Made some good progress! Set up database management by the server and database creation from an info.json so that the frontend can now query /api/contests to get a JSON list of all the contests. I'm not too worried about response size as the application will be packaged and distributed with a local server (so the server would be on localhost, with very low to no latency). The next big step would be to set up download management (both individually and in bulk).
I've been working on a second version which would fix a lot of stuff and introduce new features; mainly, it would be a complete rework of the backend (and the frontend) to be more efficient, fast, and easier to develop. I switched from a Flask & htmx setup to a SvelteKit + FastAPI setup, and finally got everything to work (I went through a bunch of trouble with plain Svelte and FastAPI before finally taking the time to learn SvelteKit). I have a working test setup now! Hopefully, development will be much more accelerated now, although I still have to design a new frontend (which is partly designed already) and have ideas for an improved structure... but we'll see :)
First Release!!! Check it out!
OH man this was a very hard step. I had set up everything for the app to be working, but I ran into multiple issues when using pyinstaller to build on Windows and Linux machines. After spending a lot of time trying to fix that, I switched to using Nuitka to build.
Switching to Nuitka, testing, and building took quite a bit of time, but I finally did it! I had to set up a virtual machine and test on multiple computers, and I struggled a bit with setting up Nuitka so it builds and runs properly.
Once everything worked out, I was able to build and release on GitHub.
I have already had people contact me about some problems on Windows though.
At this point, I might just switch to using tkinter as a GUI and forcing the user to open in their browser.
I set up analytics using Google Analytics through google's measurement protocol.
I am using a cloudflare worker as a relay so that it stores my API secret: the app pings the relay, which forwards the data to google analytics' api. It seems to work, but will need more testing to know if it works in distribution.
I did some cleanup to prepare for the first beta release. Added some contact information, rewrote the README for the app version, fixed some bugs, and made some optimizations.
I should be able to ship soon, once I test mac and windows builds.
I am looking into tracking analytics using google analytics, though the first release may not have it.
I can now make a distributable build!
I added a shutdown button in the GUI, updated some backend logic to work with installed builds (mainly modified file paths), and used pywebview instead of an external browser (though it is still possible to use an external browser). I also added a splash screen for the build.
I just have to work out some bugs and stuff like app metadata, icons, signing, etc. and I will be ready for a release (and the first ship)!
A couple of big changes towards building a standalone app.
Modularized the project, moved resources to app directories (eg application support), validated resources (info.json, info.db, config.cfg) upon start, enforced singleton behavior through lock files, streamlined logs, etc.
The next step would be to add user-initiated shutdown management and perhaps a simple GUI before bundling the entire thing as one standalone app (I plan to use pyinstaller for this).
Some more backend updates, but some frontend ones as well. The user can now refresh the info.json from GitHub, and information such as number of contests, the information version number, and the path to the downloads directory is displayed.
Did some backend updates. Added a config file which enables custom download directories and the ability to retrieve new info.json files from GitHub. These changes lay the groundwork to have a single executable application that can be downloaded, instead of requiring users to build from scratch.
So far, I've been working on some improvements. I simplified the database schema so that only one table is required instead of the previous two. I'm not sure what prompted me to overcomplicate the schema before.
I also migrated to a HTML over the wire approach: now, instead of the browser receiving the entire database, the backend manipulates the database (through SQLAlchemy) and sends only required information to the browser using HTMX. In addition to minimizing JS, this also makes the code easier to read. Since the tool is designed to be locally hosted, it doesn't really make a difference in speed.
I've also improved the download system for thread-safety and all.