{"id":15568776,"url":"https://github.com/deciduously/attendance","last_synced_at":"2026-02-26T10:35:34.556Z","repository":{"id":97311693,"uuid":"122810158","full_name":"deciduously/attendance","owner":"deciduously","description":"Attendance taking app in Rust and ClojureScript - ongoing development in the mifkad repo","archived":false,"fork":false,"pushed_at":"2018-03-28T19:30:44.000Z","size":142,"stargazers_count":1,"open_issues_count":13,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2026-01-24T18:51:52.881Z","etag":null,"topics":["attendance","boot-clj","cljs","cljs-ajax","clojure","clojurescript","html5","react","reagent","rocket-rs","roster","rust"],"latest_commit_sha":null,"homepage":"","language":"Clojure","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/deciduously.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2018-02-25T06:06:08.000Z","updated_at":"2025-02-19T21:40:38.000Z","dependencies_parsed_at":"2024-03-13T09:30:34.625Z","dependency_job_id":null,"html_url":"https://github.com/deciduously/attendance","commit_stats":null,"previous_names":[],"tags_count":17,"template":false,"template_full_name":null,"purl":"pkg:github/deciduously/attendance","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/deciduously%2Fattendance","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/deciduously%2Fattendance/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/deciduously%2Fattendance/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/deciduously%2Fattendance/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/deciduously","download_url":"https://codeload.github.com/deciduously/attendance/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/deciduously%2Fattendance/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29856737,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-26T08:51:08.701Z","status":"ssl_error","status_checked_at":"2026-02-26T08:50:19.607Z","response_time":89,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["attendance","boot-clj","cljs","cljs-ajax","clojure","clojurescript","html5","react","reagent","rocket-rs","roster","rust"],"created_at":"2024-10-02T17:20:47.349Z","updated_at":"2026-02-26T10:35:34.529Z","avatar_url":"https://github.com/deciduously.png","language":"Clojure","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Attendance\nFull-stack attendance-taking app in Rust and ClojureScript.\n### Requirements\nThis app requires Linux and an HTML5-enabled web browser.  Cross-compiling hsn't been attempted yet, but it should also work with Windows.  It was written to be used with Chrome, and developed between Chrome and Firefox - I haven't tested it with anything else yet.\n\nIf you want to interact with the code you will also need `git`, `make`, [`rust`](https://rust-lang.org), a Java 8+ JRE, and [`boot`](http://boot-clj.com), which can be obtained by running `make deps`.  The fastest way to obtain a Rust installation is via [`rustup`](https://www.rustup.rs).\n### Usage\nDownload the [latest release](https://github.com/deciduously/attendance/releases/tag/v0.3.1-r1) and decompress it.  Run the executable `attendance-server` (e.g. `cd attendance-v0.3.1/ \u0026\u0026 ./attendance-server`) and point your browser to `localhost:3000` (or click the URL shown if your terminal emulator is fancy).  `Rocket.toml` can be used to set the target port and other [config options](https://rocket.rs/guide/configuration/#rockettoml).\n\nExample roster.csv input:\n```\nA,7,Name One,Name Two,Name Three,,,,\nB,9,Name Four,Name Five,Name Six,,,,\nCE,4,Name Two,,,,,,\n```\nTrailing commas result from our use of MS Excel to export the roster, and are ignored.\n\nExample extra.csv input:\n```\nName One,1-4\nName Two,4-6\n``` \nLarger mock rosters that more closely approximate real world use are available at [static/data/mock_roster.csv](https://github.com/deciduously/attendance/blob/master/static/data/mock_roster.csv) and [mock_extra.csv](https://github.com/deciduously/attendance/blob/master/static/data/mock_extra.csv).  These can be loaded via the Load Mock Roster button to play around with.\n### Caveats\nThe app currently cannot handle name collisions, and it's not a high priority as we currently have none in real world use.\n\nThe extra hours are only used for the generated report - any name with a time block that goes over 4 (e.g. 4-6, not 1-4) will be added to the corresponding Extended Day class.  Core hour kids are currently discarded.\n\nIt's also pretty specific to one setup for now.  More config options on the way (hopefully).\n### Development\nClone or download this repository.  Use `make run` to build the frontend and compile and launch the server, with hot reloading of the frontend.  Someday, maybe the backend too!\n\n`make test` will build a release bundle at `attendance-v0.3.1/`, and create a `.zip` and a `.tar.xz` of the bundle at the project root.  It will then run the test suite, currently just for the backend.\n\nUse `make bundle` to put together the release bundle, and/or `make release` to produce the compressed archives from that bundle.  `make clean` is also available to clear up build artifacts and old archives, and is called first by `make test`.\n### Libraries\nBackend:\n* [Rocket](https://rocket.rs)\n* [Diesel](http://diesel.rs/)\n* [r2d2](https://github.com/sfackler/r2d2)/[r2d2-diesel](https://github.com/diesel-rs/r2d2-diesel)\n* [calamine](https://github.com/tafia/calamine)\n\nFrontend:\n* [Reagent](https://reagent-project.github.io)\n* [cljs-ajax](https://github.com/JulianBirch/cljs-ajax)\n* [specter](https://github.com/nathanmarz/specter)\n### Contributing\nSure!  Open a PR.\n### Acknowledgements\nThanks due to [mrmcc3](https://github.com/mrmcc3), whose [blog post](https://mrmcc3.github.io/post/csv-with-clojurescript) was a great push in the right direction for the file upload, and [StefanoOrdine](https://github.com/StefanoOrdine) for their [Rocket/React](https://github.com/StefanoOrdine/rust-reactjs) example.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdeciduously%2Fattendance","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdeciduously%2Fattendance","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdeciduously%2Fattendance/lists"}