Awesome
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. Usingkvdb
would allow allow easily leveraging the work done to implementserde
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 usingyew
. - 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
- Implement
gettext
translation capabilities using cargo-i18n. - 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.