## Overview - `crates/app`: Tauri app for the frontend - `crates/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 times - `crates/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 frontend - `packages/tauri-api`: Autogenerated tauRPC bindings for the frontend (and provides types for `ui`) - `packages/ui`: Shared UI components and types - `packages/website`: Website for the project, including a way to generate a personalised timetable ## Dependencies - Tauri dependencies - SQlite - Z3 - Unless you're using the `gh-release` or `vendored` feature flags - `gh-release` and the default featureset requires the end-user to have Z3 installed as well. `vendored` will statically link z3 ## 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 - 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.