This repository contains a Rust workspace for building an exam scheduling system backed by Z3, along with a sveltekit frontend.
crates/app: Tauri app for the frontendcrates/backend: database access, data prep, and wiring to the solver.crates/entity: SeaORM entities generated from the SQLite schema.crates/hack: cargo-hakari managed hack crate to speed up build timescrates/solver: Z3-backed scheduler and constraints.packages/frontend: Sveltekit frontend- Personal note: I despise some of the stuff I've pulled off in there out of principal but since I always know I have JS might as well save me brain power and use cursed stuff (looking at you, tanstack forms)
- Personal note 2: Heavily vibe-refactored and I don't like how "busy" some of the code is. I'll have to do a full review/potential rewrite later to clean stuff up. Probably more state stores and derived shenanigans.
packages/eslint-config: ESLint config for the frontendpackages/tauri-api: Autogenerated tauRPC bindings for the frontend (and provides types forui)packages/ui: Shared UI components and types
- Tauri dependencies
- SQlite
- Z3
- Unless you're using the
gh-releaseorvendoredfeature flags gh-releaseand the default featureset requires the end-user to have Z3 installed as well.vendoredwill statically link z3
- Unless you're using the
From the repository root:
- Build workspace:
pnpm moon run :build-release - Run tests:
pnpm moon run :test - Lint:
pnpm moon run :lint - Format:
pnpm moon run :format
Coverage helpers are documented in docs/coverage.md.
- Fix the severe lack of actual reactivity (thanks Codex for being react-brained. bleh. The code is ugly and I apologise for anyone who looks at it right now)
- Make the UI for timetables better
- Proper saving/loading
- Custom Save vs. Save As
- Notification when a save happened successfully
- Store custom timetable data into the database, rather than in the export dialog
- Categorise the UI better
- Solver progress/explanation
- Ability to check a timetable
- Clearer resolve behaviour
- Better Dialogs
- Confirmation when a user exports
- Add an unsaved changed notification when trying to close or navigate away
- Proper saving/loading
- Add in website to use exported json data to create a personalised timetable
- Make "paper 1" label being automatically removed clear
- Alternatively, simply just make it a default name so it's more customisable, thus the paper number doesn't actually exist/gets used and can thus be removed. Sounds like more effort though
This is a currently WIP, Mostly personal project, and some bits are messy and AI generated with little review other than "yeah that code is fine and it works". I am slowly reviewing of all AI-marked areas :p. I do not approve of vibe coding (i.e. LLM generated code without proper review), but LLMs are a useful tool to get stuff done a bit faster.
AI was used in this repository. All AI-generated contributions that have not been modified/fully reviewed by
persons are marked with an explicit notice (for example /// AI-generated. in Rust doc comments, or /** AI-generated */ in JSDoc).
AI-generated contributions are allowed, but they will be reviewed strictly and must be marked as such.