|
59495
|
BLARE by @gouravyadav | Stardance
|
gouravyadav
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: BLARE by @gouravyadav | Stardance
|
1792799619.4662244
|
1793404419.4662244
|
|
10238
|
My awesome macropad! by @Alebouo12 | Stardance
|
Alebouo12
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My awesome macropad! by @Alebouo12 | Starda Title: My awesome macropad! by @Alebouo12 | Stardance...
|
1792799620.298703
|
1793404420.298703
|
|
398
|
Hello World by @a_m | Stardance
|
a_m
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Hello World by @a_m | Stardance
|
1792799621.1372178
|
1793404421.1372178
|
|
22070
|
Frictionless by @akshyat04 | Stardance
|
akshyat04
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Frictionless by @akshyat04 | Stardance
|
1792799621.9718804
|
1793404421.9718804
|
|
59499
|
Seismic by @VadaPav | Stardance
|
VadaPav
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Seismic by @VadaPav | Stardance
|
1792799622.8269699
|
1793404422.8269699
|
|
30245
|
My awesome macropad! by @Antoni | Stardance
|
Antoni
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My awesome macropad! by @Antoni | Stardance
|
1792799623.676109
|
1793404423.676109
|
|
19848
|
My very own WebOS by @Fizza | Stardance
|
Fizza
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My very own WebOS by @Fizza | Stardance
|
1792799624.5250845
|
1793404424.5250845
|
|
11062
|
Videogame by @Steve_ita | Stardance
|
Steve_ita
|
0
|
13.38
|
0
|
[]
|
[{"post_id": 11900, "ts": "202 [{"post_id": 11900, "ts": "2026-06-19T12:03:53Z", "hours": 3.8986, "text": "Devlog #4 - Changed A LOT of things: I’ve added all the things that I said to add in this devlog EXCEPT for the asteroids. Instead of the asteroids I have decided to add power ups that will fall from the sky. In this devlog I decided to change the style of the game, that is similar to the famous game “space invaders”. In the screenshot you can see the first level (beta) of the game (yea it will be an ARCADE game with levels), and some of the levels will be boss fights. Summing up: What i added in this devlog: Start menu New game style game over UI Levels system What will be added in the next devlog: Power ups New levels (Maybe) a boss fight Beta release of the game on itch.io (if the game will become a bit playable) New enemies"}, {"post_id": 10071, "ts": "2026-06-16T17:30:10Z", "hours": 2.6233, "text": "Devlog #3 - Changed a lot of things Since the last devlog i’ve started to correct some bugs, and while i was testing the game i found it very boring, because dodging rocks with a rover is not funny. So i thought to change some things to make the game funnier: Changing the rover to a spaceship Adding enemy spaceships Changing rocks with asteroids Adding levels Giving the possibilty to the player to shoot and upgrading the damage and the number of projectiles every level. (i didn’t add the feature 3,4 and 5 yet, they will be added in the next devlog.) As you can see in the screenshot i added the first enemy spaceship (the green one). The black one is the player’s spaceship. Now i focus on doing the game’s mechanic and not on doing sprites, the sprites that are you seeing are all temportary). In the next devlog i will add more enemy spaceship, a background (maybe), levels and more things!"}, {"post_id": 8804, "ts": "2026-06-14T17:00:31Z", "hours": 2.2144, "text": "Devlog #2 I’ve added rocks that have a 33% chance to spawn on the terrain every second and i have also added a working health bar. All the sprites are temporary because i want to concentrate first on the game mechanics before spending time making sprites."}, {"post_id": 8012, "ts": "2026-06-13T11:31:56Z", "hours": 4.6483, "text": "Devlog #1 of my videogame Hey everyone! This is the very first devlog for my game. It’s an arcade game inspired by the classic dino game, but with an RPG twist, and it’s all set on the moon. The project doesn’t have an official name yet, because I want to wait until I add a few more features before deciding for the best name. The goal of the game is going as far as you can on the lunar surface with the rover. Unlike a standard side-scroller, you can also move up, down, left and right to navigate the terrain, but it will always move forward. This is my first time working on a “big” project in Godot. I know it might look like I haven’t done much yet, but at the start, it was actually quite difficult. I encountered a lot of bugs while setting up the foundation. Now that the infinite scrolling and basic movement are workingk, my next big step is creating and spawning the obstacles you’ll have to dodge. Stay tuned for the next update, and thanks for following my journey into Godot!"}]...
|
Title: Videogame by @Steve_ita | Stardance
Devlog Title: Videogame by @Steve_ita | Stardance
Devlogs:
Devlog #1 of my videogame Hey everyone! This is the very first devlog for my game. It’s an arcade game inspired by the classic dino game, but with an RPG twist, and it’s all set on the moon. The project doesn’t have an official name yet, because I want to wait until I add a few more features before deciding for the best name. The goal of the game is going as far as you can on the lunar surface with the rover. Unlike a standard side-scroller, you can also move up, down, left and right to navigate the terrain, but it will always move forward. This is my first time working on a “big” project in Godot. I know it might look like I haven’t done much yet, but at the start, it was actually quite difficult. I encountered a lot of bugs while setting up the foundation. Now that the infinite scrolling and basic movement are workingk, my next big step is creating and spawning the obstacles you’ll have to dodge. Stay tuned for the next update, and thanks for following my journey into Godot!
Devlog #2 I’ve added rocks that have a 33% chance to spawn on the terrain every second and i have also added a working health bar. All the sprites are temporary because i want to concentrate first on the game mechanics before spending time making sprites.
Devlog #3 - Changed a lot of things Since the last devlog i’ve started to correct some bugs, and while i was testing the game i found it very boring, because dodging rocks with a rover is not funny. So i thought to change some things to make the game funnier: Changing the rover to a spaceship Adding enemy spaceships Changing rocks with asteroids Adding levels Giving the possibilty to the player to shoot and upgrading the damage and the number of projectiles every level. (i didn’t add the feature 3,4 and 5 yet, they will be added in the next devlog.) As you can see in the screenshot i added the first enemy spaceship (the green one). The black one is the player’s spaceship. Now i focus on doing the game’s mechanic and not on doing sprites, the sprites that are you seeing are all temportary). In the next devlog i will add more enemy spaceship, a background (maybe), levels and more things!
Devlog #4 - Changed A LOT of things: I’ve added all the things that I said to add in this devlog EXCEPT for the asteroids. Instead of the asteroids I have decided to add power ups that will fall from the sky. In this devlog I decided to change the style of the game, that is similar to the famous game “space invaders”. In the screenshot you can see the first level (beta) of the game (yea it will be an ARCADE game with levels), and some of the levels will be boss fights. Summing up: What i added in this devlog: Start menu New game style game over UI Levels system What will be added in the next devlog: Power ups New levels (Maybe) a boss fight Beta release of the game on itch.io (if the game will become a bit playable) New enemies...
|
1792799625.3827224
|
1793404425.3827224
|
|
12114
|
Budget Flipper Zero by @CowHair | Stardance
|
CowHair
|
0
|
2.98
|
0
|
[]
|
[{"post_id": 5418, "ts": "2026 [{"post_id": 5418, "ts": "2026-06-09T05:28:28Z", "hours": 2.9778, "text": "Devlog #1 My project is to create a budget friendly version of a Flipper Zero. I have been working on this project for a few weeks now and here is what I have done so far. Currently working on refining the RFID/NFC cloning feature (Emulation) Created basic UI for the main menu and NFC feature Implemented MIFARE Classic authentication testing using a dictionary attack with known default keys Created a card identification feature that reads information such as the UID, ATQA, and SAK values to determine the card type Components I have used so far (included in the picture): ESP32 PN532 Five buttons to control the UI OLED screen 128x64 Next steps: Bridge Mode The next major feature is a bridge mode that allows the ESP32 to act as an interface between a computer and the PN532 NFC reader. The ESP32 will be connect to the PC with USB-C. By doing so, the device will enable desktop-based NFC analysis and interoperability with NFC research tools such as mfoc. To support this function, the PN532 will be operating in UART (HSU) mode."}]...
|
Title: Budget Flipper Zero by @CowHair | Stardance Title: Budget Flipper Zero by @CowHair | Stardance
Devlogs:
Devlog #1 My project is to create a budget friendly version of a Flipper Zero. I have been working on this project for a few weeks now and here is what I have done so far. Currently working on refining the RFID/NFC cloning feature (Emulation) Created basic UI for the main menu and NFC feature Implemented MIFARE Classic authentication testing using a dictionary attack with known default keys Created a card identification feature that reads information such as the UID, ATQA, and SAK values to determine the card type Components I have used so far (included in the picture): ESP32 PN532 Five buttons to control the UI OLED screen 128x64 Next steps: Bridge Mode The next major feature is a bridge mode that allows the ESP32 to act as an interface between a computer and the PN532 NFC reader. The ESP32 will be connect to the PC with USB-C. By doing so, the device will enable desktop-based NFC analysis and interoperability with NFC research tools such as mfoc. To support this function, the PN532 will be operating in UART (HSU) mode....
|
1792799626.2426822
|
1793404426.2426822
|
|
980
|
My awesome macropad! by @xp95_dude | Stardance
|
xp95_dude
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My awesome macropad! by @xp95_dude | Starda Title: My awesome macropad! by @xp95_dude | Stardance...
|
1792799627.0794532
|
1793404427.0794532
|
|
27127
|
My awesome macropad! by @golgiapparatus | Stardanc My awesome macropad! by @golgiapparatus | Stardance...
|
golgiapparatus
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My awesome macropad! by @golgiapparatus | S Title: My awesome macropad! by @golgiapparatus | Stardance...
|
1792799629.4655793
|
1793404429.4655793
|
|
25492
|
My first slack bot! by @areesha | Stardance
|
areesha
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My first slack bot! by @areesha | Stardance
|
1792799630.3221614
|
1793404430.3221614
|
|
8177
|
ESP-32 TOTP by @sfone_ | Stardance
|
sfone_
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: ESP-32 TOTP by @sfone_ | Stardance
|
1792799631.1907718
|
1793404431.1907718
|
|
39551
|
ORBIT: A Personal Time Tracker and To-do List by @ ORBIT: A Personal Time Tracker and To-do List by @Xenonizer | Stardance...
|
Xenonizer
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: ORBIT: A Personal Time Tracker and To-do Li Title: ORBIT: A Personal Time Tracker and To-do List by @Xenonizer | Stardance...
|
1792799632.0324883
|
1793404432.0324883
|
|
13021
|
Mental health buddy by @fadded66 | Stardance
|
fadded66
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Mental health buddy by @fadded66 | Stardanc Title: Mental health buddy by @fadded66 | Stardance...
|
1792799632.8518076
|
1793404432.8518076
|
|
28113
|
My awesome macropad! by @noah09 | Stardance
|
noah09
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My awesome macropad! by @noah09 | Stardance
|
1792799633.6785567
|
1793404433.6785567
|
|
33154
|
Zaphir by @Emmy | Stardance
|
Emmy
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Zaphir by @Emmy | Stardance
|
1792799634.5228245
|
1793404434.5228245
|
|
37881
|
IntelliML – AI Powered Dataset Management & Au IntelliML – AI Powered Dataset Management & AutoML Platform by @ifwhotcheetoss | Stardance...
|
ifwhotcheetoss
|
0
|
39.01
|
0
|
[]
|
[{"post_id": 64967, "ts": "202 [{"post_id": 64967, "ts": "2026-09-09T18:24:26Z", "hours": 7.1086, "text": "heyy guysss whassupp!! so akot has happened and finally my cleaning of dataset is now very close to be perfect .. rn i just did corrected the cleaning part … just check this out and i need suggestions of how can i make it perfect"}, {"post_id": 58990, "ts": "2026-08-31T15:51:19Z", "hours": 11.7933, "text": "Hey guys whatsupp… hope yall are fine… so as my intelliml is coming to end …there were many errors i faced after the completion of backend during frontend dev and api integartion …. ther eare still some fixes that needs to be done but for now focusing more on better quality of eda and automl charts and reports :)"}, {"post_id": 48123, "ts": "2026-08-16T12:42:35Z", "hours": 4.7389, "text": "hey guyss…. so my IntelliML project is coming to its end there is still some integration left but this is what ive done so far…. the backend was already completed but frontend as well as integration of apis is on its way… for now ive integrated eda and the cleaning of dataset… check this out"}, {"post_id": 43471, "ts": "2026-08-08T19:13:20Z", "hours": 5.1603, "text": "hiiii…..hope yall are doin well…. so for my project… The IntelliML backend is now functionally complete. I implemented dataset upload and versioning, profiling and quality analysis, EDA visualizations, and a full AutoML pipeline with multiple models, cross validation, hyperparameter tuning, and detailed evaluation metrics…ive also added model saving and prediction, experiment tracking and comparison, automated PDF report generation, and APIs for downloading predictions, models, and reports. I also added a dashboard summary API to track datasets, models, experiments, reports, and the best-performing model. I’m now working on improving the PDF reports with richer metadata, visualizations, and a more polished presentation."}, {"post_id": 40630, "ts": "2026-08-04T09:37:06Z", "hours": 3.3611, "text": "Enhanced the AutoML Pipeline heyyy guyss…hope yall are doin great…so ive spent this week improving IntelliML’s AutoML pipeline by making model evaluation more detailed and reliable. Added support for precision, recall, and F1-score alongside accuracy, along with confusion matrices and classification reports for better performance analysis. Implemented 5 fold cross validation to provide more robust evaluation and added feature importance for tree-based models to improve model interpretability. I also integrated GridSearchCV for automatic hyperparameter tuning of Random Forest, measured model training time, and expanded the results to include detailed performance metrics for every trained algorithm. To make the pipeline more robust, I added exception handling so that if one model fails, the remaining models continue training without interrupting the workflow. With these improvements, IntelliML now provides a much more complete and reliable AutoML experience, and I’m now moving on to the visualization phase, started with correlation heatmaps."}, {"post_id": 36878, "ts": "2026-07-29T07:40:40Z", "hours": 1.3322, "text": "##Built the AutoML Training Pipeline hii guysss………hope yall are doin well. ive implemented the first version of IntelliML’s AutoML training pipeline, which automates the end-to-end model training process. The pipeline loads the selected dataset, handles missing values, validates the target column, performs train test splitting and one hot encoding, then trains and evaluates multiple machine learning models, including Decision Tree, Random Forest, Logistic Regression, KNN, and Gaussian Naive Bayes. It compares their performance using accuracy and automatically returns the best performing model, making model selection fast and effortless."}, {"post_id": 36236, "ts": "2026-07-28T05:51:04Z", "hours": 1.3792, "text": "##Data Preprocessing Pipeline hey guyss!! hope ya’ll are doin well, so today ive build the data preprocessing pipeline for IntelliML. It can now automatically clean datasets by handling missing values, removing duplicates, encoding categorical features (Label Encoding and One Hot Encoding), scaling numerical data, and detecting outliers using the IQR method. The processed dataset is generated automatically, so it’s ready for model training without any extra manual work."}, {"post_id": 35715, "ts": "2026-07-27T10:05:31Z", "hours": 1.9989, "text": "heyy guysss.. hope yall are doin well so today I focused on dataset versioning and version comparison in IntelliML. I implemented automatic version creation so every new upload is saved as a separate dataset version, along with APIs to view version history and manage stored versions. I also built the first version of the comparison module, which can compare different dataset versions by highlighting changes in rows, columns, schema, data types, missing values, and duplicate records. These features make it much easier to track how datasets evolve over time and provide a solid foundation for future experiment tracking and MLOps workflows."}, {"post_id": 32408, "ts": "2026-07-21T16:01:53Z", "hours": 0.4597, "text": "I’ve implemented dataset profiling and data quality modules for IntelliMl. I’ve added APIs to analyse uploaded datasets by generating metadata(rows, cols etc).With this I’ve implemented data quality checks for missing values, duplicate rows and class distribution analysis"}, {"post_id": 32264, "ts": "2026-07-21T10:15:34Z", "hours": 1.6828, "text": "I’ve build a backend foundation for IntelliML in which I’ve used fastapi with a clean modular architecture. I’ve implemented dataset uploading functionality with automatic metadata storage, SQLITE, SQLAlchemy. The backend is configured with swagger api docs and I’ve started dataset profiling module to generate statistics"}]...
|
Title: IntelliML – AI Powered Dataset Management & Title: IntelliML – AI Powered Dataset Management & AutoML Platform by @ifwhotcheetoss | Stardance
Devlogs:
I’ve build a backend foundation for IntelliML in which I’ve used fastapi with a clean modular architecture. I’ve implemented dataset uploading functionality with automatic metadata storage, SQLITE, SQLAlchemy. The backend is configured with swagger api docs and I’ve started dataset profiling module to generate statistics
I’ve implemented dataset profiling and data quality modules for IntelliMl. I’ve added APIs to analyse uploaded datasets by generating metadata(rows, cols etc).With this I’ve implemented data quality checks for missing values, duplicate rows and class distribution analysis
heyy guysss.. hope yall are doin well so today I focused on dataset versioning and version comparison in IntelliML. I implemented automatic version creation so every new upload is saved as a separate dataset version, along with APIs to view version history and manage stored versions. I also built the first version of the comparison module, which can compare different dataset versions by highlighting changes in rows, columns, schema, data types, missing values, and duplicate records. These features make it much easier to track how datasets evolve over time and provide a solid foundation for future experiment tracking and MLOps workflows.
##Data Preprocessing Pipeline hey guyss!! hope ya’ll are doin well, so today ive build the data preprocessing pipeline for IntelliML. It can now automatically clean datasets by handling missing values, removing duplicates, encoding categorical features (Label Encoding and One Hot Encoding), scaling numerical data, and detecting outliers using the IQR method. The processed dataset is generated automatically, so it’s ready for model training without any extra manual work.
##Built the AutoML Training Pipeline hii guysss………hope yall are doin well. ive implemented the first version of IntelliML’s AutoML training pipeline, which automates the end-to-end model training process. The pipeline loads the selected dataset, handles missing values, validates the target column, performs train test splitting and one hot encoding, then trains and evaluates multiple machine learning models, including Decision Tree, Random Forest, Logistic Regression, KNN, and Gaussian Naive Bayes. It compares their performance using accuracy and automatically returns the best performing model, making model selection fast and effortless.
Enhanced the AutoML Pipeline heyyy guyss…hope yall are doin great…so ive spent this week improving IntelliML’s AutoML pipeline by making model evaluation more detailed and reliable. Added support for precision, recall, and F1-score alongside accuracy, along with confusion matrices and classification reports for better performance analysis. Implemented 5 fold cross validation to provide more robust evaluation and added feature importance for tree-based models to improve model interpretability. I also integrated GridSearchCV for automatic hyperparameter tuning of Random Forest, measured model training time, and expanded the results to include detailed performance metrics for every trained algorithm. To make the pipeline more robust, I added exception handling so that if one model fails, the remaining models continue training without interrupting the workflow. With these improvements, IntelliML now provides a much more complete and reliable AutoML experience, and I’m now moving on to the visualization phase, started with correlation heatmaps.
hiiii…..hope yall are doin well…. so for my project… The IntelliML backend is now functionally complete. I implemented dataset upload and versioning, profiling and quality analysis, EDA visualizations, and a full AutoML pipeline with multiple models, cross validation, hyperparameter tuning, and detailed evaluation metrics…ive also added model saving and prediction, experiment tracking and comparison, automated PDF report generation, and APIs for downloading predictions, models, and reports. I also added a dashboard summary API to track datasets, models, experiments, reports, and the best-performing model. I’m now working on improving the PDF reports with richer metadata, visualizations, and a more polished presentation.
hey guyss…. so my IntelliML project is coming to its end there is still some integration left but this is what ive done so far…. the backend was already completed but frontend as well as integration of apis is on its way… for now ive integrated eda and the cleaning of dataset… check this out
Hey guys whatsupp… hope yall are fine… so as my intelliml is coming to end …there were many errors i faced after the completion of backend during frontend dev and api integartion …. ther eare still some fixes that needs to be done but for now focusing more on better quality of eda and automl charts and reports :)
heyy guysss whassupp!! so akot has happened and finally my cleaning of dataset is now very close to be perfect .. rn i just did corrected the cleaning part … just check this out and i need suggestions of how can i make it perfect...
|
1792799635.388038
|
1793404435.388038
|
|
30481
|
My awesome macropad! by @yunus61 | Stardance
|
yunus61
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My awesome macropad! by @yunus61 | Stardanc Title: My awesome macropad! by @yunus61 | Stardance...
|
1792799636.5258658
|
1793404436.5258658
|
|
38391
|
Hulu-Hub by @bilisaassefa | Stardance
|
bilisaassefa
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Hulu-Hub by @bilisaassefa | Stardance
|
1792799637.3625772
|
1793404437.3625772
|
|
40097
|
My own site! by @tsegazeabkibrom | Stardance
|
tsegazeabkibrom
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My own site! by @tsegazeabkibrom | Stardanc Title: My own site! by @tsegazeabkibrom | Stardance...
|
1792799638.187799
|
1793404438.187799
|
|
28330
|
Khord by @mitul | Stardance
|
mitul
|
0
|
10.88
|
0
|
[]
|
[{"post_id": 23864, "ts": "202 [{"post_id": 23864, "ts": "2026-07-07T01:40:23Z", "hours": 5.4786, "text": "This log is something I don’t do usually, which is a recovery log. My very first devpost, I ran into the issue on lookout where my video timelapse would save on lookout, but not add to hackatime, since the original recording link got closed. I was very dissapointed with this, as I’d lost my very first work session, which too was four and half hours. Looking through the slack, it seems other people have had the same issue, and some people indicated that they solved it by playing out the screen capture on slow motion, for lookout. I implemented this, throughout this session, except for an hour of this session, the video was paused, hence the extra time. I hope this isn’t a huge issue; it wasn’t intentional. To summaraize what the session was actually about, basically, I recreating my original component diagram, within a new project. This was because, the original, I felt, had many flaws, like for example the lack of net classes that were organized. Also, I was reconsidering the layout work of the original pcb. Mostly the work was transitioning my pcb into a new project folder. Anyways, that is all folks…"}, {"post_id": 23597, "ts": "2026-07-06T17:33:32Z", "hours": 1.8222, "text": "This work session I added test points. This was something I noticed on many designs, especially for prototype boards, and I decided to implement them as well. This was tricky however, as my board is already incredibly dense, and test pads can take up considerable space. After adding the pads, and re-updating my pcb from schematic, I noticed that all the 3d models were gone again. And worse, the custom footprint I designed for my bluetooth chip was also gone. The footprint for the bluetooth chip was especially tedious to make, as I added a bunch of zone rules like no copper fills and components, and such based on the application circuit. This was and is frustrating, but I think the reason, was because my edits were saved to the pcb rather than to the footprint library, which meant refreshing the pcb page, lead to the changes being lost. I plan to fix this, by getting more familiar with the footprint editor, so my work doesn’t get lost. Speaking of which, the next journal will actually be a recovery journal, as early on this project, I lost a four hour session due to a lookout recording bug. So, I plan to play out the screen recoding of the 4 hours, which has to be fair game, given how this is the SECOND time, I’ve lost a 4 hour session. Anyways, that’s all for now folks…"}, {"post_id": 21071, "ts": "2026-07-02T20:58:39Z", "hours": 1.4667, "text": "In trying to redesign, this board, I’ve encountered several helpful suggestions in terms of routing and component choice. This session was spent fulfilling them. First, for the SWD programming interface, I had initially exposed female socket headers, which were layed horizontal, and thus occupied tons of room. Instead someone suggested I use a tc2030 connector, which is significantly smaller footprint-wise, and looks pretty cool. I also deliberated whether to use a 2 layer or 4 layer board, and after some thought, for this design I’ll be using a 4 layer board. Though a 2 layer board is easier to setup, it is harder to execute well, and certainly suffers from more pitfalls in terms of signal integrity. Specifically, within the 4 layer stackup, I opted for signal-ground-ground-power stackup (same as last time), because I can dedicate a ground to analog and another to digital, as is common in audio applications. Finally, I added 3d models that were missing (somehow again) for the footprints, leaving me with board setup for next work session. That’s all for now folks…."}, {"post_id": 18966, "ts": "2026-06-30T04:31:34Z", "hours": 2.1169, "text": "Alrighty, this will be a pretty dense devlog, but it’s because I’ve been procastinating a lot of the work ;). For context, the goal of this project is to develop an affordable bluetooth dac, that can also act as a standalone dac, and a bluetooth microphone. A dac or digital analog convertor is a device capable of converting digital signals to analog, which in my case is converting USB-C music to “audio jack” music. A common example is Apple’s dongle. The point of this device is enable anyone with wired headphones to use them wirelessly. But, most people prefer wired headphones because you don’t need to charge them. So I thought why not allow them to be wireless when I need to(running, activity, etc), and turn them back to wired, when I’m sedentary, thus also charging them during wired use. I began working on the schematic, and sourcing parts, and planning out the overall circuit around 3 weeks ago. And at this point I’ve probably spent over a hundred hours undocumented. But, better late than never, so here I am trying to catch up. This work session was spent importing my schematic’s components into the pcb editor, where I noticed a few annoying things. Firstly, a lot of the componenets were footprints imported from EasyEDA’s library, which for some reason didn’t include access to the 3d files. I spent a good amount of time back and forth refreshing KiCad and importing the files, until they appeared adn I was able to import all of them. Next, I was setting up the parameters of the board before I begin routing; things like layer stackup, differntial pairs, constraints, net classes. Here I found that I kept running into a problem where design rules checker complains about solder mask bridging between pads. After a bunch of research and troubleshooting, I realized I made a stupid mistake. The footprints I used for my resistors were 0201, where I meant to use 0603, wwhich meant they were all way smaller than they needed to be. So I’ve fixed that, and now I’m deliberating a few things for the next work session. Mainly, I’m split between whether I want to use a 4 layer or 2 layer pcb for my design. A 4 layer design would simplifiy routing, and improve signal quality(and my ealier iteration was 4 layers too), but the main goal of this project from the start was affordablility, so in that regard a 2 layer board is significantly better option. Anyways, that’s all for this log, future logs hopefully won’t be as dense. Thank you for reading :) IMPORTANT SECTION BELOW(***for stardance admin): Earlier today, I spent a 4 hour session(pictured below), redesigning my circuit schematic before I begin another pcb layout. I guess, there is some kind of glitch where lookout sessions aren’t connected to my project if the stardance tab is closed, while the session occurs. If any admin sees this, please comment a fix, because I’d like to claim the hours."}]...
|
Title: Khord by @mitul | Stardance
Devlogs:
Alrig Title: Khord by @mitul | Stardance
Devlogs:
Alrighty, this will be a pretty dense devlog, but it’s because I’ve been procastinating a lot of the work ;). For context, the goal of this project is to develop an affordable bluetooth dac, that can also act as a standalone dac, and a bluetooth microphone. A dac or digital analog convertor is a device capable of converting digital signals to analog, which in my case is converting USB-C music to “audio jack” music. A common example is Apple’s dongle. The point of this device is enable anyone with wired headphones to use them wirelessly. But, most people prefer wired headphones because you don’t need to charge them. So I thought why not allow them to be wireless when I need to(running, activity, etc), and turn them back to wired, when I’m sedentary, thus also charging them during wired use. I began working on the schematic, and sourcing parts, and planning out the overall circuit around 3 weeks ago. And at this point I’ve probably spent over a hundred hours undocumented. But, better late than never, so here I am trying to catch up. This work session was spent importing my schematic’s components into the pcb editor, where I noticed a few annoying things. Firstly, a lot of the componenets were footprints imported from EasyEDA’s library, which for some reason didn’t include access to the 3d files. I spent a good amount of time back and forth refreshing KiCad and importing the files, until they appeared adn I was able to import all of them. Next, I was setting up the parameters of the board before I begin routing; things like layer stackup, differntial pairs, constraints, net classes. Here I found that I kept running into a problem where design rules checker complains about solder mask bridging between pads. After a bunch of research and troubleshooting, I realized I made a stupid mistake. The footprints I used for my resistors were 0201, where I meant to use 0603, wwhich meant they were all way smaller than they needed to be. So I’ve fixed that, and now I’m deliberating a few things for the next work session. Mainly, I’m split between whether I want to use a 4 layer or 2 layer pcb for my design. A 4 layer design would simplifiy routing, and improve signal quality(and my ealier iteration was 4 layers too), but the main goal of this project from the start was affordablility, so in that regard a 2 layer board is significantly better option. Anyways, that’s all for this log, future logs hopefully won’t be as dense. Thank you for reading :) IMPORTANT SECTION BELOW(***for stardance admin): Earlier today, I spent a 4 hour session(pictured below), redesigning my circuit schematic before I begin another pcb layout. I guess, there is some kind of glitch where lookout sessions aren’t connected to my project if the stardance tab is closed, while the session occurs. If any admin sees this, please comment a fix, because I’d like to claim the hours.
In trying to redesign, this board, I’ve encountered several helpful suggestions in terms of routing and component choice. This session was spent fulfilling them. First, for the SWD programming interface, I had initially exposed female socket headers, which were layed horizontal, and thus occupied tons of room. Instead someone suggested I use a tc2030 connector, which is significantly smaller footprint-wise, and looks pretty cool. I also deliberated whether to use a 2 layer or 4 layer board, and after some thought, for this design I’ll be using a 4 layer board. Though a 2 layer board is easier to setup, it is harder to execute well, and certainly suffers from more pitfalls in terms of signal integrity. Specifically, within the 4 layer stackup, I opted for signal-ground-ground-power stackup (same as last time), because I can dedicate a ground to analog and another to digital, as is common in audio applications. Finally, I added 3d models that were missing (somehow again) for the footprints, leaving me with board setup for next work session. That’s all for now folks….
This work session I added test points. This was something I noticed on many designs, especially for prototype boards, and I decided to implement them as well. This was tricky however, as my board is already incredibly dense, and test pads can take up considerable space. After adding the pads, and re-updating my pcb from schematic, I noticed that all the 3d models were gone again. And worse, the custom footprint I designed for my bluetooth chip was also gone. The footprint for the bluetooth chip was especially tedious to make, as I added a bunch of zone rules like no copper fills and components, and such based on the application circuit. This was and is frustrating, but I think the reason, was because my edits were saved to the pcb rather than to the footprint library, which meant refreshing the pcb page, lead to the changes being lost. I plan to fix this, by getting more familiar with the footprint editor, so my work doesn’t get lost. Speaking of which, the next journal will actually be a recovery journal, as early on this project, I lost a four hour session due to a lookout recording bug. So, I plan to play out the screen recoding of the 4 hours, which has to be fair game, given how this is the SECOND time, I’ve lost a 4 hour session. Anyways, that’s all for now folks…
This log is something I don’t do usually, which is a recovery log. My very first devpost, I ran into the issue on lookout where my video timelapse would save on lookout, but not add to hackatime, since the original recording link got closed. I was very dissapointed with this, as I’d lost my very first work session, which too was four and half hours. Looking through the slack, it seems other people have had the same issue, and some people indicated that they solved it by playing out the screen capture on slow motion, for lookout. I implemented this, throughout this session, except for an hour of this session, the video was paused, hence the extra time. I hope this isn’t a huge issue; it wasn’t intentional. To summaraize what the session was actually about, basically, I recreating my original component diagram, within a new project. This was because, the original, I felt, had many flaws, like for example the lack of net classes that were organized. Also, I was reconsidering the layout work of the original pcb. Mostly the work was transitioning my pcb into a new project folder. Anyways, that is all folks…...
|
1792799639.037434
|
1793404439.037434
|
|
16097
|
My awesome macropad! by @Awmshu | Stardance
|
Awmshu
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My awesome macropad! by @Awmshu | Stardance
|
1792799640.1311102
|
1793404440.1311102
|
|
12998
|
The House Always Wins by @Pavian | Stardance
|
Pavian
|
0
|
1.47
|
0
|
[]
|
[{"post_id": 5848, "ts": "2026 [{"post_id": 5848, "ts": "2026-06-09T19:55:30Z", "hours": 0.5847, "text": "Now the mouse controlss works perfectly you can look up and down and also now our character have arms and with holding down the left click you can move the left arm and if you hold the right click you can move the right arm. And also i have built the base of the Casino it has walls now and a ceiling. Thats it for now."}, {"post_id": 5089, "ts": "2026-06-08T19:32:32Z", "hours": 0.8872, "text": "I have done most of the FPS control, i only need to do that the character can look up and down and i uploaded everything on github that i done. Its not much yet but there will be more."}]...
|
Title: The House Always Wins by @Pavian | Stardanc Title: The House Always Wins by @Pavian | Stardance
Devlogs:
I have done most of the FPS control, i only need to do that the character can look up and down and i uploaded everything on github that i done. Its not much yet but there will be more.
Now the mouse controlss works perfectly you can look up and down and also now our character have arms and with holding down the left click you can move the left arm and if you hold the right click you can move the right arm. And also i have built the base of the Casino it has walls now and a ceiling. Thats it for now....
|
1792799640.974751
|
1793404440.974751
|
|
17391
|
Readmeify by @musty | Stardance
|
musty
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Readmeify by @musty | Stardance
|
1792799641.819894
|
1793404441.819894
|
|
5306
|
My first slack bot! by @Wren25 | Stardance
|
Wren25
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My first slack bot! by @Wren25 | Stardance
|
1792799642.6843805
|
1793404442.6843805
|
|
24896
|
RE-BIKE by @1maks | Stardance
|
1maks
|
0
|
2.44
|
0
|
[]
|
[{"post_id": 24158, "ts": "202 [{"post_id": 24158, "ts": "2026-07-07T15:23:29Z", "hours": 0.4139, "text": "EBIKE DEVLOG 3 Sadly, I can’t really log EasyEda hours, and my progress will go untracked. I’ve finished the PCB and set it over to JLCPCB for review! Next step: 3d printed case!!"}, {"post_id": 23128, "ts": "2026-07-05T22:02:34Z", "hours": 1.1847, "text": "EBIKE DEVLOG 2 Finally back home!!! Back on the project, today I started with PCB design on EasyEDA. I have ordered electrical parts, and turns out they wont work, because there’s only 4 IO ports on the CYD ! Came up with a workaround: instead of an INA228 module with an external shunt , I got a set of resistors and a stabilistor to measure battery voltage, which u can see in IGNITION & BATT METER"}, {"post_id": 15217, "ts": "2026-06-24T18:40:05Z", "hours": 0.8364, "text": "EBIKE DEVLOG 1 A broken display somehow turned into a complete e-bike remodel. About a month ago, I thought I’d just replace the broken display and forget about it. The bike also needed constant minor fixes, and at some point it just stopped being a repair job. I decided to redesign the whole system in a way that actually makes sense to me, starting with custom electronics and a custom case. Current plans ⤵️"}]...
|
Title: RE-BIKE by @1maks | Stardance
Devlogs:
EBI Title: RE-BIKE by @1maks | Stardance
Devlogs:
EBIKE DEVLOG 1 A broken display somehow turned into a complete e-bike remodel. About a month ago, I thought I’d just replace the broken display and forget about it. The bike also needed constant minor fixes, and at some point it just stopped being a repair job. I decided to redesign the whole system in a way that actually makes sense to me, starting with custom electronics and a custom case. Current plans ⤵️
EBIKE DEVLOG 2 Finally back home!!! Back on the project, today I started with PCB design on EasyEDA. I have ordered electrical parts, and turns out they wont work, because there’s only 4 IO ports on the CYD ! Came up with a workaround: instead of an INA228 module with an external shunt , I got a set of resistors and a stabilistor to measure battery voltage, which u can see in IGNITION & BATT METER
EBIKE DEVLOG 3 Sadly, I can’t really log EasyEda hours, and my progress will go untracked. I’ve finished the PCB and set it over to JLCPCB for review! Next step: 3d printed case!!...
|
1792799643.5291376
|
1793404443.5291376
|
|
6279
|
My awesome macropad! by @hacker39493 | Stardance
|
hacker39493
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My awesome macropad! by @hacker39493 | Star Title: My awesome macropad! by @hacker39493 | Stardance...
|
1792799644.3743174
|
1793404444.3743174
|
|
6764
|
deleted by @Convy32 | Stardance
|
Convy32
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: deleted by @Convy32 | Stardance
|
1792799645.2185385
|
1793404445.2185385
|
|
19165
|
Frictionless by @pranjal_ok | Stardance
|
pranjal_ok
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Frictionless by @pranjal_ok | Stardance
|
1792799646.412734
|
1793404446.412734
|
|
6321
|
ModularTravelStand by @FencingLefty3 | Stardance
|
FencingLefty3
|
0
|
0.46
|
0
|
[]
|
[{"post_id": 2367, "ts": "2026 [{"post_id": 2367, "ts": "2026-06-04T20:28:56Z", "hours": 0.4561, "text": "Creating a modular 3D printable travel stand system. CMF watch and Section Template (shown) molded. Planning on making modular sections for, Watch stand, phone stand, glasses stand, earbuds tray. Idea is to unfold it on a night stand to store items while traveling, or use only the phone stand on a plane, etc."}]...
|
Title: ModularTravelStand by @FencingLefty3 | Star Title: ModularTravelStand by @FencingLefty3 | Stardance
Devlogs:
Creating a modular 3D printable travel stand system. CMF watch and Section Template (shown) molded. Planning on making modular sections for, Watch stand, phone stand, glasses stand, earbuds tray. Idea is to unfold it on a night stand to store items while traveling, or use only the phone stand on a plane, etc....
|
1792799647.2546933
|
1793404447.2546933
|
|
8490
|
My first slack bot! by @koky | Stardance
|
koky
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My first slack bot! by @koky | Stardance
|
1792799648.1011577
|
1793404448.1011577
|
|
17682
|
My very own WebOS by @cubie | Stardance
|
cubie
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My very own WebOS by @cubie | Stardance
|
1792799648.9611044
|
1793404448.9611044
|
|
12995
|
Custom climatic music player by @Dimitri | Stardan Custom climatic music player by @Dimitri | Stardance...
|
Dimitri
|
0
|
0.53
|
0
|
[]
|
[{"post_id": 5072, "ts": "2026 [{"post_id": 5072, "ts": "2026-06-08T19:09:44Z", "hours": 0.5333, "text": "I’m working on simple mobile android app, that will play music that you upload on it + will play some sounds. It’s made for people playng RPG games. Just started, but I’m still thinking abought name."}]...
|
Title: Custom climatic music player by @Dimitri | Title: Custom climatic music player by @Dimitri | Stardance
Devlogs:
I’m working on simple mobile android app, that will play music that you upload on it + will play some sounds. It’s made for people playng RPG games. Just started, but I’m still thinking abought name....
|
1792799649.799634
|
1793404449.799634
|
|
28074
|
3D Printer Filament Humidity Alarm by @astoynov | 3D Printer Filament Humidity Alarm by @astoynov | Stardance...
|
astoynov
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: 3D Printer Filament Humidity Alarm by @asto Title: 3D Printer Filament Humidity Alarm by @astoynov | Stardance...
|
1792799650.631451
|
1793404450.631451
|
|
28630
|
My own site! by @Ramie | Stardance
|
Ramie
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My own site! by @Ramie | Stardance
|
1792799651.4659994
|
1793404451.4659994
|
|
28334
|
k by @Avinash | Stardance
|
Avinash
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: k by @Avinash | Stardance
|
1792799652.3005896
|
1793404452.3005896
|
|
17553
|
My awesome macropad! by @aakarsha | Stardance
|
aakarsha
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My awesome macropad! by @aakarsha | Stardan Title: My awesome macropad! by @aakarsha | Stardance...
|
1792799653.1252303
|
1793404453.1252303
|
|
30441
|
Weather Underground Station Status Checker by @Kru Weather Underground Station Status Checker by @Krupam | Stardance...
|
Krupam
|
0
|
180.79
|
0
|
[]
|
[{"post_id": 79620, "ts": "202 [{"post_id": 79620, "ts": "2026-10-14T18:51:09Z", "hours": 9.4867, "text": "Weather Emails, mobile tweaks, map zoom Soooooooooooooo close to shipping. Map Zoom: The Map will now automatically zoom based the center of the points. Humidity and Dew point data collection: The place the data was being scraped from got changed so I had to update the logic. Weather Emails: Created another CRUD for another email list. This list will get a monthly email summarizing the weather for the past 30 days for each of the stations. I created the web page for it, but need to finish cleaning it up, allowing people to sign up for the service and make the emails send automaticcally. Mobile Tweaks: The mobile version of the website did not look good. I spent a lot of time trying to fix it before I was able to get it to look like this!"}, {"post_id": 77451, "ts": "2026-10-07T02:02:30Z", "hours": 7.9642, "text": "Map! And Develop mode Map I used ArcGIS’s JS to create a map tab that show cases all stations that have a latitude and longitude value. I am working on getting them on the first ever scrape but you can also edit them within the settings page. There is a link that takes you to the station page as well. Develop Mode Created a toggle within the .env file. If on, the program will use the SQlite db and be able to run on VS Code for example. When it is off, it needs the PostGRESql db to function. Docker Docker is really infuriating lmao. Spent most of my time fixing tiny bugs."}, {"post_id": 74611, "ts": "2026-09-27T19:29:59Z", "hours": 9.5544, "text": "Docker Deployment (ALMOST finished) Hey guys! Docker: I am using Docker for deployment of this system to make it easy for anyone who has a weather station or network of them to showcase and monitor their own data. Docker is a type of virtualization (similar to VMs but instead sharing the kernel) that is a lot less resource intensive and is used for deploying a lot of small projects as well as any type of home labbing work flow (hosting your own server etc.). (Yes I pulled that explanation from my last devlog lmao). I will have a tutorial in the ReadME. Within the docker stack, there are several containers with different jobs and responsibilities: Web: Hosts the FastAPI webserver. It uses a endpoint (/health) to monitor the servers responses. It is hosted on port 8000 by default (configurable in the .env file). I would forward this through Nginx or a Cloudflare tunnel to host it under your own domain. Scraper: Runs the status and weather scrapers every 15 and 5 minutes (offset by two mins) respectively through a crontab file ( scraper.crontab ). It is run using Supercronic. The scraper waits for the web server as well. Flock is used to prevent two instances of a program. DB: PostgreSQL server that holds all of the data. Weather data, users, etc. All of the other containers wait till the DB is healthy to start. Db_backup: A container created by Prodrigestivill to automate backups of Postgres databases. I have it configured to keep the last month and 14 days of backups. It saves all backups to the /opt/mesonet-backups folder. I wrote scripts in order to test restoring backups (creates test table, restores using latest backup, and deletes it), create a manual backup, and restore the last backup. Email Alerts: Fairly similar to how emails are sent in the status-scraper, it obtains admin recpients from the web sever uses enviroment vairbales to send an email. It asks for subject and text using arguments in the terminal, so the user can send emails manually to admins as well. Health-tests: Runs a couple of health based scripts on a Supercronic schedule. Monthly restore test (runs the restore test mentioned before) and a daily backup health (checks how old the backup is). Emails will be sent to admins if the restore fails or the backup is more than 26 hours old. Persistent Storage: All the containers used volumes that continued even if the containers were deleted to be updated, the data (and the backups) are fine."}, {"post_id": 72413, "ts": "2026-09-22T21:20:07Z", "hours": 8.7489, "text": "Docker and Environment Variables Hey guys! It has been a couple of days… Time Crunch: So I looked on my calendar a week ago and realized that Stardance was almost over, and thought “this is plenty of time”. Then a couple of days ago I really felt the pressure. I wanted to get this out before the program finished so I started on the final bits and deployment to turn this into a usable system. Docker: If you don’t know what docker is, count your lucky stars. Just kidding, its very cool when it works . It is a type of virtualization (similar to VMs but instead sharing the kernal) that is a lot less resource intensive and is used for deploying a lot of small projects as well as any type of home labbing work flow (hosting your own server etc.). I have worked with docker with pre-built images and containers before and never really went into the DIY portion. This was my first intro into it and I had to do a lot of googling and the such. It was really frustrating and required quite a few head banging. NOTE: I did use AI sometimes (tried as little as I could) to get docker working. You can see me sometimes using it in my lapse recordings, but I tried to keep it closed as long as I could to stop me from using it :D. Environment Variables: I was told that hard coding my config values in a config file was a bad idea…and it makes sense. It took a bit, but once I setup environment variables, oh man did it get so much better. This also makes it a lot easier in docker to setup the container. Very happy about this. Help from a friend! I told this story a couple of weeks ago, but one of my friend’s dad found my repo and left a couple of issues on my page and these were my last two. I really gotta thank him for these ideas."}, {"post_id": 69905, "ts": "2026-09-18T01:25:16Z", "hours": 7.5397, "text": "API Email Calls, Hardware specifications, Docker? Hey guys, School started two weeks ago, so my posts will be a little delayed lol… API Email Calls: I originally hard coded my email lists for Reports, station-specific, admin, and global emails, but I wanted to unify them with the rest of the API. I spent a lot of time creating columns in SQL, endpoint CRUD, settings HTML page CRUD, as well as changing the scrapers to pull the lists and use them. Hardware specifications: I added columns in SQL to add Hardware metadata for the stations. It can be seen in all dashboards (see photo) Docker: I was thinking of creating a docker container for this setup to make deployment easier. Would that be something you guys would like to see? Let me know."}, {"post_id": 59930, "ts": "2026-09-01T23:50:25Z", "hours": 5.4425, "text": "Robots.txt, User login error, API security, credit footer, station hardware Whats up? Robots.txt: For those who don’t know, a “robots.txt” tells scrapers and any bots where they allowed to go on your website. I only allowed them to go on public html pages. However this is only a recommendation, the big guys can do whatever they want. User Login Error: I had this error where any public accounts (or not admins) would get a error when logging in. I was searching for permissions with the wrong column in the database 😅. API Security: I made sure there were no open routes and everything was secured. Credit Footer: This was pretty cool. At the end of ever page, I added this little footer with my name and a link to the github repo. Station Hardware: I added a new column to store station hardware info. This is mainly for what weather station model it is. Ex: Davis Vantage Pro2. I am working on making the update form in the settings page allow to update this info as well as more station info."}, {"post_id": 57799, "ts": "2026-08-30T02:58:26Z", "hours": 6.3317, "text": "Some Help and ReadMe! The project is almost done! (why do I feel like I will be saying that a lot…) Some help! Today I saw interesting post on Facebook about a website someone my age built and I commented it on it asking if I could see the code cause I was curious if they used Flask, FastAPI, etc. I also posted my project and to my surprise, the poster is actually my friend’s dad (small world am I right) and he reviewed my code and left a few issues on it. He even downloaded it to update my requirements.txt. I then merged his request. Thank you for all of your help! ReadMe: I spent all of today working on the readme, you can read it here . However here is a little sneak peak: Hey! My name is Krupam, and I am a nerd. If you are reading this, you are most likely one as well. I love weather, and learning about it. Other people who love weather will create and host Personal Weather Stations (PWS) and post the data to websites like Weather Underground. I have used these stations for my own research projects. Check one out!. In my area, there is a mesonet (regional network of PWS’s) from the Save Barnegat Bay non-profit (check them out, they are awesome!). I have used plenty of their stations in my research. I was given the amazing opportunity to present my research at one of their meetings regarding their mesonet. It was eye-opening! As I listened into the meeting, they discussed one of the current issues; they could never tell when a weather station went down. The station owners would find out days after if not weeks. This program is the solution to that and more. The system is a weather-station data platform and monitoring system. The system collects data from Weather Underground (WU), turns it into usable information, and alerts station owners and administrators when a station needs attention. All data is shown on the website in a easy, user-friendly approach. This includes dashboards, graphing, analysis, scientific tests, and admin controls (accessed through JWT-based auth). The system is coded mostly in Python and there are three main systems: The weather and status scrapers, backend, and frontend website."}, {"post_id": 55719, "ts": "2026-08-27T18:10:45Z", "hours": 8.3564, "text": "Settings Page, API Stations List Call for Scraping System Hey! Here is what I have been up to… Settings Page: This is a Admin only page (will pop up in nav bar when admin) that configures, deletes, creates, the main functionalities. This includes stations and users. After every function is run a error/success message will show with detailed intomation depending on the function. These Functions include: Modify User: Change role, username, password Register User: Create Delete User Read User Assigned Stations: Choose a station, the page will reload and show all stations the user can access. Grant User Access: Choose a user, and give them access to a station. This is view only by default Revoke Access: Remove User access to a specific station. On reload after choosing a user it will show any assigned stations Update User Access: Choose a user, on reload it wil show all available stations and when selected, will show what access it has. You then check/uncheck the access you want it to have and submit. Modify Station: Currently only allows to change station name. Create Station: Enter new id and name as well as options to be public and in maintenance mode (default off). Delete Station: Deletes station only from the current stations. Does not delete data. I need to rewrite this to make it so it stops collecting data instead. Read all Stations: Lists all stations and if they are in maintenance or not API Stations List Call I realized around 11 at night that I did something very dumb. All of the stations in the configs for the Weather and Status scrapers were hard coded values and were NOT synced with the current stations database. To combat this, I added a new column to the Stations database table. This column was called collect_active or something of the sort. I plan to migrate the delete function to turning off the collection. I then changed the scrapers to pull a new current list at every run and used that as their truth. I finished this around 3 AM last night 😭 . If you guys have any other ideas, let me know!"}, {"post_id": 54509, "ts": "2026-08-25T15:13:24Z", "hours": 8.2236, "text": "Admin Settings Page (WIP) Settings Page: Now that the main functionality of the site is finished, I started making HTML representations of all the methods I have predefined. This includes CRUD (create, read, update, and delete) functions for several pieces of the website. Here are the ones I started to make: Reset/Update User password, username, role. Register Users Delete User Read User Assigned Stations Grant User Access to a station Revoke User Acccess to a station Modify User Access to a station. Everything uses HTLM forms and when they submit, they will return a pop up success or error message. There are a couple of other features I forgot that I made (Such happens when coding at ungodly hours) but anyone can try out the website (if I am working on it at the same time) at https://sbb.krupamlab.com"}, {"post_id": 54016, "ts": "2026-08-24T19:16:15Z", "hours": 8.4358, "text": "CSV Downloads, Weather Table, Error Details on pages, and a profile indicator! Let’s jump into it! CSV Downloads: For graphing, analysis, tests, and table pages, I created CSV downloads. Graphing: Downloads raw data Analysis: Downloads analysis summary and raw data Tests: Downloads test results and raw data Weather Tables: Downloads raw data Weather Tables: In the public dashboards, there is now a table at the bottom with all data from the current day. There are quick buttons to go forward and back a day as well as a day input and go button. Profile Indicator: It is just a blank profile picture icon with your username next to it. It only shows when logged in. When clicked it sends you to the my-stations page. Error Details: If there are specific error details in the backend, they will be sent to the error page. Otherwise a generic 40X error will be show"}, {"post_id": 47248, "ts": "2026-08-15T01:38:47Z", "hours": 8.2772, "text": "Testing Page Finished! (without csvs…) HTML Form Bug Fixes: Sup guys, here is what I have been up to… Testing Page: Oh man this was pretty hard. I actually had writers block but for code. I just couldn’t think of a solution. I just sat there trying to think of how to implement the system. With enough brute force however and some breaks, I did manage to get it working. What is it? This page allows the user to run scientific tests. These tests include Linear Regressions, ANOVAS, and T-Tests. Linear Regressions look for a relationship between variables. ANOVAS and T-tests determine if there a difference between groups of data (single variable). Functionality: The form will ask the user to choose a test, station, variable, unit, and time range, as well as test-specific inputs to run a test. Once the user submits the test, it will either return a graphical result (for the Linear Regression) or stats of the T-Test or ANOVA. The Tests will only make groups depending on the same time frame but different stations. (I only decided to do one for simplicity) This all works but I need to create the ability to download the csv of the data used for the tests. General Inputs: Test Type (T-test, ANOVA, Linear Regression) Range Type: (Relative or Date) Last ___ (hours, months, etc) Start and end date Units (Imperial or metric) Test Specific Inputs: When a test is chosen, test-specific inputs appear. (this happens for other forms such as graphing and analysis pages. I just forgot to mention it) The appeared inputs are then required (like the other default inputs like time, etc) but when a different test is choosen the required inputs are updated with the new ones. These include: Linear Regression: Station X Variable Y Variable Regression T-Test: Outcome Variable Station A Station B ANOVAS: Outcome Variable Station A Station B Station C HTML Form Fixes: I went through all of the Forms that have inputs that switch and make them work nicely with the backend. I make inputs that switch be required and seen at the right time."}, {"post_id": 42348, "ts": "2026-08-07T00:58:02Z", "hours": 10.1181, "text": "Testing Page (Still WIP), General Bug Fixing, and Site Cleanup Yikes, I got reaaaal close to hitting the 10 hour limit for these devlogs 😅… Site Cleanup I am really proud of this one. I finally took time to go around and get most of the small detailed squared away. I got the site favicon (small icon in the web tab) and other meta data information fixed (like the .webmanifest) working. I also spent a good chunk of time creating the home page and making it look professional. General Bug Fixing I took some time to go through the website and found some tiny bugs. I also had a few of my friends test out the website (they didnt break it!!!!). Small stuff like making it easier to see the graphs, titles on the tabs, etc. Test Page This page is like the ultimate boss for me haha. I would like this page to contain linear regressions (LR), ANOVAS, and T-tests. These are scientific tests used to find statistical differences in data. (see the below screen shot for a better explanation of all of these tests. The user chooses a station, range mode, range, units, and the type of test. Then based on that test, a few options are given: LR: X Variable Y Variable Title Mode A: Choose 1 station but two time ranges (same variable) Mode B: Choose 2 stations with one time range (same variable) ANOVA: Mode a/b Three or more time ranges/station depending on mode Two ranges/station depending on mode"}, {"post_id": 39249, "ts": "2026-08-02T03:01:23Z", "hours": 8.5142, "text": "A Variable Analysis Page and Graphing with a date system! Hey guys! Here is what I have been up to… Graphing Date System: As well as a “last _ ____” system (relative range), I created a version that allows me to choose “Date Range.” Date Range allows you to choose between two dates. It sounds simple but was a lot harder to code 😅. As I wrote most of the code while being really sleep deprived, take a look over at @app.get(\"/graph/weather/{station_id}\") on the project’s github page. (I recommend using ctrl + f to find it) Variable Analysis Page: This page is pretty similar to the graphing page (see previous devlogs) where it uses a HTML form with query variables to create calculations. The user selects a weather station, variable, range mode (relative or date), inputs for that mode (hours/date, etc) and the units. Then the latest, minimum, maximum, mean, median, range, sample value (n value), and the overall trend (falling, steady, rising, insufficient data). The time will also be shown if applicable (latest value). You can then download a csv of all the data the calculations were derived from. Under that is another box showing the full time the data is collected from as well as the units Future: I still need to add a tab for more advanced analysis such as linear regressions, anovas, t-tests, etc. If you guys have any more ideas, Let me know!!!"}, {"post_id": 35547, "ts": "2026-07-27T01:45:56Z", "hours": 5.8625, "text": "#Graphing Page!!! As well as other bug fixes… Graphing Page This page is created by making a HTML form and submitting as a POST request to the same method that creates the dashboard graphs. All the graph information is a query request (the infomation after a question mark in a url, see photo). This means you can bookmark a graph to see the most recent data with your own personal preset. The user must select the station (from a list), type a title, the time range, (last __ unit), and the variables they would like. They can choose as many variables as they would like. There are also variable type presets a user can choose. It will preset everything to make the graph including the time range and title. Once a graph is generated, it will be displayed with the options to download it as a png, download the csv data, or the clear the graph. I am working on a date range next as well as the analysis page with linear regressions, t-tests, ANOVAS, etc. Bug Fixes I had a couple of friends test out the site to find some bugs, and boy did they deliver. They managed to point out some logical errors I had, and I fixed them."}, {"post_id": 34238, "ts": "2026-07-24T19:31:03Z", "hours": 9.2097, "text": "Owner Dashboard (finished), Maintenace and Public Toggles, Dashboard Graphs, and Graph Page (WIP) A lot has happened, lets dive into it: Owner Dashboard: This dashboard may not look very different from the public dashboard but it hold a lot more features: Status widget with the status time and last status. A green check if online or a red X if not. If offline, no weather data/widgets are shown and instead a gear widget with more information is shown. This includes if a alert was sent, last time connected, first time offline, and consecutive offline checks Maintenance and Public toggles Maintenance toggle: If in maintenance mode, no emails will be sent about the status of the station but it will still be logged. Public toggle: If off, the station will not be shown in the public dashboard list. If you try to go to the url directly it will show a “Station Not available” Page. Dashboard Graphs Graphs are created using Matplotlib and show cased on both dashboards. This includes solar, precipitation, pressure, and temperature graphs. Graphing Page (and analysis) This page is currently being worked on but will allow anyone to choose the time range, variables (yes multiple!), station, and unit. I also want to have a section for analysis like regressions and so on. Lmk how this is looking so far!"}, {"post_id": 33234, "ts": "2026-07-22T23:24:27Z", "hours": 8.8756, "text": "Owner Dashboard (WIP) and Maintenance Toggle Welcome back to a episode of me going insane! :D (jk) Owner Dashboard (WIP) The owner dashboard is a dashboard that is separate from the public dashboards. You must log in to access a page called “My Stations”. This page lists all stations that your account has permission to view. The account that you are using must have the station added by a administrator (rn all of those methods are in the docs. I plan on moving them to html soon) Purpose of Owner Dashboard The owner dashboard holds some extra functionalities based on the status: Online It will show a green or red icon based on the status (along with the circle up by the units toggle) and display the exact time and status of the station. The time of status is separate from weather. If you have the permissions to do so, you can then toggle the maintenance and public modes. (Only maintenance mode has been implemented thus far) The maintenance mode stops any emails from being sent about the station Public mode will allow the station’s public dashboard to be listed on the website. Offline: Shows everything in online*. Does not show weather data Displays how many times the station has been shown to be offline. (consecutive offline) The time of last connection. First offline (this is when the station is set as offline) If an alert email was sent Let me know if you guys have any ideas!"}, {"post_id": 30867, "ts": "2026-07-18T20:24:01Z", "hours": 7.3928, "text": "Public Dashboard and dashboard widgets!!! I had a lot of fun with this… Public Dashboard This is a public webpage anyone (no need to log in) for each station, listing the current weather conditions and status in a nice gui. In here are some widgets I made by myself all in CSS and HTML. (I don’t like JS if you couldn’t tell…) These weather values include: Temperature Dew Point Humidity Precipitation Rate Precipitation Accumulation UV Index Solar Radiation Atmospheric Pressure Wind Speed Wind Gusts Wind Direction Dashboard Widgets: I made a couple of widgets that update based on the values: Temperature Pressure Wind Temperature: A small thermometer that fills up as the temperature gets higher. (I have to rescale it for Celsius) Pressure: A small barometer that changes based on the pressure. The center pressure (29.92) is the atmospheric pressure at sea level. Wind Speed: A little compass shows the cardinal through tertiary wind directions (16 directions). The current wind is represented by the blue arrow. The arrow is where the wind is coming from (how wind is properly notated) Let Me know if you guys have any other ideas, I would love to hear em!"}, {"post_id": 29927, "ts": "2026-07-17T03:08:44Z", "hours": 7.7744, "text": "Working Error Pages, User Updates, Logouts, Weather Post/Weather History and a (partial) public dashboard Been a couple of days guys, here is what I have been up to: Error Pages: Whenever there is some sort of error such as 404 (not found), 401 (unauthorized), 403 (Forbidden), you will get forwarded to error pages. These pages will prompt you to return or log in, depending on the error. User Updates: Admins can know easily update usernames, passwords, roles, etc. However this is still in the API and not a webpage yet. Logouts: When you sign in, your menu bar will no longer have a sign in option (shocker) and has an option to log out. This “new” menu bar is created using jinja2 if-statements in the layout.html. Weather/Weather History: A Weather Underground Scraper (I made this for a seperate project, check it out: https://github.com/Krupamc/weather_underground_datascraper ) gathers weather data for each station (returns a null filled json if station is offline) and posts it to the API. The API stores it in the database. We can access the current weather for each station as a well as the history. The default history is 20 entries but can be extended with queries. Public Dashboard: Now this is the fun one. This pulls the current status, weather values, time (as a date and timestamp in a readable format), as well as wind direction in label format (e.g. NNE) and sends it to the public dashboard. The dashboard then takes the values and puts them in an easy format. It is not finished, I plan to have pressure, temperature, and wind widgets that change based on the current values."}, {"post_id": 27946, "ts": "2026-07-13T21:48:30Z", "hours": 4.7169, "text": "Registration Form, Posting Status, Status History Hola guys! Registration There is now a registration form! It takes in a username and password and creates a user. However this user has no permissions and the person has to contact the admin to give them permissions. (in the future, a regular base user will still be able to do more stuff, see more detailed data maybe? But I don’t want to block data based on accounts. Maybe emails of your favorite stations?) Posting Status When the status checker runs, it will send the results over HTTP post to the database (DB) to be saved. The “current” Status DB model is overwritten by new data, but if there is a change in the status in any way, the change will be saved to the Status History DB Model. Time Another tiny detail is that before the status checker would store time in local time, but I changed that to be UTC time. UTC time is now universal and I plan to display the time in the local timezone based on the browser time zone. Easter Egg I added a easter egg in the website, I wonder if someone will find it… Thanks for reading these devlogs, this is not necessarily a fancy/flashy project and it means a lot when someone does ❤️."}, {"post_id": 27422, "ts": "2026-07-12T23:48:53Z", "hours": 2.1436, "text": "LOGIN FORMS!!! And Station Lists… Hey guys! Whats up? I’ll tell you whats up, the moon. 😅 Dad jokes aside, I am really excited to update you. Login forms…how exciting Wait wait I can explain. It is cool I swear. When you input your credentials into the form and submit it, it will check the database (DB) if you have the right ones. If you don’t you will get the invalid screen shown below (I definitely didn’t forget my own password…). But if you put in the right credentials, you will be given a access_token cookie. This cookie will let you stay logged in till the cookie expires (set for 30 mins ). Once you are logged it, it will direct you to your account dashboard and show you all the stations you have access to. (I didn’t make that one yet but shhhhh) Station List When you click on the Weather Station tab, it will show you a list of every single weather station in the network. Something else cool, whenever you hover/click a button, it will change color. Just fun for me. Save Barnegat Bay I am building this system as a idea I had for the Save Barnegat Bay (SBB) non-profit organization. I utilize their weather stations all of the time for my projects that I love giving back to their mesonet! Once I am finished building this, you will be able to access the SBB weather stations and see weather points as well as graphs and stuff. Oop can’t spoil all of my planned features"}, {"post_id": 27355, "ts": "2026-07-12T20:56:47Z", "hours": 8.9144, "text": "Website Backend, JWT, and HTML Front End Ok, these dev logs keep getting exponentially longer and longer ;-; What the hell is JWT? JWT (JSON Web Token) is a way for my authenticate a user. It essentially is how I can do logins. When a user is registered, their username and hashed password is stored in the SQL database (DB). When someone would like to authenticate, their password is hashed and sent with the username. The DB check if the username and hashed password match and send back a JWT token that expires after a set time (30 mins but configurable). During this time the user would be able access their station dashboard, etc. Admin accounts have the same log in procedure. They however have the power to give each user (based on their user id in the DB) access to specific stations. This includes the ability to see the station dashboard, toggle maintenance mode, and toggle if the station is public (on our site). Backend: Added functions for creating accounts and logging in. Most functions now require either a general account or a admin account. If this is not fulfilled a 401 error is sent (Unauthorized error). As of right now, only admins can register accounts. The access to each station can be updated by a admin at any time. I did some more stuff but I honestly forgot :) HTML Front End This was honestly my favorite part so far. I started by getting the Jinja2 template system to work as well as mounting the static directory. The layout.html file allows me to change it slightly for every page. That is a bad explanation but it is a really cool system. I got the home page done (needs some text and description but thats a later me issue). I am working on getting the general station page. It will list every station and allow you to click on them to get forwarded to that stations public dashboard. Sanity Check? I am having so much fun with HTML. It gives a certain gratification that SQL can’t give. I feel very happy :D Any ideas pls let me know!"}, {"post_id": 26761, "ts": "2026-07-11T18:56:34Z", "hours": 4.8619, "text": "SQL Database, Website Backend, Dashboard When I said a lot last time…that was nothing compared to now ;-; What am I going on about? Well, I wanted a way for station owners to be able to be able to toggle maintenance mode without the admin (whoever deploys this for their own mesonet) directly editing a json file every time. One thing led to another and now I am making a website… Website Plan: This website will run on a FastAPI backend with either Jinja2 or Htmx front-end. There will be a public “dashboard” where anyone can take a look at general station stats and current weather conditions. The weather conditions will also be made graphical with Matplotlib. Historical data will also be accessible. However on the same site, people will be able to log in. Logged in users will be able to access only certain stations they are allotted. They will have a more detailed dashboard with more stats. Certain users will be able to toggle maintenance mode and some won’t. Admin accounts will be able to see and toggle for all stations. Usernames and passwords will be hashed and saved in the database. The log in system will also make use of cookies/sessions to keep the user logged in. Planned SQLite Models users: (DONE) id username password_hash role (admin, station staff, etc) user_station_access user_id station_id can_view can_toggle_maintenance stations: id station_id is_in_maintenance is_public station_status: station_id last_status consec_offline first_offline last_conected alert_sent station_current_weather: temp dew humd wind_speed wind_gust wind_dir pressure precip_rate precip_accum uv solar Progress? I have made all the models and created basic routes. There is a CRUD (Create, Read, Update, and Delete) for the stations based on another config file. On start, the program will automatically create database entries for new stations and delete ones not in the config file."}, {"post_id": 23865, "ts": "2026-07-07T01:43:32Z", "hours": 3.6336, "text": "Monthly Reports, CSVs, and a little bit of Insanity Hey guys, I have done so much, I might go insane haha! Reports? Every first of the month at 8 AM, a email will be sent out to any emails configured for them. They contain various stats such as, which stations are down, which have been down for the longest, uptime percentage, etc. Emails So I just realized that I never explained all the different emails haha. Recipients: Admin: Email(s) configured to recieve only system error emails Global Recipients: Email(s) configured to receive all emails sent by system concerning status. Report Recipients: Email(s) configured to receive monthly emails. E.g. Mesonet maintainers Station Recipients: Email(s) configured separately for each station. E.g. station owners. Email Types: Offline: Sent after a station is recorded off 3 (default) times in a row. Recovery: Sent once a station is detected to be online after being considered offline Reminder: Sent after 7 days (default) to remind of the status. Monthly Reports: Sent at the first of the month at 8 AM (default) with statistics such as which stations had outages, the station with longest, uptime percentage for each station, etc. System Errors: Sent to system admins for any errors detected, HTTP, Requests, Time, etc. CSVs All of the data is logged on a csv as well. Not much to say Insanity Something about sitting around staring at a screen doing like 5 projects on and off makes you a little crazy…on the brightside it is my birthday tomorrow. That means more coding time! ;-;"}, {"post_id": 22449, "ts": "2026-07-04T22:24:34Z", "hours": 3.1547, "text": "Monthly Reports, Maintenance mode, and Reminder Emails: Yolo! Reports? Every month (Rn configured to be the first of the month at 8 AM) a report will be sent for all of the stations with a bunch of stats such as: Total downtime Uptime Percentage of outages Table of outages Longest outage Station with most outages etc. Reminder Emails: Once a station goes down and it has not been resolved in a set amount of days, a reminder email will be resent to the owner Maintenance Mode: Once switched on, emails about status will not be sent for that weather station. Checks will still occur in the background however. In the future, I will create an FastAPI app that will let owners trigger this mode on/off for their station. Suggestions? If you guys have any other ideas, please let me know!"}, {"post_id": 21875, "ts": "2026-07-04T01:26:13Z", "hours": 2.4442, "text": "Error Protection and CSV Logging Long time no see haha! Progress Error Protection through try/excepts and error codes Error codes were creates for the failure points. Any time there is an error, it is emailed to the “admin” email. Every whenever there is an error/email sent/status the data like the station id/name, time, status, etc. is saved (appended) to a csv. All error retry logic is modifiable through the config.py."}, {"post_id": 21793, "ts": "2026-07-03T22:06:04Z", "hours": 1.4372, "text": "IT IS WORKING!!!! Oh my god man. The email notifications were a little annoying to get finished but they are working. The image is more redacted than a Call of Duty game but it is fine. Progress Recovery emails have also been made. Everytime a station is checked, it’s “stats” (such as when their last offline was etc) are updated using a seperate json file. I have mostly spent my time on bug fixing and smoothing out the app."}, {"post_id": 21730, "ts": "2026-07-03T20:26:20Z", "hours": 3.375, "text": "Start! Hey guys! This project is all about improving the experience of personal weather station (PWS) owners. It is a webscraper checking for the status of these weather stations. After it detects it has been off for a while it will email the administrator of the network as well as the owner. (This is a summary, take a look at the project page for a better explanation ;) Progress? The station are scraped and their status is recorded Json files for the current and past status as well as other things is updated/created when the program is run Email notifications (in work) Timestamps in the right timezone (config). Several stations can be checked at once And other stuff I kinda forgot ;-;"}]...
|
Title: Weather Underground Station Status Checker Title: Weather Underground Station Status Checker by @Krupam | Stardance
Devlogs:
Start! Hey guys! This project is all about improving the experience of personal weather station (PWS) owners. It is a webscraper checking for the status of these weather stations. After it detects it has been off for a while it will email the administrator of the network as well as the owner. (This is a summary, take a look at the project page for a better explanation ;) Progress? The station are scraped and their status is recorded Json files for the current and past status as well as other things is updated/created when the program is run Email notifications (in work) Timestamps in the right timezone (config). Several stations can be checked at once And other stuff I kinda forgot ;-;
IT IS WORKING!!!! Oh my god man. The email notifications were a little annoying to get finished but they are working. The image is more redacted than a Call of Duty game but it is fine. Progress Recovery emails have also been made. Everytime a station is checked, it’s “stats” (such as when their last offline was etc) are updated using a seperate json file. I have mostly spent my time on bug fixing and smoothing out the app.
Error Protection and CSV Logging Long time no see haha! Progress Error Protection through try/excepts and error codes Error codes were creates for the failure points. Any time there is an error, it is emailed to the “admin” email. Every whenever there is an error/email sent/status the data like the station id/name, time, status, etc. is saved (appended) to a csv. All error retry logic is modifiable through the config.py.
Monthly Reports, Maintenance mode, and Reminder Emails: Yolo! Reports? Every month (Rn configured to be the first of the month at 8 AM) a report will be sent for all of the stations with a bunch of stats such as: Total downtime Uptime Percentage of outages Table of outages Longest outage Station with most outages etc. Reminder Emails: Once a station goes down and it has not been resolved in a set amount of days, a reminder email will be resent to the owner Maintenance Mode: Once switched on, emails about status will not be sent for that weather station. Checks will still occur in the background however. In the future, I will create an FastAPI app that will let owners trigger this mode on/off for their station. Suggestions? If you guys have any other ideas, please let me know!
Monthly Reports, CSVs, and a little bit of Insanity Hey guys, I have done so much, I might go insane haha! Reports? Every first of the month at 8 AM, a email will be sent out to any emails configured for them. They contain various stats such as, which stations are down, which have been down for the longest, uptime percentage, etc. Emails So I just realized that I never explained all the different emails haha. Recipients: Admin: Email(s) configured to recieve only system error emails Global Recipients: Email(s) configured to receive all emails sent by system concerning status. Report Recipients: Email(s) configured to receive monthly emails. E.g. Mesonet maintainers Station Recipients: Email(s) configured separately for each station. E.g. station owners. Email Types: Offline: Sent after a station is recorded off 3 (default) times in a row. Recovery: Sent once a station is detected to be online after being considered offline Reminder: Sent after 7 days (default) to remind of the status. Monthly Reports: Sent at the first of the month at 8 AM (default) with statistics such as which stations had outages, the station with longest, uptime percentage for each station, etc. System Errors: Sent to system admins for any errors detected, HTTP, Requests, Time, etc. CSVs All of the data is logged on a csv as well. Not much to say Insanity Something about sitting around staring at a screen doing like 5 projects on and off makes you a little crazy…on the brightside it is my birthday tomorrow. That means more coding time! ;-;
SQL Database, Website Backend, Dashboard When I said a lot last time…that was nothing compared to now ;-; What am I going on about? Well, I wanted a way for station owners to be able to be able to toggle maintenance mode without the admin (whoever deploys this for their own mesonet) directly editing a json file every time. One thing led to another and now I am making a website… Website Plan: This website will run on a FastAPI backend with either Jinja2 or Htmx front-end. There will be a public “dashboard” where anyone can take a look at general station stats and current weather conditions. The weather conditions will also be made graphical with Matplotlib. Historical data will also be accessible. However on the same site, people will be able to log in. Logged in users will be able to access only certain stations they are allotted. They will have a more detailed dashboard with more stats. Certain users will be able to toggle maintenance mode and some won’t. Admin accounts will be able to see and toggle for all stations. Usernames and passwords will be hashed and saved in the database. The log in system will also make use of cookies/sessions to keep the user logged in. Planned SQLite Models users: (DONE) id username password_hash role (admin, station staff, etc) user_station_access user_id station_id can_view can_toggle_maintenance stations: id station_id is_in_maintenance is_public station_status: station_id last_status consec_offline first_offline last_conected alert_sent station_current_weather: temp dew humd wind_speed wind_gust wind_dir pressure precip_rate precip_accum uv solar Progress? I have made all the models and created basic routes. There is a CRUD (Create, Read, Update, and Delete) for the stations based on another config file. On start, the program will automatically create database entries for new stations and delete ones not in the config file.
Website Backend, JWT, and HTML Front End Ok, these dev logs keep getting exponentially longer and longer ;-; What the hell is JWT? JWT (JSON Web Token) is a way for my authenticate a user. It essentially is how I can do logins. When a user is registered, their username and hashed password is stored in the SQL database (DB). When someone would like to authenticate, their password is hashed and sent with the username. The DB check if the username and hashed password match and send back a JWT token that expires after a set time (30 mins but configurable). During this time the user would be able access their station dashboard, etc. Admin accounts have the same log in procedure. They however have the power to give each user (based on their user id in the DB) access to specific stations. This includes the ability to see the station dashboard, toggle maintenance mode, and toggle if the station is public (on our site). Backend: Added functions for creating accounts and logging in. Most functions now require either a general account or a admin account. If this is not fulfilled a 401 error is sent (Unauthorized error). As of right now, only admins can register accounts. The access to each station can be updated by a admin at any time. I did some more stuff but I honestly forgot :) HTML Front End This was honestly my favorite part so far. I started by getting the Jinja2 template system to work as well as mounting the static directory. The layout.html file allows me to change it slightly for every page. That is a bad explanation but it is a really cool system. I got the home page done (needs some text and description but thats a later me issue). I am working on getting the general station page. It will list every station and allow you to click on them to get forwarded to that stations public dashboard. Sanity Check? I am having so much fun with HTML. It gives a certain gratification that SQL can’t give. I feel very happy :D Any ideas pls let me know!
LOGIN FORMS!!! And Station Lists… Hey guys! Whats up? I’ll tell you whats up, the moon. 😅 Dad jokes aside, I am really excited to update you. Login forms…how exciting Wait wait I can explain. It is cool I swear. When you input your credentials into the form and submit it, it will check the database (DB) if you have the right ones. If you don’t you will get the invalid screen shown below (I definitely didn’t forget my own password…). But if you put in the right credentials, you will be given a access_token cookie. This cookie will let you stay logged in till the cookie expires (set for 30 mins ). Once you are logged it, it will direct you to your account dashboard and show you all the stations you have access to. (I didn’t make that one yet but shhhhh) Station List When you click on the Weather Station tab, it will show you a list of every single weather station in the network. Something else cool, whenever you hover/click a button, it will change color. Just fun for me. Save Barnegat Bay I am building this system as a idea I had for the Save Barnegat Bay (SBB) non-profit organization. I utilize their weather stations all of the time for my projects that I love giving back to their mesonet! Once I am finished building this, you will be able to access the SBB weather stations and see weather points as well as graphs and stuff. Oop can’t spoil all of my planned features
Registration Form, Posting Status, Status History Hola guys! Registration There is now a registration form! It takes in a username and password and creates a user. However this user has no permissions and the person has to contact the admin to give them permissions. (in the future, a regular base user will still be able to do more stuff, see more detailed data maybe? But I don’t want to block data based on accounts. Maybe emails of your favorite stations?) Posting Status When the status checker runs, it will send the results over HTTP post to the database (DB) to be saved. The “current” Status DB model is overwritten by new data, but if there is a change in the status in any way, the change will be saved to the Status History DB Model. Time Another tiny detail is that before the status checker would store time in local time, but I changed that to be UTC time. UTC time is now universal and I plan to display the time in the local timezone based on the browser time zone. Easter Egg I added a easter egg in the website, I wonder if someone will find it… Thanks for reading these devlogs, this is not necessarily a fancy/flashy project and it means a lot when someone does ❤️.
Working Error Pages, User Updates, Logouts, Weather Post/Weather History and a (partial) public dashboard Been a couple of days guys, here is what I have been up to: Error Pages: Whenever there is some sort of error such as 404 (not found), 401 (unauthorized), 403 (Forbidden), you will get forwarded to error pages. These pages will prompt you to return or log in, depending on the error. User Updates: Admins can know easily update usernames, passwords, roles, etc. However this is still in the API and not a webpage yet. Logouts: When you sign in, your menu bar will no longer have a sign in option (shocker) and has an option to log out. This “new” menu bar is created using jinja2 if-statements in the layout.html. Weather/Weather History: A Weather Underground Scraper (I made this for a seperate project, check it out: https://github.com/Krupamc/weather_underground_datascraper ) gathers weather data for each station (returns a null filled json if station is offline) and posts it to the API. The API stores it in the database. We can access the current weather for each station as a well as the history. The default history is 20 entries but can be extended with queries. Public Dashboard: Now this is the fun one. This pulls the current status, weather values, time (as a date and timestamp in a readable format), as well as wind direction in label format (e.g. NNE) and sends it to the public dashboard. The dashboard then takes the values and puts them in an easy format. It is not finished, I plan to have pressure, temperature, and wind widgets that change based on the current values.
Public Dashboard and dashboard widgets!!! I had a lot of fun with this… Public Dashboard This is a public webpage anyone (no need to log in) for each station, listing the current weather conditions and status in a nice gui. In here are some widgets I made by myself all in CSS and HTML. (I don’t like JS if you couldn’t tell…) These weather values include: Temperature Dew Point Humidity Precipitation Rate Precipitation Accumulation UV Index Solar Radiation Atmospheric Pressure Wind Speed Wind Gusts Wind Direction Dashboard Widgets: I made a couple of widgets that update based on the values: Temperature Pressure Wind Temperature: A small thermometer that fills up as the temperature gets higher. (I have to rescale it for Celsius) Pressure: A small barometer that changes based on the pressure. The center pressure (29.92) is the atmospheric pressure at sea level. Wind Speed: A little compass shows the cardinal through tertiary wind directions (16 directions). The current wind is represented by the blue arrow. The arrow is where the wind is coming from (how wind is properly notated) Let Me know if you guys have any other ideas, I would love to hear em!
Owner Dashboard (WIP) and Maintenance Toggle Welcome back to a episode of me going insane! :D (jk) Owner Dashboard (WIP) The owner dashboard is a dashboard that is separate from the public dashboards. You must log in to access a page called “My Stations”. This page lists all stations that your account has permission to view. The account that you are using must have the station added by a administrator (rn all of those methods are in the docs. I plan on moving them to html soon) Purpose of Owner Dashboard The owner dashboard holds some extra functionalities based on the status: Online It will show a green or red icon based on the status (along with the circle up by the units toggle) and display the exact time and status of the station. The time of status is separate from weather. If you have the permissions to do so, you can then toggle the maintenance and public modes. (Only maintenance mode has been implemented thus far) The maintenance mode stops any emails from being sent about the station Public mode will allow the station’s public dashboard to be listed on the website. Offline: Shows everything in online*. Does not show weather data Displays how many times the station has been shown to be offline. (consecutive offline) The time of last connection. First offline (this is when the station is set as offline) If an alert email was sent Let me know if you guys have any ideas!
Owner Dashboard (finished), Maintenace and Public Toggles, Dashboard Graphs, and Graph Page (WIP) A lot has happened, lets dive into it: Owner Dashboard: This dashboard may not look very different from the public dashboard but it hold a lot more features: Status widget with the status time and last status. A green check if online or a red X if not. If offline, no weather data/widgets are shown and instead a gear widget with more information is shown. This includes if a alert was sent, last time connected, first time offline, and consecutive offline checks Maintenance and Public toggles Maintenance toggle: If in maintenance mode, no emails will be sent about the status of the station but it will still be logged. Public toggle: If off, the station will not be shown in the public dashboard list. If you try to go to the url directly it will show a “Station Not available” Page. Dashboard Graphs Graphs are created using Matplotlib and show cased on both dashboards. This includes solar, precipitation, pressure, and temperature graphs. Graphing Page (and analysis) This page is currently being worked on but will allow anyone to choose the time range, variables (yes multiple!), station, and unit. I also want to have a section for analysis like regressions and so on. Lmk how this is looking so far!
#Graphing Page!!! As well as other bug fixes… Graphing Page This page is created by making a HTML form and submitting as a POST request to the same method that creates the dashboard graphs. All the graph information is a query request (the infomation after a question mark in a url, see photo). This means you can bookmark a graph to see the most recent data with your own personal preset. The user must select the station (from a list), type a title, the time range, (last __ unit), and the variables they would like. They can choose as many variables as they would like. There are also variable type presets a user can choose. It will preset everything to make the graph including the time range and title. Once a graph is generated, it will be displayed with the options to download it as a png, download the csv data, or the clear the graph. I am working on a date range next as well as the analysis page with linear regressions, t-tests, ANOVAS, etc. Bug Fixes I had a couple of friends test out the site to find some bugs, and boy did they deliver. They managed to point out some logical errors I had, and I fixed them.
A Variable Analysis Page and Graphing with a date system! Hey guys! Here is what I have been up to… Graphing Date System: As well as a “last _ ____” system (relative range), I created a version that allows me to choose “Date Range.” Date Range allows you to choose between two dates. It sounds simple but was a lot harder to code 😅. As I wrote most of the code while being really sleep deprived, take a look over at @app.get("/graph/weather/{station_id}") on the project’s github page. (I recommend using ctrl + f to find it) Variable Analysis Page: This page is pretty similar to the graphing page (see previous devlogs) where it uses a HTML form with query variables to create calculations. The user selects a weather station, variable, range mode (relative or date), inputs for that mode (hours/date, etc) and the units. Then the latest, minimum, maximum, mean, median, range, sample value (n value), and the overall trend (falling, steady, rising, insufficient data). The time will also be shown if applicable (latest value). You can then download a csv of all the data the calculations were derived from. Under that is another box showing the full time the data is collected from as well as the units Future: I still need to add a tab for more advanced analysis such as linear regressions, anovas, t-tests, etc. If you guys have any more ideas, Let me know!!!
Testing Page (Still WIP), General Bug Fixing, and Site Cleanup Yikes, I got reaaaal close to hitting the 10 hour limit for these devlogs 😅… Site Cleanup I am really proud of this one. I finally took time to go around and get most of the small detailed squared away. I got the site favicon (small icon in the web tab) and other meta data information fixed (like the .webmanifest) working. I also spent a good chunk of time creating the home page and making it look professional. General Bug Fixing I took some time to go through the website and found some tiny bugs. I also had a few of my friends test out the website (they didnt break it!!!!). Small stuff like making it easier to see the graphs, titles on the tabs, etc. Test Page This page is like the ultimate boss for me haha. I would like this page to contain linear regressions (LR), ANOVAS, and T-tests. These are scientific tests used to find statistical differences in data. (see the below screen shot for a better explanation of all of these tests. The user chooses a station, range mode, range, units, and the type of test. Then based on that test, a few options are given: LR: X Variable Y Variable Title Mode A: Choose 1 station but two time ranges (same variable) Mode B: Choose 2 stations with one time range (same variable) ANOVA: Mode a/b Three or more time ranges/station depending on mode Two ranges/station depending on mode
Testing Page Finished! (without csvs…) HTML Form Bug Fixes: Sup guys, here is what I have been up to… Testing Page: Oh man this was pretty hard. I actually had writers block but for code. I just couldn’t think of a solution. I just sat there trying to think of how to implement the system. With enough brute force however and some breaks, I did manage to get it working. What is it? This page allows the user to run scientific tests. These tests include Linear Regressions, ANOVAS, and T-Tests. Linear Regressions look for a relationship between variables. ANOVAS and T-tests determine if there a difference between groups of data (single variable). Functionality: The form will ask the user to choose a test, station, variable, unit, and time range, as well as test-specific inputs to run a test. Once the user submits the test, it will either return a graphical result (for the Linear Regression) or stats of the T-Test or ANOVA. The Tests will only make groups depending on the same time frame but different stations. (I only decided to do one for simplicity) This all works but I need to create the ability to download the csv of the data used for the tests. General Inputs: Test Type (T-test, ANOVA, Linear Regression) Range Type: (Relative or Date) Last ___ (hours, months, etc) Start and end date Units (Imperial or metric) Test Specific Inputs: When a test is chosen, test-specific inputs appear. (this happens for other forms such as graphing and analysis pages. I just forgot to mention it) The appeared inputs are then required (like the other default inputs like time, etc) but when a different test is choosen the required inputs are updated with the new ones. These include: Linear Regression: Station X Variable Y Variable Regression T-Test: Outcome Variable Station A Station B ANOVAS: Outcome Variable Station A Station B Station C HTML Form Fixes: I went through all of the Forms that have inputs that switch and make them work nicely with the backend. I make inputs that switch be required and seen at the right time.
CSV Downloads, Weather Table, Error Details on pages, and a profile indicator! Let’s jump into it! CSV Downloads: For graphing, analysis, tests, and table pages, I created CSV downloads. Graphing: Downloads raw data Analysis: Downloads analysis summary and raw data Tests: Downloads test results and raw data Weather Tables: Downloads raw data Weather Tables: In the public dashboards, there is now a table at the bottom with all data from the current day. There are quick buttons to go forward and back a day as well as a day input and go button. Profile Indicator: It is just a blank profile picture icon with your username next to it. It only shows when logged in. When clicked it sends you to the my-stations page. Error Details: If there are specific error details in the backend, they will be sent to the error page. Otherwise a generic 40X error will be show
Admin Settings Page (WIP) Settings Page: Now that the main functionality of the site is finished, I started making HTML representations of all the methods I have predefined. This includes CRUD (create, read, update, and delete) functions for several pieces of the website. Here are the ones I started to make: Reset/Update User password, username, role. Register Users Delete User Read User Assigned Stations Grant User Access to a station Revoke User Acccess to a station Modify User Access to a station. Everything uses HTLM forms and when they submit, they will return a pop up success or error message. There are a couple of other features I forgot that I made (Such happens when coding at ungodly hours) but anyone can try out the website (if I am working on it at the same time) at https://sbb.krupamlab.com
Settings Page, API Stations List Call for Scraping System Hey! Here is what I have been up to… Settings Page: This is a Admin only page (will pop up in nav bar when admin) that configures, deletes, creates, the main functionalities. This includes stations and users. After every function is run a error/success message will show with detailed intomation depending on the function. These Functions include: Modify User: Change role, username, password Register User: Create Delete User Read User Assigned Stations: Choose a station, the page will reload and show all stations the user can access. Grant User Access: Choose a user, and give them access to a station. This is view only by default Revoke Access: Remove User access to a specific station. On reload after choosing a user it will show any assigned stations Update User Access: Choose a user, on reload it wil show all available stations and when selected, will show what access it has. You then check/uncheck the access you want it to have and submit. Modify Station: Currently only allows to change station name. Create Station: Enter new id and name as well as options to be public and in maintenance mode (default off). Delete Station: Deletes station only from the current stations. Does not delete data. I need to rewrite this to make it so it stops collecting data instead. Read all Stations: Lists all stations and if they are in maintenance or not API Stations List Call I realized around 11 at night that I did something very dumb. All of the stations in the configs for the Weather and Status scrapers were hard coded values and were NOT synced with the current stations database. To combat this, I added a new column to the Stations database table. This column was called collect_active or something of the sort. I plan to migrate the delete function to turning off the collection. I then changed the scrapers to pull a new current list at every run and used that as their truth. I finished this around 3 AM last night 😭 . If you guys have any other ideas, let me know!
Some Help and ReadMe! The project is almost done! (why do I feel like I will be saying that a lot…) Some help! Today I saw interesting post on Facebook about a website someone my age built and I commented it on it asking if I could see the code cause I was curious if they used Flask, FastAPI, etc. I also posted my project and to my surprise, the poster is actually my friend’s dad (small world am I right) and he reviewed my code and left a few issues on it. He even downloaded it to update my requirements.txt. I then merged his request. Thank you for all of your help! ReadMe: I spent all of today working on the readme, you can read it here . However here is a little sneak peak: Hey! My name is Krupam, and I am a nerd. If you are reading this, you are most likely one as well. I love weather, and learning about it. Other people who love weather will create and host Personal Weather Stations (PWS) and post the data to websites like Weather Underground. I have used these stations for my own research projects. Check one out!. In my area, there is a mesonet (regional network of PWS’s) from the Save Barnegat Bay non-profit (check them out, they are awesome!). I have used plenty of their stations in my research. I was given the amazing opportunity to present my research at one of their meetings regarding their mesonet. It was eye-opening! As I listened into the meeting, they discussed one of the current issues; they could never tell when a weather station went down. The station owners would find out days after if not weeks. This program is the solution to that and more. The system is a weather-station data platform and monitoring system. The system collects data from Weather Underground (WU), turns it into usable information, and alerts station owners and administrators when a station needs attention. All data is shown on the website in a easy, user-friendly approach. This includes dashboards, graphing, analysis, scientific tests, and admin controls (accessed through JWT-based auth). The system is coded mostly in Python and there are three main systems: The weather and status scrapers, backend, and frontend website.
Robots.txt, User login error, API security, credit footer, station hardware Whats up? Robots.txt: For those who don’t know, a “robots.txt” tells scrapers and any bots where they allowed to go on your website. I only allowed them to go on public html pages. However this is only a recommendation, the big guys can do whatever they want. User Login Error: I had this error where any public accounts (or not admins) would get a error when logging in. I was searching for permissions with the wrong column in the database 😅. API Security: I made sure there were no open routes and everything was secured. Credit Footer: This was pretty cool. At the end of ever page, I added this little footer with my name and a link to the github repo. Station Hardware: I added a new column to store station hardware info. This is mainly for what weather station model it is. Ex: Davis Vantage Pro2. I am working on making the update form in the settings page allow to update this info as well as more station info.
API Email Calls, Hardware specifications, Docker? Hey guys, School started two weeks ago, so my posts will be a little delayed lol… API Email Calls: I originally hard coded my email lists for Reports, station-specific, admin, and global emails, but I wanted to unify them with the rest of the API. I spent a lot of time creating columns in SQL, endpoint CRUD, settings HTML page CRUD, as well as changing the scrapers to pull the lists and use them. Hardware specifications: I added columns in SQL to add Hardware metadata for the stations. It can be seen in all dashboards (see photo) Docker: I was thinking of creating a docker container for this setup to make deployment easier. Would that be something you guys would like to see? Let me know.
Docker and Environment Variables Hey guys! It has been a couple of days… Time Crunch: So I looked on my calendar a week ago and realized that Stardance was almost over, and thought “this is plenty of time”. Then a couple of days ago I really felt the pressure. I wanted to get this out before the program finished so I started on the final bits and deployment to turn this into a usable system. Docker: If you don’t know what docker is, count your lucky stars. Just kidding, its very cool when it works . It is a type of virtualization (similar to VMs but instead sharing the kernal) that is a lot less resource intensive and is used for deploying a lot of small projects as well as any type of home labbing work flow (hosting your own server etc.). I have worked with docker with pre-built images and containers before and never really went into the DIY portion. This was my first intro into it and I had to do a lot of googling and the such. It was really frustrating and required quite a few head banging. NOTE: I did use AI sometimes (tried as little as I could) to get docker working. You can see me sometimes using it in my lapse recordings, but I tried to keep it closed as long as I could to stop me from using it :D. Environment Variables: I was told that hard coding my config values in a config file was a bad idea…and it makes sense. It took a bit, but once I setup environment variables, oh man did it get so much better. This also makes it a lot easier in docker to setup the container. Very happy about this. Help from a friend! I told this story a couple of weeks ago, but one of my friend’s dad found my repo and left a couple of issues on my page and these were my last two. I really gotta thank him for these ideas.
Docker Deployment (ALMOST finished) Hey guys! Docker: I am using Docker for deployment of this system to make it easy for anyone who has a weather station or network of them to showcase and monitor their own data. Docker is a type of virtualization (similar to VMs but instead sharing the kernel) that is a lot less resource intensive and is used for deploying a lot of small projects as well as any type of home labbing work flow (hosting your own server etc.). (Yes I pulled that explanation from my last devlog lmao). I will have a tutorial in the ReadME. Within the docker stack, there are several containers with different jobs and responsibilities: Web: Hosts the FastAPI webserver. It uses a endpoint (/health) to monitor the servers responses. It is hosted on port 8000 by default (configurable in the .env file). I would forward this through Nginx or a Cloudflare tunnel to host it under your own domain. Scraper: Runs the status and weather scrapers every 15 and 5 minutes (offset by two mins) respectively through a crontab file ( scraper.crontab ). It is run using Supercronic. The scraper waits for the web server as well. Flock is used to prevent two instances of a program. DB: PostgreSQL server that holds all of the data. Weather data, users, etc. All of the other containers wait till the DB is healthy to start. Db_backup: A container created by Prodrigestivill to automate backups of Postgres databases. I have it configured to keep the last month and 14 days of backups. It saves all backups to the /opt/mesonet-backups folder. I wrote scripts in order to test restoring backups (creates test table, restores using latest backup, and deletes it), create a manual backup, and restore the last backup. Email Alerts: Fairly similar to how emails are sent in the status-scraper, it obtains admin recpients from the web sever uses enviroment vairbales to send an email. It asks for subject and text using arguments in the terminal, so the user can send emails manually to admins as well. Health-tests: Runs a couple of health based scripts on a Supercronic schedule. Monthly restore test (runs the restore test mentioned before) and a daily backup health (checks how old the backup is). Emails will be sent to admins if the restore fails or the backup is more than 26 hours old. Persistent Storage: All the containers used volumes that continued even if the containers were deleted to be updated, the data (and the backups) are fine.
Map! And Develop mode Map I used ArcGIS’s JS to create a map tab that show cases all stations that have a latitude and longitude value. I am working on getting them on the first ever scrape but you can also edit them within the settings page. There is a link that takes you to the station page as well. Develop Mode Created a toggle within the .env file. If on, the program will use the SQlite db and be able to run on VS Code for example. When it is off, it needs the PostGRESql db to function. Docker Docker is really infuriating lmao. Spent most of my time fixing tiny bugs.
Weather Emails, mobile tweaks, map zoom Soooooooooooooo close to shipping. Map Zoom: The Map will now automatically zoom based the center of the points. Humidity and Dew point data collection: The place the data was being scraped from got changed so I had to update the logic. Weather Emails: Created another CRUD for another email list. This list will get a monthly email summarizing the weather for the past 30 days for each of the stations. I created the web page for it, but need to finish cleaning it up, allowing people to sign up for the service and make the emails send automaticcally. Mobile Tweaks: The mobile version of the website did not look good. I spent a lot of time trying to fix it before I was able to get it to look like this!...
|
1792799654.0079603
|
1793404454.0079603
|
|
21599
|
Untitled project by @kareem_khalil | Stardance
|
kareem_khalil
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Untitled project by @kareem_khalil | Starda Title: Untitled project by @kareem_khalil | Stardance...
|
1792799655.2559366
|
1793404455.2559366
|
|
15468
|
My first slack bot! by @Annebelle | Stardance
|
Annebelle
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My first slack bot! by @Annebelle | Stardan Title: My first slack bot! by @Annebelle | Stardance...
|
1792799656.0915492
|
1793404456.0915492
|
|
10147
|
GTM Marketing Panel by @Alex-Shick | Stardance
|
Alex-Shick
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: GTM Marketing Panel by @Alex-Shick | Starda Title: GTM Marketing Panel by @Alex-Shick | Stardance...
|
1792799656.938156
|
1793404456.938156
|
|
27653
|
Frictionless by @Awen | Stardance
|
Awen
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Frictionless by @Awen | Stardance
|
1792799657.7787917
|
1793404457.7787917
|
|
10560
|
My first slack bot! by @praveeeening | Stardance
|
praveeeening
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My first slack bot! by @praveeeening | Star Title: My first slack bot! by @praveeeening | Stardance...
|
1792799658.6305146
|
1793404458.6305146
|
|
37390
|
Untitled project by @devanshpoothia | Stardance
|
devanshpoothia
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Untitled project by @devanshpoothia | Stard Title: Untitled project by @devanshpoothia | Stardance...
|
1792799659.471659
|
1793404459.471659
|
|
2452
|
Untitled project by @axisap | Stardance
|
axisap
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Untitled project by @axisap | Stardance
|
1792799660.31252
|
1793404460.31252
|
|
35579
|
My very own WebOS by @fayaq_aerospace | Stardance
|
fayaq_aerospace
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My very own WebOS by @fayaq_aerospace | Sta Title: My very own WebOS by @fayaq_aerospace | Stardance...
|
1792799662.8323963
|
1793404462.8323963
|
|
14697
|
XR Mind Mapping by @amirmohideen | Stardance
|
amirmohideen
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: XR Mind Mapping by @amirmohideen | Stardanc Title: XR Mind Mapping by @amirmohideen | Stardance...
|
1792799663.675424
|
1793404463.675424
|
|
8506
|
My awesome macropad! by @rkiss369 | Stardance
|
rkiss369
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My awesome macropad! by @rkiss369 | Stardan Title: My awesome macropad! by @rkiss369 | Stardance...
|
1792799664.5540137
|
1793404464.5540137
|
|
9276
|
My first slack bot! by @sarthakphadtare5000 | Star My first slack bot! by @sarthakphadtare5000 | Stardance...
|
sarthakphadtare5000
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My first slack bot! by @sarthakphadtare5000 Title: My first slack bot! by @sarthakphadtare5000 | Stardance...
|
1792799665.3871882
|
1793404465.3871882
|