|
17301
|
explore.space by @Benno | Stardance
|
Benno
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: explore.space by @Benno | Stardance
|
1793303327.7849944
|
1793908127.7849944
|
|
17302
|
Frictionless by @ryanjetplane1 | Stardance
|
ryanjetplane1
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Frictionless by @ryanjetplane1 | Stardance
|
1793843435.6975465
|
1794448235.6975465
|
|
17303
|
Untitled project by @marina_pinolescudero | Starda Untitled project by @marina_pinolescudero | Stardance...
|
marina_pinolescudero
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Untitled project by @marina_pinolescudero | Title: Untitled project by @marina_pinolescudero | Stardance...
|
1793504891.297722
|
1794109691.297722
|
|
17304
|
Piston AI 5.0 by @milo0622 | Stardance
|
milo0622
|
0
|
62.8
|
0
|
[]
|
[{"post_id": 63474, "ts": "202 [{"post_id": 63474, "ts": "2026-09-07T11:01:07Z", "hours": 11.7681, "text": "Changelog ( e5c7d57 ) feat(media): Add playpause detection support on Windows ( 0fcef7d ) perf(import): Optimize term.py import speed ( 170bc09 ) fix(media): Fix import error of GlobalSystemMediaTransportControlsSessionManager ( 8ed4032 ) fix(media): Fix media import error and missing requirements ( 7bd359e ) fix(setup): Fix package installation ignorance of pip install ( a4e7bac ) feat(setup): Add argument to setup.py to skip package installation and jump directly to configuration page ( 62f5600 ) feat(setup): Add Windows automated setup installation ( dd043e5 ) feat(media): Add capability to read playing media on macOS and Windows ( e902e62 ) chore(readme): Change minimum Python version to 3.11 ( 3011897 ) fix(setup): Fix setup not exiting after Python version mismatch Piston AI can finally execute two tools with one single response without crashing!"}, {"post_id": 48259, "ts": "2026-08-16T15:47:14Z", "hours": 2.0331, "text": "Commits fo rthe last 2 hours: Commit 18a60f0 : fix(setup): Fix unfinished function Commit e3f2966 : chore(readme): Add README.md file and is almost ready to ship"}, {"post_id": 37617, "ts": "2026-07-30T14:09:33Z", "hours": 5.0208, "text": "Commits for the last ~5 hours: Commit a1b0e6 : feat(setup script): Add setup script to Piston AI Commit aed445f : fix(media): Add OS check before importing libraries Commit e1b9ec4 : fix(error): Fix error handling in agent.py Commit 0cdce18 : fix(wakeword): Fix wakeword initialization error on Linux devices Commit a80cd11 : fix(media): Fix media playback error for Linux and Add distro-specific packages for setup script b212ec3 : fix(setup): Fix unassociated API variable in setup.py Commit 0f9ba15 : fix(ignored file): Remove .env file from files and previous staged changes Commit 9c1251f : fix(setup): Fix non-iterable error in setup.py Commit 8649126 : fix(requirements file): Remove unused dependencies from requirements.txt and remove useless pycache Commit 84a4d9c : refactor(useless files): Remove unused depencies from requirements.txt and untrack useless pycache files from gitignore"}, {"post_id": 37042, "ts": "2026-07-29T14:43:35Z", "hours": 11.8947, "text": "Commits for the last 11.5 hours: Commit 927f3ba : feat(agent): add multi-provider support via LiteLLM Commit 3502eda : fix(weather fetch): Fix city name overwritting error Commit 3671e97 : feat(pull): Add API for pulling files directly from GitHub/internet Commit 98d8cc3 : feat(connectivity): Add connectivity checking to system health check and file download module Commit fca6563 : feat(system prompt): Prompt AI to add [OPEN] and [CLOSE] tags to every conversation for better STT Commit ee37f75 : feat(STT improvement): Add open return bool to main.py from agent.py to confirm STT continuity Commit 4231249 : feat(SFX): Implement sound effects back to main.py Commit df836eb : fix(library import): Remove the import of a deleted module (normal.py) Commit 90b6028 : feat(providers list): Add automatic fetching when providers file is not found Commit ca73e74 : feat(tools): Add clipboard manager and connectivity check tools to Piston AI Commit 3eac0f4 : feat(thinking mode): Add structurized thinking responses for supported models Commit d55c4d4 : refactor(connectivity): Remove useless file Commit 2b519df : feat(ytdlp): Add YouTube Music playback support to Piston AI Commit 67da465 : feat(continuous tool calling): Add continuous tool calling to call more than one function per request Commit 655312e : feat(provider): Add NVIDIA support Commit ed53111 : fix(websearch): Recover websearch tool back Commit 11bd96f : feat(providers): Add support to using .env files instead of editing the providers.json file Commit f17cc42 : fix(tool calling): Fix infinite tool calling bug"}, {"post_id": 34431, "ts": "2026-07-25T04:09:23Z", "hours": 10.0558, "text": "Commit messages in the past 9 hours: Commit cbb3ecc : feat(wakeword): Add wakeword engine (openwakeword) Commit 927f3ba : feat(agent): add multi-provider support via LiteLLM Rewrite agent logic to support dynamic provider switching using LiteLLM endpoints. Add provider and tool configuration files (providers.json, tool.json). Commit 3502eda fix(weather fetch): Fix city name overwritting error"}, {"post_id": 33032, "ts": "2026-07-22T16:18:56Z", "hours": 9.81, "text": "In this 9 hours of work, I’ve rewritten Piston AI… Again. But this, time, OOP is used much more than before, and more stable, with Jarvis’ voice, with British accents :)"}, {"post_id": 9232, "ts": "2026-06-15T14:38:10Z", "hours": 12.2214, "text": "I’m rlly sorry that I haven’t posted a devlog for a long time. But in the last 12 hours, I’ve used Python to add tools to the AI, STT and TTS to the whole program! My efficiency is sometimes low, so forgive me for not posting a devlog for this long Tools added to Piston AI: web search, weather fetching"}]...
|
Title: Piston AI 5.0 by @milo0622 | Stardance
Dev Title: Piston AI 5.0 by @milo0622 | Stardance
Devlogs:
I’m rlly sorry that I haven’t posted a devlog for a long time. But in the last 12 hours, I’ve used Python to add tools to the AI, STT and TTS to the whole program! My efficiency is sometimes low, so forgive me for not posting a devlog for this long Tools added to Piston AI: web search, weather fetching
In this 9 hours of work, I’ve rewritten Piston AI… Again. But this, time, OOP is used much more than before, and more stable, with Jarvis’ voice, with British accents :)
Commit messages in the past 9 hours: Commit cbb3ecc : feat(wakeword): Add wakeword engine (openwakeword) Commit 927f3ba : feat(agent): add multi-provider support via LiteLLM Rewrite agent logic to support dynamic provider switching using LiteLLM endpoints. Add provider and tool configuration files (providers.json, tool.json). Commit 3502eda fix(weather fetch): Fix city name overwritting error
Commits for the last 11.5 hours: Commit 927f3ba : feat(agent): add multi-provider support via LiteLLM Commit 3502eda : fix(weather fetch): Fix city name overwritting error Commit 3671e97 : feat(pull): Add API for pulling files directly from GitHub/internet Commit 98d8cc3 : feat(connectivity): Add connectivity checking to system health check and file download module Commit fca6563 : feat(system prompt): Prompt AI to add [OPEN] and [CLOSE] tags to every conversation for better STT Commit ee37f75 : feat(STT improvement): Add open return bool to main.py from agent.py to confirm STT continuity Commit 4231249 : feat(SFX): Implement sound effects back to main.py Commit df836eb : fix(library import): Remove the import of a deleted module (normal.py) Commit 90b6028 : feat(providers list): Add automatic fetching when providers file is not found Commit ca73e74 : feat(tools): Add clipboard manager and connectivity check tools to Piston AI Commit 3eac0f4 : feat(thinking mode): Add structurized thinking responses for supported models Commit d55c4d4 : refactor(connectivity): Remove useless file Commit 2b519df : feat(ytdlp): Add YouTube Music playback support to Piston AI Commit 67da465 : feat(continuous tool calling): Add continuous tool calling to call more than one function per request Commit 655312e : feat(provider): Add NVIDIA support Commit ed53111 : fix(websearch): Recover websearch tool back Commit 11bd96f : feat(providers): Add support to using .env files instead of editing the providers.json file Commit f17cc42 : fix(tool calling): Fix infinite tool calling bug
Commits for the last ~5 hours: Commit a1b0e6 : feat(setup script): Add setup script to Piston AI Commit aed445f : fix(media): Add OS check before importing libraries Commit e1b9ec4 : fix(error): Fix error handling in agent.py Commit 0cdce18 : fix(wakeword): Fix wakeword initialization error on Linux devices Commit a80cd11 : fix(media): Fix media playback error for Linux and Add distro-specific packages for setup script b212ec3 : fix(setup): Fix unassociated API variable in setup.py Commit 0f9ba15 : fix(ignored file): Remove .env file from files and previous staged changes Commit 9c1251f : fix(setup): Fix non-iterable error in setup.py Commit 8649126 : fix(requirements file): Remove unused dependencies from requirements.txt and remove useless pycache Commit 84a4d9c : refactor(useless files): Remove unused depencies from requirements.txt and untrack useless pycache files from gitignore
Commits fo rthe last 2 hours: Commit 18a60f0 : fix(setup): Fix unfinished function Commit e3f2966 : chore(readme): Add README.md file and is almost ready to ship
Changelog ( e5c7d57 ) feat(media): Add playpause detection support on Windows ( 0fcef7d ) perf(import): Optimize term.py import speed ( 170bc09 ) fix(media): Fix import error of GlobalSystemMediaTransportControlsSessionManager ( 8ed4032 ) fix(media): Fix media import error and missing requirements ( 7bd359e ) fix(setup): Fix package installation ignorance of pip install ( a4e7bac ) feat(setup): Add argument to setup.py to skip package installation and jump directly to configuration page ( 62f5600 ) feat(setup): Add Windows automated setup installation ( dd043e5 ) feat(media): Add capability to read playing media on macOS and Windows ( e902e62 ) chore(readme): Change minimum Python version to 3.11 ( 3011897 ) fix(setup): Fix setup not exiting after Python version mismatch Piston AI can finally execute two tools with one single response without crashing!...
|
1793551815.008685
|
1794156615.008685
|
|
17305
|
Whack-a-Mole by @Anuja | Stardance
|
Anuja
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Whack-a-Mole by @Anuja | Stardance
|
1793375334.4501584
|
1793980134.4501584
|
|
17306
|
My first slack bot! by @sebimala | Stardance
|
sebimala
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My first slack bot! by @sebimala | Stardanc Title: My first slack bot! by @sebimala | Stardance...
|
1792914870.1115382
|
1793778870.1115382
|
|
17307
|
My very own WebOS by @EllaF | Stardance
|
EllaF
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My very own WebOS by @EllaF | Stardance
|
1793541025.747101
|
1794145825.747101
|
|
17308
|
Deep space salvage by @xanderv7777 | Stardance
|
xanderv7777
|
0
|
6.84
|
0
|
[]
|
[{"post_id": 7475, "ts": "2026 [{"post_id": 7475, "ts": "2026-06-12T13:58:25Z", "hours": 6.8394, "text": "I am working on the main parts of the game.So far I have reached the start menu(no settings yet just a start page).I have a menu where you can sell your scrap. Interactive buttons when hover.Scrap with modifications and randomized size and spawning.I also have a player with grabber to collect the scrap to sell.Right now I am working on a drone to start automation."}]...
|
Title: Deep space salvage by @xanderv7777 | Starda Title: Deep space salvage by @xanderv7777 | Stardance
Devlogs:
I am working on the main parts of the game.So far I have reached the start menu(no settings yet just a start page).I have a menu where you can sell your scrap. Interactive buttons when hover.Scrap with modifications and randomized size and spawning.I also have a player with grabber to collect the scrap to sell.Right now I am working on a drone to start automation....
|
1793379136.442775
|
1793983936.442775
|
|
17309
|
Slay-OS by @Mokxsh_ | Stardance
|
|
1
|
4.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-17T09:46:27Z", "hours": 4.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "What did you make? SlayOS — a fake operating system that runs entirely in your browser. built from scratch with just HTML, CSS and vanilla JS. no frameworks, no libraries, nothing. it has draggable windows, a login screen that actually remembers you, a working terminal, notes, devlogs, a coin flip that can delete your apps if you lose, and a live ASCII camera that turns your webcam into real time text art. it got way bigger than i planned lol What was challenging? building everything without any frameworks was rough. window dragging, z-index stacking, terminal logic, localStorage persistence — all of it had to be figured out from scratch. there were so many moments where something would work and then completely break something else. the ASCII cam especially took a while to get feeling smooth and actually good looking What are you proud of? honestly the ASCII cam. it was totally unnecessary and i built it anyway and it looks so cool. also the login system — the fact that your PC name shows up in the terminal prompt is such a small thing but it makes the whole OS feel surprisingly real. proud that the whole thing runs on just three files too What should people know to test it? go to { https://mokxsh404.github.io/Slay-OS/} and first thing — try Roulette if you’re feeling brave 😭 allow camera permissions for the ASCII cam and switch between the color modes. open the terminal and type help . the whole thing is more fun to just click around and explore than to be told what to do", "repo": "https://github.com/Mokxsh404/Slay-OS", "demo": "https://mokxsh404.github.io/Slay-OS/"}]...
|
[{"post_id": 10519, "ts": "202 [{"post_id": 10519, "ts": "2026-06-17T08:29:06Z", "hours": 0.0, "text": "#Devlog 3: We are DONE. 🎉 SlayOS is finally finished. One of my favorites is the new ASCII Camera. It takes your normal webcam feed and converts it into live ASCII art using letters, numbers, and symbols like @, #, %, and more. It looks surprisingly cool and gives everything that old-school hacker terminal vibe. I also added multiple display modes, so you can switch between different ASCII styles and effects depending on how cursed you want your camera feed to look. Between the Apple-inspired UI, the Roulette app that can literally delete half your applications if you lose, and now a fully functional ASCII Camera, SlayyyOS has somehow become a real operating system! Gonna Ship It Soon!"}, {"post_id": 10495, "ts": "2026-06-17T07:33:29Z", "hours": 0.0, "text": "#Devlog 2: Slay-OS is getting dangerously close to being finished! Been adding some of the final features and probably the most ridiculous one so far is the Roulette. Here’s how it works: You spin it, and if you lose… SlayOS randomly deletes half of its own applications. That’s it. No mercy. If you win, absolutely nothing happens. Is it useful? Nope. Is it funny? Prolly. I’ve attached some screenshots below so you can see how it looks in action. At this point, most of the OS is done and I’m just polishing things up before release. It’s been really fun building this project from scratch and seeing it slowly turn into a real operating system. Let me know what you think of the Roulette feature. Would you risk your apps?"}, {"post_id": 8778, "ts": "2026-06-14T16:16:32Z", "hours": 3.5817, "text": "#Devlog 1: yo gng, this is the OS that I have started developing. I have named it SlayyyOS, i tried to give it a apple inspired theme as u may see in the image. drop ur thought about it in the comment section :)"}]...
|
Title: Slay-OS by @Mokxsh_ | Stardance
Devlogs:
# Title: Slay-OS by @Mokxsh_ | Stardance
Devlogs:
#Devlog 1: yo gng, this is the OS that I have started developing. I have named it SlayyyOS, i tried to give it a apple inspired theme as u may see in the image. drop ur thought about it in the comment section :)
#Devlog 2: Slay-OS is getting dangerously close to being finished! Been adding some of the final features and probably the most ridiculous one so far is the Roulette. Here’s how it works: You spin it, and if you lose… SlayOS randomly deletes half of its own applications. That’s it. No mercy. If you win, absolutely nothing happens. Is it useful? Nope. Is it funny? Prolly. I’ve attached some screenshots below so you can see how it looks in action. At this point, most of the OS is done and I’m just polishing things up before release. It’s been really fun building this project from scratch and seeing it slowly turn into a real operating system. Let me know what you think of the Roulette feature. Would you risk your apps?
#Devlog 3: We are DONE. 🎉 SlayOS is finally finished. One of my favorites is the new ASCII Camera. It takes your normal webcam feed and converts it into live ASCII art using letters, numbers, and symbols like @, #, %, and more. It looks surprisingly cool and gives everything that old-school hacker terminal vibe. I also added multiple display modes, so you can switch between different ASCII styles and effects depending on how cursed you want your camera feed to look. Between the Apple-inspired UI, the Roulette app that can literally delete half your applications if you lose, and now a fully functional ASCII Camera, SlayyyOS has somehow become a real operating system! Gonna Ship It Soon!
Ships:
What did you make? SlayOS — a fake operating system that runs entirely in your browser. built from scratch with just HTML, CSS and vanilla JS. no frameworks, no libraries, nothing. it has draggable windows, a login screen that actually remembers you, a working terminal, notes, devlogs, a coin flip that can delete your apps if you lose, and a live ASCII camera that turns your webcam into real time text art. it got way bigger than i planned lol What was challenging? building everything without any frameworks was rough. window dragging, z-index stacking, terminal logic, localStorage persistence — all of it had to be figured out from scratch. there were so many moments where something would work and then completely break something else. the ASCII cam especially took a while to get feeling smooth and actually good looking What are you proud of? honestly the ASCII cam. it was totally unnecessary and i built it anyway and it looks so cool. also the login system — the fact that your PC name shows up in the terminal prompt is such a small thing but it makes the whole OS feel surprisingly real. proud that the whole thing runs on just three files too What should people know to test it? go to { https://mokxsh404.github.io/Slay-OS/} and first thing — try Roulette if you’re feeling brave 😭 allow camera permissions for the ASCII cam and switch between the color modes. open the terminal and type help . the whole thing is more fun to just click around and explore than to be told what to do...
|
1793771661.8682775
|
1794635661.8682775
|
|
17310
|
test1 by @AFPlayz | Stardance
|
AFPlayz
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: test1 by @AFPlayz | Stardance
|
1793357384.9611044
|
1793962184.9611044
|
|
17311
|
Bullet Box by @nightfall | Stardance
|
nightfall
|
0
|
1.06
|
0
|
[]
|
[{"post_id": 7479, "ts": "2026 [{"post_id": 7479, "ts": "2026-06-12T14:09:10Z", "hours": 1.0564, "text": "A few days I started work on Bullet Box (stylized BULLETBOX), a YSWS where you ship a Undertale-style attack using Create Your Frisk. The unique bit about Bullet Box is that you don’t get a prize for finishing it (except maybe stickers). Your attack is put into a compilation battle for anyone on the internet to play! Right now, I’ve started work on the website and making it look like Undertale dialogue. My plan is to add an example image of what the final finished battle will look like to the side, as well as a button to RSVP/submit! Right now, you can RSVP to Bullet Box here: https://rsvp.hackclub.community/bulletbox"}]...
|
Title: Bullet Box by @nightfall | Stardance
Devlo Title: Bullet Box by @nightfall | Stardance
Devlogs:
A few days I started work on Bullet Box (stylized BULLETBOX), a YSWS where you ship a Undertale-style attack using Create Your Frisk. The unique bit about Bullet Box is that you don’t get a prize for finishing it (except maybe stickers). Your attack is put into a compilation battle for anyone on the internet to play! Right now, I’ve started work on the website and making it look like Undertale dialogue. My plan is to add an example image of what the final finished battle will look like to the side, as well as a button to RSVP/submit! Right now, you can RSVP to Bullet Box here: https://rsvp.hackclub.community/bulletbox...
|
1793368267.818875
|
1793973067.818875
|
|
17312
|
Untitled by @Mohammed | Stardance
|
Mohammed
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Untitled by @Mohammed | Stardance
|
1793501506.2533727
|
1794106306.2533727
|
|
17313
|
Minecraft clicker by @Jaeden | Stardance
|
Jaeden
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Minecraft clicker by @Jaeden | Stardance
|
1793314300.6924384
|
1793919100.6924384
|
|
17314
|
Untitled by @nitlime | Stardance
|
nitlime
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Untitled by @nitlime | Stardance
|
1793321229.8479836
|
1793926029.8479836
|
|
17315
|
My first slack bot! by @dia_akumalla | Stardance
|
dia_akumalla
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My first slack bot! by @dia_akumalla | Star Title: My first slack bot! by @dia_akumalla | Stardance...
|
1793552262.3789148
|
1794157062.3789148
|
|
17316
|
Birdie by @MohdSadiqUmar | Stardance
|
MohdSadiqUmar
|
1
|
3.62
|
5
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-14T06:49:38Z", "hours": 2.0, "multiplier": 3.46, "payout": 5, "blessing": "neutral", "text": "I made Birdie, a fun slack bot that can: tell a joke, give a random catfact for you to think about, give you a random image of an animal you choose(limited library) To check if it is working you can type /birdie-ping. If you cant seem to remember the slash commands, just type /birdie-help and a help menu will be there.", "repo": "https://github.com/Zyrox-exe/Slack-Bot", "demo": "https://hackclub.enterprise.slack.com/archives/C0B8P5DRDB3"}]...
|
[{"post_id": 10589, "ts": "202 [{"post_id": 10589, "ts": "2026-06-17T12:28:03Z", "hours": 1.62, "text": "[Devlog #3]There are a lot of other bots who can give weather data, so why would you care about Birdie, Thats what you are thinking right? RIGHT??? Well…, well…, well…, Who knows the weather better than a DAMN BIRD?……(A weather API obv!) [If you think my pfp or Birdie is cute then help me get the Macbook air M5 or else……. the birdie will always be watching you] Here’s how it works: /birdie-weathertoday shows weather for the day in a city specified by the user. Open-Meteo weather and Geocoding APIs were used. The geocoding API first converts city names to Latitude and Longitude coordinates and then these are given to open meteo to fetch the weather data."}, {"post_id": 8536, "ts": "2026-06-14T06:09:26Z", "hours": 0.7142, "text": "[Devlog #2] Today I updated my bot to give a random image of the animal-name given as argument. It looks like this: /birdie-pixel [Animal Name] Currently supported animals are: dog cat panda fox koala bird birb(cute little birds) raccoon kangaroo red_panda whale It can currently just do these: /birdie-pixel: image of an animal along with a fact /birdie-joke: tell a joke /birdie-catfact: a random fact about cats /birdie-ping: to see if it is well and good /birdie-help: a simple help menu"}, {"post_id": 8297, "ts": "2026-06-13T19:49:05Z", "hours": 0.8794, "text": "[Birdie]Today I finally competed my Slack Bot Mission. I will be adding more things to it but I just wanted to put it up their today."}]...
|
Title: Birdie by @MohdSadiqUmar | Stardance
Devlo Title: Birdie by @MohdSadiqUmar | Stardance
Devlogs:
[Birdie]Today I finally competed my Slack Bot Mission. I will be adding more things to it but I just wanted to put it up their today.
[Devlog #2] Today I updated my bot to give a random image of the animal-name given as argument. It looks like this: /birdie-pixel [Animal Name] Currently supported animals are: dog cat panda fox koala bird birb(cute little birds) raccoon kangaroo red_panda whale It can currently just do these: /birdie-pixel: image of an animal along with a fact /birdie-joke: tell a joke /birdie-catfact: a random fact about cats /birdie-ping: to see if it is well and good /birdie-help: a simple help menu
[Devlog #3]There are a lot of other bots who can give weather data, so why would you care about Birdie, Thats what you are thinking right? RIGHT??? Well…, well…, well…, Who knows the weather better than a DAMN BIRD?……(A weather API obv!) [If you think my pfp or Birdie is cute then help me get the Macbook air M5 or else……. the birdie will always be watching you] Here’s how it works: /birdie-weathertoday shows weather for the day in a city specified by the user. Open-Meteo weather and Geocoding APIs were used. The geocoding API first converts city names to Latitude and Longitude coordinates and then these are given to open meteo to fetch the weather data.
Ships:
I made Birdie, a fun slack bot that can: tell a joke, give a random catfact for you to think about, give you a random image of an animal you choose(limited library) To check if it is working you can type /birdie-ping. If you cant seem to remember the slash commands, just type /birdie-help and a help menu will be there....
|
1793703255.2642276
|
1793789655.2642276
|
|
17317
|
My awesome macropad! by @vivaan_reddy_karra | Star My awesome macropad! by @vivaan_reddy_karra | Stardance...
|
vivaan_reddy_karra
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My awesome macropad! by @vivaan_reddy_karra Title: My awesome macropad! by @vivaan_reddy_karra | Stardance...
|
1793180867.354063
|
1793785667.354063
|
|
17318
|
RemOS (WebOS) by @pksmkwe26 | Stardance
|
pksmkwe26
|
1
|
3.0
|
18
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-16T09:12:14Z", "hours": 3.0, "multiplier": 5.99, "payout": 18, "blessing": "neutral", "text": "I made an WebOS (RemOS). I used shadcn_flutter package for ease UI library and Windows Function with the Snap-in Functionality As well, I’ve also used Flutter InAppWebView for the IFrame Support in Apps.", "repo": "https://github.com/kwe26/remos", "demo": "https://kwe26.github.io/remos/"}]...
|
[{"post_id": 9818, "ts": "2026 [{"post_id": 9818, "ts": "2026-06-16T08:13:06Z", "hours": 2.4719, "text": "Devlog #2 . I’ve added Startup Sound . Also Calculator App and Some WebView Apps such as Paint, Wikipedia and YouTube. . And an Top Bar just like in GNOME and such . And Also Clock Widget on Home Screen as well . Thanks"}, {"post_id": 7520, "ts": "2026-06-12T15:45:33Z", "hours": 0.5039, "text": "Devlog #1 RemOS an WebOS named after Rem from Re:Zero . . Using shadcn_flutter + Flutter for Window Widgets and it even supports Windows 11’s Snap-In like Feature. . Working on Other Elements Soon! . Thanks ;;3"}]...
|
Title: RemOS (WebOS) by @pksmkwe26 | Stardance
De Title: RemOS (WebOS) by @pksmkwe26 | Stardance
Devlogs:
Devlog #1 RemOS an WebOS named after Rem from Re:Zero . . Using shadcn_flutter + Flutter for Window Widgets and it even supports Windows 11’s Snap-In like Feature. . Working on Other Elements Soon! . Thanks ;;3
Devlog #2 . I’ve added Startup Sound . Also Calculator App and Some WebView Apps such as Paint, Wikipedia and YouTube. . And an Top Bar just like in GNOME and such . And Also Clock Widget on Home Screen as well . Thanks
Ships:
I made an WebOS (RemOS). I used shadcn_flutter package for ease UI library and Windows Function with the Snap-in Functionality As well, I’ve also used Flutter InAppWebView for the IFrame Support in Apps....
|
1793789624.1960595
|
1793876024.1960595
|
|
17319
|
SituationBoard by @nouxinf | Stardance
|
nouxinf
|
1
|
25.0
|
276
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-19T12:42:35Z", "hours": 25.0, "multiplier": 11.2, "payout": 276, "blessing": "neutral", "text": "I just finished making SituationBoard a browser new tab page with widgets that can be customised and arranged to your liking. Its a big QoL improvement because it means instead of having to go to several websites to get bits of info, you can see them all on one page you can bookmark or set as a new tab page in your browser. Current widgets included are: Cat picture Oil price Clock Weather XKCD comic It runs in express and some of the widgets use an external API that needs a backend route. Its designed to be contributed to by others, I wrote a guide in the README on how to add new widgets. There’s a light and dark mode too. Hope you enjoy it!", "repo": "https://github.com/nouxinf/situationboard", "demo": "https://situationboard.nouxinf.net/"}]...
|
[{"post_id": 70550, "ts": "202 [{"post_id": 70550, "ts": "2026-09-19T10:59:06Z", "hours": 0.6653, "text": "Devlog 8 of Situationboard In this devlog I put the website on my VPS at https://situationboard.nouxinf.net/ and wrote a README. The readme contains some info on the project, screenshots, and instructions on how to add a new widget to the site for contributors."}, {"post_id": 70233, "ts": "2026-09-18T19:18:21Z", "hours": 1.0689, "text": "Devlog 7 of Situationboard In this devlog I added a dark mode that saves your preferences but also loads them from your system settings. I made a bunch of CSS tweaks at the same time to make it look a bit nicer too."}, {"post_id": 70175, "ts": "2026-09-18T16:54:18Z", "hours": 1.1975, "text": "Devlog 6 of Situationboard In this devlog I added a MacOS style menu bar at the top for some buttons. The SB icon and the Situationboard spans just refresh the page, the attribution button opens a dialog with credits to open source libraries and images used (APIs are credited separately in the add widgets screen). The about screen also has info. Next up is just dark mode, some docs + readme then I’m ready to ship"}, {"post_id": 69245, "ts": "2026-09-16T17:33:32Z", "hours": 2.3942, "text": "Devlog 5 of Situationboard In this devlog I added an XKCD widget, which fetches the latest XKCD comic through a proxy on the backend, and you can navigate through comics with the previous, next, random and custom number buttons. You can also click on the image to zoom in on the comic and the caption. What I’m adding next is dark mode and an attribution screen to give credit to all sources used."}, {"post_id": 68165, "ts": "2026-09-14T17:09:37Z", "hours": 1.7006, "text": "Devlog 4 of Situationboard In this devlog I finished the weather widget. I added icons that I reused from an earlier stardance project, weatherstation that map to WMO codes, and it shows a forecast with min-max temperatures for the next 7 days. Next up I’ll do an xkcd widget and dark mode"}, {"post_id": 67217, "ts": "2026-09-13T08:29:05Z", "hours": 7.3411, "text": "Devlog 3 of Situationboard Things I added: A live time widget A description window for each widget that uses a markdown renderer A customisable weather widget (currently only shows temperature and location but will be updated with week-ahead forecast) Things I might add soon: dark mode xkcd widget?"}, {"post_id": 11390, "ts": "2026-06-18T17:15:06Z", "hours": 3.125, "text": "Devlog 2 of Situationboard Things I’ve worked on since the last devlog: A simple favicon - just “SB” in the Inter font that’s used across the site An Oil Price widget. It originally used data from oilpriceapi.com however I realised that they didn’t provide a permanent free tier, so I switched to the US government’s (of course) EIA (Energy Information Administration) which updates less frequently (half a week or so?). Loading animation for catpic widget from Wikimedia Commons Next up I’ll probably work on a description button in the Add Widgets dialog as it already has a widgets.json entry, its just unused."}, {"post_id": 9344, "ts": "2026-06-15T17:58:45Z", "hours": 7.1142, "text": "Devlog #1 of SituationBoard After finishing the hackpad project, I was trying to find new project ideas to do, so I asked my dad for a QoL improvement that could be made. He mentioned wanting a “portal” to have loads of different information widgets on one screen, as for a lot of things you need to go across different websites. Coincidentally, the Frictionless mission was running, whose “mission” you could say was exactly that - to make something that improves quality of life. The name “SituationBoard” is a play on those “monitor the situation” dashboards that government officials or OSINT people use. The data on here as you can probably see by the screenshot is probably not of as high importance [citation needed]. I decided to make this in express.js, and plain HTML to keep it minimal. The backend will handle most widgets that need APIs, as those wih API keys shouldn’t be sent on the frontend because the keys will be leaked. The first widget added is a random cat picture from a service called Cat-as-a-Service (cataas.com). This didn’t require the backend as cataas doesnt take credentials so it was a good first widget. Next up I’ll write more widgets like weather, prices of various commodities like oil and holiday calendars, and add more features, potentially styling the website up along the way."}]...
|
Title: SituationBoard by @nouxinf | Stardance
Dev Title: SituationBoard by @nouxinf | Stardance
Devlogs:
Devlog #1 of SituationBoard After finishing the hackpad project, I was trying to find new project ideas to do, so I asked my dad for a QoL improvement that could be made. He mentioned wanting a “portal” to have loads of different information widgets on one screen, as for a lot of things you need to go across different websites. Coincidentally, the Frictionless mission was running, whose “mission” you could say was exactly that - to make something that improves quality of life. The name “SituationBoard” is a play on those “monitor the situation” dashboards that government officials or OSINT people use. The data on here as you can probably see by the screenshot is probably not of as high importance [citation needed]. I decided to make this in express.js, and plain HTML to keep it minimal. The backend will handle most widgets that need APIs, as those wih API keys shouldn’t be sent on the frontend because the keys will be leaked. The first widget added is a random cat picture from a service called Cat-as-a-Service (cataas.com). This didn’t require the backend as cataas doesnt take credentials so it was a good first widget. Next up I’ll write more widgets like weather, prices of various commodities like oil and holiday calendars, and add more features, potentially styling the website up along the way.
Devlog 2 of Situationboard Things I’ve worked on since the last devlog: A simple favicon - just “SB” in the Inter font that’s used across the site An Oil Price widget. It originally used data from oilpriceapi.com however I realised that they didn’t provide a permanent free tier, so I switched to the US government’s (of course) EIA (Energy Information Administration) which updates less frequently (half a week or so?). Loading animation for catpic widget from Wikimedia Commons Next up I’ll probably work on a description button in the Add Widgets dialog as it already has a widgets.json entry, its just unused.
Devlog 3 of Situationboard Things I added: A live time widget A description window for each widget that uses a markdown renderer A customisable weather widget (currently only shows temperature and location but will be updated with week-ahead forecast) Things I might add soon: dark mode xkcd widget?
Devlog 4 of Situationboard In this devlog I finished the weather widget. I added icons that I reused from an earlier stardance project, weatherstation that map to WMO codes, and it shows a forecast with min-max temperatures for the next 7 days. Next up I’ll do an xkcd widget and dark mode
Devlog 5 of Situationboard In this devlog I added an XKCD widget, which fetches the latest XKCD comic through a proxy on the backend, and you can navigate through comics with the previous, next, random and custom number buttons. You can also click on the image to zoom in on the comic and the caption. What I’m adding next is dark mode and an attribution screen to give credit to all sources used.
Devlog 6 of Situationboard In this devlog I added a MacOS style menu bar at the top for some buttons. The SB icon and the Situationboard spans just refresh the page, the attribution button opens a dialog with credits to open source libraries and images used (APIs are credited separately in the add widgets screen). The about screen also has info. Next up is just dark mode, some docs + readme then I’m ready to ship
Devlog 7 of Situationboard In this devlog I added a dark mode that saves your preferences but also loads them from your system settings. I made a bunch of CSS tweaks at the same time to make it look a bit nicer too.
Devlog 8 of Situationboard In this devlog I put the website on my VPS at https://situationboard.nouxinf.net/ and wrote a README. The readme contains some info on the project, screenshots, and instructions on how to add a new widget to the site for contributors.
Ships:
I just finished making SituationBoard a browser new tab page with widgets that can be customised and arranged to your liking. Its a big QoL improvement because it means instead of having to go to several websites to get bits of info, you can see them all on one page you can bookmark or set as a new tab page in your browser. Current widgets included are: Cat picture Oil price Clock Weather XKCD comic It runs in express and some of the widgets use an external API that needs a backend route. Its designed to be contributed to by others, I wrote a guide in the README on how to add new widgets. There’s a light and dark mode too. Hope you enjoy it!...
|
1793796974.7905414
|
1793883374.7905414
|
|
17320
|
My very own WebOS by @TanmaySharma | Stardance
|
TanmaySharma
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My very own WebOS by @TanmaySharma | Starda Title: My very own WebOS by @TanmaySharma | Stardance...
|
1793321329.0733373
|
1793926129.0733373
|
|
17321
|
My very own WebOS by @shijia | Stardance
|
shijia
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My very own WebOS by @shijia | Stardance
|
1793364580.0395398
|
1793969380.0395398
|
|
17322
|
My awesome macropad! by @Tanvi_pulikesi | Stardanc My awesome macropad! by @Tanvi_pulikesi | Stardance...
|
Tanvi_pulikesi
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My awesome macropad! by @Tanvi_pulikesi | S Title: My awesome macropad! by @Tanvi_pulikesi | Stardance...
|
1793540938.1386466
|
1794145738.1386466
|
|
17323
|
My awesome macropad! by @Tanveer_ | Stardance
|
Tanveer_
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My awesome macropad! by @Tanveer_ | Stardan Title: My awesome macropad! by @Tanveer_ | Stardance...
|
1793292973.2349539
|
1793897773.2349539
|
|
17324
|
My very own WebOS by @Yuvan_banana | Stardance
|
Yuvan_banana
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My very own WebOS by @Yuvan_banana | Starda Title: My very own WebOS by @Yuvan_banana | Stardance...
|
1793393338.8718107
|
1793998138.8718107
|
|
17325
|
My first slack bot! by @bipinkhanal | Stardance
|
bipinkhanal
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My first slack bot! by @bipinkhanal | Stard Title: My first slack bot! by @bipinkhanal | Stardance...
|
1793296433.647619
|
1793901233.647619
|
|
17326
|
Desktop Car by @sulavbartaula | Stardance
|
sulavbartaula
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Desktop Car by @sulavbartaula | Stardance
|
1793346918.732348
|
1793951718.732348
|
|
17327
|
HighlightClipper by @muhdrayan10 | Stardance
|
muhdrayan10
|
0
|
18.14
|
0
|
[]
|
[{"post_id": 19259, "ts": "202 [{"post_id": 19259, "ts": "2026-06-30T15:00:40Z", "hours": 8.7567, "text": "Devlog #4: If you’ve been following my journey, HighlightClipper is almost ready! It’s getting better at analysing and generating the highlight montage, and I’ve added multiple API end points to connect the backend and the server.I’ve made some UX changes, added a video preview on the website, added logging, implemented gracefully handling errors, generated graphs, etc. But before I could pop the champagne, I ran into one last, incredibly stubborn road block: YouTube’s Anti-Bot Algorithm . The Bot Wars Turns out, when you try to automatically download several 90-minute, high bit-rate 1080p soccer matches in rapid succession, YT’s servers start asking questions. My terminal went from showing beautiful, smooth download progress bars to talkin bout sum HTTP Error 429: Too Many Requests and Sign into confirm you're not a bot . I spent an hour or two trying to fix this, trying stuff like importing cookies from chrome (no luck) but eventually found a workaround! By emulating an iOS device, where the anti-bot algorithms are more lax, I could easily pretend to be a human… I mean, I am a human tho! My Midlife Crisis I’ve talked a lot about the technical aspects of my project in these devlogs. But as I finilize the core functionality of HighlightClipper, I want to talk about the actual experience of being a developer right now. I’ve hit The Dilemma . HighlightClipper works. The MVP is done. But looking at my code, my fingers are itching to add more features. I want to refactor some of my backend to be more “professional”. I want to add an API schema and write unit tests. I want to add more analytics on the results page. But at the same time, the allure of a brand-new, cool project is calling my name. Do I stay and polish this project into an even better application, or do I pack up and build the next cool thing?I genuinely don’t know the right answer. I’d love some advice from the community… When do you decide a project is truly “finished”?"}, {"post_id": 11877, "ts": "2026-06-19T10:49:43Z", "hours": 4.5769, "text": "Devlog #3: Giving HighlightClipper a Face (and a Glow Up) In the last update, my project could finally (yes, finally! ) take on a 90 minute video and identify the highlight timestamps, and generate the final clipped montage - all in one go. All that was left to do was give HighlightClipper a worthy UI, befitting its mighty purpose. The Waiting Game Now, I’m just as patient as the next person, but waiting for the same video to download again and again is not a pleasant experience. So, I decided to implement caching . Given the YT video id, I could store the relevant data in an sqlite3 database! The UI Now that caching was implemented, I could focus fully on making a good looking UI. Being a big fan of neo-brutalism themes, I tried to challenge myself by building one. And, let’s be honest, does it not look PRETTY ? So far there’s a home page, with a crowd noise vs time graph so that users can understand how highlight-worthy moments are identified. Then they can select the video they want to analyse, which can be any YouTube video or from a selected catalogue of videos pre-downloaded (saves time spent downloading! ) Next Up All I’ve got left to do now is to connect the backend and frontend using FastAPI. All feedback in the comments are appreciated! See you next time!"}, {"post_id": 10593, "ts": "2026-06-17T12:36:24Z", "hours": 2.09, "text": "Devlog #2: How I fought FFmpeg and won. 🥊 Last time, I successfully built an audio pipeline that listens through a 45 minute match recording and spits out the exact timestamps of every major spicy moment. (Through crowd volume analysis.) My goal for today: Pass those timestamps into FFmpeg, slice those highlights out, and save the video. Easy, right? Right? The Final Boss And then I saw him: NAL Unit Errors. FFmpeg immediately started throwing a fit. All I could stare at was a wall of red text for hours on end, trying to figure out what was going on. The error seemed to occur when I tried to slice a video after the 5 minute mark. I spent hours tweaking my FFmpeg commands. I tried re-encoding, I tried Apple Silicon hardware acceleration h264_videotoolbox , but nothing worked. It always crashed at exactly the 300-second mark. The Plot Twist The consistent crash-time gave it away. Turns out, the video had a corrupted index map (the moov atom ) due to me downloading it from a sketchy website. Bruh. When FFmpeg tried to “fast-seek” (-ss), the map sent it to the wrong byte address, and landed in the middle of some garbage data stream , causing all the errors. ⚠️ The Solution And so I switched to yt-dlp to ensure download quality. Then, I sliced each individual highlight moment using this command: ffmpeg -y -ss <clip_start_time> -i match.mp4 -t <duration> -c:v copy -c:a copy temp_clip_i.mp4 And then, after we got all the individual clips, I could easily concatenate them using the following cmd: ffmpeg -y -f concat -safe 0 -i clips_list.txt -c copy highlights.mp4 And with that, we get our first demo of this project working quite well! There’s some fine tuning to do with the parameters like continuity_time and sustained_time , but it’s a work in progress. 🚧 Next Up Now I need to integrate all the different aspects of this project together. The goal is to be able to provide the YT link of the video you want to generate highlights of, and the program being able to automatically download, process, and generate an accurate highlight montage of the game, with all the goals and important moments included in it. See you later! Take a look at the processed highlights video demo below! As always, please do drop your feedback in the comments section. Took about 18 seconds to process 45 minutes of match recording"}, {"post_id": 8217, "ts": "2026-06-13T17:46:50Z", "hours": 2.7131, "text": "It’s World Cup season, hurray!!! Having to sit through 90 minutes to create a highlight video is painful (trust me, I’ve tried). But that got me thinking: What if you could automatically generate a highlight video, given the full match recording? I booted up my laptop and put on my programming hat. I needed a way to identify the important “highlight-worthy” moments in a game, and three approaches immediately came into mind: Approach #1: Crowd Noise Analysis Initially, I encountered so many problems dealing with crowd noise. What do you MEAN Barcelona fans are louder than Man City fans? Dealing with variable crowd noise baselines was a real headache. But then, I struck gold! By calculating the RMS (Root Mean Square) crowd energy, and considering the top 10% percentile as big moments, my highlight clipper could dynamically adapt to different matches, no matter the baseline volume. All the peaks refer to pivotal moments, which is exactly what I wanted! This approach certainly looks promising, and it identified all the key goals, big chances and fouls that happened in the first half of Barcelona vs Real Madrid 2026. Approach #2: Whistle Detection I really wanted this method to work, but I’m sorry to inform you that I could not get this to function reliably. There’s plenty of other noises that the crowd makes that fall in the 2-4 kHz range. I tried plotting a spectogram , but that only left me even more confused. Let’s hope I can make sense of it by next time! I hope you’ll follow my journey, and please drop a like if you thought this was interesting!"}]...
|
Title: HighlightClipper by @muhdrayan10 | Stardanc Title: HighlightClipper by @muhdrayan10 | Stardance
Devlogs:
It’s World Cup season, hurray!!! Having to sit through 90 minutes to create a highlight video is painful (trust me, I’ve tried). But that got me thinking: What if you could automatically generate a highlight video, given the full match recording? I booted up my laptop and put on my programming hat. I needed a way to identify the important “highlight-worthy” moments in a game, and three approaches immediately came into mind: Approach #1: Crowd Noise Analysis Initially, I encountered so many problems dealing with crowd noise. What do you MEAN Barcelona fans are louder than Man City fans? Dealing with variable crowd noise baselines was a real headache. But then, I struck gold! By calculating the RMS (Root Mean Square) crowd energy, and considering the top 10% percentile as big moments, my highlight clipper could dynamically adapt to different matches, no matter the baseline volume. All the peaks refer to pivotal moments, which is exactly what I wanted! This approach certainly looks promising, and it identified all the key goals, big chances and fouls that happened in the first half of Barcelona vs Real Madrid 2026. Approach #2: Whistle Detection I really wanted this method to work, but I’m sorry to inform you that I could not get this to function reliably. There’s plenty of other noises that the crowd makes that fall in the 2-4 kHz range. I tried plotting a spectogram , but that only left me even more confused. Let’s hope I can make sense of it by next time! I hope you’ll follow my journey, and please drop a like if you thought this was interesting!
Devlog #2: How I fought FFmpeg and won. 🥊 Last time, I successfully built an audio pipeline that listens through a 45 minute match recording and spits out the exact timestamps of every major spicy moment. (Through crowd volume analysis.) My goal for today: Pass those timestamps into FFmpeg, slice those highlights out, and save the video. Easy, right? Right? The Final Boss And then I saw him: NAL Unit Errors. FFmpeg immediately started throwing a fit. All I could stare at was a wall of red text for hours on end, trying to figure out what was going on. The error seemed to occur when I tried to slice a video after the 5 minute mark. I spent hours tweaking my FFmpeg commands. I tried re-encoding, I tried Apple Silicon hardware acceleration h264_videotoolbox , but nothing worked. It always crashed at exactly the 300-second mark. The Plot Twist The consistent crash-time gave it away. Turns out, the video had a corrupted index map (the moov atom ) due to me downloading it from a sketchy website. Bruh. When FFmpeg tried to “fast-seek” (-ss), the map sent it to the wrong byte address, and landed in the middle of some garbage data stream , causing all the errors. ⚠️ The Solution And so I switched to yt-dlp to ensure download quality. Then, I sliced each individual highlight moment using this command: ffmpeg -y -ss <clip_start_time> -i match.mp4 -t <duration> -c:v copy -c:a copy temp_clip_i.mp4 And then, after we got all the individual clips, I could easily concatenate them using the following cmd: ffmpeg -y -f concat -safe 0 -i clips_list.txt -c copy highlights.mp4 And with that, we get our first demo of this project working quite well! There’s some fine tuning to do with the parameters like continuity_time and sustained_time , but it’s a work in progress. 🚧 Next Up Now I need to integrate all the different aspects of this project together. The goal is to be able to provide the YT link of the video you want to generate highlights of, and the program being able to automatically download, process, and generate an accurate highlight montage of the game, with all the goals and important moments included in it. See you later! Take a look at the processed highlights video demo below! As always, please do drop your feedback in the comments section. Took about 18 seconds to process 45 minutes of match recording
Devlog #3: Giving HighlightClipper a Face (and a Glow Up) In the last update, my project could finally (yes, finally! ) take on a 90 minute video and identify the highlight timestamps, and generate the final clipped montage - all in one go. All that was left to do was give HighlightClipper a worthy UI, befitting its mighty purpose. The Waiting Game Now, I’m just as patient as the next person, but waiting for the same video to download again and again is not a pleasant experience. So, I decided to implement caching . Given the YT video id, I could store the relevant data in an sqlite3 database! The UI Now that caching was implemented, I could focus fully on making a good looking UI. Being a big fan of neo-brutalism themes, I tried to challenge myself by building one. And, let’s be honest, does it not look PRETTY ? So far there’s a home page, with a crowd noise vs time graph so that users can understand how highlight-worthy moments are identified. Then they can select the video they want to analyse, which can be any YouTube video or from a selected catalogue of videos pre-downloaded (saves time spent downloading! ) Next Up All I’ve got left to do now is to connect the backend and frontend using FastAPI. All feedback in the comments are appreciated! See you next time!
Devlog #4: If you’ve been following my journey, HighlightClipper is almost ready! It’s getting better at analysing and generating the highlight montage, and I’ve added multiple API end points to connect the backend and the server.I’ve made some UX changes, added a video preview on the website, added logging, implemented gracefully handling errors, generated graphs, etc. But before I could pop the champagne, I ran into one last, incredibly stubborn road block: YouTube’s Anti-Bot Algorithm . The Bot Wars Turns out, when you try to automatically download several 90-minute, high bit-rate 1080p soccer matches in rapid succession, YT’s servers start asking questions. My terminal went from showing beautiful, smooth download progress bars to talkin bout sum HTTP Error 429: Too Many Requests and Sign into confirm you're not a bot . I spent an hour or two trying to fix this, trying stuff like importing cookies from chrome (no luck) but eventually found a workaround! By emulating an iOS device, where the anti-bot algorithms are more lax, I could easily pretend to be a human… I mean, I am a human tho! My Midlife Crisis I’ve talked a lot about the technical aspects of my project in these devlogs. But as I finilize the core functionality of HighlightClipper, I want to talk about the actual experience of being a developer right now. I’ve hit The Dilemma . HighlightClipper works. The MVP is done. But looking at my code, my fingers are itching to add more features. I want to refactor some of my backend to be more “professional”. I want to add an API schema and write unit tests. I want to add more analytics on the results page. But at the same time, the allure of a brand-new, cool project is calling my name. Do I stay and polish this project into an even better application, or do I pack up and build the next cool thing?I genuinely don’t know the right answer. I’d love some advice from the community… When do you decide a project is truly “finished”?...
|
1793512151.099138
|
1794116951.099138
|
|
17328
|
Frictionless by @Vncharan | Stardance
|
Vncharan
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Frictionless by @Vncharan | Stardance
|
1793569870.9822752
|
1794174670.9822752
|
|
17329
|
Cosmic desk pet by @divspace | Stardance
|
divspace
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Cosmic desk pet by @divspace | Stardance
|
1793177336.5502381
|
1793782136.5502381
|
|
17330
|
Untitled by @magomango | Stardance
|
magomango
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Untitled by @magomango | Stardance
|
1792921890.3146894
|
1793785890.3146894
|
|
17331
|
Scrapbaby Animatronic by @chlorophyll | Stardance
|
chlorophyll
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Scrapbaby Animatronic by @chlorophyll | Sta Title: Scrapbaby Animatronic by @chlorophyll | Stardance...
|
1793451175.4366858
|
1794055975.4366858
|
|
17332
|
My first slack bot! by @jacob_warner | Stardance
|
jacob_warner
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My first slack bot! by @jacob_warner | Star Title: My first slack bot! by @jacob_warner | Stardance...
|
1793458362.9178715
|
1794063162.9178715
|
|
17333
|
Frictionless by @NITHIN | Stardance
|
NITHIN
|
1
|
8.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-12T20:20:11Z", "hours": 4.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "QuickBox What I made: QuickBox is a single-page web toolbox that bundles together several small everyday tools into one place. It includes a clipboard history manager, text formatting tools, a quick to-do list, a unit converter, a password generator, a snippet vault for saving reusable text, timestamp tools, and a QR code generator. What was challenging: Getting all the different tools to work smoothly together on one page without conflicts was tricky, especially making sure each tool saved its own data separately using local storage so nothing got mixed up. Building the unit converter to handle multiple categories like length, weight, time, data size, and temperature with correct formulas also took careful testing. What I am proud of: I am proud of how everything works together as one cohesive toolbox instead of separate scattered tools. The clipboard history and snippet vault in particular solve a real repetitive annoyance, since copying and reusing text normally takes several steps, and here it is reduced to a single click. How to test it: Open the quickbox.html file in any modern browser. No installation, login, or setup is required. All data is stored locally in the browser, so your clipboard history, to-do list, and snippets will be saved even after closing and reopening the page. Try saving some text to the clipboard history or snippet vault, then click on an item to copy it instantly. You can also try the text tools by pasting text and applying transformations, or generate a password and a QR code to see the results update immediately.", "repo": "https://github.com/Nithinfgs/frictionless", "demo": "https://astonishing-souffle-d55679.netlify.app/"}]...
|
[{"post_id": 8101, "ts": "2026 [{"post_id": 8101, "ts": "2026-06-13T14:58:37Z", "hours": 4.0, "text": "8:28 PMClaude responded: Reworked the UI with a bold neo-brutalist style (cream background, hard shadows, custom fonts) instead of the generic AI look.Reworked the UI with a bold neo-brutalist style (cream background, hard shadows, custom fonts) instead of the generic AI look. Added two new features: a Pomodoro-style Focus Timer and a Decision Picker tool."}, {"post_id": 7664, "ts": "2026-06-12T20:09:55Z", "hours": 2.0, "text": "Just finished"}, {"post_id": 7529, "ts": "2026-06-12T16:01:50Z", "hours": 0.0, "text": "Building the frontend foundation. Refactoring CSS, polishing the design system, and making the dashboard responsive across screen sizes."}]...
|
Title: Frictionless by @NITHIN | Stardance
Devlog Title: Frictionless by @NITHIN | Stardance
Devlogs:
Building the frontend foundation. Refactoring CSS, polishing the design system, and making the dashboard responsive across screen sizes.
Just finished
8:28 PMClaude responded: Reworked the UI with a bold neo-brutalist style (cream background, hard shadows, custom fonts) instead of the generic AI look.Reworked the UI with a bold neo-brutalist style (cream background, hard shadows, custom fonts) instead of the generic AI look. Added two new features: a Pomodoro-style Focus Timer and a Decision Picker tool.
Ships:
QuickBox What I made: QuickBox is a single-page web toolbox that bundles together several small everyday tools into one place. It includes a clipboard history manager, text formatting tools, a quick to-do list, a unit converter, a password generator, a snippet vault for saving reusable text, timestamp tools, and a QR code generator. What was challenging: Getting all the different tools to work smoothly together on one page without conflicts was tricky, especially making sure each tool saved its own data separately using local storage so nothing got mixed up. Building the unit converter to handle multiple categories like length, weight, time, data size, and temperature with correct formulas also took careful testing. What I am proud of: I am proud of how everything works together as one cohesive toolbox instead of separate scattered tools. The clipboard history and snippet vault in particular solve a real repetitive annoyance, since copying and reusing text normally takes several steps, and here it is reduced to a single click. How to test it: Open the quickbox.html file in any modern browser. No installation, login, or setup is required. All data is stored locally in the browser, so your clipboard history, to-do list, and snippets will be saved even after closing and reopening the page. Try saving some text to the clipboard history or snippet vault, then click on an item to copy it instantly. You can also try the text tools by pasting text and applying transformations, or generate a password and a QR code to see the results update immediately....
|
1793778590.86783
|
1794642590.86783
|
|
17334
|
Frictionless by @harshithn | Stardance
|
harshithn
|
1
|
11.11
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-14T20:55:03Z", "hours": 3.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I built recall, a local full-text search tool for macOS. It indexes your clipboard, browser history, Apple Notes, shell history, mail, Slack, and Discord into a single SQLite FTS5 database, then lets you search all of it with one CLI command or a small web UI. The problem: I kept losing 5 minutes bouncing between Slack search, Gmail search, browser history, and Notes whenever I tried to find something I knew I’d seen. recall kills that — one box, sub-second results, 100% local. No cloud, no account, no telemetry. What was challenging: macOS permissions (Apple Notes + Mail need Full Disk Access and fail silently without it). I added a recall doctor command that surfaces these failures with actionable hints. Thread-safety in SQLite when the HTTP server and indexer share a connection. The vanilla-JS web UI had to feel snappy without a framework — no React, no build step, just debounced fetch + DOM. What I’m proud of: the whole thing is ~2,500 lines of Python plus a 200-line vanilla-JS web UI. Zero external runtime dependencies. Anyone can read the whole thing in an hour and trust it with their data because the data never leaves the machine. To try it: git clone https://github.com/hnelabhotla-boop/Recall , run ./install.sh, then recall ui to open the search box.", "repo": "https://github.com/hnelabhotla-boop/Recall", "demo": "https://github.com/hnelabhotla-boop/Recall#readme"}]...
|
[{"post_id": 9387, "ts": "2026 [{"post_id": 9387, "ts": "2026-06-15T18:44:49Z", "hours": 4.2847, "text": "URL search results show the real page title now, not the raw link Before: https://news.ycombinator.com/item?id=12345 After: Show HN: I built X – Hacker News Cached locally so URLs only get fetched once New recall titles command to backfill the whole index No new dependencies"}, {"post_id": 9213, "ts": "2026-06-15T13:54:58Z", "hours": 3.3175, "text": "Fixed silent failure on Apple Notes (and Mail) indexing Root cause: macOS Full Disk Access not granted to the user’s terminal New recall setup command — click-by-step walkthrough Detects your terminal (Terminal, iTerm, Warp, VS Code) Opens the right System Settings pane Reminds you to quit+reopen the terminal (the #1 gotcha) recall doctor now points to recall setup instead of just saying “Full Disk Access required” Apple Notes indexer now logs a clear permission warning instead of failing silently README gets a new “macOS permissions (one-time, ~30 seconds)” section Triggered by reviewer feedback: “I couldn’t get indexing notes to work”"}, {"post_id": 8996, "ts": "2026-06-15T00:09:49Z", "hours": 0.5086, "text": "Fixed the issue regarding the try project button"}, {"post_id": 8909, "ts": "2026-06-14T20:33:18Z", "hours": 0.8881, "text": "New recall doctor subcommand that runs a full setup check Verifies Python, SQLite FTS5, pbpaste, osascript, index DB Checks every data source — clipboard, browsers, notes, mail, chat Surfaces permission-gated failures (e.g. Apple Notes needs Full Disk Access) Found 7 issues on my own machine that the indexer was silently skipping Use it whenever something feels off: recall doctor"}, {"post_id": 7538, "ts": "2026-06-12T16:17:55Z", "hours": 1.8083, "text": "Built recall, a local full-text search tool for macOS. One hotkey searches your clipboard, browser history, Notes, shell, mail, and chat apps at once. No cloud, no account everything stays on your Sub-2-second searches across 1,600+ items on first run."}]...
|
Title: Frictionless by @harshithn | Stardance
Dev Title: Frictionless by @harshithn | Stardance
Devlogs:
Built recall, a local full-text search tool for macOS. One hotkey searches your clipboard, browser history, Notes, shell, mail, and chat apps at once. No cloud, no account everything stays on your Sub-2-second searches across 1,600+ items on first run.
New recall doctor subcommand that runs a full setup check Verifies Python, SQLite FTS5, pbpaste, osascript, index DB Checks every data source — clipboard, browsers, notes, mail, chat Surfaces permission-gated failures (e.g. Apple Notes needs Full Disk Access) Found 7 issues on my own machine that the indexer was silently skipping Use it whenever something feels off: recall doctor
Fixed the issue regarding the try project button
Fixed silent failure on Apple Notes (and Mail) indexing Root cause: macOS Full Disk Access not granted to the user’s terminal New recall setup command — click-by-step walkthrough Detects your terminal (Terminal, iTerm, Warp, VS Code) Opens the right System Settings pane Reminds you to quit+reopen the terminal (the #1 gotcha) recall doctor now points to recall setup instead of just saying “Full Disk Access required” Apple Notes indexer now logs a clear permission warning instead of failing silently README gets a new “macOS permissions (one-time, ~30 seconds)” section Triggered by reviewer feedback: “I couldn’t get indexing notes to work”
URL search results show the real page title now, not the raw link Before: https://news.ycombinator.com/item?id=12345 After: Show HN: I built X – Hacker News Cached locally so URLs only get fetched once New recall titles command to backfill the whole index No new dependencies
Ships:
I built recall, a local full-text search tool for macOS. It indexes your clipboard, browser history, Apple Notes, shell history, mail, Slack, and Discord into a single SQLite FTS5 database, then lets you search all of it with one CLI command or a small web UI. The problem: I kept losing 5 minutes bouncing between Slack search, Gmail search, browser history, and Notes whenever I tried to find something I knew I’d seen. recall kills that — one box, sub-second results, 100% local. No cloud, no account, no telemetry. What was challenging: macOS permissions (Apple Notes + Mail need Full Disk Access and fail silently without it). I added a recall doctor command that surfaces these failures with actionable hints. Thread-safety in SQLite when the HTTP server and indexer share a connection. The vanilla-JS web UI had to feel snappy without a framework — no React, no build step, just debounced fetch + DOM. What I’m proud of: the whole thing is ~2,500 lines of Python plus a 200-line vanilla-JS web UI. Zero external runtime dependencies. Anyone can read the whole thing in an hour and trust it with their data because the data never leaves the machine. To try it: git clone https://github.com/hnelabhotla-boop/Recall , run ./install.sh, then recall ui to open the search box....
|
1793847235.775434
|
1793933635.775434
|
|
17335
|
Untitled by @lix | Stardance
|
lix
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Untitled by @lix | Stardance
|
1792939779.8717813
|
1793803779.8717813
|
|
17336
|
My awesome macropad! by @adtx | Stardance
|
adtx
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My awesome macropad! by @adtx | Stardance
|
1793181308.7158976
|
1793786108.7158976
|
|
17337
|
Brawl tower by @xabhay9 | Stardance
|
xabhay9
|
0
|
19.05
|
0
|
[]
|
[{"post_id": 28831, "ts": "202 [{"post_id": 28831, "ts": "2026-07-15T10:30:57Z", "hours": 5.3464, "text": "Devlog #4 Quality of life updates, MANY bug fixes. Bug fixes: Fixed ui bugs Fixed Combat system bugs (blocking) Fixed winning bugs Fixed datastore not saving Fixed badges not working Features added Added revenge (If a player knocks you off from the tower, using consumables or pushing, you can pay 25 robux to kill them). Added consumables, Banana & Radioactive banana, which can be thrown, and they make players slip once touched. Added Slip SFX, confused SFX on slip, and made it work with revenge."}, {"post_id": 27183, "ts": "2026-07-12T14:47:15Z", "hours": 0.5344, "text": "Devlog #3 Small update, but I think good for the game: I added a badge system to the game. There are currently 5 badges for players to unlock: - Welcome – Join the game for the first time (also gives you 250 Cash!) . - Winner - Win your first game. - Menace - Slap 100 players. - Skill Issue - Ragdoll 100 times. - Can’t Touch This - Successfully block an incoming slap. I made a modular system to streamline future addition for badges, IF ANY because they’ll cost me money now to add them (I used up my 5 free)."}, {"post_id": 26755, "ts": "2026-07-11T18:42:40Z", "hours": 11.4119, "text": "Devlog #2 Between the last devlog and this, I built majority of features + frameworks. List of things completed in this devlog Shop System (Hyperlink between abilities and one-time-use purchases) Created a modular system to manage prices and purchases (Datastore saves abilities such as Double Jump & Block ). UI animations: Zoom in with background blur when opening the shop. Inverse animation on close. Complete Combat System Players can push each other, and they can also purchase the ability to block. Done using DOT product + magnitude detection. Rewards 50 cash . Blocking simply fires a remote communicating to the server that a player is blocking. On attack verification, if the player is in the CURRENT_PROTECTED array, it prevents damage + ragdoll, and instead plays a thud sound effect. Datastore Managing money, wins, and how many slaps a player has. This is important for many things, eg purchasing, gaining / losing money. UI Elements (Currency, Winning, Kill Feed) Currency When a player gains money, it has a shake effect + a green floating Δ+ which promptly disappears with a sound effect. Losing money does the same thing, but in red with Δ- . Winning See image attatched :D Kill Feed Created a kill feed with randomly generated text. Using RichText, I also made the attacker and victim have different colours. This works through a RemoteEvent being fired to all players. Example messages: {{attacker}} just <font color='rgb(122, 200, 255)'>REKT</font> {{victim}} {{victim}} bit the <font color='rgb(122, 200, 255)'>DUST</font> Abilities & One-Time Purchases Abilities work through datastore management. Purchased abilities are saved, and on CharacterAdded , their LocalScript gets inserted into the player’s character. One-time purchases simply fire a RemoteEvent (with sanity checks to verify the purchase) which then completes the action. Current abilities Double Jump Block Current one-time purchases Kill All Ragdoll All Low Gravity Animations Spent time making animations for: Push Block Double Jump (flip animation) Tower Generation There is a folder in ReplicatedStorage containing every possible stage. Using Lua’s % 2 operator, I check remainder for stage alignment (logic below). isRotated = index % 2 == 0 rotate(stage, isRotated and 180 or 0) Then, I simply calculate the current tower height and place the new stage directly on top. Shuffling stages is also straightforward, I use math.random on table index. Winning The server fires a RemoteEvent telling every client that somebody has won, rewards the winner, reshuffles the tower, and respawns every player. The tower also automatically reshuffles every 600 seconds (10 minutes) if nobody wins. Stage Elements Added the following stage elements using Roblox’s CollectionService tag system I also made ~ 10 stages (with own quirks, eg not being able to jump). Spent a lot of time on sound design aswell. Video: https://www.youtube.com/watch?v=WwGzDpOlbbk"}, {"post_id": 9326, "ts": "2026-06-15T17:18:40Z", "hours": 1.7617, "text": "Devlog #1 Things completed: Ragdoll system (debounce + ui) Server handling for ragdoll (caching) Respawn UI animation Custom healthbar + animations Next devlog will post a playable test-demo version"}]...
|
Title: Brawl tower by @xabhay9 | Stardance
Devlog Title: Brawl tower by @xabhay9 | Stardance
Devlogs:
Devlog #1 Things completed: Ragdoll system (debounce + ui) Server handling for ragdoll (caching) Respawn UI animation Custom healthbar + animations Next devlog will post a playable test-demo version
Devlog #2 Between the last devlog and this, I built majority of features + frameworks. List of things completed in this devlog Shop System (Hyperlink between abilities and one-time-use purchases) Created a modular system to manage prices and purchases (Datastore saves abilities such as Double Jump & Block ). UI animations: Zoom in with background blur when opening the shop. Inverse animation on close. Complete Combat System Players can push each other, and they can also purchase the ability to block. Done using DOT product + magnitude detection. Rewards 50 cash . Blocking simply fires a remote communicating to the server that a player is blocking. On attack verification, if the player is in the CURRENT_PROTECTED array, it prevents damage + ragdoll, and instead plays a thud sound effect. Datastore Managing money, wins, and how many slaps a player has. This is important for many things, eg purchasing, gaining / losing money. UI Elements (Currency, Winning, Kill Feed) Currency When a player gains money, it has a shake effect + a green floating Δ+ which promptly disappears with a sound effect. Losing money does the same thing, but in red with Δ- . Winning See image attatched :D Kill Feed Created a kill feed with randomly generated text. Using RichText, I also made the attacker and victim have different colours. This works through a RemoteEvent being fired to all players. Example messages: {{attacker}} just <font color='rgb(122, 200, 255)'>REKT</font> {{victim}} {{victim}} bit the <font color='rgb(122, 200, 255)'>DUST</font> Abilities & One-Time Purchases Abilities work through datastore management. Purchased abilities are saved, and on CharacterAdded , their LocalScript gets inserted into the player’s character. One-time purchases simply fire a RemoteEvent (with sanity checks to verify the purchase) which then completes the action. Current abilities Double Jump Block Current one-time purchases Kill All Ragdoll All Low Gravity Animations Spent time making animations for: Push Block Double Jump (flip animation) Tower Generation There is a folder in ReplicatedStorage containing every possible stage. Using Lua’s % 2 operator, I check remainder for stage alignment (logic below). isRotated = index % 2 == 0 rotate(stage, isRotated and 180 or 0) Then, I simply calculate the current tower height and place the new stage directly on top. Shuffling stages is also straightforward, I use math.random on table index. Winning The server fires a RemoteEvent telling every client that somebody has won, rewards the winner, reshuffles the tower, and respawns every player. The tower also automatically reshuffles every 600 seconds (10 minutes) if nobody wins. Stage Elements Added the following stage elements using Roblox’s CollectionService tag system I also made ~ 10 stages (with own quirks, eg not being able to jump). Spent a lot of time on sound design aswell. Video: https://www.youtube.com/watch?v=WwGzDpOlbbk
Devlog #3 Small update, but I think good for the game: I added a badge system to the game. There are currently 5 badges for players to unlock: - Welcome – Join the game for the first time (also gives you 250 Cash!) . - Winner - Win your first game. - Menace - Slap 100 players. - Skill Issue - Ragdoll 100 times. - Can’t Touch This - Successfully block an incoming slap. I made a modular system to streamline future addition for badges, IF ANY because they’ll cost me money now to add them (I used up my 5 free).
Devlog #4 Quality of life updates, MANY bug fixes. Bug fixes: Fixed ui bugs Fixed Combat system bugs (blocking) Fixed winning bugs Fixed datastore not saving Fixed badges not working Features added Added revenge (If a player knocks you off from the tower, using consumables or pushing, you can pay 25 robux to kill them). Added consumables, Banana & Radioactive banana, which can be thrown, and they make players slip once touched. Added Slip SFX, confused SFX on slip, and made it work with revenge....
|
1793393298.7720292
|
1793998098.7720292
|
|
17338
|
Frictionless by @Jessica_Jin | Stardance
|
Jessica_Jin
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Frictionless by @Jessica_Jin | Stardance
|
1793339472.4757743
|
1793944272.4757743
|
|
17339
|
My very own WebOS by @SASAI | Stardance
|
SASAI
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My very own WebOS by @SASAI | Stardance
|
1793562852.6127322
|
1794167652.6127322
|
|
17340
|
efouh3 by @Maaz_Siddiqui | Stardance
|
Maaz_Siddiqui
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: efouh3 by @Maaz_Siddiqui | Stardance
|
1793335675.5892656
|
1793940475.5892656
|
|
17341
|
Nasa space navigator by @mohammadzaidsiddiqui111 | Nasa space navigator by @mohammadzaidsiddiqui111 | Stardance...
|
mohammadzaidsiddiqui111
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Nasa space navigator by @mohammadzaidsiddiq Title: Nasa space navigator by @mohammadzaidsiddiqui111 | Stardance...
|
1793476434.1180348
|
1794081234.1180348
|
|
17342
|
Untitled by @chikennugget | Stardance
|
chikennugget
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Untitled by @chikennugget | Stardance
|
1793479731.4494183
|
1794084531.4494183
|
|
17343
|
My awesome macropad! by @chenchukrishna_g_1965 | S My awesome macropad! by @chenchukrishna_g_1965 | Stardance...
|
chenchukrishna_g_1965
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My awesome macropad! by @chenchukrishna_g_1 Title: My awesome macropad! by @chenchukrishna_g_1965 | Stardance...
|
1793450933.8368878
|
1794055733.8368878
|
|
17344
|
Privournal by @Manonit | Stardance
|
Manonit
|
2
|
48.0
|
664
|
[{"ship_num": 1, "ts": "2026-1 [{"ship_num": 1, "ts": "2026-10-07T18:09:56Z", "hours": 14.0, "multiplier": 13.4, "payout": 184, "blessing": "neutral", "text": "I made Privournal, a retro CLI application for private journaling and custom text encryption featuring basic ciphers, advanced encryption (Swiption, Randomised, Manual Modes Hehe), and new features like Show Keys and View Account. Pheww you’re gonna love this if you’ve people trying to read your journals 😭 The hardest part was restructuring the whole flow so as to make it less repetitive and cleaner , fixing CLI table alignment glitches, and honestly, if you saw my last ship you’d know that the Swiption feature I made gave me a pretty tough time, Lol. Though I’m really proud of creating a seamless terminal workflow and getting it published live on PyPI as well as GitHub, this is one of the few things I’ve worked on and completed in my life. To test it out, run pip install –upgrade privournal, and type privournal in your terminal, and try encrypting and immediately decrypting a short sentence with or without an account!", "repo": "https://github.com/sermanoire/Privournal", "demo": "https://pypi.org/project/privournal/"}, {"ship_num": 2, "ts": "2026-06-19T01:48:24Z", "hours": 34.0, "multiplier": 17.48, "payout": 480, "blessing": "neutral", "text": "I built Privournal, a command-line journal encryptor that allows users to encrypt and decrypt journal entries locally on their own device. Because for me, someone reading my journal is a legit nightmare, and Privournal is something I can use to keep my digital journals secure. For me that’s a clear quality-of-life improvement : ) Write your journal anywhere (Notes, Notion, etc), paste it into Privournal, get back unreadable text, paste that back into your app. No journal content is ever stored - only the encryption key, and that too locally, if you make an account. To read it yourself you can again head to Privournal and decrypt it! It supports multiple encryption modes, including Basic Encryption, Advanced Encryption, Randomized Encryption, and Swiption - a dynamic encryption system that changes a letter’s cover after a particular number of occurrences, making it impossible to crack. The biggest challenge was implementing Swiption and its decryption logic. Managing occurrence tracking, rotating covers, JSON storage, database integration, and reliable decryption took multiple iterations and a lot of debugging. I also migrated the project from a MySQL-based architecture to SQLite after realizing a shared database conflicted with the goal of being fully offline and private. I’m most proud of turning an idea into a complete, usable package that can be installed through PyPI. I’ve never worked on something so religiously on something of this complexity. The project ended up being over 1400 lines of code and taught me a huge amount about python, databases, GitHub and packaging, debugging, and obviously logical thinking. I’ve never worked on something so religiously on something of this complexity. 3 Major Quality-of-Life Improvements : Zero-setup local encryption - Works completely offline with automatic SQLite database. No server or complicated config needed. Powerful & flexible encryption - Multiple modes + Swiption (dynamic rotating covers) makes it much stronger than simple substitution ciphers. Seamless workflow - Write anywhere -> encrypt -> paste back -> decrypt easily with account or manual key. Perfect for daily journaling : ) Try creating an account (or continue without an account), encrypting a journal entry, saving it, and then decrypting it again. Swiption and Randomised Modes are the most interesting and secure features to experiment with. To test it, run these on terminal : pip install privournal python import MainCode MainCode.start() Thank you so much for reading! : )", "repo": "https://github.com/sermanoire/Privournal", "demo": "https://pypi.org/project/privournal/"}]...
|
[{"post_id": 77627, "ts": "202 [{"post_id": 77627, "ts": "2026-10-07T17:55:59Z", "hours": 2.0183, "text": "Devlog 16! — Okay, NOW It’s Done. 😭 Phew. I thought Privournal was finally finished, but while making the final ASCII recording, I found a bunch of small errors (Some was huge), inconsistencies and table issues that I had to fix. What I worked on: Added two new functions: Show Keys and View Account . Show Keys lets users view all their saved encryption keys. View Account displays their account details neatly in a table. Fixed several encryption and decryption bugs , including issues with journal selection, menu choices and input validation. Fixed problems with database values and journal data being handled incorrectly. Improved table formatting, spacing and alignment throughout the program. Cleaned up various small inconsistencies and errors that appeared during full end-to-end testing. Made the new ASCII recording . There was some old test data already stored, which was causing confusing duplicate entries and messing up the tables. After clearing that out, everything worked properly. And finally… The entire thing worked perfectly. 🎉 Most of this Devlog was about fixing the small things rather than adding huge new features, but it made Privournal more consistent and reliable."}, {"post_id": 77302, "ts": "2026-10-06T14:14:50Z", "hours": 6.5342, "text": "Devlog 15! It’s done. Phew. Finally, Privournal is DONE. Complete, everything’s perfect. In this final version I’ve made so many improvements! Instead of using time.sleep() to give pauses/time to copy the details, now the users can copy and paste encrypted text and its key without a time limit, and then they can simply press Enter to move ahead. I also made HUGE changes to the code. Earlier, the code used to run and at multiple steps ask for login/signup, which was fine but it was confusing. Now the first page is for login/signup, then the rest of the code flows smoothly accordingly. This restructuring required writing many parts of the code again and breaking a lot of functions into 2 parts. I also renamed some variables. I also worked on spacing and formatting. Now the user details are printed cleanly in a table. Overall, the code outputs are much more uniform. I made a new ASCII recording. It is yet to be updated on my GitHub, though. I’ve also published this new version on PyPI. If you had already installed Privournal, you can just update it. Now the main thing. I’m going to make a Website for Privournal where users wouldn’t need to install anything and can just go straight to encrypting or decrypting their journals. This version will still exist, though. It’ll be a rather Retro CLI version for people who like it this way. Phew. I’ll work on that now."}, {"post_id": 15049, "ts": "2026-06-24T13:23:31Z", "hours": 5.1881, "text": "##Devlog #14 - The Reviewer Arc 🥲 . Well… . The reviewer found some issues 😭 . So I went back and tested basically the ENTIRE project again. . While testing, I found and fixed a bunch of errors, especially in Advanced Encryption. I also added a lot of fallback checks throughout the code so Privournal doesn’t randomly decide to crash anymore 😭 . I also improved the decryption flow. . Earlier users had to select journals using IDs, now they can simply choose them by name, which feels way cleaner. . Another addition was a user guide in menu. I was short on time and it was a no brainer, so I used Claude to help generate the guide content and then integrated it into Privournal. The goal was simply to make the different encryption modes easier to understand :) . Apart from code changes, I also polished the project page, uploaded a sample flowchart, improved formatting and timing, and recorded a completely new asciinema demo PLUS I updated the README too. . Then came final testing, packaging, uploading the latest release, and requesting review again 🤞🏻 . Hopefully Privournal passes thru this time 😭 . Thank you : )"}, {"post_id": 11681, "ts": "2026-06-19T01:11:08Z", "hours": 16.0992, "text": "Devlog #13 - IT’S DONE DONE! The Final Chapter. FINALLY. After two intense days and 16+ hours of grinding, Privournal is officially complete and ready for Stardance! 😭🎉 OH AND Yeah, it’s been two days - Long time no see 😭 . Sorry for disappearing without posting Devlog #13 🥲 . These last 16+ hours were so packed with debugging, packaging, testing, and polishing that I kept postponing the devlog. So this one covers the entire final stretch. . Btw hey I’ll upload the clean Flowchart on Git repo, and yk I was gonna write a LOT here with complete details, but damn there’s a limit. Well it’s oki i’ll add a list of all my devlogs to the repo too :) What Happened? I thought Devlog #12 was the “everything works” moment, but the final stretch turned out to be the work. Audited every function in the codebase Fixed dozens of lingering bugs Cleaned up the entire code Updated the README 10+ times Set up PyPI packaging and releases Recorded asciinema demos (Took enormous time 😭) Added prettier output/interface functions Tested every scenario I could think of Major Change: MySQL → SQLite One of the biggest changes was moving away from MySQL. . Originally, Privournal used MySQL with accounts and a shared database. Later I realized that requires a server, hosting, maintenance, and introduces privacy concerns. . So I redesigned everything around SQLite. . Benefits: Fully offline More private Easier installation Simpler deployment Probably the biggest architectural change in the entire project. Biggest Bugs Fixed Login/signup flow issues Missing database commits Foreign key linking problems JSON serialization/loading bugs The infamous “extra spaces everywhere” decryption bug Variable scope and traversal issues Randomised Mode integration By the end of Day 1, the core encryption/decryption system was finally reliable. The Swiption Demon 😭 Swiption and SwipDe took forever. . The idea sounds simple: letters rotate through multiple covers after a certain number of occurrences. . Actually implementing occurrence tracking, rotation logic, life values, multiple dictionaries, JSON storage, and decryption logic nearly broke my brain 😭 . The funniest part? . After hours of struggling I realized I had overcomplicated everything. Since every cover uniquely maps to a letter, I could simply search through the dictionaries instead of tracking a ton of extra information. LIKE DAMN. Swiption is now fully functional and ended up becoming my coolest feature in the project. Packaging & Shipping Cleaned up the repository Improved README and documentation Fixed PyPI packaging issues Tested in fresh virtual environments Published releases Recorded final demos ✨ Project Complete Privournal is now a real, usable command-line journal encryptor. Thanks to: My brother for catching early logic flaws GPT for quick syntax rescues Everyone who followed the devlogs And myself for not giving up 😭 **Privournal is shipped and ready for Stardance! ** I’d love your feedback once you try it. . This project taught me something exams never did : . Working religiously on something with all your heart to make it real. . Thank you for reading all 13 devlogs ❤️ . ✨ See you in the next project ✨ | Project Complete | Ready to Submit | 🎉"}, {"post_id": 10031, "ts": "2026-06-16T16:23:14Z", "hours": 1.6072, "text": "Devlog #12 - IT WORKS! FINALLY! After an hour of debugging, EVERYTHING WORKS! -Encryption -Decryption -Uploading to & Fetching from the Database -Sign Up -Login . The only things that aren’t fully working yet are Swiption and Random Mode, and honestly that’s on me 😭. I got way too focused on making everything else work first AND GOD I had to improvise whole sections of the decryption logic, you won’t believe it. . If you compare the code I committed before this and the code I committed today, I had to improvise so much! . I removed and added so much. My old decryption was code wrong, I mean the logic was on point but the syntax and a few other things were off that’s why it wasn’t working. . Some of the errors were genuinely silly, again 😅 . All my elifs somehow had the same condition, and people this is why you don’t copy paste conditions to save time (I still don’t know how I missed that) 🥲 . My traversal i was a string, and I kept accidentally treating it like an int iterator, I mean ugh. . A lot of bugs were literally sitting right in front of my eyes. . Some bugs were much bigger tho. One of the weirdest happened after I finally got decryption working - The decrypted text had way too many spaces between words. . After staring at it for a while, I noticed that the number of spaces was exactly the same as the number of unique letters in the text. That’s when it hit me - the loop was continuing to run even after finding a match. Few “breaks” later hehe, everything worked 😭 . After Swiption and Random Mode, those 2 really aren’t done right now, I’m sorry I type so slow 😭 . Yeah so after that I’ll focus on making the code look real pretty, like -Fixing my silly variable names -Comment notes ig? -Better spacing and formatting -Cleaning up extra files -Writing a proper README and project description . And yes… On the 13th Devlog, the project will be done done 🤞🏻 . Note : I improvised all my previous devlogs, with proper format so that it’s easier to read, you can tell me if it’s better 🙃 . See you in the next one!"}, {"post_id": 9530, "ts": "2026-06-15T22:02:49Z", "hours": 3.1286, "text": "Devlog #11 - First Successful Test! Let’s go!!! . First successful test done 😇 . The database fetching works, the encryption flow works - it wasn’t working earlier tho (And I spent an hour finding errors, like i’d run it again n again and also ended up rewriting portions, like my Advanced Encyption code was all messed up 😭) . But yes, now it’s working, i’m sure there are a couple more errors but i’m on my way to fix em! . And yk some of the errors were so silly - I had written input(“Enter cover for”,x), and damn i failed to realise what the issue was. . Then after a lot of trying I asked GPT and it said it’s cuz input() can only have one argument in the braces 😅 . A lot of other errors too were like me getting all confused btw variable names, function not being global and so on. . But yeah, one at a time i fixed em, fixed the code and now only the refining of the code and some other bugs remain. . And um I had said i’d do it in 10 devlogs, but ah now it looks like 12th would be the last one. . But hey, the more the better, ig? 😭 . See ya in the next devlog!"}, {"post_id": 9123, "ts": "2026-06-15T08:21:26Z", "hours": 4.0792, "text": "Devlog #10 - A Slight Setback This is going to be the biggest devlog. And this one’s gonna be a disappointing one 🥲 . First of all, I was talking to my brother and he asked such a good question - It pointed to a flaw which I didn’t notice at all. . Let’s say there’s a word “am” in the journal, a’s cover is 1 and m’s cover is 27 (so am = 127). Now cuz there’s not spacing the decryption code will actually traverse thru each of number at a time in the encrypted text (127), so it’ll literally convert 1 and then 2 and then 7 separately. This was such a major flaw in my logic and I’m still agonizing internally over the fact that my eyes missed it. . But ah it’s ok, I’m fixing that by simply making adding a trailing space after the cover to separate each letter’s cover. . There was so much running and errors and staring at screen and all that. . Another thing I noticed is that in Advanced Encryption when the user will choose covers for 52 letters, he might accidentally repeat a cover - which obvi will make it impossible to distinguish btw 2 letters. So I gotta add each cover to a list and then every time the user adds a cover i’ll see if it’s already there in the list or not. . Now these flaws I got to know when I was talking to my brother, and it was past midnight. So almost immediately after waking up I was onto fixing these flaws, and it’s in progress :) . Apart from that, I’ve been refining the code (Found some silly errors in functions) and fixing more logic issues. . Earlier the Encryption Key that I was using to decrypt, it was a dictionary - with the keys as letters and values as the cover. So before uploading them to the db table, I converted them into text. But then while fixing decryption code, I did tried dict(the string key) and later found out that it all doesn’t work like that, the syntax. . I checked online, asked GPT, he suggested that I use the json module, and so I did. Json made it pretty easy, now the conversion was smooth and 2 liner. . Also I fixed all the login/signup system, it works as smooth as butter now Hehe . I’d say the main issue wasn’t the code it was following where am I. . Like cuz there are so many functions and steps and paths that I was getting overwhelmed (plus the code is like 600 lines), so I basically carefully went thru each line of code and arranged each function in an order and side by side made the final flowchart (It made following the code super easy and looks cool tbh) - But yes that’s hectic work right there. . Now after all that… Does the code run? HELL NO IT DOESNT! . It’s still showing 21 errors 😭 Plus, Swiption’s still left. . So right now, I’m trying to fix the flaws and errors and get this code up and running without Swiption, once it is smooth then at the end I can code Swiption into it. . See ya in the next devlog!"}, {"post_id": 8726, "ts": "2026-06-14T14:26:44Z", "hours": 1.1836, "text": "Devlog #9 - This was unexpected… Turns out there were some issues in the decryption function. It completely ignored spaces while decrypting, which definitely wasn’t ideal 😭 . I’ve fixed that tho. . Also I remade the tables in database with much more info such as date of encryption and email (for forgot password purposes) . And this code was getting too long, like more than 400 lines long. . So, I’ve started splitting things into different files to keep everything organized. Db code has its own file, big functions like AdvEn() have their own file, and the same goes for Swiption and Random Encryption logic. . Target’s to finish the code tonight. . Thanks for reading!"}, {"post_id": 8602, "ts": "2026-06-14T09:32:39Z", "hours": 1.1364, "text": "Devlog #8 - The Eights. . So this would be Privournal’s 8th devlog, and this one feels kinda special :) . My birthday falls on an 8th too, and I just love the number 8. . Anyways, I was actually supposed to be done with the Swiption feature by now, but I just couldn’t help myself and started working on the Random Encryption feature. . Reason’s that it just came to me - . Why not make Random Encryption available for both Advanced Encryption AND Swiption too?? . This would make the whole Encryption process super fast if some user doesn’t want to manually encrypt each letter. So I’m onto that, then I’ll immediately look into Swiption. . Then finally I’ll refine the whole code and just go through all the variables, functions and rename them if needed (I’m one of those people who name the variable something silly and forget what it was for 😭) . I’ve also started mapping out the overall visual flow of Privournal cuz it was getting a bit confusing. . I’m thinking abt wrapping this project up in about 12 devlogs, and then launching it. . You can also check out the GitHub - I’ve been committing code changes on it regularly :) . Thanks for reading!"}, {"post_id": 8359, "ts": "2026-06-13T21:56:30Z", "hours": 1.7153, "text": "Devlog #7 - Almost There! Only the Swiption feature remains! . I’ve also been thinking about adding another cool feature where the covers are randomly chosen using Python’s random module. The idea is that it’ll be added in Custom Encryption. . Also, my bad 😭 . I sometimes refered to the Custom Encryption as Advanced Encrytion, that might confuse you - but i’ll be consistent with names now. It’s just that it’s the start and so many features and ideas just mush into my head 🙃 . Once Swiption is done, the Python version should basically be mostly complete, and then it’ll be time for da next step . Getting all this on a website, tho that is gonna be really difficult for me, I really don’t know how to make websites 🥲. . Not gonna lie, that part scares me a a lot cuz I don’t wanna use AI for the website 😭 . I really don’t know much about web development, but I guess that’s part of building a project. You learn whatever you need as you go. . Thank you so much for reading these devlogs tho :) . Hopefully tmrw the code will be done and I’ll be one step closer to completing Privournal!"}, {"post_id": 8152, "ts": "2026-06-13T16:24:59Z", "hours": 1.0783, "text": "Devlog #6 - Advanced Encryption! Pheww, this part took some effort! . Today I worked on the main encryption logic for Advanced Encryption, and after a lot of thinking, coding, testing, and rethinking, I finally got the foundation for it down :) . This is one of the core features of Privournal, so it feels really good seeing it slowly come together. . That said, this is only a small win . The real challenge is gonna be the “Swiption” feature. Bet Swiption is gonna take half my brain cells 😭"}, {"post_id": 8096, "ts": "2026-06-13T14:51:13Z", "hours": 0.4681, "text": "Devlog #5 - Database Established! . Now the basic outline has to be perfected, with each and every thing being functional. . After spending some time figuring out SQL, databases, connections, and all that stuff, I finally managed to get Python talking to the database successfully :) . Seeing actual records being fetched felt pretty satisfying not gonna lie. For now, the goal’s Add features and make everything functional Connect everything together Improve the overall structure On the way to do that!"}, {"post_id": 8033, "ts": "2026-06-13T12:07:47Z", "hours": 0.9758, "text": "Devlog #4 - Still on the Db thing . Hehe, my highschool Python-SQL interface notes are coming in handy! . When I was studying this stuff, I honestly didn’t think I’d ever end up using most of it cuz it seemed too basic Turns out I was wrong :) . Since Privournal is gonna need a database for account credentials and all that, I’ve started revising my old notes and figuring out how everything fits together. . Let’s see how this goes!"}, {"post_id": 7690, "ts": "2026-06-12T21:00:25Z", "hours": 0.6611, "text": "Devlog #3 - The Plan’s Shape Guys! . Errors fixed and a basic outline has been made (This time on a paper Hehe) . AND i’ve thought about how i’m gonna go about it! . I’ve also spent some time thinking about how I’m actually gonna build this thing. . I’ll have to make a sql database ig (For account credentials and encryption details) and link it to my python code. I’m still new so i’m not sure if the sql database method for keeping records is how the real companies operate, but still seems pretty nice. . And I mean these are journals that we’re talking about, - so security and privacy matter a lot. . Tho my whole idea and code is that the actual journal entry is never stored. Only the encryption sequence and logic is. . That way, even if some dummy somehow got access to the database, they wouldn’t find the journal itself (Hehe can’t outsmart me) . For now, the plan pretty clear: Finish the Python main code Get encryption working properly Add database support Convert it into a website Well, that’s it ig. . I’m gonna go and tmrw complete the whole thing in python and then yes - hopefully convert it into a website :)"}, {"post_id": 7639, "ts": "2026-06-12T19:21:01Z", "hours": 0.9731, "text": "Devlog #2 - The First Error and an Outline . Ran into the first error, phewww! . Honestly, had it coming - things were going way too smoothly for a rather newbie like me 😭 . I was working on the account system and trying to get the signup and login flow working when I hit the error. I also created a basic outline of flow (In my mind 😅) . Spent a good chunk of time staring, retracing my code, and trying to figure out what exactly I had written wrong. But yes, I’m on it!"}, {"post_id": 7568, "ts": "2026-06-12T17:29:14Z", "hours": 0.5239, "text": "Devlog #1 - The Beginning . Today wasn’t about building features but about getting everything ready. . I finished setting up the Github thing (Took me an hour lol), cleaned things up, and wrote the first version of the README. . It might not seem like much, but damn did it feel so hectic, maybe cuz it’s my first time working on a real software project :) . After the setup, I finally started writing the core code. . Right now it’s just the foundation and an outline that I’ve set out to achieve :) . The journey begins!"}]...
|
Title: Privournal by @Manonit | Stardance
Devlogs Title: Privournal by @Manonit | Stardance
Devlogs:
Devlog #1 - The Beginning . Today wasn’t about building features but about getting everything ready. . I finished setting up the Github thing (Took me an hour lol), cleaned things up, and wrote the first version of the README. . It might not seem like much, but damn did it feel so hectic, maybe cuz it’s my first time working on a real software project :) . After the setup, I finally started writing the core code. . Right now it’s just the foundation and an outline that I’ve set out to achieve :) . The journey begins!
Devlog #2 - The First Error and an Outline . Ran into the first error, phewww! . Honestly, had it coming - things were going way too smoothly for a rather newbie like me 😭 . I was working on the account system and trying to get the signup and login flow working when I hit the error. I also created a basic outline of flow (In my mind 😅) . Spent a good chunk of time staring, retracing my code, and trying to figure out what exactly I had written wrong. But yes, I’m on it!
Devlog #3 - The Plan’s Shape Guys! . Errors fixed and a basic outline has been made (This time on a paper Hehe) . AND i’ve thought about how i’m gonna go about it! . I’ve also spent some time thinking about how I’m actually gonna build this thing. . I’ll have to make a sql database ig (For account credentials and encryption details) and link it to my python code. I’m still new so i’m not sure if the sql database method for keeping records is how the real companies operate, but still seems pretty nice. . And I mean these are journals that we’re talking about, - so security and privacy matter a lot. . Tho my whole idea and code is that the actual journal entry is never stored. Only the encryption sequence and logic is. . That way, even if some dummy somehow got access to the database, they wouldn’t find the journal itself (Hehe can’t outsmart me) . For now, the plan pretty clear: Finish the Python main code Get encryption working properly Add database support Convert it into a website Well, that’s it ig. . I’m gonna go and tmrw complete the whole thing in python and then yes - hopefully convert it into a website :)
Devlog #4 - Still on the Db thing . Hehe, my highschool Python-SQL interface notes are coming in handy! . When I was studying this stuff, I honestly didn’t think I’d ever end up using most of it cuz it seemed too basic Turns out I was wrong :) . Since Privournal is gonna need a database for account credentials and all that, I’ve started revising my old notes and figuring out how everything fits together. . Let’s see how this goes!
Devlog #5 - Database Established! . Now the basic outline has to be perfected, with each and every thing being functional. . After spending some time figuring out SQL, databases, connections, and all that stuff, I finally managed to get Python talking to the database successfully :) . Seeing actual records being fetched felt pretty satisfying not gonna lie. For now, the goal’s Add features and make everything functional Connect everything together Improve the overall structure On the way to do that!
Devlog #6 - Advanced Encryption! Pheww, this part took some effort! . Today I worked on the main encryption logic for Advanced Encryption, and after a lot of thinking, coding, testing, and rethinking, I finally got the foundation for it down :) . This is one of the core features of Privournal, so it feels really good seeing it slowly come together. . That said, this is only a small win . The real challenge is gonna be the “Swiption” feature. Bet Swiption is gonna take half my brain cells 😭
Devlog #7 - Almost There! Only the Swiption feature remains! . I’ve also been thinking about adding another cool feature where the covers are randomly chosen using Python’s random module. The idea is that it’ll be added in Custom Encryption. . Also, my bad 😭 . I sometimes refered to the Custom Encryption as Advanced Encrytion, that might confuse you - but i’ll be consistent with names now. It’s just that it’s the start and so many features and ideas just mush into my head 🙃 . Once Swiption is done, the Python version should basically be mostly complete, and then it’ll be time for da next step . Getting all this on a website, tho that is gonna be really difficult for me, I really don’t know how to make websites 🥲. . Not gonna lie, that part scares me a a lot cuz I don’t wanna use AI for the website 😭 . I really don’t know much about web development, but I guess that’s part of building a project. You learn whatever you need as you go. . Thank you so much for reading these devlogs tho :) . Hopefully tmrw the code will be done and I’ll be one step closer to completing Privournal!
Devlog #8 - The Eights. . So this would be Privournal’s 8th devlog, and this one feels kinda special :) . My birthday falls on an 8th too, and I just love the number 8. . Anyways, I was actually supposed to be done with the Swiption feature by now, but I just couldn’t help myself and started working on the Random Encryption feature. . Reason’s that it just came to me - . Why not make Random Encryption available for both Advanced Encryption AND Swiption too?? . This would make the whole Encryption process super fast if some user doesn’t want to manually encrypt each letter. So I’m onto that, then I’ll immediately look into Swiption. . Then finally I’ll refine the whole code and just go through all the variables, functions and rename them if needed (I’m one of those people who name the variable something silly and forget what it was for 😭) . I’ve also started mapping out the overall visual flow of Privournal cuz it was getting a bit confusing. . I’m thinking abt wrapping this project up in about 12 devlogs, and then launching it. . You can also check out the GitHub - I’ve been committing code changes on it regularly :) . Thanks for reading!
Devlog #9 - This was unexpected… Turns out there were some issues in the decryption function. It completely ignored spaces while decrypting, which definitely wasn’t ideal 😭 . I’ve fixed that tho. . Also I remade the tables in database with much more info such as date of encryption and email (for forgot password purposes) . And this code was getting too long, like more than 400 lines long. . So, I’ve started splitting things into different files to keep everything organized. Db code has its own file, big functions like AdvEn() have their own file, and the same goes for Swiption and Random Encryption logic. . Target’s to finish the code tonight. . Thanks for reading!
Devlog #10 - A Slight Setback This is going to be the biggest devlog. And this one’s gonna be a disappointing one 🥲 . First of all, I was talking to my brother and he asked such a good question - It pointed to a flaw which I didn’t notice at all. . Let’s say there’s a word “am” in the journal, a’s cover is 1 and m’s cover is 27 (so am = 127). Now cuz there’s not spacing the decryption code will actually traverse thru each of number at a time in the encrypted text (127), so it’ll literally convert 1 and then 2 and then 7 separately. This was such a major flaw in my logic and I’m still agonizing internally over the fact that my eyes missed it. . But ah it’s ok, I’m fixing that by simply making adding a trailing space after the cover to separate each letter’s cover. . There was so much running and errors and staring at screen and all that. . Another thing I noticed is that in Advanced Encryption when the user will choose covers for 52 letters, he might accidentally repeat a cover - which obvi will make it impossible to distinguish btw 2 letters. So I gotta add each cover to a list and then every time the user adds a cover i’ll see if it’s already there in the list or not. . Now these flaws I got to know when I was talking to my brother, and it was past midnight. So almost immediately after waking up I was onto fixing these flaws, and it’s in progress :) . Apart from that, I’ve been refining the code (Found some silly errors in functions) and fixing more logic issues. . Earlier the Encryption Key that I was using to decrypt, it was a dictionary - with the keys as letters and values as the cover. So before uploading them to the db table, I converted them into text. But then while fixing decryption code, I did tried dict(the string key) and later found out that it all doesn’t work like that, the syntax. . I checked online, asked GPT, he suggested that I use the json module, and so I did. Json made it pretty easy, now the conversion was smooth and 2 liner. . Also I fixed all the login/signup system, it works as smooth as butter now Hehe . I’d say the main issue wasn’t the code it was following where am I. . Like cuz there are so many functions and steps and paths that I was getting overwhelmed (plus the code is like 600 lines), so I basically carefully went thru each line of code and arranged each function in an order and side by side made the final flowchart (It made following the code super easy and looks cool tbh) - But yes that’s hectic work right there. . Now after all that… Does the code run? HELL NO IT DOESNT! . It’s still showing 21 errors 😭 Plus, Swiption’s still left. . So right now, I’m trying to fix the flaws and errors and get this code up and running without Swiption, once it is smooth then at the end I can code Swiption into it. . See ya in the next devlog!
Devlog #11 - First Successful Test! Let’s go!!! . First successful test done 😇 . The database fetching works, the encryption flow works - it wasn’t working earlier tho (And I spent an hour finding errors, like i’d run it again n again and also ended up rewriting portions, like my Advanced Encyption code was all messed up 😭) . But yes, now it’s working, i’m sure there are a couple more errors but i’m on my way to fix em! . And yk some of the errors were so silly - I had written input(“Enter cover for”,x), and damn i failed to realise what the issue was. . Then after a lot of trying I asked GPT and it said it’s cuz input() can only have one argument in the braces 😅 . A lot of other errors too were like me getting all confused btw variable names, function not being global and so on. . But yeah, one at a time i fixed em, fixed the code and now only the refining of the code and some other bugs remain. . And um I had said i’d do it in 10 devlogs, but ah now it looks like 12th would be the last one. . But hey, the more the better, ig? 😭 . See ya in the next devlog!
Devlog #12 - IT WORKS! FINALLY! After an hour of debugging, EVERYTHING WORKS! -Encryption -Decryption -Uploading to & Fetching from the Database -Sign Up -Login . The only things that aren’t fully working yet are Swiption and Random Mode, and honestly that’s on me 😭. I got way too focused on making everything else work first AND GOD I had to improvise whole sections of the decryption logic, you won’t believe it. . If you compare the code I committed before this and the code I committed today, I had to improvise so much! . I removed and added so much. My old decryption was code wrong, I mean the logic was on point but the syntax and a few other things were off that’s why it wasn’t working. . Some of the errors were genuinely silly, again 😅 . All my elifs somehow had the same condition, and people this is why you don’t copy paste conditions to save time (I still don’t know how I missed that) 🥲 . My traversal i was a string, and I kept accidentally treating it like an int iterator, I mean ugh. . A lot of bugs were literally sitting right in front of my eyes. . Some bugs were much bigger tho. One of the weirdest happened after I finally got decryption working - The decrypted text had way too many spaces between words. . After staring at it for a while, I noticed that the number of spaces was exactly the same as the number of unique letters in the text. That’s when it hit me - the loop was continuing to run even after finding a match. Few “breaks” later hehe, everything worked 😭 . After Swiption and Random Mode, those 2 really aren’t done right now, I’m sorry I type so slow 😭 . Yeah so after that I’ll focus on making the code look real pretty, like -Fixing my silly variable names -Comment notes ig? -Better spacing and formatting -Cleaning up extra files -Writing a proper README and project description . And yes… On the 13th Devlog, the project will be done done 🤞🏻 . Note : I improvised all my previous devlogs, with proper format so that it’s easier to read, you can tell me if it’s better 🙃 . See you in the next one!
Devlog #13 - IT’S DONE DONE! The Final Chapter. FINALLY. After two intense days and 16+ hours of grinding, Privournal is officially complete and ready for Stardance! 😭🎉 OH AND Yeah, it’s been two days - Long time no see 😭 . Sorry for disappearing without posting Devlog #13 🥲 . These last 16+ hours were so packed with debugging, packaging, testing, and polishing that I kept postponing the devlog. So this one covers the entire final stretch. . Btw hey I’ll upload the clean Flowchart on Git repo, and yk I was gonna write a LOT here with complete details, but damn there’s a limit. Well it’s oki i’ll add a list of all my devlogs to the repo too :) What Happened? I thought Devlog #12 was the “everything works” moment, but the final stretch turned out to be the work. Audited every function in the codebase Fixed dozens of lingering bugs Cleaned up the entire code Updated the README 10+ times Set up PyPI packaging and releases Recorded asciinema demos (Took enormous time 😭) Added prettier output/interface functions Tested every scenario I could think of Major Change: MySQL → SQLite One of the biggest changes was moving away from MySQL. . Originally, Privournal used MySQL with accounts and a shared database. Later I realized that requires a server, hosting, maintenance, and introduces privacy concerns. . So I redesigned everything around SQLite. . Benefits: Fully offline More private Easier installation Simpler deployment Probably the biggest architectural change in the entire project. Biggest Bugs Fixed Login/signup flow issues Missing database commits Foreign key linking problems JSON serialization/loading bugs The infamous “extra spaces everywhere” decryption bug Variable scope and traversal issues Randomised Mode integration By the end of Day 1, the core encryption/decryption system was finally reliable. The Swiption Demon 😭 Swiption and SwipDe took forever. . The idea sounds simple: letters rotate through multiple covers after a certain number of occurrences. . Actually implementing occurrence tracking, rotation logic, life values, multiple dictionaries, JSON storage, and decryption logic nearly broke my brain 😭 . The funniest part? . After hours of struggling I realized I had overcomplicated everything. Since every cover uniquely maps to a letter, I could simply search through the dictionaries instead of tracking a ton of extra information. LIKE DAMN. Swiption is now fully functional and ended up becoming my coolest feature in the project. Packaging & Shipping Cleaned up the repository Improved README and documentation Fixed PyPI packaging issues Tested in fresh virtual environments Published releases Recorded final demos ✨ Project Complete Privournal is now a real, usable command-line journal encryptor. Thanks to: My brother for catching early logic flaws GPT for quick syntax rescues Everyone who followed the devlogs And myself for not giving up 😭 **Privournal is shipped and ready for Stardance! ** I’d love your feedback once you try it. . This project taught me something exams never did : . Working religiously on something with all your heart to make it real. . Thank you for reading all 13 devlogs ❤️ . ✨ See you in the next project ✨ | Project Complete | Ready to Submit | 🎉
##Devlog #14 - The Reviewer Arc 🥲 . Well… . The reviewer found some issues 😭 . So I went back and tested basically the ENTIRE project again. . While testing, I found and fixed a bunch of errors, especially in Advanced Encryption. I also added a lot of fallback checks throughout the code so Privournal doesn’t randomly decide to crash anymore 😭 . I also improved the decryption flow. . Earlier users had to select journals using IDs, now they can simply choose them by name, which feels way cleaner. . Another addition was a user guide in menu. I was short on time and it was a no brainer, so I used Claude to help generate the guide content and then integrated it into Privournal. The goal was simply to make the different encryption modes easier to understand :) . Apart from code changes, I also polished the project page, uploaded a sample flowchart, improved formatting and timing, and recorded a completely new asciinema demo PLUS I updated the README too. . Then came final testing, packaging, uploading the latest release, and requesting review again 🤞🏻 . Hopefully Privournal passes thru this time 😭 . Thank you : )
Devlog 15! It’s done. Phew. Finally, Privournal is DONE. Complete, everything’s perfect. In this final version I’ve made so many improvements! Instead of using time.sleep() to give pauses/time to copy the details, now the users can copy and paste encrypted text and its key without a time limit, and then they can simply press Enter to move ahead. I also made HUGE changes to the code. Earlier, the code used to run and at multiple steps ask for login/signup, which was fine but it was confusing. Now the first page is for login/signup, then the rest of the code flows smoothly accordingly. This restructuring required writing many parts of the code again and breaking a lot of functions into 2 parts. I also renamed some variables. I also worked on spacing and formatting. Now the user details are printed cleanly in a table. Overall, the code outputs are much more uniform. I made a new ASCII recording. It is yet to be updated on my GitHub, though. I’ve also published this new version on PyPI. If you had already installed Privournal, you can just update it. Now the main thing. I’m going to make a Website for Privournal where users wouldn’t need to install anything and can just go straight to encrypting or decrypting their journals. This version will still exist, though. It’ll be a rather Retro CLI version for people who like it this way. Phew. I’ll work on that now.
Devlog 16! — Okay, NOW It’s Done. 😭 Phew. I thought Privournal was finally finished, but while making the final ASCII recording, I found a bunch of small errors (Some was huge), inconsistencies and table issues that I had to fix. What I worked on: Added two new functions: Show Keys and View Account . Show Keys lets users view all their saved encryption keys. View Account displays their account details neatly in a table. Fixed several encryption and decryption bugs , including issues with journal selection, menu choices and input validation. Fixed problems with database values and journal data being handled incorrectly. Improved table formatting, spacing and alignment throughout the program. Cleaned up various small inconsistencies and errors that appeared during full end-to-end testing. Made the new ASCII recording . There was some old test data already stored, which was causing confusing duplicate entries and messing up the tables. After clearing that out, everything worked properly. And finally… The entire thing worked perfectly. 🎉 Most of this Devlog was about fixing the small things rather than adding huge new features, but it made Privournal more consistent and reliable.
Ships:
I built Privournal, a command-line journal encryptor that allows users to encrypt and decrypt journal entries locally on their own device. Because for me, someone reading my journal is a legit nightmare, and Privournal is something I can use to keep my digital journals secure. For me that’s a clear quality-of-life improvement : ) Write your journal anywhere (Notes, Notion, etc), paste it into Privournal, get back unreadable text, paste that back into your app. No journal content is ever stored - only the encryption key, and that too locally, if you make an account. To read it yourself you can again head to Privournal and decrypt it! It supports multiple encryption modes, including Basic Encryption, Advanced Encryption, Randomized Encryption, and Swiption - a dynamic encryption system that changes a letter’s cover after a particular number of occurrences, making it impossible to crack. The biggest challenge was implementing Swiption and its decryption logic. Managing occurrence tracking, rotating covers, JSON storage, database integration, and reliable decryption took multiple iterations and a lot of debugging. I also migrated the project from a MySQL-based architecture to SQLite after realizing a shared database conflicted with the goal of being fully offline and private. I’m most proud of turning an idea into a complete, usable package that can be installed through PyPI. I’ve never worked on something so religiously on something of this complexity. The project ended up being over 1400 lines of code and taught me a huge amount about python, databases, GitHub and packaging, debugging, and obviously logical thinking. I’ve never worked on something so religiously on something of this complexity. 3 Major Quality-of-Life Improvements : Zero-setup local encryption - Works completely offline with automatic SQLite database. No server or complicated config needed. Powerful & flexible encryption - Multiple modes + Swiption (dynamic rotating covers) makes it much stronger than simple substitution ciphers. Seamless workflow - Write anywhere -> encrypt -> paste back -> decrypt easily with account or manual key. Perfect for daily journaling : ) Try creating an account (or continue without an account), encrypting a journal entry, saving it, and then decrypting it again. Swiption and Randomised Modes are the most interesting and secure features to experiment with. To test it, run these on terminal : pip install privournal python import MainCode MainCode.start() Thank you so much for reading! : )
I made Privournal, a retro CLI application for private journaling and custom text encryption featuring basic ciphers, advanced encryption (Swiption, Randomised, Manual Modes Hehe), and new features like Show Keys and View Account. Pheww you’re gonna love this if you’ve people trying to read your journals 😭 The hardest part was restructuring the whole flow so as to make it less repetitive and cleaner , fixing CLI table alignment glitches, and honestly, if you saw my last ship you’d know that the Swiption feature I made gave me a pretty tough time, Lol. Though I’m really proud of creating a seamless terminal workflow and getting it published live on PyPI as well as GitHub, this is one of the few things I’ve worked on and completed in my life. To test it out, run pip install –upgrade privournal, and type privournal in your terminal, and try encrypting and immediately decrypting a short sentence with or without an account!...
|
1793713851.3995078
|
1793800251.3995078
|
|
17345
|
Button Pusher by @Mottl | Stardance
|
Mottl
|
1
|
4.0
|
8
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-19T19:52:55Z", "hours": 4.0, "multiplier": 2.15, "payout": 8, "blessing": "neutral", "text": "This is a cool little demo that I made in React (specifically Vite), to learn React! You push the button, and… stuff happens. What happens? It’s on the site! Go check it out now!", "repo": "https://github.com/Mottlprograms/ButtonPresserDemo", "demo": "https://mottlprograms.github.io/ButtonPresserDemo/"}]...
|
[{"post_id": 12114, "ts": "202 [{"post_id": 12114, "ts": "2026-06-19T19:46:52Z", "hours": 1.2803, "text": "I am ready to ship! I have finished the demo (playable now!), I have learned a LOT about how to use React, and I have learned how to ship it with Github Pages (it was very annoying), and now I am ready to move onto greater things (like working on ClubHub)!"}, {"post_id": 11887, "ts": "2026-06-19T11:32:04Z", "hours": 2.5628, "text": "Now I get why everyone likes JSX based tools. I have INFINITE POWER now. ClubHub is gonna be a breeze!"}]...
|
Title: Button Pusher by @Mottl | Stardance
Devlog Title: Button Pusher by @Mottl | Stardance
Devlogs:
Now I get why everyone likes JSX based tools. I have INFINITE POWER now. ClubHub is gonna be a breeze!
I am ready to ship! I have finished the demo (playable now!), I have learned a LOT about how to use React, and I have learned how to ship it with Github Pages (it was very annoying), and now I am ready to move onto greater things (like working on ClubHub)!
Ships:
This is a cool little demo that I made in React (specifically Vite), to learn React! You push the button, and… stuff happens. What happens? It’s on the site! Go check it out now!...
|
1793792963.6129975
|
1793879363.6129975
|
|
17346
|
My very own WebOS by @Habibaa | Stardance
|
Habibaa
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My very own WebOS by @Habibaa | Stardance
|
1793526589.2471838
|
1794131389.2471838
|
|
17347
|
My very own WebOS by @Tapasmita | Stardance
|
Tapasmita
|
1
|
9.0
|
0
|
[{"ship_num": 1, "ts": "2026-1 [{"ship_num": 1, "ts": "2026-10-31T14:04:25Z", "hours": 9.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "It is a WebOS for people who like space themed things as much as I do. For me, the most challenging part of making this was learning how to code in JAVA.", "repo": "https://github.com/HAWKURRY/GOS", "demo": "https://hawkurry.github.io/GOS/OS.html"}]...
|
[{"post_id": 33361, "ts": "202 [{"post_id": 33361, "ts": "2026-07-23T06:37:56Z", "hours": 3.9839, "text": "Just finished making my BlogEt app. It is a basic notetaking app. I plan to start making more app after."}, {"post_id": 11284, "ts": "2026-06-18T13:48:49Z", "hours": 1.8883, "text": "Just finished the basic layout and base of my OS. Now I am developing the first app. I started on the process but rage quit because I couldn’t figure out classes. That will be a problem for tomorrow. But I am proud of my progress so far."}, {"post_id": 10537, "ts": "2026-06-17T09:31:36Z", "hours": 2.4383, "text": "My second devlog! I have finally finished learning how to make a proper window. I have so much more respect for my laptop now. My OS is not complete though, still yet to make my first app because without it the OS is pretty useless. This is my first time writing CSS and Java. I’m happy to be learning new language and seeing how they are used in daily applications. Proud of my progress so far!"}, {"post_id": 9197, "ts": "2026-06-15T13:15:56Z", "hours": 0.6061, "text": "Started working on my webpage. Struggled to change size and font of my headlines but eventually figured it out."}]...
|
Title: My very own WebOS by @Tapasmita | Stardance Title: My very own WebOS by @Tapasmita | Stardance
Devlogs:
Started working on my webpage. Struggled to change size and font of my headlines but eventually figured it out.
My second devlog! I have finally finished learning how to make a proper window. I have so much more respect for my laptop now. My OS is not complete though, still yet to make my first app because without it the OS is pretty useless. This is my first time writing CSS and Java. I’m happy to be learning new language and seeing how they are used in daily applications. Proud of my progress so far!
Just finished the basic layout and base of my OS. Now I am developing the first app. I started on the process but rage quit because I couldn’t figure out classes. That will be a problem for tomorrow. But I am proud of my progress so far.
Just finished making my BlogEt app. It is a basic notetaking app. I plan to start making more app after.
Ships:
It is a WebOS for people who like space themed things as much as I do. For me, the most challenging part of making this was learning how to code in JAVA....
|
1793714147.7805278
|
1793800547.7805278
|
|
17348
|
My awesome macropad! by @Geethik | Stardance
|
Geethik
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My awesome macropad! by @Geethik | Stardanc Title: My awesome macropad! by @Geethik | Stardance...
|
1793364639.5366626
|
1793969439.5366626
|
|
17349
|
CodeSync by @mohitsharma782828372 | Stardance
|
mohitsharma782828372
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: CodeSync by @mohitsharma782828372 | Stardan Title: CodeSync by @mohitsharma782828372 | Stardance...
|
1793206561.972304
|
1793811361.972304
|
|
17350
|
My awesome macropad! by @cmcejas | Stardance
|
cmcejas
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My awesome macropad! by @cmcejas | Stardanc Title: My awesome macropad! by @cmcejas | Stardance...
|
1793512640.9947522
|
1794117440.9947522
|