|
17001
|
Untitled by @ImNotIvy | Stardance
|
ImNotIvy
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Untitled by @ImNotIvy | Stardance
|
1793465356.9073653
|
1794070156.9073653
|
|
17002
|
Personal Website by @Farhan-Hamim | Stardance
|
Farhan-Hamim
|
1
|
8.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-30T03:57:48Z", "hours": 8.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made a personal website in Django, a Python framework for Web dev. Outside of the actual code, which was a combination of Python, HTML, CSS, and some JavaScript, one of the most difficult things was getting it live. Because GitHub pages only run static files such as HTML ones, it can’t display the motions and fluidity of Django. So I chose Render, but I ran into many problems with a tool I had never used before. After making some adjusts, like adding requirements and runtime text files, the website was live! Overall, I liked the experience of making a website as a way to express myself.", "repo": "https://github.com/Farhanhamim1111/Personal-Website---StarDance", "demo": "https://farhan-hamim.hackclub.app/"}]...
|
[{"post_id": 18944, "ts": "202 [{"post_id": 18944, "ts": "2026-06-30T03:50:44Z", "hours": 7.5661, "text": "Finally managed to finish my website. One of the biggest issues I encountered was designing the ‘contacts’ page. The problem was more about making it look consistent than any functionality difficulties."}]...
|
Title: Personal Website by @Farhan-Hamim | Stardan Title: Personal Website by @Farhan-Hamim | Stardance
Devlogs:
Finally managed to finish my website. One of the biggest issues I encountered was designing the ‘contacts’ page. The problem was more about making it look consistent than any functionality difficulties.
Ships:
I made a personal website in Django, a Python framework for Web dev. Outside of the actual code, which was a combination of Python, HTML, CSS, and some JavaScript, one of the most difficult things was getting it live. Because GitHub pages only run static files such as HTML ones, it can’t display the motions and fluidity of Django. So I chose Render, but I ran into many problems with a tool I had never used before. After making some adjusts, like adding requirements and runtime text files, the website was live! Overall, I liked the experience of making a website as a way to express myself....
|
1793703054.063709
|
1793789454.063709
|
|
17003
|
My very own WebOS by @grigory | Stardance
|
grigory
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My very own WebOS by @grigory | Stardance
|
1793526462.55334
|
1794131262.55334
|
|
17004
|
A WebOS for me by @Newbie | Stardance
|
Newbie
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: A WebOS for me by @Newbie | Stardance
|
1793559225.691648
|
1794164025.691648
|
|
17005
|
My awesome macropad! by @lydia | Stardance
|
lydia
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My awesome macropad! by @lydia | Stardance
|
1793479836.4877822
|
1794084636.4877822
|
|
17006
|
Cute-y by @marsal_soren_py | Stardance
|
marsal_soren_py
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Cute-y by @marsal_soren_py | Stardance
|
1793235057.4466941
|
1793839857.4466941
|
|
17007
|
investomedia by @Prathamesh | Stardance
|
Prathamesh
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: investomedia by @Prathamesh | Stardance
|
1793253143.0162277
|
1793857943.0162277
|
|
17008
|
Domoboard by @Sreekar | Stardance
|
Sreekar
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Domoboard by @Sreekar | Stardance
|
1793486902.3149693
|
1794091702.3149693
|
|
17009
|
Monster fighting rpg by @NerdySpaceDragon | Starda Monster fighting rpg by @NerdySpaceDragon | Stardance...
|
NerdySpaceDragon
|
0
|
0.74
|
0
|
[]
|
[{"post_id": 9661, "ts": "2026 [{"post_id": 9661, "ts": "2026-06-16T02:13:06Z", "hours": 0.7383, "text": "Dev Log #1 I’ve stated to work on an RPG style video game based off of my high school experience. I am currently working on setting up the player character. I have added most of the animations now. I will need to add the code to make the player actually be able to move. After working on finishing up the player, I will work on figuring out the battle mechanics. P.S. I am currently using free assets off of itch.io, they will be replaced with my own art later down the line though"}]...
|
Title: Monster fighting rpg by @NerdySpaceDragon | Title: Monster fighting rpg by @NerdySpaceDragon | Stardance
Devlogs:
Dev Log #1 I’ve stated to work on an RPG style video game based off of my high school experience. I am currently working on setting up the player character. I have added most of the animations now. I will need to add the code to make the player actually be able to move. After working on finishing up the player, I will work on figuring out the battle mechanics. P.S. I am currently using free assets off of itch.io, they will be replaced with my own art later down the line though...
|
1793501840.0386443
|
1794106640.0386443
|
|
17010
|
RawOS by @wojtek | Stardance
|
wojtek
|
0
|
1.7
|
0
|
[]
|
[{"post_id": 7845, "ts": "2026 [{"post_id": 7845, "ts": "2026-06-13T02:45:25Z", "hours": 0.9983, "text": "I made entering (web)OS animation with autotyped login :3."}, {"post_id": 7237, "ts": "2026-06-12T02:25:53Z", "hours": 0.7003, "text": "I’ve made a simple landing page, instead of using css like in the tutorial, I went with tailwind cuz im more comfortable with it and i really dislike css"}]...
|
Title: RawOS by @wojtek | Stardance
Devlogs:
I’ve Title: RawOS by @wojtek | Stardance
Devlogs:
I’ve made a simple landing page, instead of using css like in the tutorial, I went with tailwind cuz im more comfortable with it and i really dislike css
I made entering (web)OS animation with autotyped login :3....
|
1792929024.2697852
|
1793793024.2697852
|
|
17011
|
P.I.V.O.T Development Robot Lineup by @LTopCodes | P.I.V.O.T Development Robot Lineup by @LTopCodes | Stardance...
|
LTopCodes
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: P.I.V.O.T Development Robot Lineup by @LTop Title: P.I.V.O.T Development Robot Lineup by @LTopCodes | Stardance...
|
1793170256.22362
|
1793775056.22362
|
|
17012
|
Health decoder by @vatsamalakar | Stardance
|
vatsamalakar
|
2
|
2.0
|
4
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-17T19:50:21Z", "hours": 1.0, "multiplier": 2.11, "payout": 3, "blessing": "neutral", "text": "Health Decoder is an AI-powered web app that helps users understand their health insurance plans in simple, easy-to-understand language. Users can upload a PDF of their insurance policy, get a simplified summary, and ask questions about their coverage using an AI chatbot powered by Groq.", "repo": "https://github.com/vatsamalakar/HealthDecoder", "demo": "https://health-decoder-kappa.vercel.app/"}, {"ship_num": 2, "ts": "2026-06-13T20:05:23Z", "hours": 1.0, "multiplier": 1.39, "payout": 1, "blessing": "neutral", "text": "Health Decoder is an AI-powered web app that helps users understand their health insurance plans in simple, easy-to-understand language. Users can upload a PDF of their insurance policy, get a simplified summary, and ask questions about their coverage using an AI chatbot powered by Groq.", "repo": "https://github.com/vatsamalakar/HealthDecoder", "demo": "https://health-decoder-kappa.vercel.app/"}]...
|
[{"post_id": 23534, "ts": "202 [{"post_id": 23534, "ts": "2026-07-06T15:43:31Z", "hours": 1.3706, "text": "I worked on deploying Health Decoder to Vercel, making it accessible online so users can upload and decode their health insurance plans without needing to install or run the project themselves!"}, {"post_id": 8267, "ts": "2026-06-13T19:12:49Z", "hours": 0.9917, "text": "I have been working on Health Decoder which lets you add your health insurance and then you recieve a broken down response that outlines the copay, premium, coverage, and more in terms that are easier to understand. I also added an AI chatbot so that users can ask questions about their insurance plan and receive grounded answers, as the chatbot will only refer to their insurance plan when answering."}]...
|
Title: Health decoder by @vatsamalakar | Stardance Title: Health decoder by @vatsamalakar | Stardance
Devlogs:
I have been working on Health Decoder which lets you add your health insurance and then you recieve a broken down response that outlines the copay, premium, coverage, and more in terms that are easier to understand. I also added an AI chatbot so that users can ask questions about their insurance plan and receive grounded answers, as the chatbot will only refer to their insurance plan when answering.
I worked on deploying Health Decoder to Vercel, making it accessible online so users can upload and decode their health insurance plans without needing to install or run the project themselves!
Ships:
Health Decoder is an AI-powered web app that helps users understand their health insurance plans in simple, easy-to-understand language. Users can upload a PDF of their insurance policy, get a simplified summary, and ask questions about their coverage using an AI chatbot powered by Groq.
Health Decoder is an AI-powered web app that helps users understand their health insurance plans in simple, easy-to-understand language. Users can upload a PDF of their insurance policy, get a simplified summary, and ask questions about their coverage using an AI chatbot powered by Groq....
|
1793778512.8450382
|
1794642512.8450382
|
|
17013
|
FFR by @artur_cdj | Stardance
|
artur_cdj
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: FFR by @artur_cdj | Stardance
|
1793440564.6313832
|
1794045364.6313832
|
|
17014
|
My very own WebOS by @LC | Stardance
|
LC
|
0
|
0.28
|
0
|
[]
|
[{"post_id": 15180, "ts": "202 [{"post_id": 15180, "ts": "2026-06-24T17:40:02Z", "hours": 0.2806, "text": "Set up the html file with basic elements."}]...
|
Title: My very own WebOS by @LC | Stardance
Devlo Title: My very own WebOS by @LC | Stardance
Devlogs:
Set up the html file with basic elements....
|
1793480050.2790275
|
1794084850.2790275
|
|
17015
|
My first slack bot! by @2the4th | Stardance
|
2the4th
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My first slack bot! by @2the4th | Stardance
|
1793296362.786342
|
1793901162.786342
|
|
17016
|
Untitled project by @briansun | Stardance
|
briansun
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Untitled project by @briansun | Stardance
|
1793199072.9377706
|
1793803872.9377706
|
|
17017
|
EndrOS by @endr0py | Stardance
|
endr0py
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: EndrOS by @endr0py | Stardance
|
1793569706.9803824
|
1794174506.9803824
|
|
17018
|
My awesome macropad! by @briansun | Stardance
|
briansun
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My awesome macropad! by @briansun | Stardan Title: My awesome macropad! by @briansun | Stardance...
|
1793487222.304622
|
1794092022.304622
|
|
17019
|
Mathpressor by @Micah | Stardance
|
Micah
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Mathpressor by @Micah | Stardance
|
1793188384.5153277
|
1793793184.5153277
|
|
17020
|
D3D11Ex by @Rodrigo_Todescatto2010 | Stardance
|
Rodrigo_Todescatto2010
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: D3D11Ex by @Rodrigo_Todescatto2010 | Starda Title: D3D11Ex by @Rodrigo_Todescatto2010 | Stardance...
|
1793540995.1301835
|
1794145795.1301835
|
|
17021
|
DnD bot by @ximotu | Stardance
|
ximotu
|
1
|
1.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-13T20:06:34Z", "hours": 1.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made a discord bot that you can use to roll digital dice. You can roll several sizes of dice and see all commands with /dnd-help. I found it a bit difficult to use systemctl with nest since I’ve never done that before, and got confused because I put my project in /root at first. I’m proud of having learned out all of this about virtual machines, ssh, apis, nodeJS and so much more! This project should work 24/7. Keep in mind that only /d20 tracks critical hits as of right now.", "repo": "https://github.com/ximo-tu/dnd-slack-bot", "demo": "https://hackclub.slack.com/archives/C0BA6T4PG03"}]...
|
[{"post_id": 8278, "ts": "2026 [{"post_id": 8278, "ts": "2026-06-13T19:23:26Z", "hours": 0.6042, "text": "We now have support for every dice size in the actual Dungeons & Dragons"}, {"post_id": 7761, "ts": "2026-06-12T23:34:21Z", "hours": 0.5614, "text": "I made a DnD bot! Currently just supports some simple dice rolls but more to come soon."}]...
|
Title: DnD bot by @ximotu | Stardance
Devlogs:
I Title: DnD bot by @ximotu | Stardance
Devlogs:
I made a DnD bot! Currently just supports some simple dice rolls but more to come soon.
We now have support for every dice size in the actual Dungeons & Dragons
Ships:
I made a discord bot that you can use to roll digital dice. You can roll several sizes of dice and see all commands with /dnd-help. I found it a bit difficult to use systemctl with nest since I’ve never done that before, and got confused because I put my project in /root at first. I’m proud of having learned out all of this about virtual machines, ssh, apis, nodeJS and so much more! This project should work 24/7. Keep in mind that only /d20 tracks critical hits as of right now....
|
1793699782.8622863
|
1793786182.8622863
|
|
17022
|
My very own WebOS by @ichelpati | Stardance
|
ichelpati
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My very own WebOS by @ichelpati | Stardance
|
1793264001.157547
|
1793868801.157547
|
|
17023
|
Ski Game by @kushb | Stardance
|
kushb
|
0
|
4.37
|
0
|
[]
|
[{"post_id": 12821, "ts": "202 [{"post_id": 12821, "ts": "2026-06-21T00:03:48Z", "hours": 4.3711, "text": "This is my first devlog, and I decided that the most important step was to get basic player movement done, and I really wanted it to be as fluid as possible. My initial idea was to use a spherical physics collider to simulate skiing but I realized that it would bring many issues later when I wanted to fine-tune the movement. Therefore I decided to make the physics from scratch, albeit a lot simpler than the unity physics engine. I also attached a very simple first person camera to the player. Next up, I want to start making a proper scene and, if possible, a procedurally generated mountain for the player to ski down."}]...
|
Title: Ski Game by @kushb | Stardance
Devlogs:
Th Title: Ski Game by @kushb | Stardance
Devlogs:
This is my first devlog, and I decided that the most important step was to get basic player movement done, and I really wanted it to be as fluid as possible. My initial idea was to use a spherical physics collider to simulate skiing but I realized that it would bring many issues later when I wanted to fine-tune the movement. Therefore I decided to make the physics from scratch, albeit a lot simpler than the unity physics engine. I also attached a very simple first person camera to the player. Next up, I want to start making a proper scene and, if possible, a procedurally generated mountain for the player to ski down....
|
1793408040.7422845
|
1794012840.7422845
|
|
17024
|
Dog? by @bowen | Stardance
|
bowen
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Dog? by @bowen | Stardance
|
1793350416.605901
|
1793955216.605901
|
|
17025
|
My very own WebOS by @reda_elizabeth | Stardance
|
reda_elizabeth
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My very own WebOS by @reda_elizabeth | Star Title: My very own WebOS by @reda_elizabeth | Stardance...
|
1793267326.0786202
|
1793872126.0786202
|
|
17026
|
My awesome macropad! by @patelvyom_1209 | Stardanc My awesome macropad! by @patelvyom_1209 | Stardance...
|
patelvyom_1209
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My awesome macropad! by @patelvyom_1209 | S Title: My awesome macropad! by @patelvyom_1209 | Stardance...
|
1793544781.6501746
|
1794149581.6501746
|
|
17027
|
D.U.M.M.E Mk:1 by @Bregg32 | Stardance
|
Bregg32
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: D.U.M.M.E Mk:1 by @Bregg32 | Stardance
|
1793195392.5472345
|
1793800192.5472345
|
|
17028
|
MacroBar by @mixue | Stardance
|
mixue
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: MacroBar by @mixue | Stardance
|
1793224286.2921631
|
1793829086.2921631
|
|
17029
|
Pronoun Palace Music Player by @xanderath | Starda Pronoun Palace Music Player by @xanderath | Stardance...
|
xanderath
|
1
|
3.0
|
20
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-16T05:02:13Z", "hours": 3.0, "multiplier": 5.8, "payout": 20, "blessing": "neutral", "text": "As this was one of the first mods made for this game, I had to learn how the game works and how to make my mod load.", "repo": "https://github.com/Emarald64/music_player", "demo": "https://youtu.be/Y2NHza-pziE"}]...
|
[{"post_id": 9729, "ts": "2026 [{"post_id": 9729, "ts": "2026-06-16T04:50:45Z", "hours": 0.4364, "text": "added proper sprites for the cassette"}, {"post_id": 8417, "ts": "2026-06-14T00:03:20Z", "hours": 0.5031, "text": "Added animations to buttons and sound effects for clicks and the cassette flip"}, {"post_id": 8320, "ts": "2026-06-13T20:42:24Z", "hours": 2.4183, "text": "added title screen button, cassette player sprite, and music playing logic. Also made the regular songs play on side A and the the shadow songs on side B"}]...
|
Title: Pronoun Palace Music Player by @xanderath | Title: Pronoun Palace Music Player by @xanderath | Stardance
Devlogs:
added title screen button, cassette player sprite, and music playing logic. Also made the regular songs play on side A and the the shadow songs on side B
Added animations to buttons and sound effects for clicks and the cassette flip
added proper sprites for the cassette
Ships:
As this was one of the first mods made for this game, I had to learn how the game works and how to make my mod load....
|
1793717431.8821068
|
1793803831.8821068
|
|
17030
|
My awesome macropad! by @Shannon | Stardance
|
Shannon
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My awesome macropad! by @Shannon | Stardanc Title: My awesome macropad! by @Shannon | Stardance...
|
1793443763.43446
|
1794048563.43446
|
|
17031
|
My awesome macropad! by @oren_podrouzek | Stardanc My awesome macropad! by @oren_podrouzek | Stardance...
|
oren_podrouzek
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My awesome macropad! by @oren_podrouzek | S Title: My awesome macropad! by @oren_podrouzek | Stardance...
|
1793454498.4540257
|
1794059298.4540257
|
|
17032
|
My very own WebOS by @CrimsonChallenger | Stardanc My very own WebOS by @CrimsonChallenger | Stardance...
|
CrimsonChallenger
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My very own WebOS by @CrimsonChallenger | S Title: My very own WebOS by @CrimsonChallenger | Stardance...
|
1793573294.08024
|
1794178094.08024
|
|
17033
|
Untitled project by @shreyas_cheeti | Stardance
|
shreyas_cheeti
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Untitled project by @shreyas_cheeti | Stard Title: Untitled project by @shreyas_cheeti | Stardance...
|
1793321405.637968
|
1793926205.637968
|
|
17034
|
External RAM Connector by @Chinmay | Stardance
|
Chinmay
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: External RAM Connector by @Chinmay | Starda Title: External RAM Connector by @Chinmay | Stardance...
|
1793515867.2771473
|
1794120667.2771473
|
|
17035
|
Ware-on by @Lemion | Stardance
|
Lemion
|
1
|
18.96
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-21T14:26:42Z", "hours": 17.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "After way too long of trying to get basalt to stop crashing (im just stupid, basalt is a perfectly good UI library) I bring to you: warehouse management suite for ComputerCraft. Guides for using its “API” over rednet will be in readme when i get to it. Currently it does basically everything you need a storage system to do: -chuck items from input chest to a storage chest -chuck items from a storage chest to the output chest “Try Project” just leads you to a youtube video of a demo because I can’t get it to work with the copy-cat computer emulator (besides I dont think it supports peripherals anyway).", "repo": "https://github.com/LemionLaLemon/ware-on", "demo": "https://github.com/LemionLaLemon/ware-on/releases"}]...
|
[{"post_id": 25641, "ts": "202 [{"post_id": 25641, "ts": "2026-07-10T01:39:54Z", "hours": 1.965, "text": "Fixed issue #1 (large warehouses take longer than the timeout to index and would fail) No further comments, just, one simple fix so A new release has been pushed to github"}, {"post_id": 13089, "ts": "2026-06-21T12:52:15Z", "hours": 5.5503, "text": "Started and finished the software for the access computers. You can actually request items and have it be shoved into the barrel associated with the computer. And that’s also the last thing to do on this LOOONNGGGG list of stuff."}, {"post_id": 11167, "ts": "2026-06-18T08:03:30Z", "hours": 3.1186, "text": "Finished the ACTUAL server to get stuff from dropoff stations and move it into storage automatically, and when requested from an access station, move items from storage to that access station This is basically all warehouse management has to do anyways"}, {"post_id": 10734, "ts": "2026-06-17T16:49:19Z", "hours": 2.0536, "text": "finished setup program for the warehouse server"}, {"post_id": 7434, "ts": "2026-06-12T11:42:52Z", "hours": 3.7472, "text": "Finished the warehouse editor you can now pick inventories to add to the warehouse assign an inventory a type out of dropoff station, storage, and access station assign a computer to an access station inventory save warehouse assignments to a .ware file (it’s just json)"}, {"post_id": 7291, "ts": "2026-06-12T04:47:56Z", "hours": 2.8306, "text": "Added splash screen UI and the path and inventory pages for New Warehouse the path even has data validation!!!1!11!"}]...
|
Title: Ware-on by @Lemion | Stardance
Devlogs:
Ad Title: Ware-on by @Lemion | Stardance
Devlogs:
Added splash screen UI and the path and inventory pages for New Warehouse the path even has data validation!!!1!11!
Finished the warehouse editor you can now pick inventories to add to the warehouse assign an inventory a type out of dropoff station, storage, and access station assign a computer to an access station inventory save warehouse assignments to a .ware file (it’s just json)
finished setup program for the warehouse server
Finished the ACTUAL server to get stuff from dropoff stations and move it into storage automatically, and when requested from an access station, move items from storage to that access station This is basically all warehouse management has to do anyways
Started and finished the software for the access computers. You can actually request items and have it be shoved into the barrel associated with the computer. And that’s also the last thing to do on this LOOONNGGGG list of stuff.
Fixed issue #1 (large warehouses take longer than the timeout to index and would fail) No further comments, just, one simple fix so A new release has been pushed to github
Ships:
After way too long of trying to get basalt to stop crashing (im just stupid, basalt is a perfectly good UI library) I bring to you: warehouse management suite for ComputerCraft. Guides for using its “API” over rednet will be in readme when i get to it. Currently it does basically everything you need a storage system to do: -chuck items from input chest to a storage chest -chuck items from a storage chest to the output chest “Try Project” just leads you to a youtube video of a demo because I can’t get it to work with the copy-cat computer emulator (besides I dont think it supports peripherals anyway)....
|
1793703311.8774805
|
1793789711.8774805
|
|
17036
|
My awesome macropad! by @adee | Stardance
|
adee
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My awesome macropad! by @adee | Stardance
|
1793192029.6825352
|
1793796829.6825352
|
|
17037
|
My awesome macropad! by @evadiva | Stardance
|
evadiva
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My awesome macropad! by @evadiva | Stardanc Title: My awesome macropad! by @evadiva | Stardance...
|
1793353871.5057101
|
1793958671.5057101
|
|
17038
|
My first slack bot! by @oren_podrouzek | Stardance
|
oren_podrouzek
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My first slack bot! by @oren_podrouzek | St Title: My first slack bot! by @oren_podrouzek | Stardance...
|
1793418749.933541
|
1794023549.933541
|
|
17039
|
Routine Maker Tower by @Catfighter | Stardance
|
Catfighter
|
0
|
1.2
|
0
|
[]
|
[{"post_id": 7264, "ts": "2026 [{"post_id": 7264, "ts": "2026-06-12T03:38:55Z", "hours": 1.1989, "text": "Found Stardance today and got everything hooked about and made this part of my first project today. It is the base tower of my project and I also made a stopper for the bottom slit."}]...
|
Title: Routine Maker Tower by @Catfighter | Starda Title: Routine Maker Tower by @Catfighter | Stardance
Devlogs:
Found Stardance today and got everything hooked about and made this part of my first project today. It is the base tower of my project and I also made a stopper for the bottom slit....
|
1793282224.5883832
|
1793887024.5883832
|
|
17040
|
Personal Dashboard! by @evadiva | Stardance
|
evadiva
|
1
|
20.89
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-15T19:31:55Z", "hours": 19.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "This started as Canvas won’t remind me about anything type project and turned into way more hours than I meant to spend on it lol. I hope it’s useful to you too! The problem Canvas doesn’t proactively tell you about new assignments. You either check it manually and constantly, or you miss things. On top of that, the tools people actually use to manage a semester (calendar, reading list, task list, project tracker) live in five different apps with zero connection between them. This is a self-hosted, single-user desktop app that pulls all of that into one place and checks Canvas automatically so the user doesn’t have to. How to test it Download the .dmg from the Releases page and open it. Since this is an unsigned build (no Apple Developer account), macOS Gatekeeper will block a normal double-click — right-click the app → Open → confirm. This is documented in the README. First launch prompts for a name (used in the time-based greeting) and Canvas credentials. There’s a collapsible “How do I get this?” section in the onboarding screen itself that walks through generating a Canvas personal access token step by step — no need to leave the app or guess. Once connected, the dashboard populates with real Canvas assignment data, polling automatically in the background. From there, everything else is explorable: add a task to the checklist, add a reading list item by pasting a book URL (auto-fetches the cover), add a project, set a monthly goal, add a notable event with a date, start the countdown timer, drop a personal photo into the layout. The layout itself is customizable — drag widgets to reorder them, drag them between rows, and the grid auto-adjusts to fit. That’s configurable further in Settings if someone wants more control over row/column structure. Google Calendar integration is optional and also has its own in-app walkthrough for generating OAuth credentials, since that’s the one part of setup that requires an external Google Cloud step. Three major QoL improvements Automatic assignment tracking replaces manual checking. Canvas gets polled on a schedule and the dashboard reflects new assignments without the user having to open Canvas at all. One dashboard instead of five apps. Assignments, calendar, reading list, tasks, projects, goals, and a timer all live in a single always-open window instead of scattered across separate tools and browser tabs. A layout that’s actually customizable, not fixed. Most dashboard tools hand you a template. This one lets you drag widgets into your own arrangement, resize rows, and drop in your own photos, so the tool ends up looking and working like something built for the person using it, not a generic productivity template. Scope note This is intentionally a local, single-user tool; there’s no server, no accounts system, no multi-user support. Each person who runs it connects their own Canvas token and their own Google Calendar credentials, entered once during setup and stored securely on their own machine.", "repo": "https://github.com/evadiva3/personal-dashboard", "demo": "https://github.com/evadiva3/personal-dashboard/releases/tag/v0.3.1"}]...
|
[{"post_id": 63369, "ts": "202 [{"post_id": 63369, "ts": "2026-09-07T04:40:16Z", "hours": 1.89, "text": "release fix"}, {"post_id": 29108, "ts": "2026-07-15T19:27:50Z", "hours": 0.6225, "text": "devlog 007: v2 shipped this session. The launch rendering bug got fixed. Saved checklist items, along with the other affected widgets, were only appearing after new input was added rather than on initial load. The root cause was a gap between the initial data fetch and the render call — the fetch was either running before the backend health check resolved, or the render function was only ever being triggered from the “add” success path and never from the initial dashboard load. Once that was corrected, everything populates immediately on launch the way it should have from the start. Spotify got the redesign it needed. The old full iframe embed rendered Spotify’s own boxed dark player UI, which clashed with the rest of the dashboard and took up more visual weight than the widget deserved. It’s now a minimal custom player built on Spotify’s oEmbed API — just cover art and a title, no chrome, no background box, sitting flush against the card. Clicking the cover opens the playlist in the browser instead of playing inline, which is a real tradeoff, but it’s the right one for how small this widget is meant to be. Both fixes went through the full release cycle again: verified in a real running app rather than just read from source, rebuilt with cargo tauri build, and repackaged as a fresh .dmg. The build is tagged and out as v0.2.0."}, {"post_id": 28704, "ts": "2026-07-15T03:45:00Z", "hours": 3.6783, "text": "devlog 006: This session closed out the zone layout work and pushed the project to a shippable state. Zone capacity enforcement went in first. Zones now auto-expand their column count when a widget is dragged into a full row rather than rejecting the drop, capped at 4 columns before overflow gets pushed to the next zone. The reverse case also got fixed: when a widget is dragged back out of a zone that had auto-expanded to fit it, the zone shrinks back down and the remaining widgets fill the space instead of leaving a gap. That required tracking which zones were auto-expanded versus manually set in Settings, so a shrink never undoes an intentional user choice. The palette shifted from dark sepia to a lighter parchment tone this session, then got a second pass after the first attempt left text nearly unreadable against the new light background. Text colors moved to near-black warm browns, and cards got a soft brown drop shadow to give them separation from the background. A zone count mismatch between the dashboard and settings panel turned out to be two different code paths reading from two different sources of truth instead of one shared value. Fixed by routing both through the same localStorage key. The bulk of the session was a full release pass. Every feature got audited end to end, name capture and time-based greetings were added to onboarding, collapsible help sections were added explaining how to get a Canvas token and Google OAuth credentials, and the first production build shipped as an unsigned .dmg since there’s no Apple Developer account. The README got rewritten from scratch for a stranger with zero context, including the exact Gatekeeper workaround steps for opening an unsigned app on macOS. Two issues surfaced immediately after: saved checklist and widget data wasn’t rendering on launch, only appearing after new input was added, which turned out to be an initial-fetch-versus-render-on-add gap rather than a data problem. The Spotify widget also got flagged as visually heavy and is being replaced with a minimal cover-art-and-title player using Spotify’s oEmbed API instead of the full iframe. v0.2.0 is in progress to address both before the next release."}, {"post_id": 27360, "ts": "2026-07-12T21:05:09Z", "hours": 2.3975, "text": "devlog 005 This session was almost entirely layout architecture, which went through several pivots before landing somewhere that actually makes sense. The first attempt was free corner-drag resizing with a Canva-style harmonizer that would proportionally redistribute card widths after every drop or resize. The harmonizer worked in isolation but broke down in practice because SortableJS and flex-wrap fight each other on drop target resolution; the visual drop position and the DOM reorder disagree when cards have arbitrary widths. After two iterations trying to patch that, I scrapped it. The replacement is a zone-based layout system. The dashboard is divided into horizontal zones, each zone being an independent row with its own column count and height. Zone 1 might have 3 columns, zone 2 might have 2, zone 3 might have 4; each is configured independently in the settings panel. Widgets drag freely within and between zones via SortableJS with cross-group drag enabled. The settings panel has a miniature zone editor with draggable column dividers to set proportional widths, height inputs per zone, and add/remove zone controls. All changes apply live to the dashboard without a save button. Zone definitions persist to localStorage, widget positions to the SQLite layout table. The immediate open issue is that zones don’t currently enforce their column cap, so widgets can overflow past the zone boundary when dragged in. The fix is straightforward: SortableJS onAdd callback checks current child count against cols, bounces the card back to the source zone if the zone is full, and briefly flashes the target zone border to signal the rejection. Settings col count reductions that would orphan widgets push the overflow to the next zone automatically. That fix is going in next. Photos are first-class zone items. Height snapping (200/400/500px presets) applies via right-click menu. The snap guide lines and settings inputs from the previous session carried over."}, {"post_id": 21884, "ts": "2026-07-04T01:52:16Z", "hours": 1.5939, "text": "Devlog 004: This session was mostly infrastructure and debugging rather than new features, but it cleared several blockers that had been compounding across sessions. The backend crash loop got permanently fixed. The root cause was _exit_if_orphaned in the Python process firing on every Rust hot-reload during npm run tauri dev. When Cargo rebuilds the Tauri binary, the parent PID relationship changes momentarily, which was triggering the orphan detection and killing Python deliberately with exit code 0. The monitor thread interpreted that as a clean exit and did not restart it. The fix was disabling orphan detection entirely in dev mode via the CANVAS_HUB_DEV environment variable, and switching the production check from getppid() == 1 to os.kill(parent_pid, 0) for a more robust existence check. The Rust monitor thread also got crash logging via dirs::home_dir() so it is no longer dependent on the Tauri AppHandle being available from a background thread. Tile resizing and photo row contagion were also fixed this session, and the actual root causes turned out to be completely different from where previous fixes were looking. The resize buttons were never broken at the event handling level. The real problem was an init race condition: renderPhotos() was fetching /photos before the backend was up, throwing an unhandled error, and killing the rest of initDashboard() before initResizeControls() ever ran. A waitForBackend() health poll now gates all data fetches, so resize listeners are always wired up regardless of how long the backend takes to start. The photo row contagion was caused by height: 100% on the photo resolving to the image’s natural aspect-ratio height during grid track sizing, inflating the row for every neighbor. Switching to position: absolute; inset: 0 on the image fixes the height to the tile bounds and removes it from the track sizing calculation entirely. Goals this month is now its own separate widget card, extracted from the assignments card where it had been living under a rule separator."}, {"post_id": 20210, "ts": "2026-07-01T19:16:43Z", "hours": 2.5761, "text": "devlog #004: This session was a chaotic debugging spiral. I set out to finish the draggable grid, but the layout engine absolutely broke.In trying to fix some initial resizing glitches, I overcorrected so hard that I accidentally locked the entire grid down. Nothing could resize at all. Once I untangled that, I hit a new nightmare: whenever I tried to drag a widget, it would interpret the movement as a resize command and stretch wildly across the screen instead of moving.The fixes: 1. Unlocked the layout logic so widgets can actually scale again. 2. Fixed the drag vs. resize conflict. Now, dragging the header moves the widget smoothly, and edge-pulling handles the resizing. No more morphing. It was an exhausting troubleshooting session, but the grid is finally stable."}, {"post_id": 17407, "ts": "2026-06-28T05:30:17Z", "hours": 2.4019, "text": "devlog 003: personal dashboard Mostly a fixes session. Nothing new shipped but a lot of things that were broken or annoying got resolved. The calendar was the biggest one. It had been crammed into a half-width column sharing space with the timer and reading list, which made the weekly view basically unusable. It now takes up the full right two-thirds of the screen, which is what it needed to actually function as a calendar. Time blocks, day columns, navigation arrows, auto-scroll to the current hour on load. It looks right now. Google Calendar auth also finally works. The onboarding screen had appeared once, I hit “later,” and the flag that tracks whether it had been seen was permanently set with no way to reset it from the UI. A connect button in settings now clears that flag and shows the onboarding immediately, no restart needed. Went through the actual browser consent flow and it works: browser opens, redirect hits the loopback server, token stores correctly. Two bugs on the smaller side. The photo picker was freezing the app completely because the file dialog was running on the main Tauri thread using the blocking API variant instead of the async one. One-line fix once the cause was clear. The calendar time labels were getting clipped by overflow collapsing the absolute-positioned label column. Widening the column tracks from 36px to 48px cleared it. Spotify got shrunk. It was taking up a full-width row with nothing in it. Now it is a compact 80px cell in the top strip next to the timer and reading list, which is the right amount of space for it. Next session: draggable grid with persistent layout."}, {"post_id": 14807, "ts": "2026-06-24T01:31:56Z", "hours": 1.6436, "text": "devlog 002: personal dashboard The dashboard is starting to look good!!! The biggest change was pulling the pink theme entirely and replacing it with a warm sepia palette: dark brown base, aged gold accents, serif headers on everything. I wanted it to feel a little more academic. The layout also got reworked into an asymmetric bento grid, where Canvas takes up a tall left column, the calendar strip runs wide across the bottom right, and the smaller widgets fill in around them. New widgets added this session: a reading list that resolves book covers from whatever URL you paste in (it checks for an Open Graph image tag first, then falls back to the Google Books API if that fails), an active projects tracker, monthly goals that scope themselves to the current month without deleting older ones, notable events displayed as date pills, a countdown timer that fires a native desktop notification when it hits zero, and photo panels that slot into the bento grid as pure image tiles with no widget chrome around them. Spotify was simpler than expected. The embedded player works fine once you add Spotify’s domain to the Tauri Content Security Policy config. Without that one line, the iframe loads blank with no error, which took a minute to figure out. Google Calendar had been stuck because the onboarding screen appeared once, I dismissed it with “later,” and there was no way back to it. Connect and disconnect controls are now in the settings page, so that’s no longer a dead end. The one remaining item for Google Calendar is entering real credentials from the Google Cloud Console and completing an actual browser OAuth consent flow."}, {"post_id": 13491, "ts": "2026-06-22T02:42:16Z", "hours": 3.8283, "text": "devlog 001: personal dashboard got a working desktop app running by end of session. the whole point was to stop missing Canvas assignments; one screen, always open, checks automatically. backend is FastAPI running as a sidecar inside a Tauri shell, SQLite for storage, APScheduler polling Canvas every 30 minutes. token lives in the OS keychain, never the repo. first-run onboarding handles the whole flow. the bugs took most of the time. CORS was failing because Tauri dev mode sends a different webview origin than a production build; nothing in the docs tells you this. the /setup endpoint would silently hang because there was no timeout on the Canvas validation request. the dashboard never appeared after login because a display: flex rule was winning over the hidden attribute, so onboarding just stayed on screen even after auth worked fine. and at some point the app started spawning duplicate processes with separate backends, which needed single-instance enforcement to fix. real credentials work, assignments load from the live API, checklist survives restarts. it’s on GitHub. palette is plum and pink, pulled from my VS Code theme. next up is Google Calendar."}]...
|
Title: Personal Dashboard! by @evadiva | Stardance Title: Personal Dashboard! by @evadiva | Stardance
Devlogs:
devlog 001: personal dashboard got a working desktop app running by end of session. the whole point was to stop missing Canvas assignments; one screen, always open, checks automatically. backend is FastAPI running as a sidecar inside a Tauri shell, SQLite for storage, APScheduler polling Canvas every 30 minutes. token lives in the OS keychain, never the repo. first-run onboarding handles the whole flow. the bugs took most of the time. CORS was failing because Tauri dev mode sends a different webview origin than a production build; nothing in the docs tells you this. the /setup endpoint would silently hang because there was no timeout on the Canvas validation request. the dashboard never appeared after login because a display: flex rule was winning over the hidden attribute, so onboarding just stayed on screen even after auth worked fine. and at some point the app started spawning duplicate processes with separate backends, which needed single-instance enforcement to fix. real credentials work, assignments load from the live API, checklist survives restarts. it’s on GitHub. palette is plum and pink, pulled from my VS Code theme. next up is Google Calendar.
devlog 002: personal dashboard The dashboard is starting to look good!!! The biggest change was pulling the pink theme entirely and replacing it with a warm sepia palette: dark brown base, aged gold accents, serif headers on everything. I wanted it to feel a little more academic. The layout also got reworked into an asymmetric bento grid, where Canvas takes up a tall left column, the calendar strip runs wide across the bottom right, and the smaller widgets fill in around them. New widgets added this session: a reading list that resolves book covers from whatever URL you paste in (it checks for an Open Graph image tag first, then falls back to the Google Books API if that fails), an active projects tracker, monthly goals that scope themselves to the current month without deleting older ones, notable events displayed as date pills, a countdown timer that fires a native desktop notification when it hits zero, and photo panels that slot into the bento grid as pure image tiles with no widget chrome around them. Spotify was simpler than expected. The embedded player works fine once you add Spotify’s domain to the Tauri Content Security Policy config. Without that one line, the iframe loads blank with no error, which took a minute to figure out. Google Calendar had been stuck because the onboarding screen appeared once, I dismissed it with “later,” and there was no way back to it. Connect and disconnect controls are now in the settings page, so that’s no longer a dead end. The one remaining item for Google Calendar is entering real credentials from the Google Cloud Console and completing an actual browser OAuth consent flow.
devlog 003: personal dashboard Mostly a fixes session. Nothing new shipped but a lot of things that were broken or annoying got resolved. The calendar was the biggest one. It had been crammed into a half-width column sharing space with the timer and reading list, which made the weekly view basically unusable. It now takes up the full right two-thirds of the screen, which is what it needed to actually function as a calendar. Time blocks, day columns, navigation arrows, auto-scroll to the current hour on load. It looks right now. Google Calendar auth also finally works. The onboarding screen had appeared once, I hit “later,” and the flag that tracks whether it had been seen was permanently set with no way to reset it from the UI. A connect button in settings now clears that flag and shows the onboarding immediately, no restart needed. Went through the actual browser consent flow and it works: browser opens, redirect hits the loopback server, token stores correctly. Two bugs on the smaller side. The photo picker was freezing the app completely because the file dialog was running on the main Tauri thread using the blocking API variant instead of the async one. One-line fix once the cause was clear. The calendar time labels were getting clipped by overflow collapsing the absolute-positioned label column. Widening the column tracks from 36px to 48px cleared it. Spotify got shrunk. It was taking up a full-width row with nothing in it. Now it is a compact 80px cell in the top strip next to the timer and reading list, which is the right amount of space for it. Next session: draggable grid with persistent layout.
devlog #004: This session was a chaotic debugging spiral. I set out to finish the draggable grid, but the layout engine absolutely broke.In trying to fix some initial resizing glitches, I overcorrected so hard that I accidentally locked the entire grid down. Nothing could resize at all. Once I untangled that, I hit a new nightmare: whenever I tried to drag a widget, it would interpret the movement as a resize command and stretch wildly across the screen instead of moving.The fixes: 1. Unlocked the layout logic so widgets can actually scale again. 2. Fixed the drag vs. resize conflict. Now, dragging the header moves the widget smoothly, and edge-pulling handles the resizing. No more morphing. It was an exhausting troubleshooting session, but the grid is finally stable.
Devlog 004: This session was mostly infrastructure and debugging rather than new features, but it cleared several blockers that had been compounding across sessions. The backend crash loop got permanently fixed. The root cause was _exit_if_orphaned in the Python process firing on every Rust hot-reload during npm run tauri dev. When Cargo rebuilds the Tauri binary, the parent PID relationship changes momentarily, which was triggering the orphan detection and killing Python deliberately with exit code 0. The monitor thread interpreted that as a clean exit and did not restart it. The fix was disabling orphan detection entirely in dev mode via the CANVAS_HUB_DEV environment variable, and switching the production check from getppid() == 1 to os.kill(parent_pid, 0) for a more robust existence check. The Rust monitor thread also got crash logging via dirs::home_dir() so it is no longer dependent on the Tauri AppHandle being available from a background thread. Tile resizing and photo row contagion were also fixed this session, and the actual root causes turned out to be completely different from where previous fixes were looking. The resize buttons were never broken at the event handling level. The real problem was an init race condition: renderPhotos() was fetching /photos before the backend was up, throwing an unhandled error, and killing the rest of initDashboard() before initResizeControls() ever ran. A waitForBackend() health poll now gates all data fetches, so resize listeners are always wired up regardless of how long the backend takes to start. The photo row contagion was caused by height: 100% on the photo resolving to the image’s natural aspect-ratio height during grid track sizing, inflating the row for every neighbor. Switching to position: absolute; inset: 0 on the image fixes the height to the tile bounds and removes it from the track sizing calculation entirely. Goals this month is now its own separate widget card, extracted from the assignments card where it had been living under a rule separator.
devlog 005 This session was almost entirely layout architecture, which went through several pivots before landing somewhere that actually makes sense. The first attempt was free corner-drag resizing with a Canva-style harmonizer that would proportionally redistribute card widths after every drop or resize. The harmonizer worked in isolation but broke down in practice because SortableJS and flex-wrap fight each other on drop target resolution; the visual drop position and the DOM reorder disagree when cards have arbitrary widths. After two iterations trying to patch that, I scrapped it. The replacement is a zone-based layout system. The dashboard is divided into horizontal zones, each zone being an independent row with its own column count and height. Zone 1 might have 3 columns, zone 2 might have 2, zone 3 might have 4; each is configured independently in the settings panel. Widgets drag freely within and between zones via SortableJS with cross-group drag enabled. The settings panel has a miniature zone editor with draggable column dividers to set proportional widths, height inputs per zone, and add/remove zone controls. All changes apply live to the dashboard without a save button. Zone definitions persist to localStorage, widget positions to the SQLite layout table. The immediate open issue is that zones don’t currently enforce their column cap, so widgets can overflow past the zone boundary when dragged in. The fix is straightforward: SortableJS onAdd callback checks current child count against cols, bounces the card back to the source zone if the zone is full, and briefly flashes the target zone border to signal the rejection. Settings col count reductions that would orphan widgets push the overflow to the next zone automatically. That fix is going in next. Photos are first-class zone items. Height snapping (200/400/500px presets) applies via right-click menu. The snap guide lines and settings inputs from the previous session carried over.
devlog 006: This session closed out the zone layout work and pushed the project to a shippable state. Zone capacity enforcement went in first. Zones now auto-expand their column count when a widget is dragged into a full row rather than rejecting the drop, capped at 4 columns before overflow gets pushed to the next zone. The reverse case also got fixed: when a widget is dragged back out of a zone that had auto-expanded to fit it, the zone shrinks back down and the remaining widgets fill the space instead of leaving a gap. That required tracking which zones were auto-expanded versus manually set in Settings, so a shrink never undoes an intentional user choice. The palette shifted from dark sepia to a lighter parchment tone this session, then got a second pass after the first attempt left text nearly unreadable against the new light background. Text colors moved to near-black warm browns, and cards got a soft brown drop shadow to give them separation from the background. A zone count mismatch between the dashboard and settings panel turned out to be two different code paths reading from two different sources of truth instead of one shared value. Fixed by routing both through the same localStorage key. The bulk of the session was a full release pass. Every feature got audited end to end, name capture and time-based greetings were added to onboarding, collapsible help sections were added explaining how to get a Canvas token and Google OAuth credentials, and the first production build shipped as an unsigned .dmg since there’s no Apple Developer account. The README got rewritten from scratch for a stranger with zero context, including the exact Gatekeeper workaround steps for opening an unsigned app on macOS. Two issues surfaced immediately after: saved checklist and widget data wasn’t rendering on launch, only appearing after new input was added, which turned out to be an initial-fetch-versus-render-on-add gap rather than a data problem. The Spotify widget also got flagged as visually heavy and is being replaced with a minimal cover-art-and-title player using Spotify’s oEmbed API instead of the full iframe. v0.2.0 is in progress to address both before the next release.
devlog 007: v2 shipped this session. The launch rendering bug got fixed. Saved checklist items, along with the other affected widgets, were only appearing after new input was added rather than on initial load. The root cause was a gap between the initial data fetch and the render call — the fetch was either running before the backend health check resolved, or the render function was only ever being triggered from the “add” success path and never from the initial dashboard load. Once that was corrected, everything populates immediately on launch the way it should have from the start. Spotify got the redesign it needed. The old full iframe embed rendered Spotify’s own boxed dark player UI, which clashed with the rest of the dashboard and took up more visual weight than the widget deserved. It’s now a minimal custom player built on Spotify’s oEmbed API — just cover art and a title, no chrome, no background box, sitting flush against the card. Clicking the cover opens the playlist in the browser instead of playing inline, which is a real tradeoff, but it’s the right one for how small this widget is meant to be. Both fixes went through the full release cycle again: verified in a real running app rather than just read from source, rebuilt with cargo tauri build, and repackaged as a fresh .dmg. The build is tagged and out as v0.2.0.
release fix
Ships:
This started as Canvas won’t remind me about anything type project and turned into way more hours than I meant to spend on it lol. I hope it’s useful to you too! The problem Canvas doesn’t proactively tell you about new assignments. You either check it manually and constantly, or you miss things. On top of that, the tools people actually use to manage a semester (calendar, reading list, task list, project tracker) live in five different apps with zero connection between them. This is a self-hosted, single-user desktop app that pulls all of that into one place and checks Canvas automatically so the user doesn’t have to. How to test it Download the .dmg from the Releases page and open it. Since this is an unsigned build (no Apple Developer account), macOS Gatekeeper will block a normal double-click — right-click the app → Open → confirm. This is documented in the README. First launch prompts for a name (used in the time-based greeting) and Canvas credentials. There’s a collapsible “How do I get this?” section in the onboarding screen itself that walks through generating a Canvas personal access token step by step — no need to leave the app or guess. Once connected, the dashboard populates with real Canvas assignment data, polling automatically in the background. From there, everything else is explorable: add a task to the checklist, add a reading list item by pasting a book URL (auto-fetches the cover), add a project, set a monthly goal, add a notable event with a date, start the countdown timer, drop a personal photo into the layout. The layout itself is customizable — drag widgets to reorder them, drag them between rows, and the grid auto-adjusts to fit. That’s configurable further in Settings if someone wants more control over row/column structure. Google Calendar integration is optional and also has its own in-app walkthrough for generating OAuth credentials, since that’s the one part of setup that requires an external Google Cloud step. Three major QoL improvements Automatic assignment tracking replaces manual checking. Canvas gets polled on a schedule and the dashboard reflects new assignments without the user having to open Canvas at all. One dashboard instead of five apps. Assignments, calendar, reading list, tasks, projects, goals, and a timer all live in a single always-open window instead of scattered across separate tools and browser tabs. A layout that’s actually customizable, not fixed. Most dashboard tools hand you a template. This one lets you drag widgets into your own arrangement, resize rows, and drop in your own photos, so the tool ends up looking and working like something built for the person using it, not a generic productivity template. Scope note This is intentionally a local, single-user tool; there’s no server, no accounts system, no multi-user support. Each person who runs it connects their own Canvas token and their own Google Calendar credentials, entered once during setup and stored securely on their own machine....
|
1793746220.6002584
|
1793832620.6002584
|
|
17041
|
My first slack bot! by @Aarush-_- | Stardance
|
Aarush-_-
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My first slack bot! by @Aarush-_- | Stardan Title: My first slack bot! by @Aarush-_- | Stardance...
|
1793209888.9826677
|
1793814688.9826677
|
|
17042
|
Untitled by @dh | Stardance
|
dh
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Untitled by @dh | Stardance
|
1793371696.7122233
|
1793976496.7122233
|
|
17043
|
Nulltide by @Cassetu | Stardance
|
Cassetu
|
0
|
0.0
|
0
|
[]
|
[{"post_id": 7260, "ts": "2026 [{"post_id": 7260, "ts": "2026-06-12T03:33:59Z", "hours": 0.0, "text": "And so it begins… Just got the basic stuff laid down."}]...
|
Title: Nulltide by @Cassetu | Stardance
Devlogs:
Title: Nulltide by @Cassetu | Stardance
Devlogs:
And so it begins… Just got the basic stuff laid down....
|
1792936279.1688664
|
1793800279.1688664
|
|
17044
|
Untitled by @Catfighter | Stardance
|
Catfighter
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Untitled by @Catfighter | Stardance
|
1793184940.2217062
|
1793789740.2217062
|
|
17045
|
Zenith by @xeno3ra | Stardance
|
xeno3ra
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Zenith by @xeno3ra | Stardance
|
1793210070.759751
|
1793814870.759751
|
|
17046
|
The balancer by @Pocat | Stardance
|
Pocat
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: The balancer by @Pocat | Stardance
|
1793296228.097386
|
1793901028.097386
|
|
17047
|
Forgotten Cities by @angel_gorcas | Stardance
|
angel_gorcas
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Forgotten Cities by @angel_gorcas | Stardan Title: Forgotten Cities by @angel_gorcas | Stardance...
|
1793552177.0959077
|
1794156977.0959077
|
|
17048
|
Boid Dodger by @Tyler | Stardance
|
Tyler
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Boid Dodger by @Tyler | Stardance
|
1793224197.890767
|
1793828997.890767
|
|
17049
|
Deckadence by @adobhi | Stardance
|
adobhi
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Deckadence by @adobhi | Stardance
|
1793242450.090822
|
1793847250.090822
|
|
17050
|
My awesome macropad! by @avisha_jaiin | Stardance
|
avisha_jaiin
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My awesome macropad! by @avisha_jaiin | Sta Title: My awesome macropad! by @avisha_jaiin | Stardance...
|
1793242111.2100391
|
1793846911.2100391
|