Lishwist (beta)

I’ve just released a beta version of a new project that I’ve been working on: Lishwist!

Lishwist is a web app which allows you to create and share wish-lists. There’s no registration requirement: just create a new wish-list (called a Wist) and bookmark the page! You can then share the list with others (one share per person) and these people can “claim” items to mark their intent to get the item for you. People to whom you’ve shared your Wist can see who has claimed an item (to avoid people buying the same thing), but you can’t see that yourself (so as not to spoil the surprise).

You can use Lishwist for whatever you want: birthdays, events, weddings, even just simple grocery lists!

Disclaimer

This is just a beta version, so please don’t rely on it for anything important. It might go down or disappear at any point!

How it’s made

The application is split into two main parts: a RESTful API built using Rust, Actix Web and SQLx, and a web app built using React and Bootstrap. All data for the application are stored in a relational database, specifically PostgreSQL.

Splitting the application in this way allows other clients to be used with the same API. For example, separate mobile and desktop apps could be created, or another framework (such as Svelte, which I’m keen on trying) could be used.

How it’s hosted

It’s currently hosted on my personal web server, which isn’t very powerful so please be kind! The application components each run in separate containers, all managed by Docker. Access to the application is provided by Traefik, which provides TLS termination, load balancing, rate limiting, etc.

Why I made Lishwist

I made Lishwist for two main reasons: -

  1. To learn API and web app development using Rust; and
  2. To have a way to share my wish-lists with friends and family and for them to share them with me!

I have used Rust for many years, but I have never used it to build a RESTful API. I had also never done any form of relational database access in Rust. I initially looked into using Diesel, but I eventually decided to try SQLx due to its compile-time query verification.

I also wanted to use Rust for the front-end web app, and I started building this in Seed and Yew. However I found progress was slower than using a JavaScript framework like React with which I am more familiar, so I decided to move over to React because of that. I would however like to revisit development of the web app using Rust too.

Open source and future plans

I intend for Lishwist to be open source fairly soon. I’m a big fan of self-hosting services rather than relying on the others to host services for me, so I want to give others the option to self-host Lishwist too. When I’ve got things ready and written some instructions I intend to make the repositories publicly available.

If Lishwist proves to be popular then I might sort out some proper hosting and a domain name for it! 🙂

Conclusion

Feel free to have a play with Lishwist and share the link with your friends if you think they’d find it useful. If you find it useful, or if you have any comments, then I’d love to hear from you. Please send me a message about it!