This user has been banned.
June 16, 2025
Mini Libraries is an online book sharing platform where you can share your copies of books with other people in the same 'libraries' (groups) as you. I started development around year ago but has been left in an unfinished state for the last 6 months. I want to put in some work now and give it the extra spit and polish needed to get it out of perpetual beta.
A few small changes! Added some stuff to communicate to the user when the client is disconnected. Also reverted some stuff with the layout that was causing a bug.
I added support for push notifications, as well as made some changes to make it work a little better on mobile (there's still some jank though). I feel comfortable shipping the program as most of the core features are here. Go check out the demo!
I added a Dockerfile and deployed it to Nest! I'll add notifications next :D
I added a settings menu! I was also going to add notifications but it turns out you need to be in a secure context (meaning HTTPS) so I'll wait until I have a public instance I can test with before I work on that.
Spent several hours trying to deploy the project. I have yet to see success, but I also added a link to the Atom feed.
I added chat history! MiniChat now saves the last n (by default 100) chat messages and system events in a VecDeque that gets sent to the client when they first join. This could also be useful to implement behaviours for if the client's connection gets dropped.
I made this website by half-following the Rails Guide and then extended it to add Atom support!
I don't have a name for this yet, but it's based off a project I made for Railway
Added a bunch of small features! A lobby that's always available, chat scrolling, a new home page, and remembering the last username you used.
I made the chat page look a lot nicer based on the Figma designs and some client feedback. It should be usable on mobile as well!
Used Figma to make some layout designs! I can only upload one, but there's another potential layout
Okay, it's been a while, but I'm feeling like I might as well ship now. I'll probably also need to figure out a way to host the bot, but that can wait a bit...
I ended up going with the second option - using one WS endpoint with the query params. I think this was probably the most elegant design overall.
I've now added a room list that shows all the current rooms. The room names automatically encode special characters, so you can use non-latin characters. It's kinda ugly but that will be the next thing I work on.
Was busy for a week, but I'm back! Implemented the room system as a JSON message that gets sent to the server internally. I'm not sure which of these systems I prefer most... I'll probably mull it over for a little bit.
Changed the system from the last devlog to use one WS endpoint, and get the room code from query parameters. I think I prefer having just one endpoint...
(ignore my bad code)
Added the basics of a multi-room system where each room has it's own WS endpoint /room/roomname/ws. I'm not sure if I want to go with this or using some parameters, either in the http query params or sent other as JSON when you first connect (that's how I'm currently sending username info)
Various small changes. Added some comments to the code and changed some layout stuff.
Added timers to remove a user's editing permissions after seven days and send a warning at six. Also various misc changes
Added a list that keeps track of the people in a room. To do this in a memory-safe way, I used a Mutex, which only allows one thread/task to access memory at a time, and prevents poisoning. The way Rust does this took me a bit to get used to; the Mutex drops access to the data at the end of the current block, so I found I had to { enclose some of my code in it's own block } to get things to work right. I might be doing something wrong here, though.
Switched to using JSON for structured data :)
The Event enum implements Into so it's even more ergonomic than using Strings!
I've got a basic example working! I'm using Axum as a web framework and have pilfered most of the code from the 'chat' example. I understand how most of it works, but I think I should leave some notes for myself.
MiniChat is a chat server that is both lightweight to host and easy to use. There are no accounts, so it can be spun up as an easy way to chat with friends whom you might not be able to message otherwise. Perfect for messaging your friends during class! (use wisely) Features I'm considering: - Multiple chatrooms that can be optionally password-locked - Chat history or persistence - Custom CSS? - Markdown support The chat uses WebSockets for transport and has a Rust backend.
Moved more stuff over to SQLite to make sure everything persists. The last thing I need to do is use display names instead of raw ids, and then test it and ship!
Moved some data storage for the account linking process over to SQLite to prevent data being lost in case of a crash or outage.
Finished the integration with GitHub! You can now tag in another person, which removes your edit access on the project repository and sends an invitation to that person.
Pass-the-project is a collaborative coding project taking place in the Hack Club slack. I'm working on a bot that will help facilitate the game. The rules are as follows: 1. People vote on a project and tools 2. The project is hosted on a private GitHub repository 3. One person has up to a week to work on the project 4. Once the person pushes to the repo, they lose edit access but can still view, create issues, etc 5. That person then passes the project onto another person who will be added to the repo Repeat until the project is shipped! The bot has 2 commands: /pass which passes the project onto another person /project which gives info about the current project
This was widely regarded as a great move by everyone.