Activity

Ghost of Nova

I added quite a bit of authentication-related code! Most of this time was building strong authentication middleware, so I wouldn’t have to worry about spotty auth implementations. I set this up with two functions, auth() (called on every request) and enforceAuth() (called on some endpoints that require auth). This took a while, as this is my first time making my own Express middleware and handling all of the related TypeScript things (like abstracting the Request to add req.session and req.sessionErr). I also had to figure out cookie handling, as I built the auth middleware to accept header-based auth or cookie-based auth, whichever is better for the client.
I also added logic for ACL path-checking, as well as standard functions for modifying and reading users/sessions/roles/ACLs. This completes the CRUD (Create-Read-Update-Delete) structure for managing all four of these (except for updating sessions i guess).
Finally, I split user handling and session handling into two files, since they are both getting very complex by now.

Attachment
Attachment
Attachment
2

Comments

fireentity
fireentity about 6 hours ago

this is so cool!!

Ghost of Nova
Ghost of Nova about 6 hours ago

thanks! :3

Ghost of Nova

I started adding roles and ACLs! This isn’t done yet, but I wanted to devlog with my current progress on it. I also migrated user validation to be centered on user IDs, as then usernames can be changed without issue. This includes tying the sessions to users with a relation, so sessions will auto-delete if a user is deleted. Finally, I generally improved the database schema.

Attachment
Attachment
0
Ghost of Nova

I added an API route for handling sign-ins! I also added rate limiting (for brute-force protection) and account locking (so admins can prevent users from using their accounts without changing the accounts past a boolean flag). This code is a bit more complex and went through many iterations, such as when I was going to make locks able to expire (which I ended up not doing when I implemented rate-limiting separately from the locking feature, originally I was going to combine them).

Attachment
Attachment
1

Comments

secretaditzu78
secretaditzu78 4 days ago

Nice

Ghost of Nova

This was a very productive time! I added a database and an entire authentication system, including password hashing and short-lived auth tokens! This system is fairly complex and has some weird things, but the main usefulness is that sessions can be remotely revoked (useful if the token gets leaked) and can easily look up the user (hash token -> check against db -> get the user from the session row).
The first video shows the results of some session testing code (create test user -> authenticate to get a token -> check that the token works -> revoke the token), while the second is most of the code I was working on!

0
Ghost of Nova

I added more to the API! I also added graceful shutdowns and started working on authentication. I was planning on building it around JWTs, and I spent over 40 minutes trying to implement them, but it all fell apart when I realized they were impractical based on my plans for auth.

Attachment
Attachment
0
Ghost of Nova

I added a ton of permission checks and error handling logic. Also, I started building an Express app for the FolderHarbor API. though I haven’t added much. This time was quite technical, as I was adding a ton of checks related to the config file (such as making sure it was owned by the correct user and wasn’t overly permissive).

Attachment
1

Comments

Ghost of Nova
Ghost of Nova 12 days ago

one of my files didn’t upload :( it was just a screenshot of the code, though

Ghost of Nova

Started building the server! This project is structured as a monorepo, and I’m building this server process as a “core” of sorts in TypeScript. During this time, I started structuring the repo/code. I also used Commander for command arguments and Zod for parsing the config file.

Attachment
0
Ghost of Nova

I started building the form for making widgets. Essentially, this will be filled with options that the user can change to assemble their widgets.

Attachment
0
Ghost of Nova

I added autosave and a few new pages! Among these, there is now a place to view all journal entries, instead of just ones from the current day. I also got the basic structure prepared for a settings page, which will have more features soon.
Autosave works similarly to my previous projects, but I modified the delay and implementation a lot. React prop serialization doesn’t make it easy, but I’m making it work.

0
Ghost of Nova

I worked on the journal editor and added a page for viewing journal entries! For the editor, I just built something basic for now. It doesn’t have rich text support yet, though I plan to add that. I also coded the ability to delete journal entries.
For the view page, it’s just a simple display of whatever you wrote in the entry. It will be improved upon, but I wanted the foundation.

Attachment
0
Ghost of Nova

I added better error handling, as well as a new API route for updating entries. I’m trying to build a lot of the journaling backend before the frontend, as the frontend has a lot of complexity that I want a stable backend to build on.
(The database integration does work, as shown in the previous devlog. I intentionally triggered an error to show that the messages work.)

Attachment
Attachment
1

Comments

fireentity
fireentity 20 days ago

this looks so nice!!

Ghost of Nova

I started creating graves! I’m trying to figure out how to place the grave block (a textured player head) at a player’s death location. I’m not saving inventories or modifying drops yet, as I want to get the basic logic down before working with the actual items.
I also added my CoreTools (just some helpers I add to all of my Minecraft plugins) and spent a little bit tuning the code to work for this plugin properly.

Attachment
Attachment
0
Ghost of Nova

I built a basic API for adding journal entries! It’s far from perfect, but it will allow me to start on the entry editor. I also added an entry display to the main page, though it doesn’t really map to anything yet. I will add more to these when I work on this next!

Attachment
Attachment
0
Ghost of Nova

I started building the app! I don’t have much yet, but I have added a database, authentication, and a basic UI.
This was mostly just things to get me started on the app :3

Attachment
Attachment
Attachment
Attachment
0
Ghost of Nova

Shipped this project!

Hours: 24.32
Cookies: 🍪 363
Multiplier: 14.93 cookies/hr

I completed the full website and blog! It’s a fancy, custom website for me to share things about me, my blog posts, and much more. I learned a lot by building this, as I had to work with many technical things (regex, APIs, a database, etc). I didn’t use AI on any part of this project, so I had to solve things without it, and learned more because of that. Also, I made dynamic widgets for things about my project, including one that integrates with a previous project of mine!

Ghost of Nova

I updated a bunch of things to prepare to ship! I deployed the site to a DigitalOcean VPS, added Docker build support, added CI workflows, and fixed bugs. I also drew an 88x31 button (not tracked on my time). I was originally planning on deploying this to Heroku, so I had some hours working on setting that up (~1 hour) that I had to revert due to an issue.
I had to make some pages “dynamic” for them to work in the production environment. I found a few other bugs as well, like RSS feed links not properly leading to my website. I also made all of the widgets fully operational (including the fancy clock on the front page). Overall, this was very technically complicated to figure out, but I got the site fully operational.

0
Ghost of Nova

I made a widget on my homepage for blog posts, made my projects page pull from the database, improved mobile support, and added project management to my admin panel! The projects page was originally constructed from an array, but uses the database now, so I can add new projects of mine without needing to edit the code. This also included building an admin panel for actually editing the projects. I also moved buttons around on mobile to make it look much better. I tried to change the background to an image, but my CSS didn’t end up working as I wanted it to, so I had to discard those changes.

0
Ghost of Nova

I built an RSS feed for my blog! This allows my posts to be seen on other platforms, so people wanting to read my posts don’t have to check my blog for new posts when there aren’t any. I also built an auto-save system on my admin panel for when I’m writing, which made me work very hard to sync state across the database, server, and client (my state hooks were causing issues with how I had them set up). I also added some other things, like the ability to download posts as .md files, improving the viewer for posts, sorting posts by published date, and improving error handling.

0
Ghost of Nova

I created most of the admin panel to manage blog posts, on both the frontend and backend. I had some challenges, mainly with sorting out how to build the PATCH requests to send as little data as possible (as I commonly write things on low data, and I want this to be practical for me to use). The end result turned out quite well, and I even implemented proper error handling!

2

Comments

Charmunk
Charmunk about 1 month ago

woahhh i might steal your blog software

Ghost of Nova
Ghost of Nova about 1 month ago

:3 that makes me happy to hear!
(it’s improved a fair bit from this devlog, now it has rss, full markdown support, autosave, and more!)

Ghost of Nova

I started on an admin panel for the blog! This was mostly backend work, as I wanted a lightweight auth system (it just uses an environment variable for the password).
It also included database work to add things like a “published” field to the schema (to allow me to hide blog posts without deleting them), as well as hooking the blog up to an actual PostgreSQL database (running on my Raspberry Pi for development).

Attachment
0
Ghost of Nova

I built the foundations of my blog (and its associated database), a footer, an about page that talks about me and things that I like, and a widget that integrates with another previous project of mine (called Universal Status)! The ongoing Nest outage has made it a bit harder for me to do this, as I typically use Nest PostgreSQL while developing, and Universal Status is hosted there. I got around the latter issue by running a local instance of Universal Status and pointing the site there, and the former issue by editing my function to temporarily use placeholder data (in the same schema the database will follow). This one was quite fun to work on, and I’m planning some very cool things with widgets soon!

1

Comments

Ghost of Nova
Ghost of Nova about 1 month ago

oh, my video uploaded twice :heavysob:
it’s the exact same video, so it should be fine

Ghost of Nova

got started on the site and built the foundations of my project list, home page, and “accounts” page. also included making a header and figuring out some fairly complex things, like tailwind css gradient text!
a lot of this work was getting started, and i am planning on starting the blog and doing a bunch of refinements soon.

0