Coster
Coster will be a web application designed to be used for the purpose of sharing costs between multiple people.
This project is inspired by SplittyPie, but with the following differences:
- Written in Rust - simpler distribution, more reliable than Javascript with a stronger type system, and also for my own learning purposes.
- Uses yew (similar to React and Elm) for the front-end logic.
- Currency per expense - groups can submit expenses with different currencies
- Support for a local database using rusqlite. Or perhaps use kvdb-rocksdb on the server side, along with kvdb-web on the client side because they both support the same interface which can be used directly in the
costing
library, and the kvdb-memorydb can be used for testing. Using kvdb
would allow allow easily leveraging the work done to implement serde
support for most of the types which was needed anyway for synchronisation.
- Explore using web-view in the future to provide a desktop application.
Libraries
The following libraries were developed to service this application's needs, but they should also hopefully be useful for other purposes:
- Doublecount - A double entry accounting system/library.
- Commodity - A library for representing commodities/currencies.
- cargo-i18n - A tool for extracting localizations and embedding them using
i18n-embed
.
- i18n-embed - A library for embedding localizations extracted using
cargo-i18n
.
- reactive-state - A library for managing global application state (similar to redux).
- yew-bulma - A library for rendering
bulma
css components using yew
.
- form-validation - A library for validating user input in data forms in a GUI.
- switch-router - An alternate version of the yew RouteService, which aims to provide a more type safe API for setting routes, and some other improvements.
TODO
- [x] Implement
gettext
translation capabilities using cargo-i18n.
- [x] Build
gui
WASM subcrate automatically using the build.rs build script.
- [ ] Create a JSON rest API
- [ ] Create GUI with yew
- [ ] Support cookies to remember user on client
- [ ] Implement database migrations with migrant or refinery.