June 16, 2025
I've done a few updates while at school! I've finally migrated to stored tokens for authentication (with an expiration option). Authentication tokens expire in 7 days, while password reset tokens expire within 15 minutes of non-use (otherwise they can only be used once and are permanently deleted after the request is processed).
I just finished adding implementation on the backend for password resets! However during this I noticed that JWT may not be the best method for sessions since that means we won't be able to revoke sessions (in the event of a password change, hijack, etc). Gonna work on alternative authentication.
I've been working on structuring all the components, and this is what I came up with:
/client -> The React app for the agent dashboard
/static -> Home page for Dispatch (what we were working on)
/ -> The Express.js server for API + WS handling (also serves the /client build)
A professional real-time live chat platform that lets businesses communicate instantly with website visitors - all through a simple embeddable widget.<br> <b>Note:</b> the homepage was a MODIFIED fork of my existing project, echoMail (hence why I've marked this project as used AI). You can find it <b><a href="https://summer.hackclub.com/projects/12784">here</a></b>.<br> Believe it or not, this has been a project I've been wanting to work on for a few years. I'm tired by all the AI garbage in existing workflow tools, and the expensive seat pricing, so I figured why not make my own!<br> Features: - (💬) Chat with website visitors in real-time. Each team can handle multiple sessions simultaneously. - (👥) Invite multiple members to your team so everyone can respond to chats and keep conversations organized. - (⚡) Add Dispatch to your website with a single JavaScript snippet - set up live chat instantly. - (🖥️) Optimized web interface for desktop devices. - (👤) Open-source under Apache 2.0 license - contribute or view it anytime.
Still working on some minor page changes. I had to fix a bug present in the toast and dialog which caused the opacity animations to work only half the time. This was solved using requestAnimationFrame which basically tells your device hey, i need to display an animation, update the frame and render the initial state before i do it.
Similarly for the toast, I created a dialog component to warn users before continuing with certain danger-zone actions. The component HTML is using a modified version of the code here (bleh Tailwind for putting all the other themes/icons behind a paywall): https://tailwindcss.com/plus/ui-blocks/application-ui/overlays/modal-dialogs
I've been working on the overall design for the Mail page, and created a simple Toast component that I can use to display user messages. The component HTML is using a modified version of the code here (thank you Flowbite!): https://flowbite.com/docs/components/toast/
During this time, I finished working on the README, setup the domain + GitHub Pages, and patched a few bugs (including one which caused the How it Works, Features, and FAQ buttons to not function properly on locations other than /).
<br>
I also fixed the scroll margin top for each section, and create a ScrollToTop component to force the page to start at the top when the location is changed.
A private email service allowing you to create disposable emails for free.<br> Features: - (📧) Create disposable, secure emails instantly - no signup required. - (🔗) Use our free API to integrate disposable emails into your apps/libraries. - (🛡️) Stay anonymous by using disposable emails instead of your real one. - (📂) Your emails are never stored once your session ends. Your privacy is guaranteed. - (🖥️) Optimized web interface for both desktop and mobile devices. - (👤) Open-source under Apache 2.0 license - contribute or view it anytime.<br> This is my first ever project using Vite + React! I'm also attempting to learn how to use Tailwind CSS better.
Looks like the Summer of Making website was down! :(
During that time I finished adding the commands, updated the README, and also added an optional width/height parameter in the config.
I'm currently adding support for the existing box options, just like in the original whiptail library.
I've added an expiration date option for perishable goods, with the option of configuring your time zone in settings. If a time zone isn't configured at the time of creating/updating items with expiration dates, it will attempt to pull their local time zone from their browser and update their account automatically!
I added a note for the old version which mentions an issue related to PDK iteration checks. Basically the application was using the bitwarden.com API to find the user PDK iteration instead of checking what region they're in.
This could really only be a problem if the user was using bitwarden.eu and had configured their PDK iteration count in their Bitwarden settings to something that isn't the default value (which is obviously experimental and not recommended by Bitwarden).
Still worth mentioning though in-case users have issues.
I was having issues with the system tray not showing up in the compiled exe installation. Turns out I forgot to include extraResources in my package.json, so it wasn't downloading my icon properly. All fixed now and the system tray is shown!
Just added support for self-hosted Bitwarden servers (as per issue #3 on GitHub). Works great now!
Good evening! Today, I worked on adding a system tray, allowing users to easily view their backup status and manage the app. I also worked on restructuring the restore flow (instead of using a file HTML input, I'm processing the JSON file on the server side).
Just finished creating the README documentation, pushed to GitHub now!
The CLI tool is all done (sorry for laggy demo, Snipping Tool sucks...)!
I've added some advanced features that users can toggle when running the program!
I've been able to build an algorithm that checks matching subdomains and usernames. The next step will be to add apex-level domain checking as an optional, advanced feature!
I'm currently working on restructuring the code since this is a project I worked on a long time ago and it's full of bugs...
Welcome! I'm currently working on creating the user selection for the CLI.
Welcome! This project is called Bitwarden Duplicate Checker, a user-friendly CLI tool designed to scan for duplicate password entries in your decrypted Bitwarden vault (JSON supported). <br> When moving to Bitwarden (the password manager), many users import passwords from multiple sources (their Apple Passwords, Google Passwords, personal password manager, etc), which can lead to a bunch of duplicate entries in your vault. This tool helps identify those duplicates quickly, and makes it easier to clean up your vault and ensure you don't have any duplicate entries!
It's been a week! I've been working on a few bug fixes, including enabling UserInstall (this will allow users to use Timer Bot anywhere). Unfortunately due to Discord API restrictions, however, event reminders need to be sent to the users DMs since the bot won't have permission to send messages in the channel it was run. Regardless, everything works great!
Looks like I may have shipped too soon... I was not aware of this, but Prisma doesn't allow a Number type, and rather only accepts Int, BigInt, and Decimal. To combat this, I had to make a few adjustments to the db.js code so that it converts to Number respectively.
They really need to fix this... very frustrating.
The project is now ship certified! Since then, I fixed the script tag structure and moved the disableKeys to the window so they're accessible in other files. Also, I noticed a small bug which allowed users to click the enter key and create new lines in the terminal when bash files are running (thanks ship certification video 😉).
These have now been fixed!
There was a bug involving the deletion of presets, where if the preset tag (the name of the preset) was a number, the interaction event would believe it's a cached interaction ID, and caused some issues. I have fixed it by adding a simple t_ string in front which is removed when handling it.
I just finished creating a simple README.md for the website and uploading the LICENSE file.
The website is almost ready! Uploading to GitHub and setting up GitHub Pages :)
(apologies for the laggy screen recording... snipping tool sucks)
It's looking like the website is now mostly done! Still working on modifying each page a little, including meta tags, etc.
Welcome! During this time I've worked on building the whiptail-js library, which is used for this website. I actually have a separate project for it which you can find here: https://summer.hackclub.com/projects/10034
I'm working on building the interactive terminal, and making a few small adjustments to the website layout.
Hello! This project features my personal website, where you can get to learn a bit more about me! I originally created this website a few months ago, featuring a terminal-styled interface, but I'd like to work on it this week! <br>I wanted to make my website user-friendly for the longest time (since the Linux terminal may be confusing for some people), so I've decided on creating a Whiptail-themed interface running in the terminal, which will allow a user to choose between a UI to navigate through the website, or the bash terminal.
whiptail-js has been published to npm and the repository is live! I'm planning on potentially adding more features in the near future. Check it out on npm here: https://www.npmjs.com/package/whiptail-js
Just finished writing to README, being published to npm!
It's been a while! What started as a simple personal website turned into a full-on Whiptail UI class in JavaScript, which mimics the look and feel of a terminal-based dialog. It's now complete with keyboard navigation and touch support.
I'm calling it whiptail-js: a lightweight terminal-style dialog library for the web, which is used through the WhiptailJS class. Currently writing a short README to get it published on npmjs :)
I have added touch support and removed the viewport meta tag to keep the UI consistent across desktop and mobile.
I've made the UI responsive by listening to arrow key clicks! I'll be adding support for mobile next by allowing users to select by clicking the items with touch.
I've been working on a terminal-like GUI interface written w/ HTML + CSS. I used the raspi-config terminal GUI as my starting point because it's a good representation of what I'll want my website to look like.
Working on detecting arrow keys and allowing the user to select an item.
whiptail-js is a lightweight terminal-style dialog library for the web, inspired by the classic Linux whiptail tool, featuring keyboard navigation and touch support for mobile devices. <br> This originally started out as an idea for a personal portfolio website of mine, but I figured why not publish it for others to use!
Finally, I added an optional parameter in the /timer, /alarm, /reminder, and /preset run command to specify a custom channel where the notification will be sent in. By default, leaving out this parameter will send the notification in the same channel the command was run (as it was earlier)
I've been looking over the code a bit and have implemented a /export command, which allows users to export all events at ONCE as an ICS or JSON file.
Also, it came to my attention that the rate limit for active events was only one... that was 100% a mistake and I must've skipped over it as I was testing on the development server. It was fixed to 15 events now!
I've been working on a few bug fixed behind the scenes, including an issue reported on GitHub where Bitwarden users without a full name set weren't being displayed.
I've been working on adding a simple backups tab to view your backed up vaults, as well as extra error handling!
I've mostly finished with rewriting the code, and I worked on designing the home page UI!
Previously, the application was only able to create automatic backups for one single account when logged into Bitwarden Desktop. I've been working on revamping the UI to match the new Bitwarden style, and implementing multi-account backup systems! Also, I've been working on restructuring the code and libraries.
Welcome! My project features Bitwarden Auto-Backup Manager, a user-friendly application that creates local, encrypted auto-backups for your Bitwarden vault (without your master password). <br> For the longest time now, Bitwarden (the password manager) has refused to implement backup functionality into their applications, more specifically the cloud-hosted solution. This left us users without an easy way to securely back up our vault data in the event of a server shutdown or other emergency. This Electronjs-based application fixes this very problem by providing reliable, automatic backups you control. <br> The best part? Bitwarden Auto-Backup Manager is powered by the official Bitwarden clients library (found on GitHub) for backup file generation, as well as CryptoJS for PBKDF2 encryption/decryption methods, allowing you to decrypt your backups at any time! Your vault is synced with the help of the Bitwarden Desktop app (for credentials) and the Bitwarden API. <br> I built this application back in July of 2024, but I noticed that it lacks many expected features and nice-to-haves. Also, the code could definitely be much improved, which is why I decided to revamp this project during this Summer!
Some of my written libraries (like the PayPal integration) need access to a client in order to send a confirmation message to users. Problem is these libraries are imported in the parent process since running them in each shard would just cause a bunch of conflicts (hence why I've implemented IPC communication from shard -> main process). After overthinking about it for 10 minutes I just figured the simplest solution was to treat shard 0 as a default singleton client and create a message listener in the shards. So that's what I did!
After about an hour of debugging DiscordAPIError[10062]: Unknown interaction bugs, I finally realized my own stupidity. I completely forgot about the Docker container running on my other server that was connected with the same bot token...
Glad to say everything works as it should now haha.
So, I may have gotten a little carried away with writing all the commands and didn't consider the fact that the ShardingManager also means I was spawning multiple instances of my database... working on making an IPC communication method now haha.
Also completely forgot that each user may have their own timezone, so I've been working on adding timezone compatibility for alarms and reminders.
Welcome! My project features a bot for Discord communities to create detailed timers, alarms, and reminders in their Discord server. This project is very special to me because it was actually my very first coding project back in 2020! A project so small also happened to be the project that helped me discover my true passion for coding, and helped me start my journey with Node.js development. For years now, Discord has lacked a native way to create timers, alarms, and reminders in Discord servers (a rather simple feature that many large communities have asked for). This bot is my attempt to finally solve that problem once and for all! <br> I started developing this bot back in middle school, but over time, it became too overwhelming with the constant changes to Discord's API. With factors outside of my reach like rising server costs and busy study nights throughout the week, I eventually decided to shut down the project. Well, my goal this week is to try and bring it back to life, and rebuild the entire thing from the ground up! <br> I'll be honest, being my first ever coding project, Timer Bot was definitely the sloppiest code I've ever written (nowhere near being production-ready). So I figured why not spend this Summer rewriting the entire thing from scratch. I recently picked up some new equipment to help keep my personal projects running (like websites and Immich servers), so this is my attempt of reviving it and giving it another life :) <br> Features: - (⏱️) Create precise timer countdowns with hours, minutes, and seconds. - (⏰) Schedule alerts for specific dates and times in your local time zone. - (📝) Add titles and descriptions to your alarms to be notified of your upcoming events, goals, and more! - (💾) Save timer configurations with custom names for quick access anytime. - (📋) Manage all your running timers, alarms, and reminders in one place. - (🌐) Set your local time zone for accurate alarm scheduling. - (🔔) Choose users or roles to notify when an event ends.
This was widely regarded as a great move by everyone.