|
17675
|
LibreAuth by @stormz | Stardance
|
stormz
|
0
|
3.33
|
0
|
[]
|
[{"post_id": 7758, "ts": "2026 [{"post_id": 7758, "ts": "2026-06-12T23:12:27Z", "hours": 3.3256, "text": "Currently working on a hackpad for the mission."}]...
|
Title: LibreAuth by @stormz | Stardance
Devlogs:
Title: LibreAuth by @stormz | Stardance
Devlogs:
Currently working on a hackpad for the mission....
|
1793437031.1397913
|
1794041831.1397913
|
|
31640
|
My awesome macropad! by @stormz | Stardance
|
stormz
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My awesome macropad! by @stormz | Stardance
|
1793768088.2534387
|
1794372888.2534387
|
|
31642
|
OceanPad by @stormz | Stardance
|
stormz
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: OceanPad by @stormz | Stardance
|
1793411636.7133198
|
1794016436.7133198
|
|
21240
|
Tempo by @stormythunder4K | Stardance
|
stormythunder4K
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Tempo by @stormythunder4K | Stardance
|
1793292505.996865
|
1793897305.996865
|
|
38386
|
My first slack bot! by @stormsur | Stardance
|
stormsur
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My first slack bot! by @stormsur | Stardanc Title: My first slack bot! by @stormsur | Stardance...
|
1793512184.6961465
|
1794116984.6961465
|
|
38394
|
Untitled by @stormsur | Stardance
|
stormsur
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Untitled by @stormsur | Stardance
|
1793400617.155803
|
1794005417.155803
|
|
51205
|
My very own WebOS by @storm_cat | Stardance
|
storm_cat
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My very own WebOS by @storm_cat | Stardance
|
1793382633.834143
|
1793987433.834143
|
|
3269
|
My awesome macropad! by @stomach_sink | Stardance
|
stomach_sink
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My awesome macropad! by @stomach_sink | Sta Title: My awesome macropad! by @stomach_sink | Stardance...
|
1793839890.514066
|
1794444690.514066
|
|
21948
|
Polyatomic Ion Builder by @stomach_sink | Stardanc Polyatomic Ion Builder by @stomach_sink | Stardance...
|
stomach_sink
|
0
|
1.17
|
0
|
[]
|
[{"post_id": 11600, "ts": "202 [{"post_id": 11600, "ts": "2026-06-18T21:48:33Z", "hours": 1.1672, "text": "Colors so pretty ngl. i added colors and the ions are GROUPED so its easier to add on and devlope more ions easier w/o havign to give each a seperate id, but they currently don’t do anything that will be a tommrow job. note to self: add hover animations and stuff so it feels interactive"}]...
|
Title: Polyatomic Ion Builder by @stomach_sink | S Title: Polyatomic Ion Builder by @stomach_sink | Stardance
Devlogs:
Colors so pretty ngl. i added colors and the ions are GROUPED so its easier to add on and devlope more ions easier w/o havign to give each a seperate id, but they currently don’t do anything that will be a tommrow job. note to self: add hover animations and stuff so it feels interactive...
|
1793415263.6613667
|
1794020063.6613667
|
|
69429
|
Little jukebox by @stomach_sink | Stardance
|
stomach_sink
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Little jukebox by @stomach_sink | Stardance
|
1793577352.5728226
|
1794182152.5728226
|
|
39339
|
Automated greenhouse for herbs by @stoleurtoast | Automated greenhouse for herbs by @stoleurtoast | Stardance...
|
stoleurtoast
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Automated greenhouse for herbs by @stoleurt Title: Automated greenhouse for herbs by @stoleurtoast | Stardance...
|
1793227897.2102935
|
1793832697.2102935
|
|
428
|
Frictionless by @stolen_username | Stardance
|
stolen_username
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Frictionless by @stolen_username | Stardanc Title: Frictionless by @stolen_username | Stardance...
|
1793336219.0834093
|
1793941019.0834093
|
|
566
|
Personal Website by @stoinkety | Stardance
|
stoinkety
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Personal Website by @stoinkety | Stardance
|
1793274788.49187
|
1793879588.49187
|
|
52268
|
Synapse by @stoicsatvik | Stardance
|
stoicsatvik
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Synapse by @stoicsatvik | Stardance
|
1793433338.804905
|
1794038138.804905
|
|
2737
|
Neural Network from Scratch by @stockifab | Starda Neural Network from Scratch by @stockifab | Stardance...
|
stockifab
|
1
|
12.0
|
135
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-14T13:47:27Z", "hours": 12.0, "multiplier": 13.41, "payout": 135, "blessing": "neutral", "text": "Neural Network from Scratch A fully functional neural network built using nothing but NumPy, capable of classifying MNIST handwritten digits with 90% test accuracy. My goal was actually understanding what happens under the hood. My implementation includes backpropagation from scratch, sigmoid and softmax activations, binary and categorical cross-entropy loss functions and mini-batch gradient descent. I wrapped all of this in an easy to use API: network = Network ( [ Layer ( 64 , activation = \" input \" ), Layer ( 50 ), Layer ( 30 ), Layer ( 10 , activation = \" softmax \" ), ], loss = \" categorical_crossentropy \" , ) network . fit ( X_train , y_train , epochs = 8000 , learning_rate = 1 , batch_size = 0.1 ) The math and backpropagation were the hardest parts, I derived the gradients of the cost function by hand and backpropagation didn’t really make sense to me at first. I started with mean squared error, and the gradients exploded quickly. Switching to cross-entropy fixed it. I’m really proud that I now understand why these networks are able to learn, seeing your own network learn feels amazing. You can try it out on MNIST yourself and play with the parameters in your browser without installing anything at https://neural-network-from-scratch-stockifab.streamlit.app .", "repo": "https://github.com/stockifab/Neural-Network", "demo": "https://neural-network-from-scratch-stockifab.streamlit.app/"}]...
|
[{"post_id": 8669, "ts": "2026 [{"post_id": 8669, "ts": "2026-06-14T12:24:56Z", "hours": 1.3572, "text": "Demo + Readme The network is fully working, however its difficult to see it in action. That’s why (with the help of Claude) I created a Streamlit app, so that you can try different parameters for the network in the browser. Without having to install anything locally. I also spent some time making the readme prettier and more informative."}, {"post_id": 8610, "ts": "2026-06-14T09:48:35Z", "hours": 1.2111, "text": "Training API + OneHotEncoder Cleaned up a lot of the boilerplate inside main.py . The training loop is now inside the network itself and can be called with a single fit() call handling batching, epochs, and logging: network . fit ( X_train , y_train , learning_rate = 0.1 , batch_size = 0.1 ) I also renamed a few things that were always named imprecisely. run() is now forward() , and the old fit() (which only did a single gradient step) became epoch() . This made the code much easier to read. The one-hot encoding is now its own class instead of a one-liner scattered in main.py. This was necessary because you need to decode predictions back to the original labels afterwards: encoder = OneHotEncoder () y = encoder . encode ( digits . target ) encoder . decode ( network . forward ( X_test )) I also added a train_test_split utility so I don’t have to manually slice arrays anymore."}, {"post_id": 8260, "ts": "2026-06-13T18:59:49Z", "hours": 4.2894, "text": "Softmax Activation and Digits I modified the API so that cost and activation functions can easily be changed. After opting for softmax activation at the output layer and changing the cost function to categorical cross-entropy, the model classified the numbers with 85.59% accuracy after 10.000 epochs. I’m surprised it works this well despite the small network and no regularization or tuning at all. While interesting, the math is getting really complicated now, especially deriving the softmax function is still a mystery to me, i had to look up its derivative online. I want to spend some more time understanding how the cost and the activation function “influence” each other before implementing an API to more easily train the network."}, {"post_id": 2211, "ts": "2026-06-04T16:20:36Z", "hours": 3.3214, "text": "Backpropagation It’s learning! I tried the network with a small synthetic dataset and it learned the pattern flawlessly, at least when you don’t let it run for too long: Below you can see the network’s performance (cost) at each epoch, it starts out strong - reducing the cost and getting better and better - until all of a sudden there is a massive spike and the cost goes way up again. I have no idea why this is happening, but overall I’m extremely happy that the network is learning. Next I’m going to fix this issue and then I want it to predict numbers from the MNIST dataset."}, {"post_id": 1579, "ts": "2026-06-03T18:00:35Z", "hours": 1.8164, "text": "Network Architecture + Forward Pass Wrote a basic API for modelling the network. When untrained it initializes weights and biases random. With these random values it is already capable of running a forward pass with some input data. Next I want to implement backpropagation so that the network can actually learn patterns in data."}]...
|
Title: Neural Network from Scratch by @stockifab | Title: Neural Network from Scratch by @stockifab | Stardance
Devlogs:
Network Architecture + Forward Pass Wrote a basic API for modelling the network. When untrained it initializes weights and biases random. With these random values it is already capable of running a forward pass with some input data. Next I want to implement backpropagation so that the network can actually learn patterns in data.
Backpropagation It’s learning! I tried the network with a small synthetic dataset and it learned the pattern flawlessly, at least when you don’t let it run for too long: Below you can see the network’s performance (cost) at each epoch, it starts out strong - reducing the cost and getting better and better - until all of a sudden there is a massive spike and the cost goes way up again. I have no idea why this is happening, but overall I’m extremely happy that the network is learning. Next I’m going to fix this issue and then I want it to predict numbers from the MNIST dataset.
Softmax Activation and Digits I modified the API so that cost and activation functions can easily be changed. After opting for softmax activation at the output layer and changing the cost function to categorical cross-entropy, the model classified the numbers with 85.59% accuracy after 10.000 epochs. I’m surprised it works this well despite the small network and no regularization or tuning at all. While interesting, the math is getting really complicated now, especially deriving the softmax function is still a mystery to me, i had to look up its derivative online. I want to spend some more time understanding how the cost and the activation function “influence” each other before implementing an API to more easily train the network.
Training API + OneHotEncoder Cleaned up a lot of the boilerplate inside main.py . The training loop is now inside the network itself and can be called with a single fit() call handling batching, epochs, and logging: network . fit ( X_train , y_train , learning_rate = 0.1 , batch_size = 0.1 ) I also renamed a few things that were always named imprecisely. run() is now forward() , and the old fit() (which only did a single gradient step) became epoch() . This made the code much easier to read. The one-hot encoding is now its own class instead of a one-liner scattered in main.py. This was necessary because you need to decode predictions back to the original labels afterwards: encoder = OneHotEncoder () y = encoder . encode ( digits . target ) encoder . decode ( network . forward ( X_test )) I also added a train_test_split utility so I don’t have to manually slice arrays anymore.
Demo + Readme The network is fully working, however its difficult to see it in action. That’s why (with the help of Claude) I created a Streamlit app, so that you can try different parameters for the network in the browser. Without having to install anything locally. I also spent some time making the readme prettier and more informative.
Ships:
Neural Network from Scratch A fully functional neural network built using nothing but NumPy, capable of classifying MNIST handwritten digits with 90% test accuracy. My goal was actually understanding what happens under the hood. My implementation includes backpropagation from scratch, sigmoid and softmax activations, binary and categorical cross-entropy loss functions and mini-batch gradient descent. I wrapped all of this in an easy to use API: network = Network ( [ Layer ( 64 , activation = " input " ), Layer ( 50 ), Layer ( 30 ), Layer ( 10 , activation = " softmax " ), ], loss = " categorical_crossentropy " , ) network . fit ( X_train , y_train , epochs = 8000 , learning_rate = 1 , batch_size = 0.1 ) The math and backpropagation were the hardest parts, I derived the gradients of the cost function by hand and backpropagation didn’t really make sense to me at first. I started with mean squared error, and the gradients exploded quickly. Switching to cross-entropy fixed it. I’m really proud that I now understand why these networks are able to learn, seeing your own network learn feels amazing. You can try it out on MNIST yourself and play with the parameters in your browser without installing anything at https://neural-network-from-scratch-stockifab.streamlit.app ....
|
1793879407.2435873
|
1793965807.2435873
|
|
23433
|
Garden Calendar by @stockifab | Stardance
|
stockifab
|
1
|
10.0
|
197
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-27T15:56:53Z", "hours": 10.0, "multiplier": 15.86, "payout": 197, "blessing": "neutral", "text": "Garden Calendar is a website that shows you when to sow the plants for your garden. A calendar shows you when to sow indoors, outdoors, when the plants can be harvested and using filtering options, you can quickly find the plant you are looking for. Furthermore Garden Calendar gives you useful gardening tips for each plant in its database. I built this project because I wanted to refresh my Angular skills, in hindsight, this project wasn’t ideal for this because I didn’t get to use a lot of Angular features. Nevertheless, it wasn’t for nothing, and I learnt something along the way.", "repo": "https://github.com/stockifab/Garden-Calendar/", "demo": "https://stockifab.github.io/Garden-Calendar/"}]...
|
[{"post_id": 16985, "ts": "202 [{"post_id": 16985, "ts": "2026-06-27T15:49:21Z", "hours": 0.5969, "text": "GitHub Pages Deployment I deployed the app to GitHub pages. I encountered one issue: The images were not loading, because GitHub page URLs end with the name of the repository, so the root of the app is not at / but on /<Repository-Name> . The path of my images were preceded with a / which is incorrect when the root is not at / . Removing the / resolved the issue."}, {"post_id": 16944, "ts": "2026-06-27T14:49:44Z", "hours": 2.3583, "text": "Plant Details & UI Tweaks Plants can now be clicked on, showing a details menu on the right with details and a tip for growing the plant. I had troubles with the CSS of the legend at the bottom right corner which is positioned absolutely: The library used to make the panels resizable sets position: relative during dragging, causing the legend to be in an incorrect position only during dragging. I fixed the issue with some clever div wrapping."}, {"post_id": 13872, "ts": "2026-06-22T18:48:31Z", "hours": 3.0761, "text": "Bookmarking + Refactoring Users can now bookmark the plants they want to see. Bookmarked plants save in localStorage. Moreover, there is now an empty state when there are no plants to show due to filters. I also did some refactoring and simplified the code here and there. For my Angular learning goal: I learnt how to use effect() , which seems to do basically the same as the useEffect() hook in React."}, {"post_id": 13070, "ts": "2026-06-21T11:45:30Z", "hours": 2.5361, "text": "Calendar Rebuild I rewrote the calendar from an SVG graphic to a table, and added some basic filtering. Since my goal with this project is to learn Angular this was a nice opportunity to try signal forms. I also created a service for plant-related utility functions. Next I want to allow users to only show plants they are interested in."}, {"post_id": 12996, "ts": "2026-06-21T07:48:24Z", "hours": 1.8083, "text": "Gantt Diagram I want to use a Gantt Diagram to show when to sow and when to harvest plants. I decided to make this chart with a generated SVG graphic but that was a mistake: Calculating the position of each element (text, rectangle, line) is really fragile and styling the diagram further is painful. I want to re-do the diagram with a html table, which can be styled a lot easier."}]...
|
Title: Garden Calendar by @stockifab | Stardance
Title: Garden Calendar by @stockifab | Stardance
Devlogs:
Gantt Diagram I want to use a Gantt Diagram to show when to sow and when to harvest plants. I decided to make this chart with a generated SVG graphic but that was a mistake: Calculating the position of each element (text, rectangle, line) is really fragile and styling the diagram further is painful. I want to re-do the diagram with a html table, which can be styled a lot easier.
Calendar Rebuild I rewrote the calendar from an SVG graphic to a table, and added some basic filtering. Since my goal with this project is to learn Angular this was a nice opportunity to try signal forms. I also created a service for plant-related utility functions. Next I want to allow users to only show plants they are interested in.
Bookmarking + Refactoring Users can now bookmark the plants they want to see. Bookmarked plants save in localStorage. Moreover, there is now an empty state when there are no plants to show due to filters. I also did some refactoring and simplified the code here and there. For my Angular learning goal: I learnt how to use effect() , which seems to do basically the same as the useEffect() hook in React.
Plant Details & UI Tweaks Plants can now be clicked on, showing a details menu on the right with details and a tip for growing the plant. I had troubles with the CSS of the legend at the bottom right corner which is positioned absolutely: The library used to make the panels resizable sets position: relative during dragging, causing the legend to be in an incorrect position only during dragging. I fixed the issue with some clever div wrapping.
GitHub Pages Deployment I deployed the app to GitHub pages. I encountered one issue: The images were not loading, because GitHub page URLs end with the name of the repository, so the root of the app is not at / but on /<Repository-Name> . The path of my images were preceded with a / which is incorrect when the root is not at / . Removing the / resolved the issue.
Ships:
Garden Calendar is a website that shows you when to sow the plants for your garden. A calendar shows you when to sow indoors, outdoors, when the plants can be harvested and using filtering options, you can quickly find the plant you are looking for. Furthermore Garden Calendar gives you useful gardening tips for each plant in its database. I built this project because I wanted to refresh my Angular skills, in hindsight, this project wasn’t ideal for this because I didn’t get to use a lot of Angular features. Nevertheless, it wasn’t for nothing, and I learnt something along the way....
|
1793930170.3935337
|
1794016570.3935337
|
|
27798
|
Word Embeddings by @stockifab | Stardance
|
stockifab
|
1
|
28.0
|
556
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-25T19:47:36Z", "hours": 28.0, "multiplier": 16.45, "payout": 556, "blessing": "neutral", "text": "Word embeddings are a way to store the meaning of word (such as “plane” or “dog”) in a large vector (= a long list of numbers) These vectors can then be used to find words similar to each other. But they can also be used to calculate with English words, e.g.: dog - bark + meow –> cat (in fact, you can try this very example on the demo website, or come up with your own calculation) In order to retrieve these embeddings, I created a model that reads through billions of words to understand how they are used. It looks at the words appearing close to each other and assumes all words with the same nearby words must have similar meaning. This retrieval of the embeddings was the hardest part: My first model was okayish and could find related words, but I could not yet calculate with them like in the example before. For the final version I used a much larger dataset, with thought-out pre-processing steps, which was more complicated then I thought (You need to ensure the words you are grouping actually belong together, so you may only group within individual sentences, groups mustn’t overlap anything inside brackets, and you can’t make a group with words you filtered in pre-processing at the same time you shouldn’t skip any words, …) Additionally the challenge with a larger dataset was, that it didnt fit into my memory, so I had to read it in chunks and train the model incrementally. The training of the final model took over 50 hours.", "repo": "https://github.com/stockifab/word-embeddings", "demo": "https://word-embeddings.happierbit.com/"}]...
|
[{"post_id": 34783, "ts": "202 [{"post_id": 34783, "ts": "2026-07-25T19:30:48Z", "hours": 1.7033, "text": "Finish Demo Website (Pages 4-8) I completed the last part of the demo website including the most exciting part about the word arithmetic."}, {"post_id": 33127, "ts": "2026-07-22T19:08:07Z", "hours": 4.3458, "text": "Embedding Demo Website (Pages 1-3) I really like the way the embeddings turned out. That’s why I want to make a website to make word embeddings as accessible and understandable as possible. I’m assuming no prior knowledge from the visitors, and try to interactively guide them through the world of embeddings, with each slide explaining something about embeddings or being interactive to try it yourself. This time i finished slides 1-3, with the last one being the interactive one. Since it should feel engaging and alive, I focus a lot on subtle animations and micro-interactions. I’ve never built a website with heavy animations before so this is the perfect opportunity to try GSAP!"}, {"post_id": 27814, "ts": "2026-07-13T18:14:42Z", "hours": 3.6242, "text": "Maths with English words With the new dataset, training took a lot longer. My computer worked for around 50 hours to run through 26GB of training data. The long wait really payed off though, the model is so much better than the previous model and it is finally capable of doing the embedding arithmetic I’ve been chasing the whole time. Embedding arithmetic is so fun, here are some examples: throw - throwing + running -> run (-ing form) better - good + friendly -> friendlier (comparasion) woman - man + king -> queen (man compared to woman is like king compared to queen) germany - berlin + paris (capitals) The model learned a lot more syntactic and semantic meaning than I had expected. Next I want to build a web app, so that you can play with the embeddings yourself."}, {"post_id": 23582, "ts": "2026-07-06T16:54:41Z", "hours": 7.0792, "text": "New Dataset + Improved Pre-Processing In an effort to increase the model’s performance I switched from the previous model’s Wikipedia Simple English dataset to a subset of the Fine Web Edu dataset. As an additional measure to improve the results I decided to use a larger context of 4 words left and right to the root word. I also completely re-wrote all the preprocessing steps. Even though the dataset is high-quality, language is very nuanced and needs filtering. But since words next to each other (4 words before and after the root word) get grouped, filtering an entire word means the group mustn’t be formed (as information is now missing), on the other hand removing punctuation from the end of a word should still allow that word to appear in a group. Overall I filter/handle: quotes brackets non-English Characters apostrophes other special characters (dashes, underscores, etc.) Another challenge is ensuring that grouped words actually belong together. In the previous dataset I simply grouped the words next to each other in a giant blob of text. This time I only group words from the same text source (the same article, document, …) and only within the sentences of that source. This ensures groups don’t span multiple sentences. This taught me a lot about working with larger amounts of data - I couldn’t load everything in memory as it would be too large, but had to read from disk in batches to process the data. After ~50 min of leaving my computer untouched I had the final dataset with ~26GB (~18GB compressed using word IDs) of filtered word groups. Next, I will have to find a way to determine unrelated words, so that I can start training the third iteration of the model."}, {"post_id": 22251, "ts": "2026-07-04T16:59:44Z", "hours": 3.2306, "text": "New (worse) model In an effort to improve on the previous model, I created a new one. Now it uses separate weights for the context instead of re-using the embedding weights in the context. The new model has 30.000.000 parameters which is double the previous one. Yet unfortunately, the results I got were disappointingly miserable: In contrast to the previous model, it doesn’t even group related words. According to the embeddings, the word “cat” is very similar in meaning to “motor” or “caution” 😂😭 I don’t know why it’s performing so poorly, but I’m curious to find out."}, {"post_id": 22092, "ts": "2026-07-04T10:56:19Z", "hours": 4.3497, "text": "First Embedding Model Using the data obtained previously I could get my first embeddings 🎉 The model (image) has 15.000.000 parameters and took roughly 1/2 hour to train. Unfortunately, the performance is below my expectations: It’s not yet good enough so that “uncle - aunt + mum” would output “dad”. However, the embeddings definitely captured some meaning: For example, the vector of “android” is close to “ios” and to “smartphones”. The vector of “cat” is close to the words “goat”, “monkeys” and “snakes”. I want to improve this model significantly until it’s good enough to meaningfully calculate with the embedding vectors."}, {"post_id": 17825, "ts": "2026-06-28T19:15:17Z", "hours": 3.9069, "text": "Data preprocessing Before the model can train to retrieve the embeddings, it needs data. I found a dataset on Kaggle with the text of 249.396 wikipedia articles. Today I did some preprocessing, first I removed any non-english words and delete special characters, then I determined the 50.000 most frequent words, and limited my vocabulary to these words. To compute the embeddings, I took the left and right words of each word in the data and put them into a pandas data frame along with two other unrelated words: (left word, center word, right word, unrelated word 1, unrelated word 2) The final dataset has 24.780.670 rows, so I likely cant train on the full dataset on my computer. The goal is for the model, when presented with the center word to predict which of the other words are similar to it which it can only do by learning the meaning of each word - which is what we want."}]...
|
Title: Word Embeddings by @stockifab | Stardance
Title: Word Embeddings by @stockifab | Stardance
Devlogs:
Data preprocessing Before the model can train to retrieve the embeddings, it needs data. I found a dataset on Kaggle with the text of 249.396 wikipedia articles. Today I did some preprocessing, first I removed any non-english words and delete special characters, then I determined the 50.000 most frequent words, and limited my vocabulary to these words. To compute the embeddings, I took the left and right words of each word in the data and put them into a pandas data frame along with two other unrelated words: (left word, center word, right word, unrelated word 1, unrelated word 2) The final dataset has 24.780.670 rows, so I likely cant train on the full dataset on my computer. The goal is for the model, when presented with the center word to predict which of the other words are similar to it which it can only do by learning the meaning of each word - which is what we want.
First Embedding Model Using the data obtained previously I could get my first embeddings 🎉 The model (image) has 15.000.000 parameters and took roughly 1/2 hour to train. Unfortunately, the performance is below my expectations: It’s not yet good enough so that “uncle - aunt + mum” would output “dad”. However, the embeddings definitely captured some meaning: For example, the vector of “android” is close to “ios” and to “smartphones”. The vector of “cat” is close to the words “goat”, “monkeys” and “snakes”. I want to improve this model significantly until it’s good enough to meaningfully calculate with the embedding vectors.
New (worse) model In an effort to improve on the previous model, I created a new one. Now it uses separate weights for the context instead of re-using the embedding weights in the context. The new model has 30.000.000 parameters which is double the previous one. Yet unfortunately, the results I got were disappointingly miserable: In contrast to the previous model, it doesn’t even group related words. According to the embeddings, the word “cat” is very similar in meaning to “motor” or “caution” 😂😭 I don’t know why it’s performing so poorly, but I’m curious to find out.
New Dataset + Improved Pre-Processing In an effort to increase the model’s performance I switched from the previous model’s Wikipedia Simple English dataset to a subset of the Fine Web Edu dataset. As an additional measure to improve the results I decided to use a larger context of 4 words left and right to the root word. I also completely re-wrote all the preprocessing steps. Even though the dataset is high-quality, language is very nuanced and needs filtering. But since words next to each other (4 words before and after the root word) get grouped, filtering an entire word means the group mustn’t be formed (as information is now missing), on the other hand removing punctuation from the end of a word should still allow that word to appear in a group. Overall I filter/handle: quotes brackets non-English Characters apostrophes other special characters (dashes, underscores, etc.) Another challenge is ensuring that grouped words actually belong together. In the previous dataset I simply grouped the words next to each other in a giant blob of text. This time I only group words from the same text source (the same article, document, …) and only within the sentences of that source. This ensures groups don’t span multiple sentences. This taught me a lot about working with larger amounts of data - I couldn’t load everything in memory as it would be too large, but had to read from disk in batches to process the data. After ~50 min of leaving my computer untouched I had the final dataset with ~26GB (~18GB compressed using word IDs) of filtered word groups. Next, I will have to find a way to determine unrelated words, so that I can start training the third iteration of the model.
Maths with English words With the new dataset, training took a lot longer. My computer worked for around 50 hours to run through 26GB of training data. The long wait really payed off though, the model is so much better than the previous model and it is finally capable of doing the embedding arithmetic I’ve been chasing the whole time. Embedding arithmetic is so fun, here are some examples: throw - throwing + running -> run (-ing form) better - good + friendly -> friendlier (comparasion) woman - man + king -> queen (man compared to woman is like king compared to queen) germany - berlin + paris (capitals) The model learned a lot more syntactic and semantic meaning than I had expected. Next I want to build a web app, so that you can play with the embeddings yourself.
Embedding Demo Website (Pages 1-3) I really like the way the embeddings turned out. That’s why I want to make a website to make word embeddings as accessible and understandable as possible. I’m assuming no prior knowledge from the visitors, and try to interactively guide them through the world of embeddings, with each slide explaining something about embeddings or being interactive to try it yourself. This time i finished slides 1-3, with the last one being the interactive one. Since it should feel engaging and alive, I focus a lot on subtle animations and micro-interactions. I’ve never built a website with heavy animations before so this is the perfect opportunity to try GSAP!
Finish Demo Website (Pages 4-8) I completed the last part of the demo website including the most exciting part about the word arithmetic.
Ships:
Word embeddings are a way to store the meaning of word (such as “plane” or “dog”) in a large vector (= a long list of numbers) These vectors can then be used to find words similar to each other. But they can also be used to calculate with English words, e.g.: dog - bark + meow –> cat (in fact, you can try this very example on the demo website, or come up with your own calculation) In order to retrieve these embeddings, I created a model that reads through billions of words to understand how they are used. It looks at the words appearing close to each other and assumes all words with the same nearby words must have similar meaning. This retrieval of the embeddings was the hardest part: My first model was okayish and could find related words, but I could not yet calculate with them like in the example before. For the final version I used a much larger dataset, with thought-out pre-processing steps, which was more complicated then I thought (You need to ensure the words you are grouping actually belong together, so you may only group within individual sentences, groups mustn’t overlap anything inside brackets, and you can’t make a group with words you filtered in pre-processing at the same time you shouldn’t skip any words, …) Additionally the challenge with a larger dataset was, that it didnt fit into my memory, so I had to read it in chunks and train the model incrementally. The training of the final model took over 50 hours....
|
1793825313.55911
|
1793911713.55911
|
|
47466
|
Guitar Assistant by @stockifab | Stardance
|
stockifab
|
1
|
16.0
|
122
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-26T14:22:08Z", "hours": 16.0, "multiplier": 6.25, "payout": 122, "blessing": "neutral", "text": "Guitar Assistant Guitar Assistant is an app that shows you where to press down on the guitar to play whatever notes you pick in the staff. The guitar allows you to play the same note at different positions on the fretboard, so there is usually not one correct way of playing a set of notes. Guitar Assistant shows you all possibilities so that you can pick the one you’re most comfortable with. Coming up with an architecture for converting between where the note is on the staff, and where the note can be played on the fretboard was the most challenging part. At first this conversion and the visualisation was tightly coupled (the fretboard component did the conversion). This was 1. unclean and 2. really painful to work with: After refactoring, I ended up with an intermediate format that’s easy to do “musical calculations” with, and a dedicated class for converting that format into another format the fretboard component can easily interpret. I had a lot of fun building this project and am actively using it 🎶", "repo": "https://github.com/stockifab/GuitarAssistant", "demo": "https://stockifab.github.io/GuitarAssistant/"}]...
|
[{"post_id": 55050, "ts": "202 [{"post_id": 55050, "ts": "2026-08-26T14:09:48Z", "hours": 0.8858, "text": "Project Demo, small Fixes & Deployment In order to be ready to ship, I created a demo video using OpenScreen showing how to use the app, I also did some fixes here and there and finally deployed the app to GitHub Pages."}, {"post_id": 54662, "ts": "2026-08-25T18:11:41Z", "hours": 3.3758, "text": "Tuanble Strings & Expandable Fretboard with Dynamic Staff Sizing Users can now set how individual strings are tuned on the fretboard, as changing the tuning is required for some pieces on the guitar. Additionally, players can now choose how many frets they are comfortable using - the staff resizes (more/less staff lines) so that the entire fretboard can be utilised without cluttering the screen with notes you cannot play at the selected fret count."}, {"post_id": 49699, "ts": "2026-08-18T16:24:27Z", "hours": 2.2389, "text": "More Notes and Open Strings Besides updating the layout I “added new notes”. Of course you can have as many as you want, but I wanted to make sure lines outside of the staff become muted, so everything is easier to see. More importantly, open strings are now visualized on the fretboard - previously only notes where guitar players had to press down showed up. The architecture I talked about in previous devlogs worked wonderfully :)"}, {"post_id": 48205, "ts": "2026-08-16T14:33:34Z", "hours": 3.1661, "text": "Colored Notes and Architecture I fixed the architectual issues i wrote about in my previous devlog using a dedicated class for visualization. It uses the builder pattern and should be extendable so that new visualizations on the fretboard can easily be added. Moreover I gave each note its own color, numbered the frets and added little circle markers in the same pattern they appear on a guitar."}, {"post_id": 47447, "ts": "2026-08-15T11:43:37Z", "hours": 2.0481, "text": "Fretboard shows Notes The notes you pick in the staff show up on a guitar fretboard! One thing I learned from this project so far, it is to always make dumb React components: Don’t manage the component’s state internally when it can make sense wanting to access it from the parent component in the future. In my case: The fretboard is a “smart” component and when passed a note it knows and shows all the possible locations to play it - this works for now, but it’s hardly extendable: For a feature I’m planning, the parent component needs to control precisely where to show the dots - which as of now is impossible, because the fretboard only works with notes + it will show all possible locations, not precisely the ones I want to show. To fix this, I will expose a prop that controls not what notes to show, but what frets and strings dots should appear on."}, {"post_id": 47104, "ts": "2026-08-14T19:05:13Z", "hours": 2.0422, "text": "Improved Note Picking and Support for Sharps/Flats I improved the note picking: To prevent notes from overlapping the note now follows the mouse position, users can place notes freely wherever they want. Additionally, I added support for sharp and flat notes, which can be toggled on the left side of the note’s name. It’s a bit quirky as e.g. a sharp F becomes “F#” but a sharp H becomes “C”, not “H#” (thanks music theory!)"}, {"post_id": 46910, "ts": "2026-08-14T13:32:37Z", "hours": 2.5544, "text": "Note Picker First version of the note picker, it will need a re-do to prevent overlapping notes and to support sharps and flats. I also wrote a system that converts into an internal representation from which it’s easy to get the names of the notes and hopefully to locate them on the guitar fretboard."}]...
|
Title: Guitar Assistant by @stockifab | Stardance
Title: Guitar Assistant by @stockifab | Stardance
Devlogs:
Note Picker First version of the note picker, it will need a re-do to prevent overlapping notes and to support sharps and flats. I also wrote a system that converts into an internal representation from which it’s easy to get the names of the notes and hopefully to locate them on the guitar fretboard.
Improved Note Picking and Support for Sharps/Flats I improved the note picking: To prevent notes from overlapping the note now follows the mouse position, users can place notes freely wherever they want. Additionally, I added support for sharp and flat notes, which can be toggled on the left side of the note’s name. It’s a bit quirky as e.g. a sharp F becomes “F#” but a sharp H becomes “C”, not “H#” (thanks music theory!)
Fretboard shows Notes The notes you pick in the staff show up on a guitar fretboard! One thing I learned from this project so far, it is to always make dumb React components: Don’t manage the component’s state internally when it can make sense wanting to access it from the parent component in the future. In my case: The fretboard is a “smart” component and when passed a note it knows and shows all the possible locations to play it - this works for now, but it’s hardly extendable: For a feature I’m planning, the parent component needs to control precisely where to show the dots - which as of now is impossible, because the fretboard only works with notes + it will show all possible locations, not precisely the ones I want to show. To fix this, I will expose a prop that controls not what notes to show, but what frets and strings dots should appear on.
Colored Notes and Architecture I fixed the architectual issues i wrote about in my previous devlog using a dedicated class for visualization. It uses the builder pattern and should be extendable so that new visualizations on the fretboard can easily be added. Moreover I gave each note its own color, numbered the frets and added little circle markers in the same pattern they appear on a guitar.
More Notes and Open Strings Besides updating the layout I “added new notes”. Of course you can have as many as you want, but I wanted to make sure lines outside of the staff become muted, so everything is easier to see. More importantly, open strings are now visualized on the fretboard - previously only notes where guitar players had to press down showed up. The architecture I talked about in previous devlogs worked wonderfully :)
Tuanble Strings & Expandable Fretboard with Dynamic Staff Sizing Users can now set how individual strings are tuned on the fretboard, as changing the tuning is required for some pieces on the guitar. Additionally, players can now choose how many frets they are comfortable using - the staff resizes (more/less staff lines) so that the entire fretboard can be utilised without cluttering the screen with notes you cannot play at the selected fret count.
Project Demo, small Fixes & Deployment In order to be ready to ship, I created a demo video using OpenScreen showing how to use the app, I also did some fixes here and there and finally deployed the app to GitHub Pages.
Ships:
Guitar Assistant Guitar Assistant is an app that shows you where to press down on the guitar to play whatever notes you pick in the staff. The guitar allows you to play the same note at different positions on the fretboard, so there is usually not one correct way of playing a set of notes. Guitar Assistant shows you all possibilities so that you can pick the one you’re most comfortable with. Coming up with an architecture for converting between where the note is on the staff, and where the note can be played on the fretboard was the most challenging part. At first this conversion and the visualisation was tightly coupled (the fretboard component did the conversion). This was 1. unclean and 2. really painful to work with: After refactoring, I ended up with an intermediate format that’s easy to do “musical calculations” with, and a dedicated class for converting that format into another format the fretboard component can easily interpret. I had a lot of fun building this project and am actively using it 🎶...
|
1793793056.8413677
|
1793879456.8413677
|
|
26478
|
My very own WebOS by @stillberry88 | Stardance
|
stillberry88
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My very own WebOS by @stillberry88 | Starda Title: My very own WebOS by @stillberry88 | Stardance...
|
1793879474.1490042
|
1794484274.1490042
|
|
37400
|
My very own WebOS by @still_clarity | Stardance
|
still_clarity
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My very own WebOS by @still_clarity | Stard Title: My very own WebOS by @still_clarity | Stardance...
|
1793447616.4009979
|
1794052416.4009979
|
|
24564
|
Cowboy gmae by @stilk | Stardance
|
stilk
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Cowboy gmae by @stilk | Stardance
|
1793461983.527049
|
1794066783.527049
|
|
33971
|
A drone that i am going to build and programming b A drone that i am going to build and programming by @stijn_a | Stardance...
|
stijn_a
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: A drone that i am going to build and progra Title: A drone that i am going to build and programming by @stijn_a | Stardance...
|
1793242082.8906643
|
1793846882.8906643
|
|
3065
|
Camera Monitor by @stickyzhiqi | Stardance
|
stickyzhiqi
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Camera Monitor by @stickyzhiqi | Stardance
|
1793919282.369092
|
1794524082.369092
|
|
41046
|
a cyberdeck! by @sthakkar0720 | Stardance
|
sthakkar0720
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: a cyberdeck! by @sthakkar0720 | Stardance
|
1793537505.2752664
|
1794142305.2752664
|
|
42349
|
my site by @sthakkar0720 | Stardance
|
sthakkar0720
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: my site by @sthakkar0720 | Stardance
|
1793846956.1245868
|
1794451756.1245868
|
|
63487
|
WebOS 1 by @sthakkar0720 | Stardance
|
sthakkar0720
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: WebOS 1 by @sthakkar0720 | Stardance
|
1793663338.8922968
|
1794268138.8922968
|
|
7486
|
My awesome macropad! by @stewardtorerondahiro | St My awesome macropad! by @stewardtorerondahiro | Stardance...
|
stewardtorerondahiro
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My awesome macropad! by @stewardtorerondahi Title: My awesome macropad! by @stewardtorerondahiro | Stardance...
|
1793476381.0263498
|
1794081181.0263498
|
|
45005
|
Steward's project by @stewardtorerondahiro | S Steward's project by @stewardtorerondahiro | Stardance...
|
stewardtorerondahiro
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Steward's project by @stewardtorerondah Title: Steward's project by @stewardtorerondahiro | Stardance...
|
1793310507.0555894
|
1793915307.0555894
|
|
31396
|
Mechanical Arm by @stevie8 | Stardance
|
stevie8
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Mechanical Arm by @stevie8 | Stardance
|
1793879332.6527555
|
1794484132.6527555
|
|
3465
|
My first slack bot! by @stevie | Stardance
|
stevie
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My first slack bot! by @stevie | Stardance
|
1793836124.4121873
|
1794440924.4121873
|
|
11046
|
My first slack bot! by @stevestan004 | Stardance
|
stevestan004
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My first slack bot! by @stevestan004 | Star Title: My first slack bot! by @stevestan004 | Stardance...
|
1793260449.2820554
|
1793865249.2820554
|
|
11179
|
Untitled by @stevestan004 | Stardance
|
stevestan004
|
0
|
0.81
|
0
|
[]
|
[{"post_id": 4306, "ts": "2026 [{"post_id": 4306, "ts": "2026-06-07T15:51:58Z", "hours": 0.8106, "text": "made a player character guy thing in aseprite"}]...
|
Title: Untitled by @stevestan004 | Stardance
Devl Title: Untitled by @stevestan004 | Stardance
Devlogs:
made a player character guy thing in aseprite...
|
1793300182.686833
|
1793904982.686833
|
|
15982
|
My awesome macropad! by @stevesandoval9187 | Stard My awesome macropad! by @stevesandoval9187 | Stardance...
|
stevesandoval9187
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My awesome macropad! by @stevesandoval9187 Title: My awesome macropad! by @stevesandoval9187 | Stardance...
|
1793242115.7342844
|
1793846915.7342844
|
|
16066
|
My first slack bot! by @stevesandoval9187 | Starda My first slack bot! by @stevesandoval9187 | Stardance...
|
stevesandoval9187
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My first slack bot! by @stevesandoval9187 | Title: My first slack bot! by @stevesandoval9187 | Stardance...
|
1793289330.8139951
|
1793894130.8139951
|
|
49821
|
WarioWare Game by @stevensonrondi | Stardance
|
stevensonrondi
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: WarioWare Game by @stevensonrondi | Stardan Title: WarioWare Game by @stevensonrondi | Stardance...
|
1793307016.5878148
|
1793911816.5878148
|
|
42401
|
My awesome macropad! by @stevenlaird2011 | Stardan My awesome macropad! by @stevenlaird2011 | Stardance...
|
stevenlaird2011
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My awesome macropad! by @stevenlaird2011 | Title: My awesome macropad! by @stevenlaird2011 | Stardance...
|
1793858016.534173
|
1794462816.534173
|
|
3034
|
Untitled project by @stevenkabob | Stardance
|
stevenkabob
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Untitled project by @stevenkabob | Stardanc Title: Untitled project by @stevenkabob | Stardance...
|
1793501305.270646
|
1794106105.270646
|
|
3068
|
Untitled by @stevenkabob | Stardance
|
stevenkabob
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Untitled by @stevenkabob | Stardance
|
1793436929.2429101
|
1794041729.2429101
|
|
24902
|
My awesome macropad! by @stevenchu | Stardance
|
stevenchu
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My awesome macropad! by @stevenchu | Starda Title: My awesome macropad! by @stevenchu | Stardance...
|
1793368126.0532043
|
1793972926.0532043
|
|
37103
|
Frictionless by @stevenbustam | Stardance
|
stevenbustam
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Frictionless by @stevenbustam | Stardance
|
1793566504.9581673
|
1794171304.9581673
|
|
19829
|
App by @stevenbuntoro | Stardance
|
stevenbuntoro
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: App by @stevenbuntoro | Stardance
|
1793227727.3046153
|
1793832527.3046153
|
|
36561
|
Untitled project by @steven_a_yee | Stardance
|
steven_a_yee
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Untitled project by @steven_a_yee | Stardan Title: Untitled project by @steven_a_yee | Stardance...
|
1793303703.3357127
|
1793908503.3357127
|
|
6308
|
A physical based pvp combat game by @steve_mancia A physical based pvp combat game by @steve_mancia | Stardance...
|
steve_mancia
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: A physical based pvp combat game by @steve_ Title: A physical based pvp combat game by @steve_mancia | Stardance...
|
1793771570.3517048
|
1794376370.3517048
|
|
6552
|
Untitled by @steve_mancia | Stardance
|
steve_mancia
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Untitled by @steve_mancia | Stardance
|
1793379285.0792928
|
1793984085.0792928
|
|
56164
|
Papyrus by @steve_alappat | Stardance
|
steve_alappat
|
2
|
23.0
|
0
|
[{"ship_num": 1, "ts": "2026-1 [{"ship_num": 1, "ts": "2026-11-01T12:23:25Z", "hours": 4.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "Hi guys!!! I’m excited to share my project, Papyrus, a hub designed for students to easily find, practice, and share past exam papers and study materials. Students can also contribute by uploading your own papers to help out the community! Key Features: File Storage - It uses the Hackclub CDN API so that i can delivery files without chocking the server Built-in PDF Viewer – View papers seamlessly right inside the app. Favorites / Pins Page – Bookmark your go-to papers for quick access. Archive Page- Search Across the full archive to find all the papers you need Admin Studio – Full control panel for managing content. Theme - Supports light, dark and true black Score - It uses a custom scoring logic made by me For more just go through the website and codebase if your interested also there is a db.md file in the repo which explains the full database check that out too! 💡 Want to test out the Admin Studio? Head over to /admin and sign in with the password: admin123. Check it out and let me know what you think!", "repo": "https://github.com/theatom06/papyrus", "demo": "https://papyrus.steve.hackclub.app"}, {"ship_num": 2, "ts": "2026-10-24T12:11:15Z", "hours": 19.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "#Welcome to Papyrus! 📜 Hi guys!!! I’m excited to share my project, Papyrus, a hub designed for students to easily find, practice, and share past exam papers and study materials. Students can also contribute by uploading your own papers to help out the community! Key Features: Built-in PDF Viewer – View papers seamlessly right inside the app. Favorites / Pins Page – Bookmark your go-to papers for quick access. Archive Page- Search Across the full archive to find all the papers you need Admin Studio – Full control panel for managing content. For more just go through the website and codebase if your interested also there is a db.md file in the repo which explains the full database check that out too! 💡 Want to test out the Admin Studio? Head over to /admin and sign in with the password: admin123. Check it out and let me know what you think!", "repo": "https://github.com/theatom06/papyrus", "demo": "https://papyrus.steve.hackclub.app"}]...
|
[{"post_id": 86340, "ts": "202 [{"post_id": 86340, "ts": "2026-11-01T12:01:30Z", "hours": 4.3258, "text": "The End Okay, so before I put up the devlog, let me just say why I had to ship a second time. I shipped my project, but then I was asked to redo some parts out of worry of “vibe coding”—which honestly, I don’t vibe code really, because I genuinely can’t (damn potato PC). But yes, I did use AI help, and maybe it was over the top. To atone, I re-went through every file and did these changes: Backend Storage : I changed the backend file storage to the Hack Club CDN API. Database Restructuring: I split the large db.ts file into individual function files, each serving its respective function (like paper.ts deals with the SQL queries related to the paper table). Now, I used AI to write the SQL queries here because I honestly don’t know how to. I learned a lot, but I still needed its help. CSS & Styling Refactor: I went through the CSS files and updated every single one of them. The theme and styling are still the same(ish)—I did minor changes here and there about the styling, but the most important parts are: Tokenization: I tokenized everything. I went through each file and checked the sizes, basing it on the Tailwind system where it’s almost all multiples of 4. Scoped Styles: I made sure every page.tsx file had its own style.css which only it calls, so that I won’t pollute styles—which turns out was the reason that, for some reason, when I updated the styles in pin ’s CSS, the archive CSS changed. Admin Unification: I also used the styles from the public front on the admin front earlier a lot of admin was AI generted so it was pretty bad but I’m proud to say that is no longer the case Utilities: I made a small util directory which has repeated functions that I found. Scoring System: I made a scoring system which was so cool—I felt like Einstein in that 10 minutes! But it’s basically the same one they use on Reddit (my inspiration for the system). It’s based on something called the Wilson Score. I didn’t really understand the math, but it works, so it works (I understood what it did, but not how it did it). I added a bit more to it, though: one is an engagement rating similar to the gladiator algorithm in TikTok, which basically gives more points for being more popular and having downloads, and then a recency bonus for the first 30 days to keep new papers afloat. This really changes nothing in the system, but I felt cool and it’s my devlog, so hear about it! Prettier Config: Oh, I forgot—I added a Prettier config so that it didn’t prettify the PDF.js JavaScript file. README Update: One of my friends told me the README was balls and it was not telling anything, so I rewrote parts of that too. I used Obsidian, so I got nice tables and shit. Custom 404 Page: I added a 404 page, and I did a nice styling where instead of the zero, it’s a file-missing icon. Code Splitting: I also worked to split some files, but some pages were pure hell and I left them there, so sorry about that. Short-links:” While refactoring I also added this one small feature to the share link button in paper page, it basically proxies to /p/:id instead of /paper/:id not a lot but its nice Metadata & Icons: And peakest of all, I added the icon to every page and the metadata thingy I saw on the Next.js website. Vercel Switch: I also thought since I’m not storing the files on the server anymore why not go ahead and use Vercel itself to host instead of nest so i will be hosting on Vercel (This later turned out to be a rocky rod so i ditched it after ship) P.S this has tired me out way to much and i hope you enjoy it, the photo is admin dashboard in new true black"}, {"post_id": 82246, "ts": "2026-10-24T11:41:17Z", "hours": 0.4208, "text": "Final Uploaded !! This is the last post for v1 of papyrus. I’m so happy to announce its live and functional at https://papyrus.steve.hackclub.app/ please go check it out and tell me what you think ALSO to check out admin panel use /admin and password admin123 Thanks a lot this has been a great journey"}, {"post_id": 82069, "ts": "2026-10-23T18:17:54Z", "hours": 4.5308, "text": "Final show The last 4 hours were pure locked-in focus: Completely overhauled and fixed the admin dashboard Finally fixed the PDF viewer (not gonna lie, it actually looks peak now) Cleaned up all those annoying remaining styling issues Polished the README and updated db.md Added a true OLED black mode Custom-designed the logo from scratch Everything is wrapped up. Time to hit publish and ship this thing."}, {"post_id": 81717, "ts": "2026-10-22T06:45:40Z", "hours": 6.4361, "text": "YO GUESS WHO’S BACK? I had way too much sugar. Back to the project. I’ve finally set up the review process, admin functionality, and the entire end-to-end data pipeline. The project is starting to feel like a proper, mostly* finished product. Before diving into the details of what I’ve accomplished, here’s what’s left to do. Work LEft Implement proper admin dashboard statistics to give admins useful insights into the platform. Find and implement a PDF preview solution so users can preview files before downloading them. Polish the UI and styling across every page to make the entire platform feel more consistent and beautiful. Improve admin functionality by adding more tools and controls to make the admin panel genuinely useful. What I Accomplished in the Last 6 Hours Built the complete file upload pipeline. Files can now be uploaded, stored, and inserted into the database. After going through the review process, approved files are displayed on the frontend and can be downloaded by users. Implemented the review and approval system. Admins can quickly review submitted resources and approve them before they become available to users. Improved the admin panel. I’ve added more functionality, but there’s still a long way to go before it becomes a fully functional administration dashboard. Added download tracking. Each file now has its own download counter, allowing the platform to track how many times individual resources have been downloaded. So untill next time, all the best and Happy hacking! P.S: the attached photo is the current state of the admin dashboard"}, {"post_id": 78705, "ts": "2026-10-11T11:15:46Z", "hours": 7.3814, "text": "Hi guys! Welcome to my new project Papyrus!This project is a web application to allow students to easily access and share exam papers and materials. The goal is to create a centralized platform where students can find the resources they need to prepare for their exams effectively.The inspiration for this project came from my own experience as a student; I found that that the practise of a large number of papers was one of the most influential factors in my preparation for exams. However, I also found that the availability of these papers was limited and often scattered across various sources. My friends and I would spend a lot of time searching for the papers we needed, which was frustrating and time-consuming. Thus, I decided to create this project to remove that friction for future students and make it easier for them to access the resources they need.But thats enough about me, lets talk about the project itself. The project is built using Next.js, which allows for a seamless integration of frontend and backend functionality. The frontend is built using React components, while the backend handles API requests and data management. The main database is made using SQLite, and the schema is defined in lib/schema.ts .the project has 3 main divisons, The front, the server and a admin panel. The front is the main website where students can browse and search for papers, as well as upload their own papers for review. The server handles all the backend functionality, including API requests and data management. The admin panel is where the review process takes place, allowing admins to review and approve submitted papers before they are added to the archive.As of today im almost at the end of the project possibly, right now i need to setup the review process, the data pipe level and make the admin panel functionalAlso my ai declaration: I and used ai to make the bulk parts of the code, but i have had to go through each line my self due to the slop nature of the ai code, and no ai was used to make the documentation and logic or data flows anything, i used ai mostly for the styling part. ps the screenshot is the homepage of the website as of now"}]...
|
Title: Papyrus by @steve_alappat | Stardance
Devl Title: Papyrus by @steve_alappat | Stardance
Devlogs:
Hi guys! Welcome to my new project Papyrus!This project is a web application to allow students to easily access and share exam papers and materials. The goal is to create a centralized platform where students can find the resources they need to prepare for their exams effectively.The inspiration for this project came from my own experience as a student; I found that that the practise of a large number of papers was one of the most influential factors in my preparation for exams. However, I also found that the availability of these papers was limited and often scattered across various sources. My friends and I would spend a lot of time searching for the papers we needed, which was frustrating and time-consuming. Thus, I decided to create this project to remove that friction for future students and make it easier for them to access the resources they need.But thats enough about me, lets talk about the project itself. The project is built using Next.js, which allows for a seamless integration of frontend and backend functionality. The frontend is built using React components, while the backend handles API requests and data management. The main database is made using SQLite, and the schema is defined in lib/schema.ts .the project has 3 main divisons, The front, the server and a admin panel. The front is the main website where students can browse and search for papers, as well as upload their own papers for review. The server handles all the backend functionality, including API requests and data management. The admin panel is where the review process takes place, allowing admins to review and approve submitted papers before they are added to the archive.As of today im almost at the end of the project possibly, right now i need to setup the review process, the data pipe level and make the admin panel functionalAlso my ai declaration: I and used ai to make the bulk parts of the code, but i have had to go through each line my self due to the slop nature of the ai code, and no ai was used to make the documentation and logic or data flows anything, i used ai mostly for the styling part. ps the screenshot is the homepage of the website as of now
YO GUESS WHO’S BACK? I had way too much sugar. Back to the project. I’ve finally set up the review process, admin functionality, and the entire end-to-end data pipeline. The project is starting to feel like a proper, mostly* finished product. Before diving into the details of what I’ve accomplished, here’s what’s left to do. Work LEft Implement proper admin dashboard statistics to give admins useful insights into the platform. Find and implement a PDF preview solution so users can preview files before downloading them. Polish the UI and styling across every page to make the entire platform feel more consistent and beautiful. Improve admin functionality by adding more tools and controls to make the admin panel genuinely useful. What I Accomplished in the Last 6 Hours Built the complete file upload pipeline. Files can now be uploaded, stored, and inserted into the database. After going through the review process, approved files are displayed on the frontend and can be downloaded by users. Implemented the review and approval system. Admins can quickly review submitted resources and approve them before they become available to users. Improved the admin panel. I’ve added more functionality, but there’s still a long way to go before it becomes a fully functional administration dashboard. Added download tracking. Each file now has its own download counter, allowing the platform to track how many times individual resources have been downloaded. So untill next time, all the best and Happy hacking! P.S: the attached photo is the current state of the admin dashboard
Final show The last 4 hours were pure locked-in focus: Completely overhauled and fixed the admin dashboard Finally fixed the PDF viewer (not gonna lie, it actually looks peak now) Cleaned up all those annoying remaining styling issues Polished the README and updated db.md Added a true OLED black mode Custom-designed the logo from scratch Everything is wrapped up. Time to hit publish and ship this thing.
Final Uploaded !! This is the last post for v1 of papyrus. I’m so happy to announce its live and functional at https://papyrus.steve.hackclub.app/ please go check it out and tell me what you think ALSO to check out admin panel use /admin and password admin123 Thanks a lot this has been a great journey
The End Okay, so before I put up the devlog, let me just say why I had to ship a second time. I shipped my project, but then I was asked to redo some parts out of worry of “vibe coding”—which honestly, I don’t vibe code really, because I genuinely can’t (damn potato PC). But yes, I did use AI help, and maybe it was over the top. To atone, I re-went through every file and did these changes: Backend Storage : I changed the backend file storage to the Hack Club CDN API. Database Restructuring: I split the large db.ts file into individual function files, each serving its respective function (like paper.ts deals with the SQL queries related to the paper table). Now, I used AI to write the SQL queries here because I honestly don’t know how to. I learned a lot, but I still needed its help. CSS & Styling Refactor: I went through the CSS files and updated every single one of them. The theme and styling are still the same(ish)—I did minor changes here and there about the styling, but the most important parts are: Tokenization: I tokenized everything. I went through each file and checked the sizes, basing it on the Tailwind system where it’s almost all multiples of 4. Scoped Styles: I made sure every page.tsx file had its own style.css which only it calls, so that I won’t pollute styles—which turns out was the reason that, for some reason, when I updated the styles in pin ’s CSS, the archive CSS changed. Admin Unification: I also used the styles from the public front on the admin front earlier a lot of admin was AI generted so it was pretty bad but I’m proud to say that is no longer the case Utilities: I made a small util directory which has repeated functions that I found. Scoring System: I made a scoring system which was so cool—I felt like Einstein in that 10 minutes! But it’s basically the same one they use on Reddit (my inspiration for the system). It’s based on something called the Wilson Score. I didn’t really understand the math, but it works, so it works (I understood what it did, but not how it did it). I added a bit more to it, though: one is an engagement rating similar to the gladiator algorithm in TikTok, which basically gives more points for being more popular and having downloads, and then a recency bonus for the first 30 days to keep new papers afloat. This really changes nothing in the system, but I felt cool and it’s my devlog, so hear about it! Prettier Config: Oh, I forgot—I added a Prettier config so that it didn’t prettify the PDF.js JavaScript file. README Update: One of my friends told me the README was balls and it was not telling anything, so I rewrote parts of that too. I used Obsidian, so I got nice tables and shit. Custom 404 Page: I added a 404 page, and I did a nice styling where instead of the zero, it’s a file-missing icon. Code Splitting: I also worked to split some files, but some pages were pure hell and I left them there, so sorry about that. Short-links:” While refactoring I also added this one small feature to the share link button in paper page, it basically proxies to /p/:id instead of /paper/:id not a lot but its nice Metadata & Icons: And peakest of all, I added the icon to every page and the metadata thingy I saw on the Next.js website. Vercel Switch: I also thought since I’m not storing the files on the server anymore why not go ahead and use Vercel itself to host instead of nest so i will be hosting on Vercel (This later turned out to be a rocky rod so i ditched it after ship) P.S this has tired me out way to much and i hope you enjoy it, the photo is admin dashboard in new true black
Ships:
#Welcome to Papyrus! 📜 Hi guys!!! I’m excited to share my project, Papyrus, a hub designed for students to easily find, practice, and share past exam papers and study materials. Students can also contribute by uploading your own papers to help out the community! Key Features: Built-in PDF Viewer – View papers seamlessly right inside the app. Favorites / Pins Page – Bookmark your go-to papers for quick access. Archive Page- Search Across the full archive to find all the papers you need Admin Studio – Full control panel for managing content. For more just go through the website and codebase if your interested also there is a db.md file in the repo which explains the full database check that out too! 💡 Want to test out the Admin Studio? Head over to /admin and sign in with the password: admin123. Check it out and let me know what you think!
Hi guys!!! I’m excited to share my project, Papyrus, a hub designed for students to easily find, practice, and share past exam papers and study materials. Students can also contribute by uploading your own papers to help out the community! Key Features: File Storage - It uses the Hackclub CDN API so that i can delivery files without chocking the server Built-in PDF Viewer – View papers seamlessly right inside the app. Favorites / Pins Page – Bookmark your go-to papers for quick access. Archive Page- Search Across the full archive to find all the papers you need Admin Studio – Full control panel for managing content. Theme - Supports light, dark and true black Score - It uses a custom scoring logic made by me For more just go through the website and codebase if your interested also there is a db.md file in the repo which explains the full database check that out too! 💡 Want to test out the Admin Studio? Head over to /admin and sign in with the password: admin123. Check it out and let me know what you think!...
|
1793811372.3234084
|
1793897772.3234084
|
|
24738
|
Night OS by @steve404 | Stardance
|
steve404
|
0
|
5.28
|
0
|
[]
|
[{"post_id": 18541, "ts": "202 [{"post_id": 18541, "ts": "2026-06-29T18:39:18Z", "hours": 5.2831, "text": "Designed UI and general look and feel of the os. It looks generic now but i plan on adding cool easter eggs which make it unique.Hopefully the hard part is over and the other stuff will take less time (ominous foreshadowing). I decided i was too good for the tutorial and paid dearly for it. Welp hopefully i finish it in < 10hrs as this is my first project of the event."}]...
|
Title: Night OS by @steve404 | Stardance
Devlogs: Title: Night OS by @steve404 | Stardance
Devlogs:
Designed UI and general look and feel of the os. It looks generic now but i plan on adding cool easter eggs which make it unique.Hopefully the hard part is over and the other stuff will take less time (ominous foreshadowing). I decided i was too good for the tutorial and paid dearly for it. Welp hopefully i finish it in < 10hrs as this is my first project of the event....
|
1793396886.440482
|
1794001686.440482
|
|
71422
|
My very own WebOS by @steve22samson | Stardance
|
steve22samson
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My very own WebOS by @steve22samson | Stard Title: My very own WebOS by @steve22samson | Stardance...
|
1793613285.7654035
|
1794218085.7654035
|
|
18855
|
Frictionless by @sternie_gs | Stardance
|
sternie_gs
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Frictionless by @sternie_gs | Stardance
|
1793379046.6229935
|
1793983846.6229935
|
|
58998
|
LION by @sterharnavnd | Stardance
|
sterharnavnd
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: LION by @sterharnavnd | Stardance
|
1793523222.7153385
|
1794128022.7153385
|
|
47366
|
Gotcha v2 by @sterbolt | Stardance
|
sterbolt
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Gotcha v2 by @sterbolt | Stardance
|
1793865257.9164102
|
1794729257.9164102
|