Overview #
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 typespackages/website: Website for the project, including a way to generate a personalised timetable
Dependencies #
- 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
Quick start #
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.
TODOs #
- 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
- Categorise the UI better
- Solver progress/explanation
- Ability to check an edited 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 CI for tangled
AI usage and contribution policy #
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. A lot of the current LLM-generated code is small helper functions that I just need to go through and see if they're needed or they can be removed/collapsed into more useful primatives
The core solver and actual algorithm are NOT AI generated, and are entirely written by hand. It's mostly the UI that has some AI-generated javascript. Most of the actual UI is done by hand as well to ensure performance and usability.
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.