|
4701
|
My first slack bot! by @aaryaaaa | Stardance
|
aaryaaaa
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My first slack bot! by @aaryaaaa | Stardanc Title: My first slack bot! by @aaryaaaa | Stardance...
|
1792749055.728284
|
1793353855.728284
|
|
4702
|
My awesome macropad! by @simonschaukel | Stardance
|
simonschaukel
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My awesome macropad! by @simonschaukel | St Title: My awesome macropad! by @simonschaukel | Stardance...
|
1793173975.7396457
|
1793778775.7396457
|
|
4703
|
Untitled project by @Rishveer | Stardance
|
Rishveer
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Untitled project by @Rishveer | Stardance
|
1792659075.9881213
|
1793263875.9881213
|
|
4704
|
My awesome macropad! by @ianvollbrecht833 | Starda My awesome macropad! by @ianvollbrecht833 | Stardance...
|
ianvollbrecht833
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My awesome macropad! by @ianvollbrecht833 | Title: My awesome macropad! by @ianvollbrecht833 | Stardance...
|
1792911078.5795085
|
1793775078.5795085
|
|
4705
|
My awesome macropad! by @Mukta8 | Stardance
|
Mukta8
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My awesome macropad! by @Mukta8 | Stardance
|
1792705810.1763651
|
1793310610.1763651
|
|
4706
|
My first slack bot! by @parikrishnatri | Stardance
|
parikrishnatri
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My first slack bot! by @parikrishnatri | St Title: My first slack bot! by @parikrishnatri | Stardance...
|
1792637601.9284065
|
1793242401.9284065
|
|
4707
|
Ai by @AnantPrakash | Stardance
|
AnantPrakash
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Ai by @AnantPrakash | Stardance
|
1792918366.1533148
|
1793782366.1533148
|
|
4708
|
Cosmic note by @Mukta8 | Stardance
|
Mukta8
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Cosmic note by @Mukta8 | Stardance
|
1793188410.2580574
|
1793793210.2580574
|
|
4709
|
Untitled by @samda0824 | Stardance
|
samda0824
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Untitled by @samda0824 | Stardance
|
1792709655.6347945
|
1793314455.6347945
|
|
4710
|
Untitled project by @hubersonmathurin07 | Stardanc Untitled project by @hubersonmathurin07 | Stardance...
|
hubersonmathurin07
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Untitled project by @hubersonmathurin07 | S Title: Untitled project by @hubersonmathurin07 | Stardance...
|
1792734587.838567
|
1793339387.838567
|
|
4711
|
2d Portal-Fangame by @GriboX | Stardance
|
GriboX
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: 2d Portal-Fangame by @GriboX | Stardance
|
1793177630.4363997
|
1793782430.4363997
|
|
4712
|
VaultForge Crypto Wallet by @professional_toad | S VaultForge Crypto Wallet by @professional_toad | Stardance...
|
professional_toad
|
1
|
119.12
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-29T16:59:27Z", "hours": 26.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "Fully functional, multi-chain (Bitcoin, EVM, and Solana support with more on the way) wallet. To test this project, please go to the GitHub repository linked to the project.", "repo": "https://github.com/kunningKing11/vaultforge", "demo": "https://github.com/kunningKing11/vaultforge/releases"}]...
|
[{"post_id": 81422, "ts": "202 [{"post_id": 81422, "ts": "2026-10-21T07:03:36Z", "hours": 0.7881, "text": "Devlog 31 - swapping support for Solana! (partially) there’s now swapping support for solana, at least for DEX aggregators like LI.FI or Relay. i still need to figure out native solana DEX swapping on platforms like Jupiter…"}, {"post_id": 81198, "ts": "2026-10-20T08:10:50Z", "hours": 3.2675, "text": "Devlog 30 - support for swapping (finally!) this took so long!!! i thought i would be done last friday but ig that was overly optimistic… there are still some small things i will fix/improve to make the experience a bit smoother in the coming days. Implementation so i added uniswap support for all supported evm chains; however only for same-chain transactions and only through one pool. this is suboptimal so i want to add cross-chain support and through multiple pools maybe in the future. to make it possible to do cross-chain swaps, i added Relay support (it’s an aggregator) were solvers compete to give a quote. the issue with this is that they charge quite a fee and so i really want to just use uniswap where possible. what’s next better uniswap integration (as mentioned above), plus support for solana potentially jupiter support (it’s a solana DEX) as it has really good rates and high liquidity."}, {"post_id": 80081, "ts": "2026-10-16T05:40:57Z", "hours": 1.2094, "text": "Devlog 29 - more coin icons! specifically for AAVE, Chainlink (LINK), and Uniswap (UNI)."}, {"post_id": 79643, "ts": "2026-10-14T20:01:16Z", "hours": 1.4264, "text": "Devlog 28 - coin icons! it finally looks sooo professional now… just look at those icons! they will also appear in the send and transfer (soon to be swap!) tabs over the coming days. uniswap dex integration is still the top priority though. 🫡 before there weren’t any (they were just grey) and every wallet has them so i made it better ig"}, {"post_id": 79385, "ts": "2026-10-13T19:20:45Z", "hours": 3.1186, "text": "Devlog 27 - CCTP support is here… in like 30 minutes hang tight, it’s coming soon 🚀 i attached some proof , you guys can check out the transaction here more info on this tomorrow after v0.5.0 comes out with the CCTP support. you haven’t seen nothing yet, uniswap support coming next; stay tuned! probably coming in the next week or so…"}, {"post_id": 79016, "ts": "2026-10-12T11:14:38Z", "hours": 2.2986, "text": "Devlog 26 unfortunately, it’s taking longer than i would like to add the swapping and CCTP functionality. i would say i’m about 80% there, but there are quite a few things that i have to think about and as such, i think i will get it working by tomorrow (tuesday). stay tuned! 👀"}, {"post_id": 77760, "ts": "2026-10-08T05:56:13Z", "hours": 2.3114, "text": "Devlog 25 - some progress on the swapping i haven’t had much time in the last few days but i managed to do a big refactor to make the code more modular and cleaner. this is needed so that i can do more complex transactions instead of just basic transfers. i haven’t pushed it to main or committed it yet but it’s basically done. in terms of when CCTP support will ship, I think it will be by the end of sunday."}, {"post_id": 76737, "ts": "2026-10-04T13:27:58Z", "hours": 2.095, "text": "Devlog 24 - adding support for swapping after absolutely grinding on the support for swapping for the past week, here are some updates: 12 commits coming to main soon, about half bug fixes 4/10 things completed that i think are required for adding swapping support (more info below) i’ve also decided on a rough implementation order of swapping-related functionality: CCTP v2 transfers (basically moving USDC stablecoins across chains) Uniswap DEX (the biggest Decentrallized EXchange) Jupiter DEX ( the biggest dex on Solana) NEAR Intents (a cross-chain DEX) LI.FI aggregator (basically tells the walet the best market rates) i know this is kind of an ambitious timeline but i think i can pull it all off before the end of stardance on the 31st of october 🤞. i think i will manage to get CCTP transfers working by friday or sunday, depending on how much time i have."}, {"post_id": 74986, "ts": "2026-09-28T19:35:45Z", "hours": 1.4533, "text": "Devlog 23 15 new commits pushed to main ! still cooking on the integrated swapping support… sorry this is a short devlog; i’m more focused on the coding rn and will post when i’ve done something more substantial."}, {"post_id": 74352, "ts": "2026-09-27T06:58:05Z", "hours": 2.1792, "text": "Devlog 22 since the deadline for stardance has been extended by one month, i decided to keep going and make VaultForge as good as possible over the coming weeks. here’s a quick overview of what i will focus on next: actual swapping, and integration with multiple DEXes (think Jupiter, NEAR Intents, Uniswap, etc.) a better activity view token and chain icons! makes it much easier to differentiate between assets general performance and UI improvements with these new features, especially the integrated swapping, my wallet is finally going to be on par (mostly) with established wallets such as metamask. i’ve already got like 10+ commits since the last release that i will merge to main branch soon…"}, {"post_id": 73472, "ts": "2026-09-25T06:06:46Z", "hours": 1.0978, "text": "Devlog 21 as promised, VaultForge v0.4.0 is out! this brings huge changes to wallet unlock speed, adds ripple support, adds BIP-84 addresses, and loads more. here is the link to the release page if you want to check it out. some interesting stats: there was an increase of >6,000 lines of code which is a more than 50% increase since v0.3.0 . 132 commits since last release. this is probably going to be my second-to-last devlog as i really want to hit the 100-hour mark."}, {"post_id": 72818, "ts": "2026-09-23T20:02:48Z", "hours": 7.05, "text": "Devlog 20 so i finally added ripple support… and migrated everything to React for a much better, cleaner UI. and as always, i am late again. i actually could have finished on friday but i had other things to do (like homework) and i also wanted to migrate to react as well since I decided this will be my last release before the end of stardance, so i really want to add everything i can. this is because after stardance i will take a break of a few months on this project and then come back with a different hack club ysws challenge. the react migration was so big that i decided to use AI this time: the finished App.tsx file containing the react code is over 3090 lines of code (proof is the 2nd attached image)! that’s the largest code file i have ever worked on. since this is a huge change to the ui, i decided to create some before and after comparisons below. anyways, i decided to share some design decisions relating to the migration to react. i knew react was a big framework so it would add a few MB to the app’s file size (about 1-2 MB as of my recent testing) but the app itself is tiny anyway - not even 30 MB - so i thought it was really worth it. it gives you design consistency, more so than tailwindcss, which i needed since the more fun part for me was working on the backend and not the frontend (the user-facing part of the application). plus, the guys who work at coinbase (shoutout to them) made a goated plugin/theme/whatever you call it for react which makes my app have the default coinbase theme that i can tweak (i made the font monospace) which is alone like 70% of the stuff needed for the migration. i promise i will release v0.4.0 tomorrow…"}, {"post_id": 68207, "ts": "2026-09-14T18:12:58Z", "hours": 0.5819, "text": "Devlog 19 still cooking on the ripple support… i think i will be done by friday."}, {"post_id": 66040, "ts": "2026-09-11T16:23:03Z", "hours": 0.4975, "text": "Devlog 18 i finished all the perf improvements! there was one that i left out though bc it probably wouldn’t have helped much in terms of performance and would have been a pain to implement. i am FINALLY going to move on to ripple support for the next few days…"}, {"post_id": 65508, "ts": "2026-09-10T18:18:14Z", "hours": 0.7617, "text": "Devlog 17 perf improvement #3 done! 🎊 now refreshes are fully concurrent, w/ a limit of 4 requests at a time to avoid rate limiting. i haven’t fully tetsed it yet but it feels noticeably faster (like 25-35% faster) until the updated prices & balances are shown. plus, I kind of finished the settings stuff so i’ll be working on ripple support ig…"}, {"post_id": 64935, "ts": "2026-09-09T17:38:35Z", "hours": 2.8842, "text": "Devlog 16 sorry guys, i’m kind of late on this one tbh: I said that I would have the settings improvements, ripple support and all that ready by like monday but clearly nothing has happened since like the weekend. i have decided to delay the timleine by about a week as after some careful consideration I found it was wayyy too aggressive and my fingers can’t keep up with the typing speed i would need for that :) i seriously have no idae whatsoever why I thought it was possible to add that many features in such a short space of time. I know it kind of is but I have school now which means i have much less time for this with homework and studying and stuff. however, today I decided to lock in and actually do this and so I can assure you that i am hard at work doing the settings stuff rn and ripple support is absolutely coming right after that this next release really is going to be a big one… p.s. i attached a screenshot of some of the new commits i worked on (more are coming soon)"}, {"post_id": 62021, "ts": "2026-09-05T07:16:08Z", "hours": 1.6236, "text": "Devlog #15 Since the last devlog, I’ve worked on some more boring stuff: Tauri cleanup and desktop-specific improvements. I moved the application setup and command registration from src-tauri/src/main.rs into a new src-tauri/src/lib.rs . This keeps the entry point organized and follows Tauri’s recommended structure, while main.rs now only launches the library. I also replaced the browser clipboard API with Tauri’s native clipboard manager plugin. Copy buttons now use the desktop clipboard integration. Finally, VaultForge now enforces a single-instance window. If the app is launched while another instance is already open, the new launch focuses the existing main window instead of opening a second copy, which is far more desirable of a behaviour imo as it lets a user find a window without inadvertently opening even more. Plus some more random stuff: I now sign off all my commits As of today (4th of September), I also sign all my commits with a PGP key to verify all commits are made on my laptop and not by someone who hacked my GitHub account or smth - this is definitely overkill but why not Next, I’m continuing the settings improvements before moving on to Ripple support. P.S. I also randomly moved to Neovim as it looks much better than VS Code."}, {"post_id": 61004, "ts": "2026-09-03T18:18:49Z", "hours": 1.7533, "text": "Devlog #14 Not very much since last time; just some refactors and small improvements throughout. You can kind of tell by all the fix/chore/docs changes… btw improved settings is in the works - I think I’ll do some more progress over the next two days, then some actual chain support for Ripple. I’ve decided that I will release v0.4.0 before adding basic Zcash support as it’s been basically a month since last release and I don’t want to keep you guys waiting for those of you who want to download the binaries directly w/o building. Quick summary Now –> ~5 September: settings improvements 5 September –> 7 September: Ripple support 7/8 September: release of VaultForge v0.4.0"}, {"post_id": 59639, "ts": "2026-09-01T15:39:50Z", "hours": 3.5681, "text": "Devlog #13 I finally added different currencies ! Before, all prices were displayed in USD and now they can display in any of the below currencies: USD ($) EUR (€) GBP (£) JPY (¥) Shoutout to the fantastic API I used for this! Previously, I fetched CoinGecko pricing data which came in USD but I needed to convert this data into whatever currency the user chose so I had to find an API. However, there really weren’t any good forex APIs that were free with no rate limits when I searched for one so I turned to ChatGPT to find one and find one it did. This API gives daily central bank rates and even has data going back to 1948 on 201 currencies which is more than enough for this project. I also added the second performance improvement : caching the HTTP request client object to avoid having to recreate it on every API request. As of rn the project roadmap for the near future is this: Finish perf improvements Add basic Ripple (XRP) transaction support Maybe add transparent <=> transparent pool transaction support for Zcash (ZEC) Release VaultForge v0.5.0"}, {"post_id": 58117, "ts": "2026-08-30T13:52:54Z", "hours": 5.2722, "text": "Devlog #12 Quite a bit more to report this time! Since last devlog, I’ve mostly been working on improving actual wallet functionality, fixing some smaller UI issues, and looking into performance. Recent changes Below is a quick summary of what I’ve been working on since the last devlog: Full TRC-20 token support is here! 🎊 Tron is no longer limited to just native TRX transfers, and the token validation/network logic has been updated to support TRC-20 tokens as well. Significantly improved Bitcoin support by adding proper BIP84 account discovery . VaultForge now scans both receive and change addresses, tracks which UTXOs belong to which derived addresses, signs each input with the correct derived key, and refreshes discovery before sending. Anecdote: I use Brave Wallet which did the receive and change addresses thing so my funds didn’t show up in previous versions of VaultForge. However, as of this update, I now am. Wallet unlocking now feels much faster ! Cached balances/prices are shown immediately while fresh data refreshes in the background. Improved asset cards so they show which network an asset belongs to . Assets worth less than $1 are now hidden from the portfolio/assets view unless VaultForge does not have price data for them. Fixed a few UI issues, including dashboard scrolling, refresh errors, escaping asset data (aka preventing XSS) , and copying the currently selected wallet address. Converted the remaining .js config files to TypeScript because apparently I cannot resist refactoring things even when it makes no difference whatsoever. For the first time in this series of devlogs, I’m linking the changes to relevant commits on GitHub wherever possible so you can have a look. Performance improvements I also found a few ways to reduce VaultForge’s roughly 10s full refresh time: Cached unlock (mentioned above): perceived unlock time is now closer to ~1–3s, although balances/prices can still take around the same amount of time to fully refresh in the background. Reuse HTTP clients: should save roughly ~0.2-1.5s by reusing connections. Concurrent provider calls: likely the biggest improvement, potentially bringing a ~10s refresh down to ~3–5s. Refresh prices separately: could make fresh balances appear another ~0.5–2s sooner. Derive Argon2 once: should save roughly a few hundred ms to ~1s on cold unlocks. The above estimated perf improvements are obviously quite variable and depend on a multitude of factors (+ I got ChatGPT to analyze my current code to make an estimate because how else would I do it), but there is definitely still a lot of low-hanging fruit here. Upcoming features Actual settings are still the elephant in the room 😭, so I definitely need to get around to those but since I think this may need a big PR a bit like the previous style improvements, I think I will do this after v0.4.0 (so therefore for v0.5.0 ). Ripple (XRP) support (at least for native token transfers), planned for v0.4.0 . Zcash (ZEC) support: I’ve got a feeling this one will take quite some time so at most I will implement transparent <=> transparent transactions before next release but will have to see. The remaining performance improvements mentioned above."}, {"post_id": 55009, "ts": "2026-08-26T13:12:12Z", "hours": 8.6272, "text": "Devlog #11 What a MASSIVE PR and it’s finally merged ! Hooray! That was the biggest PR I’ve ever created by a big margin. Now I can finally start work on actual features like more support for different blockchains, address types, random extra features that certain chains have… the list goes on. I already have a personal list of 25 different blockchains that I want to add support for, most of which aren’t in the project roadmap simply for the reason that it would make the file overly long and hard to read. * sigh * that will take a long time Not to underestimate what I added with the PR, though - I didn’t spend like 15 hours and do 48 commits for nothing: inside the PR I added Onboarding! 🎊 Lots of (at least in the future) common settings will be selected here to set up your wallet. You can already import an existing wallet or generate a new one (both accept 12, 15, 18, 21, and 24-word recovery phrases) and set an auto-lock timeout and select networks you want or don’t want. Finally, there is also the option to select a theme if you want. New and more prominent splash screen when loading the application. The application itself is super fast so it takes barely any time but to make it look cooler I’ve set a minimum time to display it for to 650 ms. Icons throughout the application to make it look better. Let you copy addresses in the sidebar with one click and list all enabled addresses, not just Ethereum. Squashed some more small UI bugs, especially relating to scrolling in different parts of the application. Although slightly unrelated to the theme of the PR, MUCH better refresh logic and handling. It now respects network selection choices (like the ones you want or don’t want that you selected during onboarding) and tells you exactly which network’s RPC request encountered errors. Perhaps ironically, this was literally the reason I fixed an issue with the Solana RPC. Before this update, it never actually refreshed the balance correctly so it wasn’t working. However, after this change, I was able to identify that the issue was not on my end (yay!) but was actually PublicNode ’s (the RPC I’m using for the majority of chains in this project for consistency, apart from Monad and now Solana) as I assumed it could fetch the user’s token accounts but it couldn’t so I had to switch to using the official Solana RPC which fixed the issue. For anyone who got lost somewhere in the previous paragraph, an RPC is a service that allows you to query data about the state of the blockchain (where crypto transactions are stored) so you can use it to see how much crypto you are holding. Token accounts are basically a weird quirk of Solana where your main account is used to hold Solana which links to associated token accounts (ATAs) , which each hold one token other than Solana. This is by far not a complete list but rather a list of the highlights of this PR; if you want to look at all the changes, please feel free to visit the page linked at the top of this devlog. That said, after this big change, I did say last devlog that I would be getting ready to release version v0.4.0 of this application which is exactly what I will do after adding Tron token support! Quick reminder, after v0.4.0 I am planning to add Ripple (XRP) support, preliminary (meaning like non-shielded probably) support for Zcash and revamp the settings page like I did to the onboarding in this PR. Further out, I will probably focus some more on the in-application swaps to aggregate data from major DEXs (decentralized exchanges) to get the best rates, matching other major wallets w/ more chain support, which would make my wallet actually competitive. 🤞"}, {"post_id": 50515, "ts": "2026-08-19T18:16:53Z", "hours": 6.2019, "text": "Devlog #10 I’m close to finishing the theme improvements (I would say I’m about 90% there) and am doing some general bug fixes and QoL improvements. As such, there isn’t much to log rn except for a few small new features & improvements: Show/hide password button on recovery phrase and password Loads of bug fixes, e.g., inconsistent password strength progress bar on onboarding, preventing the user from typing the Enter key when entering a seed phrase to import, text overflow, etc. Some dependency version bumps If you want to see my progress on this PR (there are already like 30 commits in it - it’s a pretty big PR!), you can do so here . What’s coming next Some final finishing touches on the PR and then I will merge it to main so that it will be in the next release Support for Tron token transfers Support for Ripple The release of VaultForge v0.4.0 either before or after adding support for Ripple transactions A revamp of the settings tab (currently it doesn’t do anything) Support for Zcash"}, {"post_id": 45175, "ts": "2026-08-11T14:25:55Z", "hours": 6.7719, "text": "Devlog #9 Not much to report but I’m still working on improving the theme and the wider interface. You can see my progress here . Recent changes Below is a quick summary of what I’ve been working on since last devlog: Improved fonts ( Tektur for headings, Manrope for body text, and Ubuntu Mono for monospace text) Updated some text across different views for consistency Improved the look and feel of onboarding Added wallet setup flow to onboarding so you can now quickly import or generate a wallet with different seed length options (12, 15, 18, 21, and 24-word seed phrases are all supported now) Theme selection (in onboarding) between four different themes - I know these look a bit AI-generated rn (they are; it would have been frustrating to write out three new themes) but I will make them look a bit better in the future Auto-lock! 🎊 Now, you can easily set an auto-lock option in the onboarding or have none at all Upcoming features I think the elephant in the elephant in the room rn is actual settings which I will be working on over the next few days as currently there are no settings in the literal settings page!"}, {"post_id": 40732, "ts": "2026-08-04T13:27:44Z", "hours": 10.4086, "text": "Devlog #8 That took a lot of time! Over the past two weeks, I have done quite a bit of bug fixing and stopping undesired behaviour, including fixing weird sideways scrolling behaviour on the dashboard portfolio and creating custom scrollbars for less janky behaviour fixing the left sidebar’s contents overflowing vertically when the window height was decreased too much (it now lets you scroll if there is not enough space to fully display its contents) stopping zooming with Ctrl + ... or with trackpad gestures completely fix portfolio allocation percentage bars stuck at zero in the dashboard Along with this, I have done quite some improvement on the CI (especially the release.yaml workflow and pre-commit checks) and some refactoring, including using Lefthook npm install , bun install , Oxlint, Oxfmt validation, TypeScript typechecking, cargo check , and package.json package-lock.json bun.lock src-tauri/Cargo.lock are automatically staged on every commit. The npm install , bun install , and automatic lockfile staging is to ensure consistency between npm and Bun so that both can be used in development and testing. The other checks are for checking (or at least trying to; there could always be edge cases that aren’t covered) that no invalid code gets committed. There is also a maximum commit message subject length (72 characters) and the same for each line of the commit message body to ensure that commit messages stay readable. cargo test , and rust-analyzer analysis on every push to GitHub, since every commit runs the other checks anyway and uncommitted code can’t be pushed refactoring the previously monolithic TypeScript file that contained multiple pages so that each page now gets its own file inside of src/views/ significantly improving release.yaml (the app release workflow for GitHub) so that it now adds a commit count since the last release adds a line count statistic and the change in lines since the previous release allows for release comments and highlights written by me adds a link that links to a GitHub page of all the commits made between the release and the previous one (it already/before this change had all the new commits listed in the release notes with a link to each one) unifying networks.json (the file that contains all the relevant chain information for the TypeScript frontend) with all the scattered equivalent information in the Rust backend; now, the backend references the networks.json file instead Also, you are now able to test out all of these changes as I have just released v0.3.0 of VaultForge! Unfortunately, I haven’t yet worked on any of the theme changes but these are top priority for the next release… As a recap, here are the things that I will be working on for the next release, in order of priority: Updated theme Full Tron support (not just native token sends) Ripple (XRP) support Miscellaneous bug fixes and new features"}, {"post_id": 29564, "ts": "2026-07-16T16:15:34Z", "hours": 7.8725, "text": "Devlog #7 Unfortunately, since I am on holiday, I was not able to complete everything that I wanted to do by the end of last week. However, I was definitely able to make some progress: Progress Tron (TRX) support is here! 🎊 (albeit only native Tron sends are currently supported) some refactoring happened What’s next As I promised last week (but did not manage to complete), I was going to completely redesign the UI to make it more user-friendly and usable and have less of an AI-generated feel. This is because when I initially started this project, I used AI to create a demo app (without any of the signing logic), just to get a sort of structure to build on and add functionality to. However, I have changed pretty much every part of it so far apart from the theme which is why I am going to work on it now/this week. Icons for different currencies and across the application for easily recognisable features Support for Ripple (XRP)"}, {"post_id": 25341, "ts": "2026-07-09T16:00:38Z", "hours": 8.0019, "text": "Devlog #6 Progress Not much to announce rn but so far (since last week/log), I have refactored the code a bit bumped some dependencies made a cool new banner for the project (you can see it on this project’s banner) started work on improving the theme/look of the app fixed some minor issues and bugs, such as EVM nonce processing used the latest nonce from a confirmed block, ignoring the fact that the user may have been fast enough to send two transactions with the same nonce, which would guarantee that at least one transaction will fail BTC preview balance displayed to the user before approving a transaction did not take into account the unspent UTXOs in the calculation Not too exciting but this lays the groundwork for what is to come. 👇🏼 What’s next I will try to add this before the end of this week: a full redesign of the theme full Tron (TRX) support"}, {"post_id": 18461, "ts": "2026-06-29T16:57:39Z", "hours": 1.5761, "text": "Devlog #5 Solana support is here!"}, {"post_id": 17931, "ts": "2026-06-28T21:30:30Z", "hours": 9.9086, "text": "Devlog #4 Support for Solana coming soon, stay tuned! 👀 Since last devlog, I refactored the code a bit and split up all the TypeScript frontend and Rust backend logic into self-contained files, each for a clear purpose. Now, it’s much easier to read and understand the codebase."}, {"post_id": 13869, "ts": "2026-06-22T18:44:00Z", "hours": 1.0944, "text": "Devlog #3 The GitHub repository is public!"}, {"post_id": 13552, "ts": "2026-06-22T05:53:33Z", "hours": 9.5006, "text": "Devlog #2 I added loads of stuff! As promised: CoinGecko pricing data integrated Integrated RPC Progress on the actual transactions (implemented for EVM only so far and I am still working on it) Hardened security: Added a CSP (content security policy) to stop XSS (cross-site scripting) Hardened address validation, including EVM EIP-55 checksum validation Added a “remove wallet data” button Added zeroization for mnemonic/key/salt on lock and clear Coming soon/roadmap: Full support for BTC, EVM, SOL, and TRX chain transfers Actual cross-chain swaps via NEAR Intents Public GitHub repository (the repo hasn’t been made public yet as it’s still not fully working) Full support for more chains, including (but not limited to): Ripple (XRP) Hyperliquid (HYPE) - support for trading perps (perpetuals) Injective (INJ) Algorand (ALGO) Zcash (ZEC) - support transparent AND shielded addresses Monero (XMR) - alternative to Zcash Support for the Open Wallet Standard Native DeFi support: Native Aerodrome Finance LPing (liquidity providing) Native Aave lending (hopefully) Filecoin storage integration so you can easily store, download, and access files stored on Filecoin (hopefully) Integration with Tor for anonymity"}, {"post_id": 6061, "ts": "2026-06-10T05:49:45Z", "hours": 4.1822, "text": "Devlog #1 Just finished the basic UI; more coming soon… Current features already include: Argon2 password hashing to secure wallet Import a wallet seed phrase RPC connection to see how much crypto you’re holding QR code to get people to send stuff to you with a fault tolerance selector, e.g., smaller QR code for 7% data recovery, 25%, 30%, etc. Coming soon: GitHub repository for the project Coming soon: CoinGecko pricing data so you can see how much your crypto is worth Coming soon: actual transactions Coming soon: compatibility with Open Wallet Standard"}]...
|
Title: VaultForge Crypto Wallet by @professional_t Title: VaultForge Crypto Wallet by @professional_toad | Stardance
Devlogs:
Devlog #1 Just finished the basic UI; more coming soon… Current features already include: Argon2 password hashing to secure wallet Import a wallet seed phrase RPC connection to see how much crypto you’re holding QR code to get people to send stuff to you with a fault tolerance selector, e.g., smaller QR code for 7% data recovery, 25%, 30%, etc. Coming soon: GitHub repository for the project Coming soon: CoinGecko pricing data so you can see how much your crypto is worth Coming soon: actual transactions Coming soon: compatibility with Open Wallet Standard
Devlog #2 I added loads of stuff! As promised: CoinGecko pricing data integrated Integrated RPC Progress on the actual transactions (implemented for EVM only so far and I am still working on it) Hardened security: Added a CSP (content security policy) to stop XSS (cross-site scripting) Hardened address validation, including EVM EIP-55 checksum validation Added a “remove wallet data” button Added zeroization for mnemonic/key/salt on lock and clear Coming soon/roadmap: Full support for BTC, EVM, SOL, and TRX chain transfers Actual cross-chain swaps via NEAR Intents Public GitHub repository (the repo hasn’t been made public yet as it’s still not fully working) Full support for more chains, including (but not limited to): Ripple (XRP) Hyperliquid (HYPE) - support for trading perps (perpetuals) Injective (INJ) Algorand (ALGO) Zcash (ZEC) - support transparent AND shielded addresses Monero (XMR) - alternative to Zcash Support for the Open Wallet Standard Native DeFi support: Native Aerodrome Finance LPing (liquidity providing) Native Aave lending (hopefully) Filecoin storage integration so you can easily store, download, and access files stored on Filecoin (hopefully) Integration with Tor for anonymity
Devlog #3 The GitHub repository is public!
Devlog #4 Support for Solana coming soon, stay tuned! 👀 Since last devlog, I refactored the code a bit and split up all the TypeScript frontend and Rust backend logic into self-contained files, each for a clear purpose. Now, it’s much easier to read and understand the codebase.
Devlog #5 Solana support is here!
Devlog #6 Progress Not much to announce rn but so far (since last week/log), I have refactored the code a bit bumped some dependencies made a cool new banner for the project (you can see it on this project’s banner) started work on improving the theme/look of the app fixed some minor issues and bugs, such as EVM nonce processing used the latest nonce from a confirmed block, ignoring the fact that the user may have been fast enough to send two transactions with the same nonce, which would guarantee that at least one transaction will fail BTC preview balance displayed to the user before approving a transaction did not take into account the unspent UTXOs in the calculation Not too exciting but this lays the groundwork for what is to come. 👇🏼 What’s next I will try to add this before the end of this week: a full redesign of the theme full Tron (TRX) support
Devlog #7 Unfortunately, since I am on holiday, I was not able to complete everything that I wanted to do by the end of last week. However, I was definitely able to make some progress: Progress Tron (TRX) support is here! 🎊 (albeit only native Tron sends are currently supported) some refactoring happened What’s next As I promised last week (but did not manage to complete), I was going to completely redesign the UI to make it more user-friendly and usable and have less of an AI-generated feel. This is because when I initially started this project, I used AI to create a demo app (without any of the signing logic), just to get a sort of structure to build on and add functionality to. However, I have changed pretty much every part of it so far apart from the theme which is why I am going to work on it now/this week. Icons for different currencies and across the application for easily recognisable features Support for Ripple (XRP)
Devlog #8 That took a lot of time! Over the past two weeks, I have done quite a bit of bug fixing and stopping undesired behaviour, including fixing weird sideways scrolling behaviour on the dashboard portfolio and creating custom scrollbars for less janky behaviour fixing the left sidebar’s contents overflowing vertically when the window height was decreased too much (it now lets you scroll if there is not enough space to fully display its contents) stopping zooming with Ctrl + ... or with trackpad gestures completely fix portfolio allocation percentage bars stuck at zero in the dashboard Along with this, I have done quite some improvement on the CI (especially the release.yaml workflow and pre-commit checks) and some refactoring, including using Lefthook npm install , bun install , Oxlint, Oxfmt validation, TypeScript typechecking, cargo check , and package.json package-lock.json bun.lock src-tauri/Cargo.lock are automatically staged on every commit. The npm install , bun install , and automatic lockfile staging is to ensure consistency between npm and Bun so that both can be used in development and testing. The other checks are for checking (or at least trying to; there could always be edge cases that aren’t covered) that no invalid code gets committed. There is also a maximum commit message subject length (72 characters) and the same for each line of the commit message body to ensure that commit messages stay readable. cargo test , and rust-analyzer analysis on every push to GitHub, since every commit runs the other checks anyway and uncommitted code can’t be pushed refactoring the previously monolithic TypeScript file that contained multiple pages so that each page now gets its own file inside of src/views/ significantly improving release.yaml (the app release workflow for GitHub) so that it now adds a commit count since the last release adds a line count statistic and the change in lines since the previous release allows for release comments and highlights written by me adds a link that links to a GitHub page of all the commits made between the release and the previous one (it already/before this change had all the new commits listed in the release notes with a link to each one) unifying networks.json (the file that contains all the relevant chain information for the TypeScript frontend) with all the scattered equivalent information in the Rust backend; now, the backend references the networks.json file instead Also, you are now able to test out all of these changes as I have just released v0.3.0 of VaultForge! Unfortunately, I haven’t yet worked on any of the theme changes but these are top priority for the next release… As a recap, here are the things that I will be working on for the next release, in order of priority: Updated theme Full Tron support (not just native token sends) Ripple (XRP) support Miscellaneous bug fixes and new features
Devlog #9 Not much to report but I’m still working on improving the theme and the wider interface. You can see my progress here . Recent changes Below is a quick summary of what I’ve been working on since last devlog: Improved fonts ( Tektur for headings, Manrope for body text, and Ubuntu Mono for monospace text) Updated some text across different views for consistency Improved the look and feel of onboarding Added wallet setup flow to onboarding so you can now quickly import or generate a wallet with different seed length options (12, 15, 18, 21, and 24-word seed phrases are all supported now) Theme selection (in onboarding) between four different themes - I know these look a bit AI-generated rn (they are; it would have been frustrating to write out three new themes) but I will make them look a bit better in the future Auto-lock! 🎊 Now, you can easily set an auto-lock option in the onboarding or have none at all Upcoming features I think the elephant in the elephant in the room rn is actual settings which I will be working on over the next few days as currently there are no settings in the literal settings page!
Devlog #10 I’m close to finishing the theme improvements (I would say I’m about 90% there) and am doing some general bug fixes and QoL improvements. As such, there isn’t much to log rn except for a few small new features & improvements: Show/hide password button on recovery phrase and password Loads of bug fixes, e.g., inconsistent password strength progress bar on onboarding, preventing the user from typing the Enter key when entering a seed phrase to import, text overflow, etc. Some dependency version bumps If you want to see my progress on this PR (there are already like 30 commits in it - it’s a pretty big PR!), you can do so here . What’s coming next Some final finishing touches on the PR and then I will merge it to main so that it will be in the next release Support for Tron token transfers Support for Ripple The release of VaultForge v0.4.0 either before or after adding support for Ripple transactions A revamp of the settings tab (currently it doesn’t do anything) Support for Zcash
Devlog #11 What a MASSIVE PR and it’s finally merged ! Hooray! That was the biggest PR I’ve ever created by a big margin. Now I can finally start work on actual features like more support for different blockchains, address types, random extra features that certain chains have… the list goes on. I already have a personal list of 25 different blockchains that I want to add support for, most of which aren’t in the project roadmap simply for the reason that it would make the file overly long and hard to read. * sigh * that will take a long time Not to underestimate what I added with the PR, though - I didn’t spend like 15 hours and do 48 commits for nothing: inside the PR I added Onboarding! 🎊 Lots of (at least in the future) common settings will be selected here to set up your wallet. You can already import an existing wallet or generate a new one (both accept 12, 15, 18, 21, and 24-word recovery phrases) and set an auto-lock timeout and select networks you want or don’t want. Finally, there is also the option to select a theme if you want. New and more prominent splash screen when loading the application. The application itself is super fast so it takes barely any time but to make it look cooler I’ve set a minimum time to display it for to 650 ms. Icons throughout the application to make it look better. Let you copy addresses in the sidebar with one click and list all enabled addresses, not just Ethereum. Squashed some more small UI bugs, especially relating to scrolling in different parts of the application. Although slightly unrelated to the theme of the PR, MUCH better refresh logic and handling. It now respects network selection choices (like the ones you want or don’t want that you selected during onboarding) and tells you exactly which network’s RPC request encountered errors. Perhaps ironically, this was literally the reason I fixed an issue with the Solana RPC. Before this update, it never actually refreshed the balance correctly so it wasn’t working. However, after this change, I was able to identify that the issue was not on my end (yay!) but was actually PublicNode ’s (the RPC I’m using for the majority of chains in this project for consistency, apart from Monad and now Solana) as I assumed it could fetch the user’s token accounts but it couldn’t so I had to switch to using the official Solana RPC which fixed the issue. For anyone who got lost somewhere in the previous paragraph, an RPC is a service that allows you to query data about the state of the blockchain (where crypto transactions are stored) so you can use it to see how much crypto you are holding. Token accounts are basically a weird quirk of Solana where your main account is used to hold Solana which links to associated token accounts (ATAs) , which each hold one token other than Solana. This is by far not a complete list but rather a list of the highlights of this PR; if you want to look at all the changes, please feel free to visit the page linked at the top of this devlog. That said, after this big change, I did say last devlog that I would be getting ready to release version v0.4.0 of this application which is exactly what I will do after adding Tron token support! Quick reminder, after v0.4.0 I am planning to add Ripple (XRP) support, preliminary (meaning like non-shielded probably) support for Zcash and revamp the settings page like I did to the onboarding in this PR. Further out, I will probably focus some more on the in-application swaps to aggregate data from major DEXs (decentralized exchanges) to get the best rates, matching other major wallets w/ more chain support, which would make my wallet actually competitive. 🤞
Devlog #12 Quite a bit more to report this time! Since last devlog, I’ve mostly been working on improving actual wallet functionality, fixing some smaller UI issues, and looking into performance. Recent changes Below is a quick summary of what I’ve been working on since the last devlog: Full TRC-20 token support is here! 🎊 Tron is no longer limited to just native TRX transfers, and the token validation/network logic has been updated to support TRC-20 tokens as well. Significantly improved Bitcoin support by adding proper BIP84 account discovery . VaultForge now scans both receive and change addresses, tracks which UTXOs belong to which derived addresses, signs each input with the correct derived key, and refreshes discovery before sending. Anecdote: I use Brave Wallet which did the receive and change addresses thing so my funds didn’t show up in previous versions of VaultForge. However, as of this update, I now am. Wallet unlocking now feels much faster ! Cached balances/prices are shown immediately while fresh data refreshes in the background. Improved asset cards so they show which network an asset belongs to . Assets worth less than $1 are now hidden from the portfolio/assets view unless VaultForge does not have price data for them. Fixed a few UI issues, including dashboard scrolling, refresh errors, escaping asset data (aka preventing XSS) , and copying the currently selected wallet address. Converted the remaining .js config files to TypeScript because apparently I cannot resist refactoring things even when it makes no difference whatsoever. For the first time in this series of devlogs, I’m linking the changes to relevant commits on GitHub wherever possible so you can have a look. Performance improvements I also found a few ways to reduce VaultForge’s roughly 10s full refresh time: Cached unlock (mentioned above): perceived unlock time is now closer to ~1–3s, although balances/prices can still take around the same amount of time to fully refresh in the background. Reuse HTTP clients: should save roughly ~0.2-1.5s by reusing connections. Concurrent provider calls: likely the biggest improvement, potentially bringing a ~10s refresh down to ~3–5s. Refresh prices separately: could make fresh balances appear another ~0.5–2s sooner. Derive Argon2 once: should save roughly a few hundred ms to ~1s on cold unlocks. The above estimated perf improvements are obviously quite variable and depend on a multitude of factors (+ I got ChatGPT to analyze my current code to make an estimate because how else would I do it), but there is definitely still a lot of low-hanging fruit here. Upcoming features Actual settings are still the elephant in the room 😭, so I definitely need to get around to those but since I think this may need a big PR a bit like the previous style improvements, I think I will do this after v0.4.0 (so therefore for v0.5.0 ). Ripple (XRP) support (at least for native token transfers), planned for v0.4.0 . Zcash (ZEC) support: I’ve got a feeling this one will take quite some time so at most I will implement transparent <=> transparent transactions before next release but will have to see. The remaining performance improvements mentioned above.
Devlog #13 I finally added different currencies ! Before, all prices were displayed in USD and now they can display in any of the below currencies: USD ($) EUR (€) GBP (£) JPY (¥) Shoutout to the fantastic API I used for this! Previously, I fetched CoinGecko pricing data which came in USD but I needed to convert this data into whatever currency the user chose so I had to find an API. However, there really weren’t any good forex APIs that were free with no rate limits when I searched for one so I turned to ChatGPT to find one and find one it did. This API gives daily central bank rates and even has data going back to 1948 on 201 currencies which is more than enough for this project. I also added the second performance improvement : caching the HTTP request client object to avoid having to recreate it on every API request. As of rn the project roadmap for the near future is this: Finish perf improvements Add basic Ripple (XRP) transaction support Maybe add transparent <=> transparent pool transaction support for Zcash (ZEC) Release VaultForge v0.5.0
Devlog #14 Not very much since last time; just some refactors and small improvements throughout. You can kind of tell by all the fix/chore/docs changes… btw improved settings is in the works - I think I’ll do some more progress over the next two days, then some actual chain support for Ripple. I’ve decided that I will release v0.4.0 before adding basic Zcash support as it’s been basically a month since last release and I don’t want to keep you guys waiting for those of you who want to download the binaries directly w/o building. Quick summary Now –> ~5 September: settings improvements 5 September –> 7 September: Ripple support 7/8 September: release of VaultForge v0.4.0
Devlog #15 Since the last devlog, I’ve worked on some more boring stuff: Tauri cleanup and desktop-specific improvements. I moved the application setup and command registration from src-tauri/src/main.rs into a new src-tauri/src/lib.rs . This keeps the entry point organized and follows Tauri’s recommended structure, while main.rs now only launches the library. I also replaced the browser clipboard API with Tauri’s native clipboard manager plugin. Copy buttons now use the desktop clipboard integration. Finally, VaultForge now enforces a single-instance window. If the app is launched while another instance is already open, the new launch focuses the existing main window instead of opening a second copy, which is far more desirable of a behaviour imo as it lets a user find a window without inadvertently opening even more. Plus some more random stuff: I now sign off all my commits As of today (4th of September), I also sign all my commits with a PGP key to verify all commits are made on my laptop and not by someone who hacked my GitHub account or smth - this is definitely overkill but why not Next, I’m continuing the settings improvements before moving on to Ripple support. P.S. I also randomly moved to Neovim as it looks much better than VS Code.
Devlog 16 sorry guys, i’m kind of late on this one tbh: I said that I would have the settings improvements, ripple support and all that ready by like monday but clearly nothing has happened since like the weekend. i have decided to delay the timleine by about a week as after some careful consideration I found it was wayyy too aggressive and my fingers can’t keep up with the typing speed i would need for that :) i seriously have no idae whatsoever why I thought it was possible to add that many features in such a short space of time. I know it kind of is but I have school now which means i have much less time for this with homework and studying and stuff. however, today I decided to lock in and actually do this and so I can assure you that i am hard at work doing the settings stuff rn and ripple support is absolutely coming right after that this next release really is going to be a big one… p.s. i attached a screenshot of some of the new commits i worked on (more are coming soon)
Devlog 17 perf improvement #3 done! 🎊 now refreshes are fully concurrent, w/ a limit of 4 requests at a time to avoid rate limiting. i haven’t fully tetsed it yet but it feels noticeably faster (like 25-35% faster) until the updated prices & balances are shown. plus, I kind of finished the settings stuff so i’ll be working on ripple support ig…
Devlog 18 i finished all the perf improvements! there was one that i left out though bc it probably wouldn’t have helped much in terms of performance and would have been a pain to implement. i am FINALLY going to move on to ripple support for the next few days…
Devlog 19 still cooking on the ripple support… i think i will be done by friday.
Devlog 20 so i finally added ripple support… and migrated everything to React for a much better, cleaner UI. and as always, i am late again. i actually could have finished on friday but i had other things to do (like homework) and i also wanted to migrate to react as well since I decided this will be my last release before the end of stardance, so i really want to add everything i can. this is because after stardance i will take a break of a few months on this project and then come back with a different hack club ysws challenge. the react migration was so big that i decided to use AI this time: the finished App.tsx file containing the react code is over 3090 lines of code (proof is the 2nd attached image)! that’s the largest code file i have ever worked on. since this is a huge change to the ui, i decided to create some before and after comparisons below. anyways, i decided to share some design decisions relating to the migration to react. i knew react was a big framework so it would add a few MB to the app’s file size (about 1-2 MB as of my recent testing) but the app itself is tiny anyway - not even 30 MB - so i thought it was really worth it. it gives you design consistency, more so than tailwindcss, which i needed since the more fun part for me was working on the backend and not the frontend (the user-facing part of the application). plus, the guys who work at coinbase (shoutout to them) made a goated plugin/theme/whatever you call it for react which makes my app have the default coinbase theme that i can tweak (i made the font monospace) which is alone like 70% of the stuff needed for the migration. i promise i will release v0.4.0 tomorrow…
Devlog 21 as promised, VaultForge v0.4.0 is out! this brings huge changes to wallet unlock speed, adds ripple support, adds BIP-84 addresses, and loads more. here is the link to the release page if you want to check it out. some interesting stats: there was an increase of >6,000 lines of code which is a more than 50% increase since v0.3.0 . 132 commits since last release. this is probably going to be my second-to-last devlog as i really want to hit the 100-hour mark.
Devlog 22 since the deadline for stardance has been extended by one month, i decided to keep going and make VaultForge as good as possible over the coming weeks. here’s a quick overview of what i will focus on next: actual swapping, and integration with multiple DEXes (think Jupiter, NEAR Intents, Uniswap, etc.) a better activity view token and chain icons! makes it much easier to differentiate between assets general performance and UI improvements with these new features, especially the integrated swapping, my wallet is finally going to be on par (mostly) with established wallets such as metamask. i’ve already got like 10+ commits since the last release that i will merge to main branch soon…
Devlog 23 15 new commits pushed to main ! still cooking on the integrated swapping support… sorry this is a short devlog; i’m more focused on the coding rn and will post when i’ve done something more substantial.
Devlog 24 - adding support for swapping after absolutely grinding on the support for swapping for the past week, here are some updates: 12 commits coming to main soon, about half bug fixes 4/10 things completed that i think are required for adding swapping support (more info below) i’ve also decided on a rough implementation order of swapping-related functionality: CCTP v2 transfers (basically moving USDC stablecoins across chains) Uniswap DEX (the biggest Decentrallized EXchange) Jupiter DEX ( the biggest dex on Solana) NEAR Intents (a cross-chain DEX) LI.FI aggregator (basically tells the walet the best market rates) i know this is kind of an ambitious timeline but i think i can pull it all off before the end of stardance on the 31st of october 🤞. i think i will manage to get CCTP transfers working by friday or sunday, depending on how much time i have.
Devlog 25 - some progress on the swapping i haven’t had much time in the last few days but i managed to do a big refactor to make the code more modular and cleaner. this is needed so that i can do more complex transactions instead of just basic transfers. i haven’t pushed it to main or committed it yet but it’s basically done. in terms of when CCTP support will ship, I think it will be by the end of sunday.
Devlog 26 unfortunately, it’s taking longer than i would like to add the swapping and CCTP functionality. i would say i’m about 80% there, but there are quite a few things that i have to think about and as such, i think i will get it working by tomorrow (tuesday). stay tuned! 👀
Devlog 27 - CCTP support is here… in like 30 minutes hang tight, it’s coming soon 🚀 i attached some proof , you guys can check out the transaction here more info on this tomorrow after v0.5.0 comes out with the CCTP support. you haven’t seen nothing yet, uniswap support coming next; stay tuned! probably coming in the next week or so…
Devlog 28 - coin icons! it finally looks sooo professional now… just look at those icons! they will also appear in the send and transfer (soon to be swap!) tabs over the coming days. uniswap dex integration is still the top priority though. 🫡 before there weren’t any (they were just grey) and every wallet has them so i made it better ig
Devlog 29 - more coin icons! specifically for AAVE, Chainlink (LINK), and Uniswap (UNI).
Devlog 30 - support for swapping (finally!) this took so long!!! i thought i would be done last friday but ig that was overly optimistic… there are still some small things i will fix/improve to make the experience a bit smoother in the coming days. Implementation so i added uniswap support for all supported evm chains; however only for same-chain transactions and only through one pool. this is suboptimal so i want to add cross-chain support and through multiple pools maybe in the future. to make it possible to do cross-chain swaps, i added Relay support (it’s an aggregator) were solvers compete to give a quote. the issue with this is that they charge quite a fee and so i really want to just use uniswap where possible. what’s next better uniswap integration (as mentioned above), plus support for solana potentially jupiter support (it’s a solana DEX) as it has really good rates and high liquidity.
Devlog 31 - swapping support for Solana! (partially) there’s now swapping support for solana, at least for DEX aggregators like LI.FI or Relay. i still need to figure out native solana DEX swapping on platforms like Jupiter…
Ships:
Fully functional, multi-chain (Bitcoin, EVM, and Solana support with more on the way) wallet. To test this project, please go to the GitHub repository linked to the project....
|
1793134081.928117
|
1793220481.928117
|
|
4713
|
My awesome macropad! by @Zimy | Stardance
|
Zimy
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My awesome macropad! by @Zimy | Stardance
|
1792594235.8789992
|
1793199035.8789992
|
|
4714
|
My first slack bot! by @Aryanmehta | Stardance
|
Aryanmehta
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My first slack bot! by @Aryanmehta | Starda Title: My first slack bot! by @Aryanmehta | Stardance...
|
1792651903.206886
|
1793256703.206886
|
|
4715
|
My awesome macropad! by @Varsha | Stardance
|
Varsha
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My awesome macropad! by @Varsha | Stardance
|
1792626482.2307441
|
1793231282.2307441
|
|
4716
|
My awesome macropad! by @divya | Stardance
|
divya
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My awesome macropad! by @divya | Stardance
|
1792630297.8182464
|
1793235097.8182464
|
|
4717
|
My first slack bot! by @Dorapakoda | Stardance
|
Dorapakoda
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My first slack bot! by @Dorapakoda | Starda Title: My first slack bot! by @Dorapakoda | Stardance...
|
1792759870.5100803
|
1793364670.5100803
|
|
4718
|
My awesome macropad! by @arshv503 | Stardance
|
arshv503
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My awesome macropad! by @arshv503 | Stardan Title: My awesome macropad! by @arshv503 | Stardance...
|
1793181289.2758033
|
1793786089.2758033
|
|
4719
|
Scoutmaster 2.0 by @Zee | Stardance
|
Zee
|
0
|
94.63
|
0
|
[]
|
[{"post_id": 65679, "ts": "202 [{"post_id": 65679, "ts": "2026-09-11T00:05:40Z", "hours": 4.6714, "text": "Devlog 17 Now that this webapp is in its final stages of completion, I have just been completing todo list items really, these were: Fixing double websocket connect bug Adding update current team for summary to server Added functionality to settings menu Made competitions pull from an actual API instead of a json saved inside the project files Now the main items left are: Path scouting for auto Finish landing page"}, {"post_id": 61154, "ts": "2026-09-03T22:30:36Z", "hours": 5.5403, "text": "Devlog 16 I just boosted the security of the tool quite a bit, now with rate limiting, aggressive schema validation, and payload size limits. The issue before was that you could spam stuff no problem, but now there is a ton of resistance, and very strict limits. I still have more plans to make it even more secure as well. I also setup meta tags so now supposedly when you send a link depending on the platform, it will show this image and a description as well. An example of some of the new aggressive schema validation is: class QuestionChanges ( StrictModel ): title : Str | None = None type : ( Literal [ \" ln \" , \" sn \" , \" cb \" , \" a \" , \" img \" , \" n \" , \" mc \" , \" sc \" , \" r \" , \" st \" ] | None ) = None opt : dict [ Annotated [ str , StringConstraints ( pattern = r \" ^[0-9]$ \" )], Annotated [ str , Field ( max_length = 50 )]] | None = Field ( default = None , max_length = 10 ) minmax : Annotated [ list [ Annotated [ int , Field ( ge =- 99999 , le = 99999 )]], Field ( min_length = 2 , max_length = 2 )] | None = None stars : Annotated [ int , Field ( ge = 0 , le = 10 )] | None = None I setup two different rate limiting systems, these include ones for the websocket, where each individual message type can get its own rate limit (some things should be easily called 500 times in a minute, while others should NOT be called more than 10) @ws_limit ( maxCalls = 500 , window = 60 ) async def handleUpdateTeamQuestion ( @ws_limit ( maxCalls = 8 , window = 60 ) async def handleCompCodeChange ( Window being time in seconds, maxCalls being the max calls in that window. This still needs more testing to make sure edge cases that are actually possible to do using the UI are not blocked by this security, but most regular use seems to not be affected."}, {"post_id": 59831, "ts": "2026-09-01T20:09:55Z", "hours": 5.2906, "text": "Devlog 15 I have now finished the following tasks: Inviting members Uninviting members Kicking members out of group Most of the UI to do with the member system (only joining a group left) I have also added these improvements to the backend related things: The front end no longer assumes that a user is in a group and instead calls a server endpoint to check first on sign in The front end now connects on loading of the dashboard page instead of loading on the sign in page, which is to fix a current issue where if the user is already signed in but on the landing page, it makes them re-sign in, but soon it will just be a button saying “go to dash” Added UI for loading hydration for dash Made it so the add match/add team buttons were only visible to admins I now pretty much don’t have too much to do, instead it will simply be finishing touches and a little bit of work with the joining system: Make the UI for creating a group Make the UI for joining a group actually work Add rate limiting Sync settings with database Publish"}, {"post_id": 56176, "ts": "2026-08-27T20:14:15Z", "hours": 3.9831, "text": "Devlog 14 I have now fully finished the summary team page UI as well. Now there are charts that show the points of each individual match, and then also each individual method of scoring. I also added two new screens for when a team is in first or last, if a team is in first, then there are no teams above to accept/reject, so it shows a little bit of text, if a team is in last, there is no team below to pick, so they have a separate message. I also took the time to add the flags bit beside a team’s name in the summary page too so it can match prescout. With all of the above, I also completed the mobile UI equivalent."}, {"post_id": 54640, "ts": "2026-08-25T17:45:02Z", "hours": 8.1594, "text": "Devlog 13 ALL. SERVER. SYNC. IS. DONE. I have finished every single piece of work needed to sync the server with the client at all times. I am now getting close to the finish line for this project. I added info toasts for some new things, rather than just showing the success toast for an action a user may not have actually done themselves for things like adding teams and matches. There are now very few tasks left really, they are: Fully localize everything Add French Add mobile UI to summary Add custom competition handling for summary Add a favicon Fix dark mode glitches on sign in/sign up pages"}, {"post_id": 50586, "ts": "2026-08-19T19:50:31Z", "hours": 6.155, "text": "Devlog 12 This devlog is now much more about the server side of things as that has been my focus right now. The way this all works is I have a realtime python server connect to my database and all clients. Clients are put into a realtime channel with all their teammates. When the first user of a team joins, the python server pulls all that team’s scouting data from the database and keeps it in memory. This is to speed up request response times. When a second, third, fourth, so on, user of a team joins, the server instead just gives them the data it has in memory instead of the database. To keep this all in sync, the server updates its version of that group’s data as soon as it is successfully saved to the database. It takes time to set this all up, and the parts of synchronization that I have completed so far are: Competition code changes Setting competitions to custom Adding an individual team Adding teams from API at the start Adding an individual match Adding matches from API at the start I have done one thing for the UI though, and that is finally adding a 404 page. I designed this 404 with the magnifying glass in the middle as the 0."}, {"post_id": 46008, "ts": "2026-08-12T21:28:56Z", "hours": 0.9444, "text": "Devlog 11 I usually space out my devlogs more, but I have now managed to get the base connection. This went by rather flawlessly due to now having the ability to use a python server for websockets, rather than the old system of having to use SQL requests with a million different RPC functions (sometimes causing queries to take up to 500ms on average) now taking only 100ms on average. This uses a simple system to take the JWT token from the user, validate it from the server to find the user id, then checks the database to see what group the user is in, then checks the group to make sure that the user is actually in that group, and if all those conditions are met, the user will connect to the websocket. If the user is the first one in the websocket, it right now just prints it, but it is designed to soon be used for a new feature. Soon, when a user joins a websocket and is the first one there, the server will load all that group’s data from the database, the reason for this is to have lightning fast connection and also make it possible to synchronize all users’ data in real time. (Whenever a user makes a change, it would update the server’s copy, and also push that change to the database)"}, {"post_id": 45166, "ts": "2026-08-11T14:13:17Z", "hours": 3.3492, "text": "Devlog 10 I have now finished the skeleton UI for the summary tab. I originally ran into some issues because I had tried to make one table with one map and just change the data for it, but that went horribly wrong because it made the code so janky and I had to write a ton of spaghetti code for it. In the end, I decided to switch to this system instead, where there are 3 completely separate tables for each tab, that get rendered in conditionally. { currentTab == 0 ? ( < Tab1 sorted = { sorted } sortBy = { sortBy } setSortBy = { setSortBy } setSortDown = { setSortDown } sortDown = { sortDown } selected = { selected } /> ) : currentTab == 1 ? ( < Tab2 teamsBelow = { teamsBelow } /> ) : ( < Tab3 teamsAbove = { teamsAbove } /> )} This way allowed me to have more freedom and more organization with the code. I also originally ran into an issue with my rendering system for picks. When a team would set their pick order, originally to preserve the order they had in mind, the site would check all teams in the picks array, and if they were below, they would render them in. This caused an issue where if a team changed ranks through a competition, the teams below would change, and some might not render, which caused a problem in that the indexes for the reordering were off, and it would reorder the ones at the top that were not visible to the user. In the end I fixed this by simply filtering out and deleting the ones that were no longer a valid pick. updateSummary ({ picks : [ ... summary . picks . filter (( pick ) => below . includes ( pick )), ... below . filter (( team ) => ! summary . picks . includes ( team )), ], }); My goals now are to get a start on the backend part so that the main structure of the site can be complete. The tasks that would be left after that are: Polishing the summary page UI Making the mobile UI for the summary page Adding the new setting to set user’s team number by default so they don’t have to constantly set it from the tab Landing page improvements"}, {"post_id": 44669, "ts": "2026-08-10T16:15:28Z", "hours": 4.81, "text": "Devlog 9 I have now done a lot of work in relation to the summary page, the hardest part is now pretty much done (the all teams page). The parts left now are the top picks page, and the accept/reject page. I have also done some work that isn’t specifically for the summary page too. Now, setting a competition will make it so the FTCScout api will actually pull the teams and matches in the competition. The only steps left before synchronization now are those previously mentioned summary pages, and the mobile UI for all summary pages."}, {"post_id": 43486, "ts": "2026-08-08T19:40:09Z", "hours": 3.4014, "text": "Devlog 8 This is now where things are really starting to pick up. With the entire match scouting page done, there is now only summary, and then it is time to work on the synchronization. I was thinking about leaving the score page empty, but instead I decided to just put what would be there for FTC Decode, I will later switch it to Biobuzz when the game is known."}, {"post_id": 32018, "ts": "2026-07-20T21:46:48Z", "hours": 3.5639, "text": "Devlog 7 I have now finished the team prescout page for both phones and desktop, this is where scouts can fill in those questions from earlier. I didn’t really run into much issues, but I implemented a special system to make sure that this fill in works with my current question structure. The original issue The original issue with this system is that if a question is edited, it keeps its question id, and if a user edits the question type, that means that what was once a multiple choice, can now be a note, which would completely mess it up if a user opens a team to check on the data. The solution? If a user enters a team page with an invalid question, the question will be reset to its default, so a string will be reset to “”, a number input will be reset to 0, etc. Now this means the prescout page is pretty much completely done, and I now have to start on the match scouting page."}, {"post_id": 31565, "ts": "2026-07-20T02:20:22Z", "hours": 1.3606, "text": "Devlog 6 I have now finished the phone UI for the prescouting page, meaning the last step of this page is officially complete. The next tasks are the individual team pages and the start of the match scouting page."}, {"post_id": 31396, "ts": "2026-07-19T18:47:10Z", "hours": 4.8928, "text": "Devlog 5 I have now finished the following tasks: Ability to edit question extra fields (e.g. min/max of a slider question) Ability to delete a section Ability to add a section Ability to edit a section Ability to add a question The tasks I have left related to the question management system are: Translation keys Create the phone UI I also hit a small hiccup along the way of adding these features where I discovered due to my localstorage structure, whenever a competition is switched, the questions are all deleted (now fixed by not just using a blank localstorage.clear()) New Code /** * Creates the base skeleton structure for localstorage * * @param {boolean} force - Force overwrite of existing localstorage or not */ export function createSkeleton ( force : boolean ) { const existing = localStorage . getItem ( \" data \" ); if ( existing && ! force ) { return ; } let setPrescout = { structure : {}, sections : { \" 0 \" : { title : \" Section 1 \" , headersize : 1 , questions : [], index : 0 , }, }, }; if ( existing ) { const parsed = JSON . parse ( existing ); setPrescout . structure = parsed . prescout . structure ; setPrescout . sections = parsed . prescout . sections ; } const skeleton : LocalStorageData = { compkey : \"\" , custom : false , prescout : { structure : setPrescout . structure , sections : setPrescout . sections , teams : {}, }, match : {}, }; localStorage . setItem ( \" data \" , JSON . stringify ( skeleton )); resetAllStates (); }"}, {"post_id": 30267, "ts": "2026-07-17T18:16:39Z", "hours": 7.7772, "text": "Devlog 4 I have spent almost 8 hours working on one feature and one feature alone. That feature is this drag and drop organizer for questions. This lets the user drag around the order of questions to rearrange them, and also drag around the order of sections. The reason this took so long was because the original library I was using (dnd-kit) for drag and drop made it a complete nightmare to try and do anything, it did not have a way to tell what items were where, as it would literally just change the HTML rather than give any data. Once I switched to hello pangea dnd, it all started fitting together. It actually gave me a way to see what changes occurred, save them, and then that updates the UI. Now my next tasks are: Ability to edit question extra fields (e.g. min/max of a slider question) Ability to delete a section Ability to add a section Ability to edit a section Ability to add a question Translation keys Create the phone UI"}, {"post_id": 28962, "ts": "2026-07-15T16:08:33Z", "hours": 3.4122, "text": "Devlog 3 I have learned my mistake, so now I will be aiming for a devlog every 3-4 hours instead. I have now made it so that the progress bar for teams scouted actually shows the real progress so far of scouting, and the lights actually react to that team’s scouting progress. (I have not made the system to add questions yet, so technically all teams are fully scouted (0/0 questions answered)). I have also started work on the question organization menu. It will be a drag and drop menu to let users arrange and edit questions how they want, with a button at the bottom to edit questions. The images attached below show the progress bar and drag and drop menu (ignore the dummy data put for now, I will replace that with actual data later), and the dropdown menu, which will be for selecting question type soon. I have also attached a very rough sketch of what the draggable question and section divs themselves will look like. (the blue and red is just to indicate different colors, it is not the final color)"}, {"post_id": 28423, "ts": "2026-07-14T17:37:05Z", "hours": 15.4136, "text": "Devlog 2 So far I have now completed the main job of the competition tab, which is to handle adding custom matches and teams. One of the major issues I came along was that the UI was ugly , the modals were bland, and I wanted to add more depth, so I added that highlight in the middle which lifts the interactable content up. I had issues with the height of the modal being either too tall or too short depending on the device screen. I solved this one by making a simple new function that helps decide if the modal needs to be bumped up in height or not /** * Returns whether the current screen height is \"akward\", <= 700px for phones/tablets, and <= 899px for desktop * * @returns true | false */ export function useIsAkwardHeight (): true | false { if ( useScreenType () != \" desktop \" ) { const isAkwardHeight = useMediaQuery ({ query : \" (max-height: 700px) \" }); return isAkwardHeight ; } else { const isAkwardHeight = useMediaQuery ({ query : \" (max-height: 899px) \" }); return isAkwardHeight ; } } An example of it being used: < div className = \" desktop-warningpopup \" id = \" avoidwarningpopupheight \" style = { specifyCustomCountry ? { height : useIsAkwardHeight () ? \" 55vh \" : \" 40vh \" } : { height : useIsAkwardHeight () ? \" 40vh \" : \" 25vh \" } } > One big thing I have done in the past bit of time (I did not know that anything after 10 hours is voided, meaning I just wasted like 5 hours 😭) is the organization of a lot of the code. I also organized a lot of the CSS into barrel files so that the CSS files are not thousands of lines long anymore. I have also started work on the prescouting tab (finally) and with that I have got the UI for the progress bar of teams scouted, and also the table of teams. One big thing I have now put in this project is persisting settings, and one big settings function. export const useSettings = create ( persist < { isLightMode : boolean ; flipTheme : () => void ; isCustomCountry : boolean ; flipCustomCountry : () => void ; } > ( ( set ) => ({ isLightMode : true , flipTheme : () => { set (( state ) => ({ isLightMode : ! state . isLightMode , })); }, isCustomCountry : false , flipCustomCountry : () => { set (( state ) => ({ isCustomCountry : ! state . isCustomCountry , })); }, }), { name : \" settings \" }, ), );"}, {"post_id": 14615, "ts": "2026-06-23T19:57:27Z", "hours": 11.9042, "text": "Devlog 1 This is my first devlog here, so I will explain a little bit about what this project is. Scoutmaster is a First Tech Challenge scouting tool designed to make scouting at competitions easier for teams. It has prescouting, which is basically scouting teams’ abilities before matches start to see what features they may have that might not be seen in matches, and then match scouting which lets scouts figure out exaclty how many points on average each team scores on their own, to make alliance selection at the end much easier. The original Scoutmaster did that, but in a very primitive way, the UI was not that good, and there were many bugs. This prompted me to rebuild it from the ground up, and fix those bugs along the way with what I have learned since then. So far, I have put in about 12 hours into this project. Within this time, I have managed to get a start on: Landing Page for both Desktop and Phone Dashboard for Desktop and Phone Initial API structure { \"compkey\": \"CAONBOQ\", \"custom\": false, \"prescout\": { \"structure\": { \"numOfQuestions\": 6, // the type of questions \"questionorder\": [\"lt\", \"st\", \"cb\", \"r\", \"auto\", \"picture\"], }, \"teams\": { \"1\": { // for images, the image name will be Scouting team number - picof Scouted team number, so XXXXX-picof-XXXXX \"data\": [ \"lorem ipsum\", \"situm dilor\", true, 213, \"IMAGINEANSVGPATHRIGHTHERE\", \"16423-picof1.png\", ], \"matchesIn\": [1, 5, 67], }, \"2\": {}, \"3\": {}, }, }, \"matchscout\": { \"Q1\": { \"highlighted\": [true, true, false, true], \"teams\": [1234, 1222, 1223, 1313], \"red1\": [45, 45, 45, 45], \"red2\": [55, 55, 55, 55], \"blue1\": [555, 555, 555, 555], \"blue2\": [1, 1, 1, 1], }, \"Q2\": { \"highlighted\": [true, true, false, true], \"teams\": [1234, 1222, 1223, 1313], \"red1\": [45, 45, 45, 45], \"red2\": [55, 55, 55, 55], \"blue1\": [555, 555, 555, 555], \"blue2\": [1, 1, 1, 1], }, }, } This is the initial API structure of what this tool will be using. This is designed to allow for both official competitions and custom ones, a feature not previously included in the original Scoutmaster. The plan now is to continue making the dashboard, and then afterwards, once the full dashboard works with localstorage, begin working on the backend to actually make it synchronize across devices."}]...
|
Title: Scoutmaster 2.0 by @Zee | Stardance
Devlog Title: Scoutmaster 2.0 by @Zee | Stardance
Devlogs:
Devlog 1 This is my first devlog here, so I will explain a little bit about what this project is. Scoutmaster is a First Tech Challenge scouting tool designed to make scouting at competitions easier for teams. It has prescouting, which is basically scouting teams’ abilities before matches start to see what features they may have that might not be seen in matches, and then match scouting which lets scouts figure out exaclty how many points on average each team scores on their own, to make alliance selection at the end much easier. The original Scoutmaster did that, but in a very primitive way, the UI was not that good, and there were many bugs. This prompted me to rebuild it from the ground up, and fix those bugs along the way with what I have learned since then. So far, I have put in about 12 hours into this project. Within this time, I have managed to get a start on: Landing Page for both Desktop and Phone Dashboard for Desktop and Phone Initial API structure { "compkey": "CAONBOQ", "custom": false, "prescout": { "structure": { "numOfQuestions": 6, // the type of questions "questionorder": ["lt", "st", "cb", "r", "auto", "picture"], }, "teams": { "1": { // for images, the image name will be Scouting team number - picof Scouted team number, so XXXXX-picof-XXXXX "data": [ "lorem ipsum", "situm dilor", true, 213, "IMAGINEANSVGPATHRIGHTHERE", "16423-picof1.png", ], "matchesIn": [1, 5, 67], }, "2": {}, "3": {}, }, }, "matchscout": { "Q1": { "highlighted": [true, true, false, true], "teams": [1234, 1222, 1223, 1313], "red1": [45, 45, 45, 45], "red2": [55, 55, 55, 55], "blue1": [555, 555, 555, 555], "blue2": [1, 1, 1, 1], }, "Q2": { "highlighted": [true, true, false, true], "teams": [1234, 1222, 1223, 1313], "red1": [45, 45, 45, 45], "red2": [55, 55, 55, 55], "blue1": [555, 555, 555, 555], "blue2": [1, 1, 1, 1], }, }, } This is the initial API structure of what this tool will be using. This is designed to allow for both official competitions and custom ones, a feature not previously included in the original Scoutmaster. The plan now is to continue making the dashboard, and then afterwards, once the full dashboard works with localstorage, begin working on the backend to actually make it synchronize across devices.
Devlog 2 So far I have now completed the main job of the competition tab, which is to handle adding custom matches and teams. One of the major issues I came along was that the UI was ugly , the modals were bland, and I wanted to add more depth, so I added that highlight in the middle which lifts the interactable content up. I had issues with the height of the modal being either too tall or too short depending on the device screen. I solved this one by making a simple new function that helps decide if the modal needs to be bumped up in height or not /** * Returns whether the current screen height is "akward", <= 700px for phones/tablets, and <= 899px for desktop * * @returns true | false */ export function useIsAkwardHeight (): true | false { if ( useScreenType () != " desktop " ) { const isAkwardHeight = useMediaQuery ({ query : " (max-height: 700px) " }); return isAkwardHeight ; } else { const isAkwardHeight = useMediaQuery ({ query : " (max-height: 899px) " }); return isAkwardHeight ; } } An example of it being used: < div className = " desktop-warningpopup " id = " avoidwarningpopupheight " style = { specifyCustomCountry ? { height : useIsAkwardHeight () ? " 55vh " : " 40vh " } : { height : useIsAkwardHeight () ? " 40vh " : " 25vh " } } > One big thing I have done in the past bit of time (I did not know that anything after 10 hours is voided, meaning I just wasted like 5 hours 😭) is the organization of a lot of the code. I also organized a lot of the CSS into barrel files so that the CSS files are not thousands of lines long anymore. I have also started work on the prescouting tab (finally) and with that I have got the UI for the progress bar of teams scouted, and also the table of teams. One big thing I have now put in this project is persisting settings, and one big settings function. export const useSettings = create ( persist < { isLightMode : boolean ; flipTheme : () => void ; isCustomCountry : boolean ; flipCustomCountry : () => void ; } > ( ( set ) => ({ isLightMode : true , flipTheme : () => { set (( state ) => ({ isLightMode : ! state . isLightMode , })); }, isCustomCountry : false , flipCustomCountry : () => { set (( state ) => ({ isCustomCountry : ! state . isCustomCountry , })); }, }), { name : " settings " }, ), );
Devlog 3 I have learned my mistake, so now I will be aiming for a devlog every 3-4 hours instead. I have now made it so that the progress bar for teams scouted actually shows the real progress so far of scouting, and the lights actually react to that team’s scouting progress. (I have not made the system to add questions yet, so technically all teams are fully scouted (0/0 questions answered)). I have also started work on the question organization menu. It will be a drag and drop menu to let users arrange and edit questions how they want, with a button at the bottom to edit questions. The images attached below show the progress bar and drag and drop menu (ignore the dummy data put for now, I will replace that with actual data later), and the dropdown menu, which will be for selecting question type soon. I have also attached a very rough sketch of what the draggable question and section divs themselves will look like. (the blue and red is just to indicate different colors, it is not the final color)
Devlog 4 I have spent almost 8 hours working on one feature and one feature alone. That feature is this drag and drop organizer for questions. This lets the user drag around the order of questions to rearrange them, and also drag around the order of sections. The reason this took so long was because the original library I was using (dnd-kit) for drag and drop made it a complete nightmare to try and do anything, it did not have a way to tell what items were where, as it would literally just change the HTML rather than give any data. Once I switched to hello pangea dnd, it all started fitting together. It actually gave me a way to see what changes occurred, save them, and then that updates the UI. Now my next tasks are: Ability to edit question extra fields (e.g. min/max of a slider question) Ability to delete a section Ability to add a section Ability to edit a section Ability to add a question Translation keys Create the phone UI
Devlog 5 I have now finished the following tasks: Ability to edit question extra fields (e.g. min/max of a slider question) Ability to delete a section Ability to add a section Ability to edit a section Ability to add a question The tasks I have left related to the question management system are: Translation keys Create the phone UI I also hit a small hiccup along the way of adding these features where I discovered due to my localstorage structure, whenever a competition is switched, the questions are all deleted (now fixed by not just using a blank localstorage.clear()) New Code /** * Creates the base skeleton structure for localstorage * * @param {boolean} force - Force overwrite of existing localstorage or not */ export function createSkeleton ( force : boolean ) { const existing = localStorage . getItem ( " data " ); if ( existing && ! force ) { return ; } let setPrescout = { structure : {}, sections : { " 0 " : { title : " Section 1 " , headersize : 1 , questions : [], index : 0 , }, }, }; if ( existing ) { const parsed = JSON . parse ( existing ); setPrescout . structure = parsed . prescout . structure ; setPrescout . sections = parsed . prescout . sections ; } const skeleton : LocalStorageData = { compkey : "" , custom : false , prescout : { structure : setPrescout . structure , sections : setPrescout . sections , teams : {}, }, match : {}, }; localStorage . setItem ( " data " , JSON . stringify ( skeleton )); resetAllStates (); }
Devlog 6 I have now finished the phone UI for the prescouting page, meaning the last step of this page is officially complete. The next tasks are the individual team pages and the start of the match scouting page.
Devlog 7 I have now finished the team prescout page for both phones and desktop, this is where scouts can fill in those questions from earlier. I didn’t really run into much issues, but I implemented a special system to make sure that this fill in works with my current question structure. The original issue The original issue with this system is that if a question is edited, it keeps its question id, and if a user edits the question type, that means that what was once a multiple choice, can now be a note, which would completely mess it up if a user opens a team to check on the data. The solution? If a user enters a team page with an invalid question, the question will be reset to its default, so a string will be reset to “”, a number input will be reset to 0, etc. Now this means the prescout page is pretty much completely done, and I now have to start on the match scouting page.
Devlog 8 This is now where things are really starting to pick up. With the entire match scouting page done, there is now only summary, and then it is time to work on the synchronization. I was thinking about leaving the score page empty, but instead I decided to just put what would be there for FTC Decode, I will later switch it to Biobuzz when the game is known.
Devlog 9 I have now done a lot of work in relation to the summary page, the hardest part is now pretty much done (the all teams page). The parts left now are the top picks page, and the accept/reject page. I have also done some work that isn’t specifically for the summary page too. Now, setting a competition will make it so the FTCScout api will actually pull the teams and matches in the competition. The only steps left before synchronization now are those previously mentioned summary pages, and the mobile UI for all summary pages.
Devlog 10 I have now finished the skeleton UI for the summary tab. I originally ran into some issues because I had tried to make one table with one map and just change the data for it, but that went horribly wrong because it made the code so janky and I had to write a ton of spaghetti code for it. In the end, I decided to switch to this system instead, where there are 3 completely separate tables for each tab, that get rendered in conditionally. { currentTab == 0 ? ( < Tab1 sorted = { sorted } sortBy = { sortBy } setSortBy = { setSortBy } setSortDown = { setSortDown } sortDown = { sortDown } selected = { selected } /> ) : currentTab == 1 ? ( < Tab2 teamsBelow = { teamsBelow } /> ) : ( < Tab3 teamsAbove = { teamsAbove } /> )} This way allowed me to have more freedom and more organization with the code. I also originally ran into an issue with my rendering system for picks. When a team would set their pick order, originally to preserve the order they had in mind, the site would check all teams in the picks array, and if they were below, they would render them in. This caused an issue where if a team changed ranks through a competition, the teams below would change, and some might not render, which caused a problem in that the indexes for the reordering were off, and it would reorder the ones at the top that were not visible to the user. In the end I fixed this by simply filtering out and deleting the ones that were no longer a valid pick. updateSummary ({ picks : [ ... summary . picks . filter (( pick ) => below . includes ( pick )), ... below . filter (( team ) => ! summary . picks . includes ( team )), ], }); My goals now are to get a start on the backend part so that the main structure of the site can be complete. The tasks that would be left after that are: Polishing the summary page UI Making the mobile UI for the summary page Adding the new setting to set user’s team number by default so they don’t have to constantly set it from the tab Landing page improvements
Devlog 11 I usually space out my devlogs more, but I have now managed to get the base connection. This went by rather flawlessly due to now having the ability to use a python server for websockets, rather than the old system of having to use SQL requests with a million different RPC functions (sometimes causing queries to take up to 500ms on average) now taking only 100ms on average. This uses a simple system to take the JWT token from the user, validate it from the server to find the user id, then checks the database to see what group the user is in, then checks the group to make sure that the user is actually in that group, and if all those conditions are met, the user will connect to the websocket. If the user is the first one in the websocket, it right now just prints it, but it is designed to soon be used for a new feature. Soon, when a user joins a websocket and is the first one there, the server will load all that group’s data from the database, the reason for this is to have lightning fast connection and also make it possible to synchronize all users’ data in real time. (Whenever a user makes a change, it would update the server’s copy, and also push that change to the database)
Devlog 12 This devlog is now much more about the server side of things as that has been my focus right now. The way this all works is I have a realtime python server connect to my database and all clients. Clients are put into a realtime channel with all their teammates. When the first user of a team joins, the python server pulls all that team’s scouting data from the database and keeps it in memory. This is to speed up request response times. When a second, third, fourth, so on, user of a team joins, the server instead just gives them the data it has in memory instead of the database. To keep this all in sync, the server updates its version of that group’s data as soon as it is successfully saved to the database. It takes time to set this all up, and the parts of synchronization that I have completed so far are: Competition code changes Setting competitions to custom Adding an individual team Adding teams from API at the start Adding an individual match Adding matches from API at the start I have done one thing for the UI though, and that is finally adding a 404 page. I designed this 404 with the magnifying glass in the middle as the 0.
Devlog 13 ALL. SERVER. SYNC. IS. DONE. I have finished every single piece of work needed to sync the server with the client at all times. I am now getting close to the finish line for this project. I added info toasts for some new things, rather than just showing the success toast for an action a user may not have actually done themselves for things like adding teams and matches. There are now very few tasks left really, they are: Fully localize everything Add French Add mobile UI to summary Add custom competition handling for summary Add a favicon Fix dark mode glitches on sign in/sign up pages
Devlog 14 I have now fully finished the summary team page UI as well. Now there are charts that show the points of each individual match, and then also each individual method of scoring. I also added two new screens for when a team is in first or last, if a team is in first, then there are no teams above to accept/reject, so it shows a little bit of text, if a team is in last, there is no team below to pick, so they have a separate message. I also took the time to add the flags bit beside a team’s name in the summary page too so it can match prescout. With all of the above, I also completed the mobile UI equivalent.
Devlog 15 I have now finished the following tasks: Inviting members Uninviting members Kicking members out of group Most of the UI to do with the member system (only joining a group left) I have also added these improvements to the backend related things: The front end no longer assumes that a user is in a group and instead calls a server endpoint to check first on sign in The front end now connects on loading of the dashboard page instead of loading on the sign in page, which is to fix a current issue where if the user is already signed in but on the landing page, it makes them re-sign in, but soon it will just be a button saying “go to dash” Added UI for loading hydration for dash Made it so the add match/add team buttons were only visible to admins I now pretty much don’t have too much to do, instead it will simply be finishing touches and a little bit of work with the joining system: Make the UI for creating a group Make the UI for joining a group actually work Add rate limiting Sync settings with database Publish
Devlog 16 I just boosted the security of the tool quite a bit, now with rate limiting, aggressive schema validation, and payload size limits. The issue before was that you could spam stuff no problem, but now there is a ton of resistance, and very strict limits. I still have more plans to make it even more secure as well. I also setup meta tags so now supposedly when you send a link depending on the platform, it will show this image and a description as well. An example of some of the new aggressive schema validation is: class QuestionChanges ( StrictModel ): title : Str | None = None type : ( Literal [ " ln " , " sn " , " cb " , " a " , " img " , " n " , " mc " , " sc " , " r " , " st " ] | None ) = None opt : dict [ Annotated [ str , StringConstraints ( pattern = r " ^[0-9]$ " )], Annotated [ str , Field ( max_length = 50 )]] | None = Field ( default = None , max_length = 10 ) minmax : Annotated [ list [ Annotated [ int , Field ( ge =- 99999 , le = 99999 )]], Field ( min_length = 2 , max_length = 2 )] | None = None stars : Annotated [ int , Field ( ge = 0 , le = 10 )] | None = None I setup two different rate limiting systems, these include ones for the websocket, where each individual message type can get its own rate limit (some things should be easily called 500 times in a minute, while others should NOT be called more than 10) @ws_limit ( maxCalls = 500 , window = 60 ) async def handleUpdateTeamQuestion ( @ws_limit ( maxCalls = 8 , window = 60 ) async def handleCompCodeChange ( Window being time in seconds, maxCalls being the max calls in that window. This still needs more testing to make sure edge cases that are actually possible to do using the UI are not blocked by this security, but most regular use seems to not be affected.
Devlog 17 Now that this webapp is in its final stages of completion, I have just been completing todo list items really, these were: Fixing double websocket connect bug Adding update current team for summary to server Added functionality to settings menu Made competitions pull from an actual API instead of a json saved inside the project files Now the main items left are: Path scouting for auto Finish landing page...
|
1792583394.538645
|
1793188194.538645
|
|
4720
|
Untitled project by @tamas2505 | Stardance
|
tamas2505
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Untitled project by @tamas2505 | Stardance
|
1792698551.09852
|
1793303351.09852
|
|
4721
|
My awesome macropad! by @ashwindev9048 | Stardance
|
ashwindev9048
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My awesome macropad! by @ashwindev9048 | St Title: My awesome macropad! by @ashwindev9048 | Stardance...
|
1792767152.3231544
|
1793371952.3231544
|
|
4722
|
Untitled project by @IrisStarr12 | Stardance
|
IrisStarr12
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Untitled project by @IrisStarr12 | Stardanc Title: Untitled project by @IrisStarr12 | Stardance...
|
1792745514.7101078
|
1793350314.7101078
|
|
4723
|
melodyguesser by @divya | Stardance
|
divya
|
0
|
2.07
|
0
|
[]
|
[{"post_id": 820, "ts": "2026- [{"post_id": 820, "ts": "2026-06-02T14:36:51Z", "hours": 0.3422, "text": "messed up the project working on bringing back the updates"}, {"post_id": 772, "ts": "2026-06-02T13:10:09Z", "hours": 0.4181, "text": "working on the frontend part the ui looks pretty much dull iam still polishing and making changes iam thinking of deploying backend some other website the current website has low latency and will work on implementing feautres once frontend part finishes"}, {"post_id": 760, "ts": "2026-06-02T12:21:21Z", "hours": 1.3125, "text": "astro glide , it is an app where we can explore different songs from corners of the world you have to guess the name of the song ,a piece of an audio clipwhich will be played in real time we are also implementing such as artificial intelligent models in to this coming soon…"}]...
|
Title: melodyguesser by @divya | Stardance
Devlog Title: melodyguesser by @divya | Stardance
Devlogs:
astro glide , it is an app where we can explore different songs from corners of the world you have to guess the name of the song ,a piece of an audio clipwhich will be played in real time we are also implementing such as artificial intelligent models in to this coming soon…
working on the frontend part the ui looks pretty much dull iam still polishing and making changes iam thinking of deploying backend some other website the current website has low latency and will work on implementing feautres once frontend part finishes
messed up the project working on bringing back the updates...
|
1793166808.4515643
|
1793771608.4515643
|
|
4724
|
Haiii by @ashwindev9048 | Stardance
|
ashwindev9048
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Haiii by @ashwindev9048 | Stardance
|
1793191777.5025518
|
1793796577.5025518
|
|
4725
|
Rat Game 16 by @egdod | Stardance
|
egdod
|
0
|
18.25
|
0
|
[]
|
[{"post_id": 29852, "ts": "202 [{"post_id": 29852, "ts": "2026-07-17T00:21:43Z", "hours": 8.0242, "text": "sorry for not uploading, i’m restructuring the entire project into like 5-7 translation units (c programming language stuff). so far i got everything in headers and implementation files and completely rewrote the build script (check out second image, line 63 showcases some really cool bash features ). changes will be on github once i resolve the undefined templates"}, {"post_id": 25057, "ts": "2026-07-09T00:44:28Z", "hours": 4.5244, "text": "rewrote input system for debugger, planning on adding hot reloading with it as a cradle (loading a lot of the game as a dynamic library so i can edit, recompile, and swap out the code while its running)"}, {"post_id": 21037, "ts": "2026-07-02T20:12:03Z", "hours": 0.7206, "text": "resizing fully works now (had to rtfm on signals because i forgot all my earlier research). im kinda embarrased to show off the testing map but yk we ball. and yes i am using the default hyprland background"}, {"post_id": 19517, "ts": "2026-06-30T20:55:27Z", "hours": 0.8861, "text": "found the energy to finish the botched signal handling (resize support soon). will also be useful to let children and threads handle some screen or input processing (sigttou/sigttin). sorry for lazy screenshot"}, {"post_id": 19361, "ts": "2026-06-30T17:15:09Z", "hours": 2.1778, "text": "sorry i haven’t done anything, i was away for a week and currently struggling with some issues that make it difficult to like do anything. on the upside i’ve thought of what might make a pretty good collision algorithm (applies backface culling in an interesting way) which i’ll be bugtesting in my head until i can write it out in c. they should add desmos as a hackatime ide"}, {"post_id": 7275, "ts": "2026-06-12T04:03:05Z", "hours": 0.7622, "text": "in the process of writing a collision algorithm (difficult)"}, {"post_id": 5718, "ts": "2026-06-09T16:45:42Z", "hours": 1.1564, "text": "started debug cli"}]...
|
Title: Rat Game 16 by @egdod | Stardance
Devlogs: Title: Rat Game 16 by @egdod | Stardance
Devlogs:
started debug cli
in the process of writing a collision algorithm (difficult)
sorry i haven’t done anything, i was away for a week and currently struggling with some issues that make it difficult to like do anything. on the upside i’ve thought of what might make a pretty good collision algorithm (applies backface culling in an interesting way) which i’ll be bugtesting in my head until i can write it out in c. they should add desmos as a hackatime ide
found the energy to finish the botched signal handling (resize support soon). will also be useful to let children and threads handle some screen or input processing (sigttou/sigttin). sorry for lazy screenshot
resizing fully works now (had to rtfm on signals because i forgot all my earlier research). im kinda embarrased to show off the testing map but yk we ball. and yes i am using the default hyprland background
rewrote input system for debugger, planning on adding hot reloading with it as a cradle (loading a lot of the game as a dynamic library so i can edit, recompile, and swap out the code while its running)
sorry for not uploading, i’m restructuring the entire project into like 5-7 translation units (c programming language stuff). so far i got everything in headers and implementation files and completely rewrote the build script (check out second image, line 63 showcases some really cool bash features ). changes will be on github once i resolve the undefined templates...
|
1793224478.241007
|
1793829278.241007
|
|
4726
|
Alex's Desk by @AloneAlex | Stardance
|
AloneAlex
|
3
|
12.48
|
119
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-18T21:21:08Z", "hours": 4.0, "multiplier": 12.9, "payout": 49, "blessing": "neutral", "text": "This ship fixes all the hover animation issues the previous version of the website had, adds a completely separate mobile version and features a much better written and enriched readme. Plus some QOL stuff people asked for like a back button on certain pages to make the site easier to navigate", "repo": "https://github.com/thealonealex/alexs-desk", "demo": "https://thealonealex.dev"}, {"ship_num": 2, "ts": "2026-07-30T09:03:29Z", "hours": 7.0, "multiplier": 10.02, "payout": 70, "blessing": "neutral", "text": "It’s my personal website, a digital recreation of my desk where you can interact with objects :)", "repo": "https://github.com/thealonealex/alexs-desk", "demo": "https://thealonealex.dev"}, {"ship_num": 3, "ts": "2026-07-04T16:31:33Z", "hours": 1.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "A base outline of what I want to include to my personal site, with some testing around of css and html", "repo": "https://github.com/thealonealex/alexs-desk", "demo": "https://thealonealex.dev"}]...
|
[{"post_id": 62853, "ts": "202 [{"post_id": 62853, "ts": "2026-09-06T11:54:32Z", "hours": 0.4797, "text": "Fixed a display issue in safari. For some reason, having both width: and height: just made webkit freak out? Forgot to get a screenshot so here’s my Mii instead"}, {"post_id": 49898, "ts": "2026-08-18T21:15:40Z", "hours": 0.9536, "text": "Finally got my domain grant! Edited the bluesky link since my handle changed and updated the Readme to be more extensive on some stuff like mobile vs desktop differences & added screenshots. Plus, I added a creative commons license to the project!"}, {"post_id": 42109, "ts": "2026-08-06T17:51:51Z", "hours": 1.0022, "text": "The mobile version of the site is working! It’s just a basic phone-like UI, but I feel like it fits the vibe of the desktop site. There’s no text, just stuff to click and explore"}, {"post_id": 41875, "ts": "2026-08-06T11:03:07Z", "hours": 0.7308, "text": "Began working on the design for a mobile version of the site. It could look like a phone home screen? If I figure out how to do grids properly that is"}, {"post_id": 40785, "ts": "2026-08-04T15:18:54Z", "hours": 1.1175, "text": "The website had some issues with hover animations, so I wrapped all animated objects inside divs that don’t themselves move. I also added a back button the the gallery and games page, since many people wanted that from the previous ship’s reviews!"}, {"post_id": 29607, "ts": "2026-07-16T17:27:49Z", "hours": 1.0125, "text": "Designed and implemented a nice social media embed for the website!"}, {"post_id": 28999, "ts": "2026-07-15T17:21:06Z", "hours": 1.4358, "text": "Recreated the games page design with html and css, and renamed the project to Alex’s Desk. Also, the photos page was actually this extremely large (20mb) vector file, so I instead I exported it as png and compressed it, which resulted into a neat 1,4mb file instead!"}, {"post_id": 25542, "ts": "2026-07-09T21:15:47Z", "hours": 0.7489, "text": "Designed a game page that showcases the games I’ve made that I’m the most proud of as gameb- uhhh I meant Poteto ALEX BOY™ cartridges!"}, {"post_id": 24702, "ts": "2026-07-08T13:54:10Z", "hours": 0.6192, "text": "Designed and implemented the album page! It’s basically “my wall” showcasing some of my favorite photos I’ve taken. Will probably update with new ones in the feature, too. Also, I added some fade in to make page loading look nicer!"}, {"post_id": 23987, "ts": "2026-07-07T07:58:08Z", "hours": 0.44, "text": "Did some important minor changes, like making images non-draggable (instead you drag the link that you’d get redirected to if you clicked them) and adding a favicon. Also I think I’ll be renaming the project to Alex’s Desk, so I guess that’s what I’ll be doing next!"}, {"post_id": 23687, "ts": "2026-07-06T19:54:18Z", "hours": 1.8911, "text": "Recreated the design with html and css! It took me quite a while to get the div centered correctly and for objects to not jump around and stay on the desk no matter the viewport size, but I managed to do it at the end! Added some simple hover animations and redirects for clicking each object on the desk. Next up, I’ll add some tooltips, maybe some better animations, and see what I’ll do with the photos page. I want it to be a custom page with my photos. Also maybe it should be a different website altogether for mobile?"}, {"post_id": 23467, "ts": "2026-07-06T13:43:03Z", "hours": 0.8572, "text": "I already had a rough outline of how I wanted my website to look, but I designed a couple more things in Sketch. They’re subject to change, ofc, but this is what I want my website to have!"}, {"post_id": 22229, "ts": "2026-07-04T16:21:13Z", "hours": 1.1953, "text": "Finished the personal website mission tutorial! Some basic stuff for now, just 3 segments (about me, projects ✨more✨) but i have big plans!"}]...
|
Title: Alex's Desk by @AloneAlex | Stardance
Title: Alex's Desk by @AloneAlex | Stardance
Devlogs:
Finished the personal website mission tutorial! Some basic stuff for now, just 3 segments (about me, projects ✨more✨) but i have big plans!
I already had a rough outline of how I wanted my website to look, but I designed a couple more things in Sketch. They’re subject to change, ofc, but this is what I want my website to have!
Recreated the design with html and css! It took me quite a while to get the div centered correctly and for objects to not jump around and stay on the desk no matter the viewport size, but I managed to do it at the end! Added some simple hover animations and redirects for clicking each object on the desk. Next up, I’ll add some tooltips, maybe some better animations, and see what I’ll do with the photos page. I want it to be a custom page with my photos. Also maybe it should be a different website altogether for mobile?
Did some important minor changes, like making images non-draggable (instead you drag the link that you’d get redirected to if you clicked them) and adding a favicon. Also I think I’ll be renaming the project to Alex’s Desk, so I guess that’s what I’ll be doing next!
Designed and implemented the album page! It’s basically “my wall” showcasing some of my favorite photos I’ve taken. Will probably update with new ones in the feature, too. Also, I added some fade in to make page loading look nicer!
Designed a game page that showcases the games I’ve made that I’m the most proud of as gameb- uhhh I meant Poteto ALEX BOY™ cartridges!
Recreated the games page design with html and css, and renamed the project to Alex’s Desk. Also, the photos page was actually this extremely large (20mb) vector file, so I instead I exported it as png and compressed it, which resulted into a neat 1,4mb file instead!
Designed and implemented a nice social media embed for the website!
The website had some issues with hover animations, so I wrapped all animated objects inside divs that don’t themselves move. I also added a back button the the gallery and games page, since many people wanted that from the previous ship’s reviews!
Began working on the design for a mobile version of the site. It could look like a phone home screen? If I figure out how to do grids properly that is
The mobile version of the site is working! It’s just a basic phone-like UI, but I feel like it fits the vibe of the desktop site. There’s no text, just stuff to click and explore
Finally got my domain grant! Edited the bluesky link since my handle changed and updated the Readme to be more extensive on some stuff like mobile vs desktop differences & added screenshots. Plus, I added a creative commons license to the project!
Fixed a display issue in safari. For some reason, having both width: and height: just made webkit freak out? Forgot to get a screenshot so here’s my Mii instead
Ships:
A base outline of what I want to include to my personal site, with some testing around of css and html
It’s my personal website, a digital recreation of my desk where you can interact with objects :)
This ship fixes all the hover animation issues the previous version of the website had, adds a completely separate mobile version and features a much better written and enriched readme. Plus some QOL stuff people asked for like a back button on certain pages to make the site easier to navigate...
|
1793126903.2604012
|
1793213303.2604012
|
|
4727
|
Terminal Tetris by @Chroma | Stardance
|
Chroma
|
0
|
2.04
|
0
|
[]
|
[{"post_id": 3546, "ts": "2026 [{"post_id": 3546, "ts": "2026-06-06T15:12:10Z", "hours": 1.5103, "text": "Organised code and first mock-up of how it might look in the end"}, {"post_id": 765, "ts": "2026-06-02T12:46:56Z", "hours": 0.5289, "text": "Currently learning how to use the ratatui library"}]...
|
Title: Terminal Tetris by @Chroma | Stardance
Dev Title: Terminal Tetris by @Chroma | Stardance
Devlogs:
Currently learning how to use the ratatui library
Organised code and first mock-up of how it might look in the end...
|
1793238725.8903332
|
1793843525.8903332
|
|
4728
|
My first slack bot! by @zabolotnipro | Stardance
|
zabolotnipro
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My first slack bot! by @zabolotnipro | Star Title: My first slack bot! by @zabolotnipro | Stardance...
|
1792608784.159116
|
1793213584.159116
|
|
4729
|
My awesome macropad! by @shyam | Stardance
|
shyam
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My awesome macropad! by @shyam | Stardance
|
1792781252.4096692
|
1793386052.4096692
|
|
4730
|
BIJAY by @bijay | Stardance
|
bijay
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: BIJAY by @bijay | Stardance
|
1792709474.7452798
|
1793314274.7452798
|
|
4731
|
My awesome macropad! by @Yummi | Stardance
|
Yummi
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My awesome macropad! by @Yummi | Stardance
|
1793242179.0884082
|
1793846979.0884082
|
|
4732
|
graded by @wise | Stardance
|
wise
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: graded by @wise | Stardance
|
1792792255.254275
|
1793397055.254275
|
|
4733
|
ModlStudent by @Yummi | Stardance
|
Yummi
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: ModlStudent by @Yummi | Stardance
|
1792662455.8258812
|
1793267255.8258812
|
|
4734
|
My awesome macropad! by @chant | Stardance
|
chant
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My awesome macropad! by @chant | Stardance
|
1793180862.8437521
|
1793785662.8437521
|
|
4735
|
My first slack bot! by @rinnn | Stardance
|
rinnn
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My first slack bot! by @rinnn | Stardance
|
1792673508.035215
|
1793278308.035215
|
|
4736
|
Grabbers by @Atii | Stardance
|
Atii
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Grabbers by @Atii | Stardance
|
1792641038.5025027
|
1793245838.5025027
|
|
4737
|
SlackOS by @akcodex | Stardance
|
akcodex
|
1
|
10.8
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-09T18:56:31Z", "hours": 10.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "SlackOS is a Slack bot that does what you say instead of what you click. You type /ask remind Divine to finish the UI by Friday and it saves the task. You type /ask what did we decide about the logo? and it answers from something the team told it weeks ago. You say /ask when someone joins #design DM them the handbook and it builds the rule, then runs it by itself when a real person joins. That last part took me the longest. My member_joined_channel listener never fired. No logs, no error, nothing. I checked my scopes about six times before I worked out the bot could post into the channel without being in it, which is what chat:write.public does, so it looked present when it wasn’t. Slack only sends you join events for channels the bot has joined. Fixed it with one /invite. The other headache was the AI never returning the same shape twice. Same sentence, different JSON. Sometimes task1/deadline1, sometimes a tasks array. One time I asked it to DM someone and it gave me send_direct_message while my code was looking for “direct message” with a space, so a private handbook went out to the whole channel. Everything gets flattened now before I match on it. My network blocks Hugging Face, so no embeddings. Instead I hand the stored memories to Groq and let it pick the relevant one. Good enough at this size. What I’m proud of: it runs on my own Nest box under systemd with Postgres in Docker, and the memory search answers questions I asked it weeks earlier. To test it, the demo link is a simulation of the real bot, so you don’t need a Slack account. Press the lightning button. It fires a fake channel join and the bot DMs the new person the handbook on its own, without anyone typing a command. The panel on the right is the bot’s state, and it changes while you type. Try /tasks, then /done 10, then /ask what time is standup? I used Claude Code for a good part of this, mostly debugging and cleanup. A few notes on why it’s built this way: The bug story is the strongest part. Reviewers see a lot of “I built a Slack bot.” Almost nobody explains that chat:write.public made their bot look present in a channel it had never joined. That detail proves you did the work. The send_direct_message bug is worth keeping even though it’s unflattering. A private handbook going out publicly is a real, specific failure with a real fix. It reads as honest in a way that “I learned a lot about APIs” never does.", "repo": "https://github.com/divinefavourak/jesutobi_bot-slack", "demo": "https://hackclub.enterprise.slack.com/archives/C0P5NE354"}]...
|
[{"post_id": 44225, "ts": "202 [{"post_id": 44225, "ts": "2026-08-09T20:51:34Z", "hours": 0.8, "text": "Spent tonight making the bot fun instead of only useful. It does memes, trivia, a magic 8ball and roasts now. The bigger piece is XP: you get points for finishing tasks, saving memories and building automations. 100 points is a level and every level has a title. You start as a Lurker. Stick around long enough and you become a Certified Menace. There’s a leaderboard, and you can shout someone out which hands them 25 XP. Three things fought me. The meme API defaults to r/dankmemes. This is going into a Slack full of teenagers so that was never happening. Locked it to ProgrammerHumor, wholesomememes and softwaregore, and I check the nsfw flag on every post too. The trivia API rate limits to one request every 5 seconds and 429’d me in the middle of testing my own feature. So I wrote 15 questions myself as a backup. Trivia never just dies now. Then the first meme it posted came through titled “partialContent”. Turns out r/ProgrammerHumor writes every title in camelCase, so I had to split them back into real words before posting. Also caught myself farming XP by spamming /sos-done on the same task. It only pays out now if the task wasn’t already finished. If you want it shorter, this version keeps the two best details: Made the bot fun tonight. Memes, trivia, roasts, and an XP system where you level up for finishing tasks and building automations. You start as a Lurker and work your way to Certified Menace. Two things I didn’t expect. The meme API defaults to r/dankmemes, which is not what you want in a Slack full of teenagers, so I locked it to a safe list and check the nsfw flag. And the first meme posted with the title “partialContent” because r/ProgrammerHumor writes everything in camelCase. Had to split the titles back into words. Also had to stop myself farming XP by spamming /sos-done on the same task."}, {"post_id": 44154, "ts": "2026-08-09T18:43:43Z", "hours": 0.3444, "text": "deployed it on my nest server. It is now 24/7 online"}, {"post_id": 44107, "ts": "2026-08-09T17:33:46Z", "hours": 8.5281, "text": "Changed the name to SlackOs(more sleek ig). Also designed the logo and finished it up. Time to deploy"}, {"post_id": 1104, "ts": "2026-06-02T22:40:12Z", "hours": 1.1075, "text": "I just learnt how to map out the commands, Ps: this is my first time working on a slack bot"}]...
|
Title: SlackOS by @akcodex | Stardance
Devlogs:
I Title: SlackOS by @akcodex | Stardance
Devlogs:
I just learnt how to map out the commands, Ps: this is my first time working on a slack bot
Changed the name to SlackOs(more sleek ig). Also designed the logo and finished it up. Time to deploy
deployed it on my nest server. It is now 24/7 online
Spent tonight making the bot fun instead of only useful. It does memes, trivia, a magic 8ball and roasts now. The bigger piece is XP: you get points for finishing tasks, saving memories and building automations. 100 points is a level and every level has a title. You start as a Lurker. Stick around long enough and you become a Certified Menace. There’s a leaderboard, and you can shout someone out which hands them 25 XP. Three things fought me. The meme API defaults to r/dankmemes. This is going into a Slack full of teenagers so that was never happening. Locked it to ProgrammerHumor, wholesomememes and softwaregore, and I check the nsfw flag on every post too. The trivia API rate limits to one request every 5 seconds and 429’d me in the middle of testing my own feature. So I wrote 15 questions myself as a backup. Trivia never just dies now. Then the first meme it posted came through titled “partialContent”. Turns out r/ProgrammerHumor writes every title in camelCase, so I had to split them back into real words before posting. Also caught myself farming XP by spamming /sos-done on the same task. It only pays out now if the task wasn’t already finished. If you want it shorter, this version keeps the two best details: Made the bot fun tonight. Memes, trivia, roasts, and an XP system where you level up for finishing tasks and building automations. You start as a Lurker and work your way to Certified Menace. Two things I didn’t expect. The meme API defaults to r/dankmemes, which is not what you want in a Slack full of teenagers, so I locked it to a safe list and check the nsfw flag. And the first meme posted with the title “partialContent” because r/ProgrammerHumor writes everything in camelCase. Had to split the titles back into words. Also had to stop myself farming XP by spamming /sos-done on the same task.
Ships:
SlackOS is a Slack bot that does what you say instead of what you click. You type /ask remind Divine to finish the UI by Friday and it saves the task. You type /ask what did we decide about the logo? and it answers from something the team told it weeks ago. You say /ask when someone joins #design DM them the handbook and it builds the rule, then runs it by itself when a real person joins. That last part took me the longest. My member_joined_channel listener never fired. No logs, no error, nothing. I checked my scopes about six times before I worked out the bot could post into the channel without being in it, which is what chat:write.public does, so it looked present when it wasn’t. Slack only sends you join events for channels the bot has joined. Fixed it with one /invite. The other headache was the AI never returning the same shape twice. Same sentence, different JSON. Sometimes task1/deadline1, sometimes a tasks array. One time I asked it to DM someone and it gave me send_direct_message while my code was looking for “direct message” with a space, so a private handbook went out to the whole channel. Everything gets flattened now before I match on it. My network blocks Hugging Face, so no embeddings. Instead I hand the stored memories to Groq and let it pick the relevant one. Good enough at this size. What I’m proud of: it runs on my own Nest box under systemd with Postgres in Docker, and the memory search answers questions I asked it weeks earlier. To test it, the demo link is a simulation of the real bot, so you don’t need a Slack account. Press the lightning button. It fires a fake channel join and the bot DMs the new person the handbook on its own, without anyone typing a command. The panel on the right is the bot’s state, and it changes while you type. Try /tasks, then /done 10, then /ask what time is standup? I used Claude Code for a good part of this, mostly debugging and cleanup. A few notes on why it’s built this way: The bug story is the strongest part. Reviewers see a lot of “I built a Slack bot.” Almost nobody explains that chat:write.public made their bot look present in a channel it had never joined. That detail proves you did the work. The send_direct_message bug is worth keeping even though it’s unflattering. A private handbook going out publicly is a real, specific failure with a real fix. It reads as honest in a way that “I learned a lot about APIs” never does....
|
1793094883.7351089
|
1793181283.7351089
|
|
4738
|
PICOLATOR V2 by @fedi41 | Stardance
|
fedi41
|
1
|
71.72
|
702
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-27T09:01:35Z", "hours": 51.0, "multiplier": 13.73, "payout": 702, "blessing": "neutral", "text": "PICOLATOR v2.1 Beta This is the first ship of my big project: Picolator . Picolator is a handheld device powered by a Raspberry Pi Pico, running a custom operating system that I wrote from scratch in C++. 🧩 Features At this stage, Picolator includes: 🎮 PicoDino A simple remake of the classic dinosaur runner game. 🖥️ Custom UI Engine A lightweight interface system with different blend modes and a modular structure. 🧭 Main Menu System An app launcher for navigating between installed applications. ⚙️ Settings App A basic settings interface for system configuration. 🎨 Theming Support Custom themes based on Tailwind-style color palettes. 🚀 Status This is an early beta release. More features, apps, and improvements are planned for future updates.", "repo": "https://github.com/fedi41/picolator2", "demo": "https://fedi41.github.io/picolator/"}]...
|
[{"post_id": 70207, "ts": "202 [{"post_id": 70207, "ts": "2026-09-18T18:17:53Z", "hours": 2.8942, "text": "Simple taskbar! Added a simple status bar to the picolator! At the time its very minimal, but later it will show more stuff. How it works The status bat shows the currently running app by accessing the Navigator class. It is displayed over the current app, but before the all the features. Why I did it I thought that it would be nice to always know which app you are in, and because I dont want to put a header in each app, a status bar is the best solution. Also, I can later use it to show other stuff so its just nice to have :D Whats about the AI chat app I never finished? well… its still not finished idk if it ever will be finished. Conclusion I actually did varios stuff, but the most major change I made was the status bar so I post it here. Thanks for reading btw XD"}, {"post_id": 65203, "ts": "2026-09-10T05:18:26Z", "hours": 5.0075, "text": "5 Hours for almost nothing xD well its been very long time, I’ve been working on the AI app all this time… I almost made it so you can enter your own api key, but like always it isnt saving properly and is just not working. I also improved the AI chat a bit, made so it shows the errors, only for it to always show “UNKNOWN ERROR”. It kinda looks that the project is a bit dead a the time, I dont know if I will be posting so often. Other things that are not related to the project I switched to arch btw And I am finally comfortable with neovim :D"}, {"post_id": 46720, "ts": "2026-08-14T05:11:48Z", "hours": 2.1681, "text": "AI on the pico!! AI chat app is working!! What I did: Made the ui (pretty simple) Added a keyboard for input made some placehgolder functions to send promt and receive them What AI did for me all the api connection logic (The Mistral.h file) It was too complicated for me XD… How I did it: I used the mistral API made a simle app on the picolator for it thats it ) What I will do next -> make so you can enter your own api key (without recompiling) make so u can scroll through long responses Next ideas for the project… redisign some parts of the ui (I dont like that headings take up so much space) make a paint app ?"}, {"post_id": 44438, "ts": "2026-08-10T05:58:36Z", "hours": 0.2722, "text": "Serial logging works! I just replaced me custom logger with the Serial one ) Now I can work on the AI chat app !"}, {"post_id": 44423, "ts": "2026-08-10T05:36:44Z", "hours": 2.4386, "text": "Devlog ig Well this two hours I been trying to make an AI chat app. Meanwhile, I realized, that my custom log system kinda sucks, so I will be just using the classic Serial output for logging, and completly remove my custom logger. Problems with the logger logs are hard to read (very small) if u enable the log display feature, the rendering gets slower gives no errors, I only know at witch step the program stopped uses much RAM with serial logging, all of this issues will be fixed. And I can finally see what error it throws! although it doesnt tell much in the error… terminate called after throwing an instance of 'std::out_of_range' what(): And sorry for the long break… I will try to code more now!"}, {"post_id": 33077, "ts": "2026-07-22T17:38:04Z", "hours": 1.1644, "text": "pico-Stardance :P Tried rendering the stardance logo on the Picolator ) I actually wanted to work on the AI chat app, but instead of locking in, I just procrastineted and made this :3 But a least it looks cool XD Btw it took me so long, because I am trying to learn vim, and I am not really good at it ) Well ig see u next devlog"}, {"post_id": 31835, "ts": "2026-07-20T15:06:50Z", "hours": 0.7833, "text": "picoFETCH ig its working ) I added a simple fetch app, simmular to neofetch ) It displays: the board name (on compilation) chip name clock speed free RAM (not prezise) SDK version chip id WiFi connection status btw this all runs on a simple rpi pico 2w with a diplay ) check out my other devlogs to see what this thing can do"}, {"post_id": 31737, "ts": "2026-07-20T11:37:26Z", "hours": 0.7644, "text": "WiFi on the Picolator I managed to connect WiFi to the pico! The password and the SSID are saved in the flash! I will update the wifi settings UI someday, It looks horrible XD. And guess what? I will do a PICOFETCH app next, So follow along!"}, {"post_id": 31111, "ts": "2026-07-19T07:50:49Z", "hours": 3.6431, "text": "Its been very long time… But , I made some progress on the WiFi -settings! By progress I mean only the working ui XD. (and keyboard ) EVERYTHING ELSE JUST DOESNT WORK a list of things, that need to be fixed: storage sucks wifi sucks ui sucks (it just looks bad) I will bet trying to fix all of these things in future devlogs so follow along )"}, {"post_id": 17489, "ts": "2026-06-28T09:17:14Z", "hours": 1.5889, "text": "Pico-keyboard ?! So i coded the first simple version of a keyboard for the Picolator … for now, I will use it for the AI chat app (also in development), and for the Wifi configuration. Its currently in development, but in the next devlog I am planning to finish the wifi connection! btw credits to @eceWire , I was inspired by the keyboard in his project. ))"}, {"post_id": 16800, "ts": "2026-06-27T08:49:16Z", "hours": 2.6928, "text": "The first release ) I finished the demo version of the project! Now I am ready to ship ) features in this release UI system (with theming support) first game (picodino) Settings menu (with modular feature support) custom renderer (built on top of the waveshare library, supports blendmodes) custom input system the release: https://github.com/fedi41-prog/picolator2/releases"}, {"post_id": 16306, "ts": "2026-06-26T15:13:42Z", "hours": 7.0764, "text": "7 HOURS GONE. WEBSITE DONE (almost). Well time flies much faster when making websites… finished the feature menu I added a feature menu to control the feature manager and toggle features on and off ) I also kinda broke the display of the picolator… and thats why - new displays are coming soon (well I think so) - I am building a second Picolator! (And repairing the old one) almost forgot the website link 😅: https://fedi41-prog.github.io/picolator2/"}, {"post_id": 15041, "ts": "2026-06-24T12:55:31Z", "hours": 0.8667, "text": "Demo website working on the demo website for my PICOLATOR project . SHIPPING SOON . PICOLATOR v2.1 is ready for ship! I just need to finish this small website, and I’m done! I’ll also continue working at this after the ship :) Btw here is the link: https://fedi41-prog.github.io/picolator2/"}, {"post_id": 14643, "ts": "2026-06-23T20:33:16Z", "hours": 1.8336, "text": "Finished the PICODINO! Ig I finished the game ) Now I can finally work on something else . 🦖🌵 . It’s a copy of the iconic game, running on a pi pico. Features added… score counter high score saved in flash sneaking different cactus types restart after losing dark mode"}, {"post_id": 14363, "ts": "2026-06-23T13:57:16Z", "hours": 1.1458, "text": "PICO-DINO just jumped on a cactus 😭😭 …the PicoDino tries to jump over the EVIL CACTUS , but he lands perfectly on it! RIP PicoDino 🪦🦖 . . . But… Cactus collision is working! 😎 Finally, the dino can’t go through cacti anymore! Today, I implemented the mask collision ) P.S. - I finally figured out how to add multiple photos 😅"}, {"post_id": 14187, "ts": "2026-06-23T05:41:04Z", "hours": 1.6097, "text": "A cactus appears! 🌵 This morning, I added the first cactus, and a moing floor, along with some animations ) These are all original textures! Next up cactus collisions (mask collisions) more cactus types score counter"}, {"post_id": 13786, "ts": "2026-06-22T16:25:57Z", "hours": 1.0808, "text": "Meet the PICO-DINO!! 🦖 I finally made a real dinosaur for the game ) Further plans Next, I will add some cacti )"}, {"post_id": 13697, "ts": "2026-06-22T13:35:19Z", "hours": 0.9733, "text": "RAM Optimization The pico was sometimes crashing, after I spammed the log, so I got into optimising ) Before, i had 2 screen buffers, and even a third one for blending them (no wonder it crashed XD) So I just removed all the unnesecary buffers ) btw blend modes are still working! the first game! I just started working on the first game for the picolator!"}, {"post_id": 13323, "ts": "2026-06-21T20:19:58Z", "hours": 0.5889, "text": "DISPLAY TIMEOUT ADDED Now the display wont burn out XD Here is a reaaaally interesting photo of a black screen XD Tomorrow I will start coding the dino runner!"}, {"post_id": 13290, "ts": "2026-06-21T19:14:45Z", "hours": 2.5306, "text": "MIX BLEND MODE Added a brand new blend mode to my renderer! It was actually just procrastination, because I was too lazy to make the Dino Runner. About the project The Picolator is a custom OS for the raspberry pi pico. Next I will implement the chrome dino app (:"}, {"post_id": 12663, "ts": "2026-06-20T18:06:20Z", "hours": 0.7731, "text": "Display overclock 🥳 Got my display running on 65hz! (and coded this spinny thing) This can definitly run chrome dino XD"}, {"post_id": 12615, "ts": "2026-06-20T16:41:15Z", "hours": 1.7439, "text": "Feature system ready! The Picolator can now run different feature modules for debugging and trolling! Next up …. Dino runner! Btw my rng number is crazy (3) : stardance rng day 6 🎲 3 · ranked #500 so far https://stardance.hackclub.com/rng"}, {"post_id": 12536, "ts": "2026-06-20T14:08:54Z", "hours": 1.2269, "text": "Input system fixed Today I fixed the input system, so it responds faster, and supports more features. One important function I added is the justPressed function, it only returns true, when thw button was pressed exactly in this tick I also started working on the feature manager , it will have different featues like on screen log display, and other useful stuff."}, {"post_id": 12112, "ts": "2026-06-19T19:39:26Z", "hours": 0.7036, "text": "Theme change works!"}, {"post_id": 12083, "ts": "2026-06-19T18:35:30Z", "hours": 0.4331, "text": "C++ compiler exploding because of one missing semicolon 💀"}, {"post_id": 12054, "ts": "2026-06-19T17:42:16Z", "hours": 1.2925, "text": "Working on settings Changed some core logic, and started to work on the settings menu!"}, {"post_id": 11943, "ts": "2026-06-19T14:07:08Z", "hours": 1.9542, "text": "minor changes Input debug Main menu working! new Theme Next, I will work on the Settings app. Then you can change and create themes! wow"}, {"post_id": 11259, "ts": "2026-06-18T12:44:33Z", "hours": 1.5231, "text": "Display update! Many different display features : blend modes overlays new color format better image rendering And I also added some new themes ! PS the display looks too bright on the photo"}, {"post_id": 11203, "ts": "2026-06-18T10:28:37Z", "hours": 3.7581, "text": "Hugeee update!! Themes fixed Main menu working new App managment system Theme view screen ready I hope you like it )"}, {"post_id": 10078, "ts": "2026-06-16T17:36:28Z", "hours": 0.9575, "text": "The Tailwind theme is working!!! Currently each theme has 3 Tailwind pallets - surface, primary, and secondary. P.S. - It looks much better irl"}, {"post_id": 9943, "ts": "2026-06-16T13:56:56Z", "hours": 1.5231, "text": "coded a buggy tailwind theme generator (some colors are to bright, others to dark 😭😭😭)"}, {"post_id": 9751, "ts": "2026-06-16T05:36:53Z", "hours": 3.2739, "text": "The Main screen is ready! And themes are working. (this is just a test theme ik it looks terrible)"}, {"post_id": 8819, "ts": "2026-06-14T17:37:03Z", "hours": 1.4308, "text": "Remaking the font System Today, I was remaking the entire font system. I created my own FONT class, and used it to load new fonts. Now The Picolator has nicer fonts )"}, {"post_id": 8737, "ts": "2026-06-14T15:12:28Z", "hours": 0.3678, "text": "Fixed the Font rendering! New features -> font scaling -> now you can scale fonts! Coming up -> rethinking the Font system changing the ugly Waveshare font to something different (:"}, {"post_id": 7986, "ts": "2026-06-13T10:04:34Z", "hours": 1.5319, "text": "Remaking the font rendering (and failing)"}, {"post_id": 7692, "ts": "2026-06-12T21:01:25Z", "hours": 2.0769, "text": "Ahhh why did I spent some mucb time on this…. (added a UiDraw class, and redisigned the structure)"}, {"post_id": 7596, "ts": "2026-06-12T18:21:32Z", "hours": 1.1856, "text": "Alpha support added! (And other technical changes)"}, {"post_id": 6261, "ts": "2026-06-10T14:55:17Z", "hours": 1.7136, "text": "Building the basic app structure! And a quick display demo. Created a TestApp for different tests )"}, {"post_id": 5849, "ts": "2026-06-09T19:55:52Z", "hours": 1.1669, "text": "Created a Display class for rendering and drawing. (just a wrapper for a C library). Next I am going to work on the UI logic."}, {"post_id": 5771, "ts": "2026-06-09T17:57:21Z", "hours": 1.1364, "text": "Finally got it running on cpp! (Yes i gave up on learning c)"}, {"post_id": 5603, "ts": "2026-06-09T13:40:31Z", "hours": 0.8697, "text": "So I somehow got the display test working… I already hate C (edit - no! C is cool [: )"}, {"post_id": 5570, "ts": "2026-06-09T12:15:42Z", "hours": 0.4519, "text": "setting up the project!"}]...
|
Title: PICOLATOR V2 by @fedi41 | Stardance
Devlog Title: PICOLATOR V2 by @fedi41 | Stardance
Devlogs:
setting up the project!
So I somehow got the display test working… I already hate C (edit - no! C is cool [: )
Finally got it running on cpp! (Yes i gave up on learning c)
Created a Display class for rendering and drawing. (just a wrapper for a C library). Next I am going to work on the UI logic.
Building the basic app structure! And a quick display demo. Created a TestApp for different tests )
Alpha support added! (And other technical changes)
Ahhh why did I spent some mucb time on this…. (added a UiDraw class, and redisigned the structure)
Remaking the font rendering (and failing)
Fixed the Font rendering! New features -> font scaling -> now you can scale fonts! Coming up -> rethinking the Font system changing the ugly Waveshare font to something different (:
Remaking the font System Today, I was remaking the entire font system. I created my own FONT class, and used it to load new fonts. Now The Picolator has nicer fonts )
The Main screen is ready! And themes are working. (this is just a test theme ik it looks terrible)
coded a buggy tailwind theme generator (some colors are to bright, others to dark 😭😭😭)
The Tailwind theme is working!!! Currently each theme has 3 Tailwind pallets - surface, primary, and secondary. P.S. - It looks much better irl
Hugeee update!! Themes fixed Main menu working new App managment system Theme view screen ready I hope you like it )
Display update! Many different display features : blend modes overlays new color format better image rendering And I also added some new themes ! PS the display looks too bright on the photo
minor changes Input debug Main menu working! new Theme Next, I will work on the Settings app. Then you can change and create themes! wow
Working on settings Changed some core logic, and started to work on the settings menu!
C++ compiler exploding because of one missing semicolon 💀
Theme change works!
Input system fixed Today I fixed the input system, so it responds faster, and supports more features. One important function I added is the justPressed function, it only returns true, when thw button was pressed exactly in this tick I also started working on the feature manager , it will have different featues like on screen log display, and other useful stuff.
Feature system ready! The Picolator can now run different feature modules for debugging and trolling! Next up …. Dino runner! Btw my rng number is crazy (3) : stardance rng day 6 🎲 3 · ranked #500 so far https://stardance.hackclub.com/rng
Display overclock 🥳 Got my display running on 65hz! (and coded this spinny thing) This can definitly run chrome dino XD
MIX BLEND MODE Added a brand new blend mode to my renderer! It was actually just procrastination, because I was too lazy to make the Dino Runner. About the project The Picolator is a custom OS for the raspberry pi pico. Next I will implement the chrome dino app (:
DISPLAY TIMEOUT ADDED Now the display wont burn out XD Here is a reaaaally interesting photo of a black screen XD Tomorrow I will start coding the dino runner!
RAM Optimization The pico was sometimes crashing, after I spammed the log, so I got into optimising ) Before, i had 2 screen buffers, and even a third one for blending them (no wonder it crashed XD) So I just removed all the unnesecary buffers ) btw blend modes are still working! the first game! I just started working on the first game for the picolator!
Meet the PICO-DINO!! 🦖 I finally made a real dinosaur for the game ) Further plans Next, I will add some cacti )
A cactus appears! 🌵 This morning, I added the first cactus, and a moing floor, along with some animations ) These are all original textures! Next up cactus collisions (mask collisions) more cactus types score counter
PICO-DINO just jumped on a cactus 😭😭 …the PicoDino tries to jump over the EVIL CACTUS , but he lands perfectly on it! RIP PicoDino 🪦🦖 . . . But… Cactus collision is working! 😎 Finally, the dino can’t go through cacti anymore! Today, I implemented the mask collision ) P.S. - I finally figured out how to add multiple photos 😅
Finished the PICODINO! Ig I finished the game ) Now I can finally work on something else . 🦖🌵 . It’s a copy of the iconic game, running on a pi pico. Features added… score counter high score saved in flash sneaking different cactus types restart after losing dark mode
Demo website working on the demo website for my PICOLATOR project . SHIPPING SOON . PICOLATOR v2.1 is ready for ship! I just need to finish this small website, and I’m done! I’ll also continue working at this after the ship :) Btw here is the link: https://fedi41-prog.github.io/picolator2/
7 HOURS GONE. WEBSITE DONE (almost). Well time flies much faster when making websites… finished the feature menu I added a feature menu to control the feature manager and toggle features on and off ) I also kinda broke the display of the picolator… and thats why - new displays are coming soon (well I think so) - I am building a second Picolator! (And repairing the old one) almost forgot the website link 😅: https://fedi41-prog.github.io/picolator2/
The first release ) I finished the demo version of the project! Now I am ready to ship ) features in this release UI system (with theming support) first game (picodino) Settings menu (with modular feature support) custom renderer (built on top of the waveshare library, supports blendmodes) custom input system the release: https://github.com/fedi41-prog/picolator2/releases
Pico-keyboard ?! So i coded the first simple version of a keyboard for the Picolator … for now, I will use it for the AI chat app (also in development), and for the Wifi configuration. Its currently in development, but in the next devlog I am planning to finish the wifi connection! btw credits to @eceWire , I was inspired by the keyboard in his project. ))
Its been very long time… But , I made some progress on the WiFi -settings! By progress I mean only the working ui XD. (and keyboard ) EVERYTHING ELSE JUST DOESNT WORK a list of things, that need to be fixed: storage sucks wifi sucks ui sucks (it just looks bad) I will bet trying to fix all of these things in future devlogs so follow along )
WiFi on the Picolator I managed to connect WiFi to the pico! The password and the SSID are saved in the flash! I will update the wifi settings UI someday, It looks horrible XD. And guess what? I will do a PICOFETCH app next, So follow along!
picoFETCH ig its working ) I added a simple fetch app, simmular to neofetch ) It displays: the board name (on compilation) chip name clock speed free RAM (not prezise) SDK version chip id WiFi connection status btw this all runs on a simple rpi pico 2w with a diplay ) check out my other devlogs to see what this thing can do
pico-Stardance :P Tried rendering the stardance logo on the Picolator ) I actually wanted to work on the AI chat app, but instead of locking in, I just procrastineted and made this :3 But a least it looks cool XD Btw it took me so long, because I am trying to learn vim, and I am not really good at it ) Well ig see u next devlog
Devlog ig Well this two hours I been trying to make an AI chat app. Meanwhile, I realized, that my custom log system kinda sucks, so I will be just using the classic Serial output for logging, and completly remove my custom logger. Problems with the logger logs are hard to read (very small) if u enable the log display feature, the rendering gets slower gives no errors, I only know at witch step the program stopped uses much RAM with serial logging, all of this issues will be fixed. And I can finally see what error it throws! although it doesnt tell much in the error… terminate called after throwing an instance of 'std::out_of_range' what(): And sorry for the long break… I will try to code more now!
Serial logging works! I just replaced me custom logger with the Serial one ) Now I can work on the AI chat app !
AI on the pico!! AI chat app is working!! What I did: Made the ui (pretty simple) Added a keyboard for input made some placehgolder functions to send promt and receive them What AI did for me all the api connection logic (The Mistral.h file) It was too complicated for me XD… How I did it: I used the mistral API made a simle app on the picolator for it thats it ) What I will do next -> make so you can enter your own api key (without recompiling) make so u can scroll through long responses Next ideas for the project… redisign some parts of the ui (I dont like that headings take up so much space) make a paint app ?
5 Hours for almost nothing xD well its been very long time, I’ve been working on the AI app all this time… I almost made it so you can enter your own api key, but like always it isnt saving properly and is just not working. I also improved the AI chat a bit, made so it shows the errors, only for it to always show “UNKNOWN ERROR”. It kinda looks that the project is a bit dead a the time, I dont know if I will be posting so often. Other things that are not related to the project I switched to arch btw And I am finally comfortable with neovim :D
Simple taskbar! Added a simple status bar to the picolator! At the time its very minimal, but later it will show more stuff. How it works The status bat shows the currently running app by accessing the Navigator class. It is displayed over the current app, but before the all the features. Why I did it I thought that it would be nice to always know which app you are in, and because I dont want to put a header in each app, a status bar is the best solution. Also, I can later use it to show other stuff so its just nice to have :D Whats about the AI chat app I never finished? well… its still not finished idk if it ever will be finished. Conclusion I actually did varios stuff, but the most major change I made was the status bar so I post it here. Thanks for reading btw XD
Ships:
PICOLATOR v2.1 Beta This is the first ship of my big project: Picolator . Picolator is a handheld device powered by a Raspberry Pi Pico, running a custom operating system that I wrote from scratch in C++. 🧩 Features At this stage, Picolator includes: 🎮 PicoDino A simple remake of the classic dinosaur runner game. 🖥️ Custom UI Engine A lightweight interface system with different blend modes and a modular structure. 🧭 Main Menu System An app launcher for navigating between installed applications. ⚙️ Settings App A basic settings interface for system configuration. 🎨 Theming Support Custom themes based on Tailwind-style color palettes. 🚀 Status This is an early beta release. More features, apps, and improvements are planned for future updates....
|
1793112477.4030056
|
1793198877.4030056
|
|
4739
|
My awesome macropad! by @helene_meingassner | Star My awesome macropad! by @helene_meingassner | Stardance...
|
helene_meingassner
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My awesome macropad! by @helene_meingassner Title: My awesome macropad! by @helene_meingassner | Stardance...
|
1793210198.492542
|
1793814998.492542
|
|
4740
|
HiveMind by @Dorapakoda | Stardance
|
Dorapakoda
|
1
|
9.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-07T07:08:29Z", "hours": 9.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "verview HiveMind is a modular swarm intelligence platform designed around interconnected ESP32-based nodes that can operate as a coordinated autonomous system. Rather than relying on a single powerful controller, HiveMind distributes tasks, communication, and decision-making across multiple low-cost nodes, creating a resilient and scalable network capable of adapting to changing environments and mission requirements. The project explores how large numbers of simple devices can work together to achieve complex objectives such as area mapping, search operations, environmental monitoring, surveillance, and autonomous exploration. Vision Traditional robotic systems often depend on centralized control, making them vulnerable to single points of failure. HiveMind aims to demonstrate a different approach: a decentralized network where individual nodes cooperate, share information, and dynamically allocate tasks based on the current state of the mission. Inspired by natural swarm systems such as ant colonies and bee hives, HiveMind focuses on collective intelligence emerging from many simple units working together.", "repo": "https://github.com/EnigmaGaming03/HiveMind", "demo": "https://hive-mind-simulator--menot58157.replit.app/"}]...
|
[{"post_id": 2665, "ts": "2026 [{"post_id": 2665, "ts": "2026-06-05T10:34:38Z", "hours": 2.0442, "text": "Finished with drone frame and component placement.Next is setting up of the O2O communication system and control system for the drone as well as other safety/ smart features"}, {"post_id": 1469, "ts": "2026-06-03T14:57:30Z", "hours": 3.3953, "text": "In this session i worked on making the full driver board and fixing all the shorts on the schematic. due to certain crashes of KiCad there was a lot of component unsyncing happening so i had to force sync the schematic a few times to fix the errors , i also made the board to size based on the previously designed CAD model of the drone frame. a few issues were faced while wiring the board, causing the routes to no snap on to the place , although after some trouble shooting it was fixed by changing the settings in the interactice routing tab and selecting allow DRC violations. Though this caused more trouble shooting steps in the end it allowed me to be able to quickly build the initial board. i also had to redo the board J1 socket as seen in image attached as i had forgotten to add voltage in from the ESP32 cam to this additional board to run the motors"}, {"post_id": 1270, "ts": "2026-06-03T04:46:05Z", "hours": 2.0492, "text": "In this session, i worked on the driver board for the drone, which the ESP32 will connect to and be able to controll the motors, its a unidirectional 4 channel controller, it uses a Q_NMOS, 10K resistors and a 1N4148 Diode. Faced a few issues because most of the schematics needed to be found using different names Q_NMOS was known as SI2300 N-channel but that name doesnt work in the kicad library. furthermore when switching to the schematics to the PCB editor most of the components didnt have a footprint assigned so i had to work on assigning footprints to each component again."}, {"post_id": 787, "ts": "2026-06-02T13:40:47Z", "hours": 1.1478, "text": "Working on a Drone swarming system that uses ESP32 with camera module for o2o( Object to object ) communication In this first session I made the drone frame and decided the placement of various components on the frame. As well as a bit of research about the components that may be necessary for the motor driver pcb that has to fabricated / designed at a later session"}]...
|
Title: HiveMind by @Dorapakoda | Stardance
Devlog Title: HiveMind by @Dorapakoda | Stardance
Devlogs:
Working on a Drone swarming system that uses ESP32 with camera module for o2o( Object to object ) communication In this first session I made the drone frame and decided the placement of various components on the frame. As well as a bit of research about the components that may be necessary for the motor driver pcb that has to fabricated / designed at a later session
In this session, i worked on the driver board for the drone, which the ESP32 will connect to and be able to controll the motors, its a unidirectional 4 channel controller, it uses a Q_NMOS, 10K resistors and a 1N4148 Diode. Faced a few issues because most of the schematics needed to be found using different names Q_NMOS was known as SI2300 N-channel but that name doesnt work in the kicad library. furthermore when switching to the schematics to the PCB editor most of the components didnt have a footprint assigned so i had to work on assigning footprints to each component again.
In this session i worked on making the full driver board and fixing all the shorts on the schematic. due to certain crashes of KiCad there was a lot of component unsyncing happening so i had to force sync the schematic a few times to fix the errors , i also made the board to size based on the previously designed CAD model of the drone frame. a few issues were faced while wiring the board, causing the routes to no snap on to the place , although after some trouble shooting it was fixed by changing the settings in the interactice routing tab and selecting allow DRC violations. Though this caused more trouble shooting steps in the end it allowed me to be able to quickly build the initial board. i also had to redo the board J1 socket as seen in image attached as i had forgotten to add voltage in from the ESP32 cam to this additional board to run the motors
Finished with drone frame and component placement.Next is setting up of the O2O communication system and control system for the drone as well as other safety/ smart features
Ships:
verview HiveMind is a modular swarm intelligence platform designed around interconnected ESP32-based nodes that can operate as a coordinated autonomous system. Rather than relying on a single powerful controller, HiveMind distributes tasks, communication, and decision-making across multiple low-cost nodes, creating a resilient and scalable network capable of adapting to changing environments and mission requirements. The project explores how large numbers of simple devices can work together to achieve complex objectives such as area mapping, search operations, environmental monitoring, surveillance, and autonomous exploration. Vision Traditional robotic systems often depend on centralized control, making them vulnerable to single points of failure. HiveMind aims to demonstrate a different approach: a decentralized network where individual nodes cooperate, share information, and dynamically allocate tasks based on the current state of the mission. Inspired by natural swarm systems such as ant colonies and bee hives, HiveMind focuses on collective intelligence emerging from many simple units working together....
|
1793252911.1549141
|
1793339311.1549141
|
|
4741
|
speedMath Training by @viivi | Stardance
|
viivi
|
1
|
17.0
|
128
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-02T14:50:02Z", "hours": 17.0, "multiplier": 7.43, "payout": 128, "blessing": "neutral", "text": "speedMath Training is a website for training mental math. It’s super simple to use and you can adjust how hard questions do you want. I built this site using React and typescript. I’m aware that similar sites exists already, but none of them was exactly what I wanted so I developed my own. Before this project I had done courses that taught me developing websites with React and those courses included coding simple projects. But speedMath Training is my first own frontend project with React. The site is quite simple, but it wasn’t super easy for me to build it. I had never used Zustand state management solution, but I learned to use it to make state management easier. Other new thing I learned was publishing a site with github pages. It was kind of complicated, because i have separated folders for frontend (this project) and back end (almost empty). But now I get a new site builded and deployed every time i push to the repository. Project README includes more details if someone is interested.", "repo": "https://github.com/ViLP357/speedMathTraining", "demo": "https://vilp357.github.io/speedMathTraining"}]...
|
[{"post_id": 39499, "ts": "202 [{"post_id": 39499, "ts": "2026-08-02T14:30:01Z", "hours": 1.0094, "text": "#11 devlog The final devlog, I guess. I fixed responsive issues and finished readme and now I’m about to ship this project. (Sorry for short devlog, I just wanted to this 1 hour to be counted.)"}, {"post_id": 35369, "ts": "2026-07-26T18:31:08Z", "hours": 1.7008, "text": "#10 devlog It’s (almost) a ready project! I fighted for over an hour to publish it in github pages. But it was worth it because it’s now liveee https://vilp357.github.io/speedMathTraining (pls test). Before shipping I still need to fix some responsive issues and finish readme, but we’re almost there."}, {"post_id": 13709, "ts": "2026-06-22T14:07:19Z", "hours": 3.0169, "text": "#9 devlog, days 10-12 (maybe?) It’s been a while since last devlog, mostly because I haven’t had time to work with this, but also because hasn’t been any big updates. But now it’s time for you… to meet Calc, the mascot of the speedMath Training. I still need to add Calc to the site. I’m also planning to make a buddy for them and together they will cheer you on."}, {"post_id": 8841, "ts": "2026-06-14T18:20:07Z", "hours": 1.3214, "text": "#8 devlog, day 9 The UI is starting to look good and is much better than few days ago. Today I spent most of my time working on the main screen and a significant amount of it was used to do styles for the checkboxes. I don’t know yet much time I want to use for this project, because it has already all the core features I have thought. I have been planning other new projects and I need time for those and I don’t have as much motivation as before for this project. Anyways, things I will do before shipping: -Make it more mobile friendly -Finish styles for components -Fix component placing"}, {"post_id": 7454, "ts": "2026-06-12T12:52:05Z", "hours": 1.5856, "text": "#7 devlog, day 8 Today I finally managed to create a color palette that works with both light and dark mode. This is only beginning of the UI upgrade so more coming later. the most critical things to do next: -move the timer (why is it even there???) -scale content"}, {"post_id": 6317, "ts": "2026-06-10T17:07:57Z", "hours": 1.3153, "text": "#6 devlog day 7 Today I continued working by starting to design UI. The image shows color palettes I have thought. The upper is for light mode and lower is for dark mode. I still have to figure out contrast things. I thought I’d use the green for buttons with either white or black text, but I barely could see the white text so something has to be done? Maybe other color or shadows for text."}, {"post_id": 6224, "ts": "2026-06-10T13:46:13Z", "hours": 1.9433, "text": "#5 devlog, days 5-7 New updates: choose number of questions number generating fixed Daily challenge page How I fixed number generating How I tried before Math.floor(Math.random()*(Math.pow(10,digits[0]))*Math.pow(10, digits[1]-digits[0])) and Math.floor((Math.random() * 10)*(Math.pow(10, digits[0]-1))*Math.pow(10, Math.ceil(Math.random() * digits[1]-digits[0]))) Where digits[0] is minimum number of digits and digits[1] is maximum number of digits How it works now: A function randomNumber gets number of decimals as paramater and the function is called randomNumber(Math.round(Math.random() * (digits[1]-digits[0])) + digits[0]) Problems this fixes: Generating numbers with less digits that minimum generating different number of digits unequally (more digits was much more common) Next thing to do: UI upgrade"}, {"post_id": 2711, "ts": "2026-06-05T13:02:02Z", "hours": 1.4031, "text": "#4 devlog, day 4 Today’s main progress happened with giving players more options to customize questions. Now it’s possible to choose how many digits they want their questions to have. Next thing to do is add question number chooser. There is only one little (big) problem with digits adjuster logic: numbers with more digits tend to be much more common because of the number generating logic. I hope I can find the solution to fix that soon. As you can see from the picture, I added some color to the website, but just to be able to see different component better. Hopefully the final design will be much more better."}, {"post_id": 2275, "ts": "2026-06-04T17:50:25Z", "hours": 1.7203, "text": "#3 devlog, day 3 Today I finally made the timer and now this project could be actually called a “game”. It wasn’t easy to code the timer and make it work as it’s supposed. For some reason updating the timer updated the questions (which happened every second), but it was easy to fix when I figured out why it happened. (Why: the state timer component uses belonged to its parent component, where the questions are created. But when I updated time in timer component, it caused parent component to rerender again too. The way to fix that was to move question creating inside its own state and that way quesions are created only once.) When the timer finally worked, I quickly added simple navigation structure using react router library. Adding that structure required some refactoring, but I will thank myself later for doing it so early. I was also a bit surprised but happy because nothing broke when I moved some components from one to another."}, {"post_id": 1432, "ts": "2026-06-03T13:50:21Z", "hours": 0.9961, "text": "#2 devlog, day2 Now I have worked on this project for 2hr during Stardance. The new feature works now: it is possible to choose which operators you want to be used (and it actually works!). I also realized that division is more tricky to implement, so that’s why I just deleted it. I’m coding this in typescript, because I wanted to challenge myself, but it takes sometimes so long to figure right types even for simple objects. At least I learned a lot of new things, hehe. Tomorrow -Timer"}, {"post_id": 1400, "ts": "2026-06-03T12:34:36Z", "hours": 1.1967, "text": "speedMath training -The first devlog- Starting this project This project is a website where you can practice your mental math skills. The image shows how the site looked before Stardance. Before Stardance, I had only created this project(done set up, configured git) and coded < 5hr. Then I decided to continue working on this later. I feel like Stardance is a great opportunity for me to continue working on this. I’m aware that similar projects already exist, but I feel like none of them are exactly what I want and need. For example, they have bad UI, require users to log in, or are way too complicated. So this is going to be (hopefully) different. Next things I will do: -add timer -add a difficulty adjuster Other things I will/might do later: -improve the UI -add a leaderboard -add cute characters that cheer for you"}]...
|
Title: speedMath Training by @viivi | Stardance
D Title: speedMath Training by @viivi | Stardance
Devlogs:
speedMath training -The first devlog- Starting this project This project is a website where you can practice your mental math skills. The image shows how the site looked before Stardance. Before Stardance, I had only created this project(done set up, configured git) and coded < 5hr. Then I decided to continue working on this later. I feel like Stardance is a great opportunity for me to continue working on this. I’m aware that similar projects already exist, but I feel like none of them are exactly what I want and need. For example, they have bad UI, require users to log in, or are way too complicated. So this is going to be (hopefully) different. Next things I will do: -add timer -add a difficulty adjuster Other things I will/might do later: -improve the UI -add a leaderboard -add cute characters that cheer for you
#2 devlog, day2 Now I have worked on this project for 2hr during Stardance. The new feature works now: it is possible to choose which operators you want to be used (and it actually works!). I also realized that division is more tricky to implement, so that’s why I just deleted it. I’m coding this in typescript, because I wanted to challenge myself, but it takes sometimes so long to figure right types even for simple objects. At least I learned a lot of new things, hehe. Tomorrow -Timer
#3 devlog, day 3 Today I finally made the timer and now this project could be actually called a “game”. It wasn’t easy to code the timer and make it work as it’s supposed. For some reason updating the timer updated the questions (which happened every second), but it was easy to fix when I figured out why it happened. (Why: the state timer component uses belonged to its parent component, where the questions are created. But when I updated time in timer component, it caused parent component to rerender again too. The way to fix that was to move question creating inside its own state and that way quesions are created only once.) When the timer finally worked, I quickly added simple navigation structure using react router library. Adding that structure required some refactoring, but I will thank myself later for doing it so early. I was also a bit surprised but happy because nothing broke when I moved some components from one to another.
#4 devlog, day 4 Today’s main progress happened with giving players more options to customize questions. Now it’s possible to choose how many digits they want their questions to have. Next thing to do is add question number chooser. There is only one little (big) problem with digits adjuster logic: numbers with more digits tend to be much more common because of the number generating logic. I hope I can find the solution to fix that soon. As you can see from the picture, I added some color to the website, but just to be able to see different component better. Hopefully the final design will be much more better.
#5 devlog, days 5-7 New updates: choose number of questions number generating fixed Daily challenge page How I fixed number generating How I tried before Math.floor(Math.random()*(Math.pow(10,digits[0]))*Math.pow(10, digits[1]-digits[0])) and Math.floor((Math.random() * 10)*(Math.pow(10, digits[0]-1))*Math.pow(10, Math.ceil(Math.random() * digits[1]-digits[0]))) Where digits[0] is minimum number of digits and digits[1] is maximum number of digits How it works now: A function randomNumber gets number of decimals as paramater and the function is called randomNumber(Math.round(Math.random() * (digits[1]-digits[0])) + digits[0]) Problems this fixes: Generating numbers with less digits that minimum generating different number of digits unequally (more digits was much more common) Next thing to do: UI upgrade
#6 devlog day 7 Today I continued working by starting to design UI. The image shows color palettes I have thought. The upper is for light mode and lower is for dark mode. I still have to figure out contrast things. I thought I’d use the green for buttons with either white or black text, but I barely could see the white text so something has to be done? Maybe other color or shadows for text.
#7 devlog, day 8 Today I finally managed to create a color palette that works with both light and dark mode. This is only beginning of the UI upgrade so more coming later. the most critical things to do next: -move the timer (why is it even there???) -scale content
#8 devlog, day 9 The UI is starting to look good and is much better than few days ago. Today I spent most of my time working on the main screen and a significant amount of it was used to do styles for the checkboxes. I don’t know yet much time I want to use for this project, because it has already all the core features I have thought. I have been planning other new projects and I need time for those and I don’t have as much motivation as before for this project. Anyways, things I will do before shipping: -Make it more mobile friendly -Finish styles for components -Fix component placing
#9 devlog, days 10-12 (maybe?) It’s been a while since last devlog, mostly because I haven’t had time to work with this, but also because hasn’t been any big updates. But now it’s time for you… to meet Calc, the mascot of the speedMath Training. I still need to add Calc to the site. I’m also planning to make a buddy for them and together they will cheer you on.
#10 devlog It’s (almost) a ready project! I fighted for over an hour to publish it in github pages. But it was worth it because it’s now liveee https://vilp357.github.io/speedMathTraining (pls test). Before shipping I still need to fix some responsive issues and finish readme, but we’re almost there.
#11 devlog The final devlog, I guess. I fixed responsive issues and finished readme and now I’m about to ship this project. (Sorry for short devlog, I just wanted to this 1 hour to be counted.)
Ships:
speedMath Training is a website for training mental math. It’s super simple to use and you can adjust how hard questions do you want. I built this site using React and typescript. I’m aware that similar sites exists already, but none of them was exactly what I wanted so I developed my own. Before this project I had done courses that taught me developing websites with React and those courses included coding simple projects. But speedMath Training is my first own frontend project with React. The site is quite simple, but it wasn’t super easy for me to build it. I had never used Zustand state management solution, but I learned to use it to make state management easier. Other new thing I learned was publishing a site with github pages. It was kind of complicated, because i have separated folders for frontend (this project) and back end (almost empty). But now I get a new site builded and deployed every time i push to the repository. Project README includes more details if someone is interested....
|
1793231296.5865922
|
1793317696.5865922
|
|
4742
|
Rustic Pride by @hackclub_nutrient623 | Stardance
|
hackclub_nutrient623
|
1
|
18.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-11T21:24:45Z", "hours": 18.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "Rustic Pride - A Rust based CLI application that provides information on different LGBTQIAS+ orientations and their flags. It does exactly what the name says currently. It provides information and flags of different LGBTQIAS+ orientations and terms. All from the MediaWiki powered site https://lgbtqia.wiki/ . Currently Rust is needed to be able to install the program, as crates.io is the only distribution method. I debated about how I wanted to distribute this for a while. For one of my other projects, I had used GitHub actions. But I am no-longer using GitHub. Forgejo has actions, though I don’t seem to have access to the necessary runners from Git.Gay. Granted I didn’t try very hard to figure out how that actually worked. I diffident want to switch back to Windows just for compiling an exe (I switched to my Linux install for the final bit of coding as a celebration of the first release. Don’t question my logic or what I find honorable.) and cross-compiling didn’t want to work. OS Error 2. Ratatui is kinda weird to work with. I’m starting to get the hang of it kinda though. After building three programs with it. Slint was a lot easier. But that’s not in the terminal. Slint was even pre-ai coding. Ratatui I get to use Claude and Mistral and Gemini (and the amazing documentation Rust crates have) to figure things out. Most of this project’s UI I was able to yoink from one of my other projects though. The only entirely custom to this project UI element is the query response page.", "repo": "https://git.gay/nova-shadowtail/Rustic-Pride", "demo": "https://crates.io/crates/rustic-pride"}]...
|
[{"post_id": 7060, "ts": "2026 [{"post_id": 7060, "ts": "2026-06-11T20:37:37Z", "hours": 3.0467, "text": "The first release is here. . . I made the UI look more like I originally wanted, which I am now realizing that I never shared the drawing of. It originally didn’t work very well. The issue was that I am apparently bad at typing numbers. I put the wrong indexing location for some of the widgets / layouts in render_page. That was an easy fix though. The images in this post will show that issue. , , Because of what happened last devlog, I am anticipating that the images will not display very well and have pre-uploaded them to Dropbox for your viewing enjoyment. https://www.dropbox.com/scl/fo/1jxnglincmsw2ji6hybp9/ABBOiI6-PvWQRNzOfEsT32A?rlkey=jh4r8jwidm8mqgjxkxey5xm2z&st=4yolviyf&dl=0 , , I debated about how I wanted to distribute this for a while. For one of my other projects (PRTGN, https://git.gay/PRTGN-Development-Team/.prtgn ), I had used GitHub actions. But I am no-longer using GitHub. Forgejo has actions, though I don’t seem to have access to the necessary runners from Git.Gay. Granted I didn’t try very hard to figure out how that actually worked. I diffident want to switch back to Windows just for compiling an exe (I switched to my Linux install for the final bit of coding as a celebration of the first release. Don’t question my logic or what I find honorable.) and cross-compiling didn’t want to work. OS Error 2. So I ended up at crates.io. Only downside is one needs Rust to install the program. , , There is still much that can be done, but this application now fully fits its original intent. A Rust based CLI application that provides information on different LGBTQIAS+ orientations and their flags. , . https://git.gay/nova-shadowtail/Rustic-Pride . https://crates.io/crates/rustic-pride"}, {"post_id": 6504, "ts": "2026-06-10T22:39:35Z", "hours": 2.6558, "text": "I got the new screen to work! I am close to a first release. At first the screen was a bit wonk but after changing a couple of numbers, I fixed it. Enby is without the fix, trans is with the fix. Now all that’s left to get a first release, is adding render engine selection so that halfblocks isn’t used for everything, adding a few more user instructions, and making install files. At least as of typing this that’s all that is left. Next version may see a fancy in-terminal web browser for the link. And maybe some UI cleanups."}, {"post_id": 5121, "ts": "2026-06-08T20:12:46Z", "hours": 1.8358, "text": "I abandoned that version of image displaying. Reverted to the working just text from earlier. Though at least there is text wrapping now. And error handling."}, {"post_id": 4541, "ts": "2026-06-07T21:43:30Z", "hours": 3.8003, "text": "Spent this three hours trying to get images to work. I am worse off than I was before starting this segment. Now nothing displays on the output. Codestral was no help in debugging. It just told me to add more logs, which I did because they are useful. Still doesn’t work because nothing was actually changed, still says to add more logs. The cycle repeats. Tried multiple different terminals with and without WSL. Nothing. I know Konsole should work, and Windows’s terminal, as they work fine in my other programs. But no. Apparently they don’t want to. I know halfblocks works. I have used it before. It is not at all good quality, but it should at least display. Need to figure that out."}, {"post_id": 3799, "ts": "2026-06-06T21:03:18Z", "hours": 2.4303, "text": "There is a fully functional JSON API and some formatting now. I was able to get the header image URL as well. Now the main thing I need to do is figure out the UI for displaying the information. I was originally going to use Ratatui-Image for the images, however discovered it doesn’t work very well in Windows. Normally I am using either WSL or my install of Fedora, so for all my other projects this isn’t particularly an issue. However, I am developing on Windows currently due to some of my other projects. And I want people to be able to use this program in Windows. So I will need to investigate that further. Though enjoy this video which may or may not work of the current standing of the program."}, {"post_id": 2963, "ts": "2026-06-05T21:33:34Z", "hours": 1.7844, "text": "I almost have Serde working with JSON. I still need to figure out how to get the information out of the message sent by the mediawiki api. The problem there is how the API sends information verse how I know how to parse it with Serde. I am currently using a method for parcing which requires telling the program what each level of JSON is. The mediawiki api puts the page ID number in a level above all the information I need. The ID number would change with every diffrent search. You may be able to see how that would be a problem. Need to figure that one out. And I need to then make the TUI that displays the text. And I should figure out what to do if the program comes back with more than one page. And I need to figure out how I want to display the flags. Probably with ratatui-image, its just a matter of getting it to work with everything else. The only working instance of it I have is in a sub command of PRTGN dedicated to displaying an image (PRTGN_Fox)."}, {"post_id": 1064, "ts": "2026-06-02T21:31:41Z", "hours": 2.2286, "text": "I started work today. I was able to get the program to a stage where it technically works. It sends an API call to a mediawiki powered site, and gets a response. All through a TUI. I stole the base of the code from one of my other projects in which I am attempting to accomplish quite a similar thing. The project is called PRTGN if you want to check it out. The command that I stole from is PRTGN_Wiki. https://git.gay/PRTGN-Development-Team I still need to format the response nicely, and get the other wiki working. And I may add flag support. But like I said, it technically works."}]...
|
Title: Rustic Pride by @hackclub_nutrient623 | Sta Title: Rustic Pride by @hackclub_nutrient623 | Stardance
Devlogs:
I started work today. I was able to get the program to a stage where it technically works. It sends an API call to a mediawiki powered site, and gets a response. All through a TUI. I stole the base of the code from one of my other projects in which I am attempting to accomplish quite a similar thing. The project is called PRTGN if you want to check it out. The command that I stole from is PRTGN_Wiki. https://git.gay/PRTGN-Development-Team I still need to format the response nicely, and get the other wiki working. And I may add flag support. But like I said, it technically works.
I almost have Serde working with JSON. I still need to figure out how to get the information out of the message sent by the mediawiki api. The problem there is how the API sends information verse how I know how to parse it with Serde. I am currently using a method for parcing which requires telling the program what each level of JSON is. The mediawiki api puts the page ID number in a level above all the information I need. The ID number would change with every diffrent search. You may be able to see how that would be a problem. Need to figure that one out. And I need to then make the TUI that displays the text. And I should figure out what to do if the program comes back with more than one page. And I need to figure out how I want to display the flags. Probably with ratatui-image, its just a matter of getting it to work with everything else. The only working instance of it I have is in a sub command of PRTGN dedicated to displaying an image (PRTGN_Fox).
There is a fully functional JSON API and some formatting now. I was able to get the header image URL as well. Now the main thing I need to do is figure out the UI for displaying the information. I was originally going to use Ratatui-Image for the images, however discovered it doesn’t work very well in Windows. Normally I am using either WSL or my install of Fedora, so for all my other projects this isn’t particularly an issue. However, I am developing on Windows currently due to some of my other projects. And I want people to be able to use this program in Windows. So I will need to investigate that further. Though enjoy this video which may or may not work of the current standing of the program.
Spent this three hours trying to get images to work. I am worse off than I was before starting this segment. Now nothing displays on the output. Codestral was no help in debugging. It just told me to add more logs, which I did because they are useful. Still doesn’t work because nothing was actually changed, still says to add more logs. The cycle repeats. Tried multiple different terminals with and without WSL. Nothing. I know Konsole should work, and Windows’s terminal, as they work fine in my other programs. But no. Apparently they don’t want to. I know halfblocks works. I have used it before. It is not at all good quality, but it should at least display. Need to figure that out.
I abandoned that version of image displaying. Reverted to the working just text from earlier. Though at least there is text wrapping now. And error handling.
I got the new screen to work! I am close to a first release. At first the screen was a bit wonk but after changing a couple of numbers, I fixed it. Enby is without the fix, trans is with the fix. Now all that’s left to get a first release, is adding render engine selection so that halfblocks isn’t used for everything, adding a few more user instructions, and making install files. At least as of typing this that’s all that is left. Next version may see a fancy in-terminal web browser for the link. And maybe some UI cleanups.
The first release is here. . . I made the UI look more like I originally wanted, which I am now realizing that I never shared the drawing of. It originally didn’t work very well. The issue was that I am apparently bad at typing numbers. I put the wrong indexing location for some of the widgets / layouts in render_page. That was an easy fix though. The images in this post will show that issue. , , Because of what happened last devlog, I am anticipating that the images will not display very well and have pre-uploaded them to Dropbox for your viewing enjoyment. https://www.dropbox.com/scl/fo/1jxnglincmsw2ji6hybp9/ABBOiI6-PvWQRNzOfEsT32A?rlkey=jh4r8jwidm8mqgjxkxey5xm2z&st=4yolviyf&dl=0 , , I debated about how I wanted to distribute this for a while. For one of my other projects (PRTGN, https://git.gay/PRTGN-Development-Team/.prtgn ), I had used GitHub actions. But I am no-longer using GitHub. Forgejo has actions, though I don’t seem to have access to the necessary runners from Git.Gay. Granted I didn’t try very hard to figure out how that actually worked. I diffident want to switch back to Windows just for compiling an exe (I switched to my Linux install for the final bit of coding as a celebration of the first release. Don’t question my logic or what I find honorable.) and cross-compiling didn’t want to work. OS Error 2. So I ended up at crates.io. Only downside is one needs Rust to install the program. , , There is still much that can be done, but this application now fully fits its original intent. A Rust based CLI application that provides information on different LGBTQIAS+ orientations and their flags. , . https://git.gay/nova-shadowtail/Rustic-Pride . https://crates.io/crates/rustic-pride
Ships:
Rustic Pride - A Rust based CLI application that provides information on different LGBTQIAS+ orientations and their flags. It does exactly what the name says currently. It provides information and flags of different LGBTQIAS+ orientations and terms. All from the MediaWiki powered site https://lgbtqia.wiki/ . Currently Rust is needed to be able to install the program, as crates.io is the only distribution method. I debated about how I wanted to distribute this for a while. For one of my other projects, I had used GitHub actions. But I am no-longer using GitHub. Forgejo has actions, though I don’t seem to have access to the necessary runners from Git.Gay. Granted I didn’t try very hard to figure out how that actually worked. I diffident want to switch back to Windows just for compiling an exe (I switched to my Linux install for the final bit of coding as a celebration of the first release. Don’t question my logic or what I find honorable.) and cross-compiling didn’t want to work. OS Error 2. Ratatui is kinda weird to work with. I’m starting to get the hang of it kinda though. After building three programs with it. Slint was a lot easier. But that’s not in the terminal. Slint was even pre-ai coding. Ratatui I get to use Claude and Mistral and Gemini (and the amazing documentation Rust crates have) to figure things out. Most of this project’s UI I was able to yoink from one of my other projects though. The only entirely custom to this project UI element is the query response page....
|
1793109225.5963686
|
1793195625.5963686
|
|
4743
|
Untitled project by @giovanni1 | Stardance
|
giovanni1
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Untitled project by @giovanni1 | Stardance
|
1792702282.9318967
|
1793307082.9318967
|
|
4744
|
My first slack bot! by @Carter | Stardance
|
Carter
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My first slack bot! by @Carter | Stardance
|
1792759965.8474102
|
1793364765.8474102
|
|
4745
|
Astropass-Smart Rfid Crew access system by @Ashish Astropass-Smart Rfid Crew access system by @AshishPatel | Stardance...
|
AshishPatel
|
1
|
11.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-16T09:40:05Z", "hours": 11.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I built AstroPass, a physical RFID-based security clearance terminal using an Arduino micro-controller and an I2C LCD display. What was challenging: The biggest challenge was structuring the core logic loops and troubleshooting the liquid crystal libraries to handle hardware states smoothly. Managing the active input buffer to read passcodes and RFID badge IDs in real-time through the terminal required a lot of precise code refining. What I’m proud of: I am incredibly proud of building a custom switch-case state machine to handle all user interface transitions flawlessly. I also successfully implemented a 3-strike security lockout system that triggers an automatic 8-second cooldown with a warning triangle icon on screen if an invalid card is scanned three times, alongside an active success chime on a physical hardware buzzer. What people should know to test it: The entire project code is completely open-sourced on my GitHub repository. The system prints the full live access and scan history cleanly straight to the Serial Monitor for instant logging!", "repo": "https://github.com/ashish030810/AstroPass", "demo": ""}]...
|
[{"post_id": 4374, "ts": "2026 [{"post_id": 4374, "ts": "2026-06-07T18:04:30Z", "hours": 1.5883, "text": "I finally finished Astropass and hit my 11 hours! I cleaned up the whole codebase and got everything running smoothly. I ended up adding custom graphics to the LCD screen like a padlock, checkmark, and warning triangle, and I used a clean switch-case state machine to handle all the terminal transitions without any bugs. I also built in a 3-strike security lockout that triggers an automatic 8-second cooldown if an invalid badge is scanned three times, and I set up a circular log system that prints the full access history straight to the Serial Monitor. Everything is fully pushed to GitHub and ready, so I’m officially moving on to my new Astro-Flora greenhouse project now!"}, {"post_id": 4219, "ts": "2026-06-07T13:32:42Z", "hours": 8.8172, "text": "Devlog #2 : Bringing the Astropass Core to Life! 📡🛸 What I did today: Successfully laid down the foundation for the Astropass security terminal and got the I2C LCD display fully integrated with the system logic! New Features: * Fixed up the primary input buffer to read passcodes and badge IDs in real-time through the terminal lines. Programmed the LCD to show live system updates (SCAN PASSPORT…) instead of just hiding the data in the background. Added a dynamic fast-pass check that immediately flips the screen to > ACCESS GRANTED and triggers a high-frequency success chime on the buzzer when a valid badge is detected. Progress: Spent a solid block of hours structuring the basic logic loops and troubleshooting the liquid crystal libraries. Ready to start scaling this up into a multi-user security system! 💎"}, {"post_id": 1959, "ts": "2026-06-04T06:28:06Z", "hours": 0.8683, "text": "Project Name:AstroPass Today’s Progress: Successfully created and initialized a brand new GitHub repository for this second project. Uploaded all the initial core project files to the repository. Set up the demo link to showcase the current state of the project. What I’m working on next: Continuing to build out the next set of features and refining the code."}]...
|
Title: Astropass-Smart Rfid Crew access system by Title: Astropass-Smart Rfid Crew access system by @AshishPatel | Stardance
Devlogs:
Project Name:AstroPass Today’s Progress: Successfully created and initialized a brand new GitHub repository for this second project. Uploaded all the initial core project files to the repository. Set up the demo link to showcase the current state of the project. What I’m working on next: Continuing to build out the next set of features and refining the code.
Devlog #2 : Bringing the Astropass Core to Life! 📡🛸 What I did today: Successfully laid down the foundation for the Astropass security terminal and got the I2C LCD display fully integrated with the system logic! New Features: * Fixed up the primary input buffer to read passcodes and badge IDs in real-time through the terminal lines. Programmed the LCD to show live system updates (SCAN PASSPORT…) instead of just hiding the data in the background. Added a dynamic fast-pass check that immediately flips the screen to > ACCESS GRANTED and triggers a high-frequency success chime on the buzzer when a valid badge is detected. Progress: Spent a solid block of hours structuring the basic logic loops and troubleshooting the liquid crystal libraries. Ready to start scaling this up into a multi-user security system! 💎
I finally finished Astropass and hit my 11 hours! I cleaned up the whole codebase and got everything running smoothly. I ended up adding custom graphics to the LCD screen like a padlock, checkmark, and warning triangle, and I used a clean switch-case state machine to handle all the terminal transitions without any bugs. I also built in a 3-strike security lockout that triggers an automatic 8-second cooldown if an invalid badge is scanned three times, and I set up a circular log system that prints the full access history straight to the Serial Monitor. Everything is fully pushed to GitHub and ready, so I’m officially moving on to my new Astro-Flora greenhouse project now!
Ships:
I built AstroPass, a physical RFID-based security clearance terminal using an Arduino micro-controller and an I2C LCD display. What was challenging: The biggest challenge was structuring the core logic loops and troubleshooting the liquid crystal libraries to handle hardware states smoothly. Managing the active input buffer to read passcodes and RFID badge IDs in real-time through the terminal required a lot of precise code refining. What I’m proud of: I am incredibly proud of building a custom switch-case state machine to handle all user interface transitions flawlessly. I also successfully implemented a 3-strike security lockout system that triggers an automatic 8-second cooldown with a warning triangle icon on screen if an invalid card is scanned three times, alongside an active success chime on a physical hardware buzzer. What people should know to test it: The entire project code is completely open-sourced on my GitHub repository. The system prints the full live access and scan history cleanly straight to the Serial Monitor for instant logging!...
|
1793098365.9810526
|
1793184765.9810526
|
|
4746
|
ProSpeak by @Hadassah | Stardance
|
Hadassah
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: ProSpeak by @Hadassah | Stardance
|
1793170142.4972215
|
1793774942.4972215
|
|
4747
|
My portfolio to let people know me by @Mir-Arsh | My portfolio to let people know me by @Mir-Arsh | Stardance...
|
Mir-Arsh
|
0
|
0.28
|
0
|
[]
|
[{"post_id": 769, "ts": "2026- [{"post_id": 769, "ts": "2026-06-02T13:03:27Z", "hours": 0.2844, "text": "I am just clinging the code of my portfolio website to make it better and better"}]...
|
Title: My portfolio to let people know me by @Mir- Title: My portfolio to let people know me by @Mir-Arsh | Stardance
Devlogs:
I am just clinging the code of my portfolio website to make it better and better...
|
1793145322.6276917
|
1793750122.6276917
|
|
4748
|
Macropad Newbie ! by @yousra | Stardance
|
yousra
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Macropad Newbie ! by @yousra | Stardance
|
1792687995.6991146
|
1793292795.6991146
|
|
4749
|
Fex Interpreter by @Chuxin | Stardance
|
Chuxin
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Fex Interpreter by @Chuxin | Stardance
|
1792796008.25954
|
1793400808.25954
|
|
4750
|
My awesome macropad! by @tejas_kaushik | Stardance
|
tejas_kaushik
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My awesome macropad! by @tejas_kaushik | St Title: My awesome macropad! by @tejas_kaushik | Stardance...
|
1793231651.811059
|
1793836451.811059
|