https://github.com/kellpossible/coster
A self-hosted website for sharing costs between people
https://github.com/kellpossible/coster
Last synced: 12 months ago
JSON representation
A self-hosted website for sharing costs between people
- Host: GitHub
- URL: https://github.com/kellpossible/coster
- Owner: kellpossible
- License: other
- Created: 2020-02-04T06:51:58.000Z (over 6 years ago)
- Default Branch: master
- Last Pushed: 2023-01-20T22:39:43.000Z (over 3 years ago)
- Last Synced: 2025-04-13T06:35:00.703Z (about 1 year ago)
- Language: Rust
- Homepage:
- Size: 2.37 MB
- Stars: 13
- Watchers: 2
- Forks: 0
- Open Issues: 38
-
Metadata Files:
- Readme: README.md
- License: LICENSE.txt
Awesome Lists containing this project
README
# 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](https://github.com/cowbell/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](https://github.com/yewstack/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](https://crates.io/crates/rusqlite). Or perhaps use [kvdb-rocksdb](https://crates.io/crates/kvdb-rocksdb) on the server side, along with [kvdb-web](https://crates.io/crates/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](https://crates.io/crates/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](https://github.com/Boscop/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](https://github.com/kellpossible/doublecount) - A double entry accounting system/library.
+ [Commodity](https://github.com/kellpossible/commodity) - A library for representing commodities/currencies.
+ [cargo-i18n](https://github.com/kellpossible/cargo-i18n) - A tool for extracting localizations and embedding them using `i18n-embed`.
+ [i18n-embed](https://github.com/kellpossible/cargo-i18n/tree/master/i18n-embed) - A library for embedding localizations extracted using `cargo-i18n`.
+ [reactive-state](https://github.com/kellpossible/reactive-state) - A library for managing global application state (similar to redux).
+ [yew-bulma](https://github.com/kellpossible/yew-bulma) - A library for rendering `bulma` css components using `yew`.
+ [form-validation](https://github.com/kellpossible/form-validation) - A library for validating user input in data forms in a GUI.
+ [switch-router](https://github.com/kellpossible/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](https://github.com/kellpossible/cargo-i18n).
+ [x] Build `gui` WASM subcrate automatically using the [build.rs](./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](https://crates.io/crates/migrant) or [refinery](https://github.com/rust-db/refinery).