Bio

BananaJeans | Full Stack Developer | JavaScript, Python, Lua | Estonian

Stats

9
Projects
64
Devlogs
185
Votes
6
Ships

Coding Time

All Time: 155h 34m
Today: 0h 0m

Member Since

June 16, 2025

Badges

3
🚢
Maiden Voyage
you shipped your first project! the journey begins...
🎨
Graphic Design is My Passion
Oh God How Did This Get Here I Am Not Good With Computer
Ballot Stuffer
vote 100 times.

Projects

9
🚀
4 devlogs about 11 hours ago
🚀
0 devlogs 2 days ago
readmefm

readmefm

Shipped
8 devlogs 8 days ago
slack.fm

slack.fm

Shipped
6 devlogs 28 days ago
faucet - a c++ http server
28 devlogs about 1 month ago
🚀
0 devlogs about 1 month ago
roblox-outfit-finder
3 devlogs 3 months ago
ralseibot

ralseibot

Shipped
14 devlogs 3 months ago
visittallinn-waffles
1 devlog 3 months ago

Activity

Light work before the hard part. Added a very cool (and comedical) 404 page with randomized messages and anchors back to homepage/previous browser page, instead of the default next.js 404 page. Fixed a issue with the favicons, I forgot to remove the old favicon so there was a conflict, and added placeholder pages for the pages I plan to make. Anyways, the next plan is to get started with making the admin page where I can manage the blog, projects (probably not since I'll just automate it with github), and the services listed in the service statuses page. I'm probably going to hate this part a lot since databases and yadayada suck to work with sometimes in my opinion but it's probably gonna be worth it long term rather than having a static page and editing it every time I add something new.

Update attachment

More than basic progress update. I started off by adding a navbar because I of course plan to have more than 1 page, so for now I just added links to the projects, blog, and service statuses pages (which are nonexistent right now), I also added the readmefm embed to display my current/last played song, didn't make it for no reason of course so gotta put it to use, added a basic footer (which has a 50/50 all (rights/lefts) reserved thingy), modified metadata to have the correct title/description instead of the default one, and added a favicon. Main page is pretty much done I guess, next steps are of course to make a working blog (and probably an admin page as well), a projects page which pulls my owned repos from github, and a service statuses page which just gets the status of my hosted projects (might add uptime tracking as well). Also gonna have to make a custom 404 page, because why not. Pretty much all for now.

Update attachment

Basic progress so far, got the initial layout/styling/page pretty much set out, and added some basic info. Added a 3/4 hero banner, an about me section, interests, some of my pinned projects, and contact links. Still some work left though since I don't want the site to be too bland, things such as the favicon, adding more personality, gonna make another page that fetches all my recent github repos, etc. Looking good though so far imo.

Update attachment
Earned sticker

Finally decided to get started on making a personal site/portfolio after procrastinating for like 100 years, anyways I decided to use next.js and tailwindcss for this since I have the most experience with these, provides flexibility compared to php/express/etc, and it's simple to use and host. The only plans I have right now on what I could add are obviously my best projects, links to my profiles, probably gonna include contact info, and I'll see what else I'm going to add along the way.

Update attachment
BnaJns
BnaJns created a project
11h ago

BnaJns Portfolio

Decided to finally get work started on making a personal site/portfolio

4 devlogs 0 followers
BnaJns
BnaJns created a project
2d ago

limonaad - a C++ chess engine

a UCI chess engine written in C++ | limonaad - estonian for lemonade

0 devlogs 0 followers

Rewrote the logic for static files. Before, I would have stored the static files in the src folder and used the copy-static.js script to copy those over to the build folder, which is stupid looking at it now. Now instead, all the files are in one static folder at the project root, so no duplicating files needed, and the commands can just get the files from the ./static/ folder, which also makes things simpler for the future.

Update attachment
Earned sticker

Added a few subcommands to /radio. Pretty simple change, /radio now has /radio play, which obviously joins the voice channel and plays songs, /radio stop which stops and leaves the voice channel, /radio history which shows the 10 most recently played songs per server, and /radio nowplaying which shows the currently playing song along with the collection size in subtext.

Update attachment
Earned sticker
BnaJns
BnaJns worked on ralseibot
1h 26m 6 days ago

Added a /radio command, which gets the songs from the radio/songs/ folder, loads them and then randomly plays the songs in a voice channel using @discordjs/voice, along with checks such as if the user is actually in a VC, if the bot is already connected, etc. I originally planned to make it download the songs from a youtube playlist, but that would overcomplicate things for now and I just wanted to keep this as a simple addition. Adding/removing songs is easy since you just have to modify the mp3 files inside the folder, and that's pretty much it.

Update attachment
Anirudh
Anirudh Shipwright gave you feedback
6d ago

readmefm

sorry I don't use Last.fm so just used your username :hehe:

from Anirudh

Final changes, added mobile responsiveness following feedback that the site is unusable on mobile without using the desktop site option on browsers, and also added a favicon because why not.

Update attachment

This took way longer than expected, working tho. Finished up the readme, pushed it, and then for some reason github camo decided that it's not happy for some reason, so I did some debugging and testing, and the issue(s) were probably using Google fonts, so I opted to use a local woff2 file instead, wrong charset in the header, also added a cache expiry but that probably didn't break anything, using inline for album art instead/fallback, but it works now. As for the readme, it's short and concise, explains everything you'd need to know, no need to overcomplicate things.

Update attachment

Setup on nest complete and tested. Simple stuff, I setup the systemd user service, setup the github actions CI to pull & restart on new commits, and tested it on my own readme in github and it works perfectly. The only thing left is to just write the readme and docs and yadayada and that's pretty much it for now.

Update attachment

Index page is complete now, everything seems to be functional, and it's basic and does it's job. The h1, link to the github repo, param options, username input, and the output link and also added a preview. The final things I have to do is just to make a proper readme, deploy it to nest along with a github action, testing, and that's pretty much it.

Update attachment

Made progress on the site design and functionality. Should be pretty simple to use, just insert your last.fm username, select the theme/params, click generate and it gives you the markdown url. I also will probably add a preview along with the generated url, but I might have to fix the content-type that is currently being returned, since it's not svg+xml right now, so it'll probably appear broken. Pretty much it for now.

Update attachment
Earned sticker

Added a few customization options, and made the edges rounded. For the customization options I added a few pretty simple options, theme (light or dark), hideUsername (whether to show username is listening to or just now playing), and noScrobbles (doesn't fetch or show the scrobble count). I decided to make the edges rounded, cause in my opinion it just looks nicer, but I also might make it a customizable whether to just have it rectangular or rounded. I also changed my mind on the overengineering thing, I'll probably just keep this simple for now and just have the current/last song display. Few last things I still have to do though is make the index.html page, i'll probably keep it as a simple no-scroll page, and the readme.md, which i'll also try to keep simple, and also will have to test if the SVG actually works on github readmes

Update attachment

Got the API request working, and the SVG working as well. Messed around with the design for a while but decided to settle with this for now, and I might add links/extra info such as scrobble count under the white line later. Pretty much functional at this point, but overengineering never hurt nobody (probably). A few ideas I have in mind right now are also displaying the current obsession/top track, maybe adding a constant album/artist/song display, etc, of course on separate paths. In short it's functional atp but I'll look into adding more stuff

Update attachment

I decided to make readmefm, since last time I checked there aren't any good spotify/last.fm song displayers out there to my knowledge, so I decided I would just make one myself. The idea is simple, you put the link in your readme with your username parameter, and it'll display your currently or last played song on last.fm. I'll be using node.js for this since it's the logical choice, and there isn't much else to explain for now.

Update attachment
BnaJns
BnaJns created a project
8d ago

readmefm

a last.fm currently playing/last played displayer for your readmes

readmefm
8 devlogs 0 followers Shipped
Anirudh
Anirudh Shipwright gave you feedback
15d ago

faucet - a c++ http server

consider shipping it on #ship

from Anirudh

I lied, I made another devlog, and another change (final this time fr).
I was checking to make sure the folders inside folders worked correctly in dir listing, and found out it was missing the empty table cells which basically made the dir listing look ugly since the line that would usually be there was not there. I fixed that, and then thought I might as well add the custom icons as well. I got the icons (as always) from lucide.dev, and made a helper function to return the correct class name for the file type. Right now it has film (mp4, mkv, etc), image, textfile, codexml (html, css, other code files), music and activity (.log) icons. That's pretty much it, I think it looks really cool, and it took a lot less time than I expected (most of the time was spent just looking up the icons and putting the svgs in the code), so I hope this is actually the final devlog before the first ship.

Update attachment

Final devlog for the first ship most likely. Added support for the Range header, and added images to the example site. For the example, I just added a few example images copied over from the previous devlogs, nothing special. For the range/content-range support, I had to add those because before, the server would just send the whole video file, and that would take a while to load, and once it did load you could not scroll through the video, you could only play it start to end. With the range header support, it sends the video data partially as needed as the browser requests via the Range header, and video/audio/etc scrolling seems to work fine now. I think pretty much everything is done now, and ready to be shipped, as there doesn't seem to be any false positives with the trust score system, server doesn't just crash randomly, everything is good. I did have in mind adding more icons for the dir listing (such as a video icon for mp4/webm, audio symbol for mp3/wav/ogg/etc, and other icons, but I'll leave that for another time.

Update attachment

Readme changes. Added badges (cause badges are the 2nd coolest thing next to <br>), changed some wording, added the new missing features, updated the .env example section, updated env variables section which describes what each variable does, and also added info on the trust score system, with basic info such as factors, honepot paths, and threshold. Readme should be good to go now, looks like it renders fine on the HTML version as well thanks to the marked js renderer. I think basically everything's done for now, could be ready for the first ship now, but I still want to let the server run for a while and do stress testing and such to confirm it doesn't just collapse first.

Update attachment

Made a new banner and logo. For the logo, I just searched for faucet on flaticon, copied the png, added a gradient and that's it. For the banner, I went with a similar style as the original purple banner, except with the new font. Nothing much to explain but I definitely think I did a better job on the new banner, and example site compared to the original purple design.

Update attachment

Worked quite a bit on improving the example page. I decided to get rid of the ugly purple, and replace it with blue instead. Added <hr>'s in between h2's and the p's in sections cause <hr> is the coolest element ever. Improved wording in some sections, updated info, and added the trust score section. Also added a few more links to the hero section, including a link to the HTML readme view, which gets the raw readme from github, and renders it using marked, though the view is not as good as it would be on github. I still have to make a new banner, and also probably a logo as well since I need a favicon.ico for the example page.

Update attachment

Styling update done, and percent-decoding added. Updated the default error page handler to use the new theme, same as in the dir listing. I fixed the 404 error for files with spaces in the name by adding percent-decoding. Before, e.g. files/test%20filename.txt would be looked up literally on the server, but now with percent decoding, it accounts for the spaces and looks up the file correctly pretty much. For the next changes, one idea I had was to add a custom player/page for certain files, e.g. a audio player html page for mp3 files and a video player for mp4 files, but I decided that wouldn't be the best idea since those should be just sent as is with the correct content type instead of sending it as a html page, so now I pretty much have no good ideas. Considering doing the first ship at this point, but I just want to make sure everything is clean and polished, I definitely still have to update the readme since it's outdated and missing some info, and I'll probably update the banner and the example page as well since looking at it now I did not go with the best color choice, might keep the purple but blue might look better. I'd also have to update the example page with more info, since rn it's pretty lacking and could use more detail, and I'll probably add another page which just gets the readme from github, and uses a js markdown renderer (marked maybe) to render the contents, instead of manually updating it on each readme change. But overall it seems like almost everything seems to be ready for the first ship, so that's it.

Update attachment

Started work on improving the overall quality of the default/server pages (dir listing and error pages). For now, I just improved the dir listing styling. I decided to go with a darker theme overall instead of the pure white background, improved the table styling to seperate the table headers and entries, added icons to indicate home/folders/files, thought about adding more content/extension specific icons but I'll probably do that later, went with a more modern font (segoe ui by default, and other fallback fonts if cant use that), and that's pretty much it. Next thing I'll work on is fixing the 404 for files that have a space in the name for now.

Update attachment

Simple changes to the trust score system again, and pretty much finalizing it. I started off by adding a check for if the user agent is unknown (not in trusted/suspicious user agents list), and if so, reduces trust score by 10. The next thing I did was adjusting the RPM trust score since I felt it was somewhat too lenient but I might be doing overkill, but for now that isn't a problem. Also added a honeypot hits per 3 minutes system, which lowers the trust score of the client based on how many honeypot urls/paths they've tried to access within the last 3 minutes, e.g. if >= 2, lower by 10, if >= 7, lower by 65 cause no regular human tries to access these paths (considering they do not exist). After that I made a few changes to the header checks, starting off by adding a Accept-Encoding header check, if it exists AND is legitimate (includes gzip and such), it raises the score by 5, and opposite for if it's not in the headers. Also improved on the sec-ch-ua-platform header check, before it would just check if that header exists and thats it, now it checks if the string in the header is in the legitimate platforms list, and only raises score then pretty much. Adjusted the 404pm scores to be more lenient since I don't want to false-positive regular users. And finally merged the trustscore branch into main, since it's pretty much functional now, and seems to work fine from testing. Tiniest change ever, but added git switch main to the nest.yml github action cause why not. The next things I plan to work on now then is improving the styling of the error pages and dir listing, cause I'd rather have it look modern than another regular boring http server, and I might also have to fix files with spaces in the name not working properly in the dir listing, since if you try to access those files, despite being listed, it'll just return a 404.

Update attachment

Small update, I let the server run for a while and I managed to catch a considerably malicious request series. The client was using python-httpx which was not in the malicious user agents list so I'll have to add that, and was going through /.git/, to /phpinfo, only being blocked at 5 trust score after 13 requests (which all returned 404 until the 13th request), while starting from 30 trust score. So with that, I had a few ideas. The first idea is to add a honeypots per minute system along with the 404's per minute tracker, e.g. if the client tries to access 4 or more honeypot links per minute (may make it per 3 minutes or such instead of just a minute), it'll penalise the trust score just like the 404 system, except it being harsher. Second idea is to potentially reduce the amount of 404's per minute required by the client to get a trust score drop, since 20 404's might be too lenient. And the third idea is adding a IP range/reputation check, since AbuseIPDB reports the ip as 100% malicious with 2,296 reports. That's pretty much it, I'll try to look into more ways to improve the trust score system since that's my main focus right now, and I want it to be as accurate as possible while not flagging legitimate requests. Also made a small change to the logic before, suspiciousAgents and trustedAgents no longer get double counted (if the useragent is something like curl wget or mozilla chrome for example), if a suspicious agent is detected, it adds -10 to the score, and no other findings are counted including from trustedagents, and if a trusted agent is found, no other findings are counted as well. And for the final idea, I should probably also add a deduction for unknown user agents, since right now if the user agent is not in the sus/trusted agents list, no trust score change is made, which is not the best.

Update attachment

Decided to remove the cache system in the trust score evaluation because it was pretty much unreliable, probably was slower for performance, and unnecessary if i think about it now. I instead replaced it with a lowest score per minute system, which is self-explanatory, say request 1 has a score of 50, request 2 has a score of 60, for request 2 the score used will be 50 since that was the lowest score in the last minute. I also added a honeypotPaths.txt file, which you can use to add your own honeypot paths, if enabled. If one is not found, the server will just use the default hardcoded honeypot paths. Also forgot to include a image of the 403(1) trust score block page in the previous devlog, so adding i'm adding it here.

Update attachment

Trust score evaluation is pretty much functional now, using the factors as described in the previous devlog (headers, 404 per minute count, honeypot paths, etc). Added a few basic trust score prints for now which shows the trust score per request, so I can gather data and make changes based on that via the site hosted on Nest. The workflow pretty much looks like this: Client makes request -> main.cpp checks if client in block list, if not requests trust score -> evaluateTrust.cpp evaluates trust, if client in cache it gets the previous trust score from there if the user-agent is same, and also before sending cached result, it check the 404 per minute count, which is not checked on the first uncached request cause ofc it would be only one 404 logged pretty much -> trust score is sent to main.cpp, if trust score under threshold, add to blocked clients list for user set duration, if not, continue with other checks such as ratelimit and 404 and etc. Implementing this was lowkey gonna tweak me out since the code is spaghetti at this point imo, still manageable though. Anyways, I'm gonna let the trustscore branch run on the nest server for a while, and see if everything looks ok or needs adjustment.

Update attachment

Been working on the evaluateTrust functionality for a while now, still not complete but thought I'd make a devlog anyways. So far I've just made the base functionality but it's not implemented anywhere. By default it checks for headers such as user-agent and sec-ch-ua-platform or if it's empty, checks how many requests per minute the client has done, and user toggleable honeypot paths such as /wp-login.php (might have to make a config file for this cause rn the honeypot paths are hardcoded), and the next thing I'm working on is checking 404's per minute, and adding that to the trust score evaluation as well. It also stores the trust score in the cache for user-set amount of time, but if the user-agent differs from the one in cache, the trust score will be re-evaluated. Tbh idk if caching or not would have a impact on performance but whatever. Pretty much good progress so far, but still needs to be implemented in the right places.

Update attachment

Got faucet working properly on nest, the issue was that I was using reverse_proxy in the Caddyfile, since I assumed that's required to redirect all traffic from the domain to the server, but I just had to run nest caddy add with the --proxy localhost:port argument. IPs are now correct and don't just show localhost. I'm thinking about adding a trust score factor as well to the server as a toggleable option, based on things such as headers, ip range, requests per second, maybe if the client tried to access robots.txt or such, etc. But overall, I think the server is basically ready for first ship but I'd rather polish up stuff and make sure everything looks nice rather than ship it fast but unpolished. Also considering a styling redo for the default error pages, and file listing, similar to the style of Apaxy possibly.

Update attachment

I had to add support for X-Real-IP/X-Forwarded-For since ratelimiting would work incorrectly without that, and also added toggling using that via TRUST_XREALIP via .env, as I'm hosting the example site on Nest, with Caddy as the proxy. The code seems to work fine, but it's a real pain, since for some reason, either Caddy or the code is wrong, and the headers aren't getting correctly added, so Faucet just sees all the requests origins as 127.0.0.1/localhost. I'm confident the issue is with Caddy so I'll try to figure it out cause this is just tiring.

Update attachment

Made a proper readme, added a MIT license, and made a banner. The readme should cover all the important information, such as basic features, installation/setup using the github releases binary (which i'll upload/setup later) or building it yourself, env variables info, and that's pretty much it. Added the MIT license since it's the most straightforward license, I considered GPLv3 but MIT seemed better for this. I made the banner in paint.net in like 15 minutes, I just took a screenshot of the site, added a radial blur, added random lines and just turned that into a road somewhat, shadow outline for the description text, and that's pretty much it, just tried doing random stuff until I came up with the final banner. I'll probably add a few basic badges to the readme as well later, but right now I want to get the server setup on Nest, and have github actions compile the binary on new commits.

Update attachment

got mp4's/large file transfers working, the issue was with SIGPIPE. Pretty much if the peer has closed the connection and you try to write, linux will raise a SIGPIPE, which by default (I think) terminates the process. Ignoring SIGPIPE fixes the issue, and mp4's/large files now load fine on browsers.

Update attachment

Finalizing things for the first ship. I decided to get rid of the old example page, and completely redo it with relevant info and links, and also renamed the example public folder to example/, along with a warning in loadConfig if the folder being served is named example, and added webp to contentTypes.h. Also added example files to the example directory listing. I'll continue to work on the readme next (was making a banner before, took a screenshot of the original example site but it looked ugly so that's why I redid the example page), and also might have to look into if it's a WSL issue or code issue when trying to load/view a mp4 file. But most of the things work fine and well, so that's great.

Update attachment

I probably spent too much time on this, but I added a header manager middleware. Right now it just validates the headers, and if a inconsistency is found it'll return invalid, and then the server can resort to a fallback basic header. It also adds a few basic headers, that being Server: faucet/1.0, X-Content-Type-Options: nosniff, and Referrer-Policy: no-referrer. I decided to make the headermanager since I might add more config options for headers later on for security, and it just helps with validation and not repeating header parts that will be included always, and flexibility for the future.

Update attachment

Worked mostly on improving the console output QoL. Started off by improving the overall style/quality of outputs and by adding HTTP version, method, path and user-agent info to the current request log, and also made it more concise. After that I worked on adding console logging to file, which I did by making logRequest.cpp, and just formatting the strings in main and passing it over there along with config data, and then logRequest handles output to console and logging to file if enabled, along with rotation if LOGMAXFILES is exceeded, to .log.bak.

Update attachment

Added a very basic HTTP auth option & check. You simply just uncomment and setup the user:pass in the .env file, and it'll return 401 to unauthenticated users. HTTP Basic Auth expects base64, so the server handles that by converting the env creds to base64, and checking the incoming requests authorization: field for the base64 creds. If the check fails, the server returns the 401 page.

Update attachment

I decided to add a very basic page for errors+404, instead of currently just returning the error in the header. It's pretty much straightforward, say you get a 404, 429 or a 418, it'll send back the basic page, and contact email/info if the config has one set, along with a link to return to root/home. If a custom 404 page is set, it'll take priority of course, but if one is not set/could not be opened, it'll return the basic page. Anyways for the next changes, I don't really have anything in mind right now, I might go for adding HTTP authentication support with WWW-Authenticate, but I'd also have to probably refactor/add middleware for how responses are sent, or there would just be a lot of repetition and that'd be a headache later.

Update attachment

A few changes, I might ship the project soon since I'm running out of ideas to add that I could realistically do, but I'll look into that later. For the dir listing, I added file sizes, and last modified dates to the table. For DRY, I decided to move the content guessing types to a header file since it was being repeated in the main.cpp file, and also just better for maintaining, added a few more types as well. And finally, added a pretty basic requests/second ratelimit, per IP. loadConfig defaults it to 10 requests/second, customizable via .env of course, and it'll return 429 to any IPs that make more requests than that. Also fixed a issue, if a client closes a connection early, the server would crash since the connection was not closed safely pretty much, this is now fixed.

Update attachment

Forgot to make a devlog on this earlier, but I got directory listing implemented and working. Right now it's pretty basic and simply displays the files/folders inside the folder, but I plan on adding file sizes, last modified dates, and basic svg icons, and overall just polishing the styling.

Update attachment

Mostly small changes and bug fixes.
Fixed a bug in /profile where if the specified user had no profile picture set in last.fm, it would error. This now just replaces the image with the default last.fm placeholder image. Also left a console.log in there which I forgot to remove, which I did later.
I decided to rename /song to /getsong due to there being a slash command name conflict with another app/bot, and also added 404 detection to it since itunes for some reason doesn't always find the song.
The final thing I did was add the workspace name and id to the startup message just for more clarity when debugging/working on the code.

Update attachment
PianoMan0
PianoMan0 Shipwright gave you feedback
27d ago

slack.fm

Spread the word about this, it's super cool!

from PianoMan0

I decided to add a basic app home tab because why not. Right now it just displays the banner, link status, your roast/compliment usage stats, a basic commands table along with a link to the full list, and that's it. I may add more insights such as daily/weekly stats later on, but I decided to keep it basic for now. Also a minor change, updated /link and /unlink mentions to be /linklastfm and /unlinklastfm instead, since I forgot to change some mentions of those commands.

Update attachment

Small changes, updated the slackmanifest long description to be cleaner by removing the markdown parts and making a few formatting changes. Replaced the constant 40ms delay between concurrent requests with a env variable instead, which defaults to 25ms if not found.

Update attachment

Finished adding the spotify links to /artist, /album and /song commands, and decided to add the apple music links as well, which was relatively easy compared to the spotify links, and doesn't require a API key as well. Tested, and works perfectly. Also decided to polish the readme a bit since I'm pretty sure I put no effort into it at all when first creating it, so I decided to polish it by replacing the basic square logo with the banner instead, adding a few badges but not too much to keep it simple, added a contributors subsection with profile images to the contributing section, and made minor changes to introduction and features sections.

Update attachment

I decided to get rid of the /spotify command and integrate it into /song instead, since I have no idea what I was thinking when I made that command initially. Going to do the same thing for /album and /artist and include the spotify links there as well. Might as well look into including Apple Music links as well but I'll think about that for now.

Update attachment
BnaJns
BnaJns worked on slack.fm
1h 54m 28 days ago

I forgot I could submit this to SOM, so I'm doing it now. Since the 2 hours, I worked on thing such as fixing the ai.hackclub.com <think> tags appearing in the roast/compliment commands, updated whoslistening to be concurrent (wasn't before for some reason), added staggering to prevent ratelimits (40ms, might lower it later to 20ms, or even make it a env variable), added nest.yml for auto updates on nest on commits, and finally added crowns for /whoknows (artists only), with crown counts/leaderboard viewable via /crownboard, though I did have to remove /ping in favor of that command but /uptime exists anyways, and I might as well just remove /uptime in favor of placing it in the home panel of the bot dms anyways, along with some other stuff. Also made a very cool banner (this took me like 3 minutes, i somehow found the font i used for the logo in 30 seconds, Lexend with bold).

Update attachment
BnaJns
BnaJns created a project
28d ago

slack.fm

A last.fm bot for slack which lets you link your last.fm account to the bot to view things such as your last scrobbled songs your all-time top albums/tracks/songs, view song/album/artist info, view whoknows leaderboards, get a random list of people who are currently listening to something, and get AI generated roasts or compliments based off your recent music taste.

slack.fm
6 devlogs 0 followers Shipped

Worked on a few things before getting started on directory listing since I'd rather deal with those now than later.
Added custom document root dir option to .env so you can choose a different folder other than the default public/.
Added a custom 404 page option, if one provided it'll return 404 with the given html page, if not, it'll return a plain 404 error.
Also added timestamps to the request logs.
Hoping to get started on directory listing next, maybe I'll work on some other stuff before though.

Update attachment

Small changes, I decided to only move the config loading logic to a separate file for now, as I don't see a need to split anything else (and also moved source code to src/ + added makefile), and moved site root dir to public/ by default, planning on adding a config option for changing this though. I might also work on directory listing next, something similar to what Apache does.

Update attachment

The pages load properly now on firefox, adding proper headers with content-type, content-length, and etc fixed the problem.

Added looping accepts so the server doesn't exit after one request.
Added args to the main loop, right now the only accepted arg is --port for choosing another port other than the default 8080, and a .env loader as well, which also can be used to set the port, but can be overriden via args.
Added graceful exits via signals, so when you press ctrl-c, it'll exit gracefully, and fixed the ip shown in the request received message along with that, and finally added basic content types for js, css, etc so browsers can properly load these.

I'll probably move the site root files to a public/ folder instead of those being in the root of the project as the next change, and I might as well consider splitting the code into multiple files for readability.

Update attachment

I got the server to work with curl somewhat for now, but attempting to view the page via a browser will just return The connection was reset, so that's something I'll have to work on. Also added basic error checks, but overall this still needs a lot of work to be functional.

Update attachment

I decided to challenge myself and also learn c++ by making a http server. I originally had the idea of what if I made the xbox 360 run a http server, but since I don't have access to a windows pc or visual studio 2010 ultimate right now, I just decided to make a regular http server. This will also be my first c/c++ project despite using c before.

Update attachment
BnaJns
BnaJns created a project
35d ago

faucet - a c++ http server

A simple and lightweight HTTP server, written in C++, with features such as static file serving, directory listing, a trust score system, and many more features.

faucet - a c++ http server
28 devlogs 0 followers Shipped
BnaJns
BnaJns created a project
39d ago

BnaJns Portfolio v2

My portfolio, decided to make a new one since the old one is outdated, over a year old, and doesn't look that good.

0 devlogs 0 followers

Made some minor changes to the express site and package.json. Added 4 screenshots of commands being ran in Discord, updated styling for anchor links, and updated descriptions/features sections to match the one in the readme.md file. Also updated package.json to include the author field, and the description.

Update attachment
BnaJns
BnaJns worked on ralseibot
1h 18m 2 months ago

Massive readme.md overhaul, along with contributing and code of conduct.

I completely rewrote the readme from scratch while keeping some relevant parts, added a banner image to replace the text h1, added a contributors image list, and some other formatting changes. Added a CONTRIBUTING.md file with basic guidelines for new contributors to read and follow, this includes info on general guidelines (e.g. keep it UT/DR themed), opening issues for bugs/feature requests, creating pull requests, license, contributors list, and that's it. Added a code of conduct file using the Contributor Covenant template.

Update attachment

Very small change before Ship 1, simplified the readme.md, and removed incorrect and redundant info, such as broken html, and updated scripts section. Also merged copy-sprites.ts into copy-static.ts as both have the same functionality, no idea why this was 2 scripts in the first place.

Update attachment
BnaJns
BnaJns worked on ralseibot
1h 10m 2 months ago

Final changes for ship 1, should be good to go now.

  • Fixed reddit source not working on Nest server by using Reddit OAuth app tokens
  • Renamed ralseify-image to ralseify
  • Updated readme.md and about to add bot pfp
  • Added /commands command to view basic commands, and a link to the full commands.md

Everything seems to be working now, so this will be Ship 1. Hoping there aren't any bugs that went unnoticed 🙏

Update attachment

New features, new issues to work on.

  • Added a /compliment command to either compliment yourself, or another person.
  • Added /mike which takes a random verb, determiner, and noun.
  • Added /motivational-quote, which generates a image of a motivational quote with a random background from Deltarune. Might also add random fonts for this in the future, to be decided.
  • Added /quote, which takes a completely random line from in-game, and outputs it.
  • Added issue templates and a deploy workflow for github
  • Added a commands.md file for full list of all commands.
  • Added a very basic TOS and Privacy Policy on the site (for discord bot verification)

Going to have to work on getting the /ralsei reddit source to work on the Nest server, as trying to fetch the json on a server returns 403, probably going to use proxies for this, or the reddit OAuth.

Update attachment
BnaJns
BnaJns worked on ralseibot
3h 16m 2 months ago

Quite a lot of changes. More fun commands, refactors, site improvements, etc.

New commands/additions:
- /dice: Rolls a 6-sided dice, and returns the outcome with a set character emoji.
- /random-wiki: Gets a random wiki article from the Deltarune Fandom Wiki
- /coin: Flips a coin, returns outcome with either lightner/darkner emoji.
- /shadowcrystal: A 8-ball, but with text outcomes from deltarune.
- /textbox: Added more sprites

Other changes:
- Major README.md rework, assisted mostly by AI.
- Enhanced logging, added emojis for clarity
- Removed unnecessary dotenv config calls
- Decided to work on custom submissions but then decided to put it on hold for now
- Added statuses.json, and added more status messages into the rotation
- Other small changes such as cleanup, and package.json changes.

Update attachment

Added a express site, env check enhancements, and a new command.

  • Added a basic express site to display basic info about the bot, such as links to the github, bot invite, and test server on the hero, and command examples, features and a basic health check/status as well. Planning to expand on this to also allow for custom /ralsei image submissions, with a form for author name, proof of work (to prevent plagiarism/false credits), and the image field itself.

  • Added a /ralseify-image command that takes your pfp or provided image url, and turns it into a ralsified image.

  • Other minor changes such as env check improvements

Planning to finish up the work on this bot soon and get the first version shipped.

Update attachment
BnaJns
BnaJns worked on ralseibot
2h 36m 3 months ago

Mostly worked on switching over to ESM from CommonJS, with some other small changes

  • Added /about and /uptime commands with bot information and uptime display
  • Added environment variable validation with envCheck function
  • Added bad-words dependency and implement profanity check in /ralsei command to filter out potentially harmful posts
  • Updated project structure to use ES modules, this was somewhat of a pain, and took quite a while. Had to do this to get bad-words dependency working correctly.
Update attachment

Added ralsei-sprite, a cooldown system, and twitter as a source for the /ralsei command.

  • added twitter as a source for /ralsei using playwright to scrape twitter pages (using the twitter api wouldn't be a choice due to the very strict free tier limits at 100 reads/month), this was somewhat hard to implement and took quite a while but it should work somewhat normally now. tried using @the-convocation/twitter-scraper at first, but had no luck using it.
  • implemented command cooldown system for user interactions to prevent spam/ratelimits
  • added ralsei-sprite command with sprite extraction and downloading
  • some other minor changes such as updating package.json with linting scripts and linting all scripts
Update attachment
BnaJns
BnaJns worked on ralseibot
1h 30m 3 months ago

Added Status rotation functionality, package.json changes, and new command.

  • Added textbox command to generate textboxes with preset sprites
  • Implemented weighted random selection for subreddit sources
  • Added rotating status functionality (e.g Playing DELTARUNE, Listening to Cool Mixtape, Playing with Ralsei, Watching the Stars)
  • Updated dev script to use ts-node-dev
Update attachment

Finishing touches, this should hopefully be good to go now.

  • Added user ID and account age to username to username-info div
  • Added support for optionally using proxies (due to roblox's strict api ratelimits)
  • Cleaned up and enhanced the readme.md
  • deploy to nest enhancements
Update attachment

Added general enhancements to the site

  • Added a loading spinner, added button states to prevent duplicate requests.
  • Updated backend to use a better POST url instead, improved error handling.
  • Added support for id:12345 format, for choice between @username or id:12345.
  • Username normalization on backend for better caching
  • Added responsive styles for mobile
  • Added Open Graph embed and other SEO optimizations
  • Added dark/light themes
  • Added workflow to auto-deploy to Nest on commit
  • Some other small changes/fixes

Initial commits/basic site implementation

  • Basic user outfits lookup, with thumbnail/outfit name for each outfit
  • Username, display name and current avatar thumbnail display
  • Caches results for 2 minutes
  • Throttler with 4req/sec
  • Helmet middleware for security
  • Ran on express

I'll still have to work on improving ratelimit prevention as that's the biggest issue as of now.

BnaJns
BnaJns created a project
89d ago

roblox-outfit-finder

A simple web app to find and display a Roblox user's saved outfits by their username. Try it out by either inserting a username, or user id in the id:12345 format. Display names will not work. Examples: InceptionTime @asimo3089 id:584197289

roblox-outfit-finder
3 devlogs 0 followers Shipped
BnaJns
BnaJns worked on ralseibot
2h 41m 3 months ago

Initial commits/start of development

  • Basic /ralsei command to fetch random image from reddit, with basic dupe prevention
  • Basic ping command
  • Other minor stuff such as readme.md, env, configs, etc.
BnaJns
BnaJns created a project
91d ago

ralseibot

A Discord bot for all your ralsei-related needs, built with TypeScript and Discord.js. Features multiple commands, such as /ralsei, /ralsei-sprite, /textbox, and many more. Check out more info at https://ralseibot.bnajns.hackclub.app/ , join the test server or invite it to your own server to try out the commands!

ralseibot
14 devlogs 4 followers Shipped

I made this site to learn a little bit more javascript and also make a small site about Tallinn, while it doesn't have the best info about Tallinn it's more focused on javascript functionality.

Features:
- Multiple videos looping in the main page hero section
- Uses a weather api to get weather data for Tallinn
- Shows the local time
- Very basic trip planner with trip duration, main interests and budget range per day
- Fun facts generator
- And a gallery with a lightbox feature

Update attachment
BnaJns
BnaJns created a project
102d ago

visittallinn-waffles

A info site about visiting Tallinn, made for https://waffles.hackclub.com/ Visit the site at https://visittallinn.bnajns.hackclub.app/

visittallinn-waffles
1 devlog 1 follower Shipped
BnaJns
BnaJns joined Summer of Making
102d ago

This was widely regarded as a great move by everyone.