|
4684
|
My awesome macropad! by @MarkPalam | Stardance
|
MarkPalam
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My awesome macropad! by @MarkPalam | Starda Title: My awesome macropad! by @MarkPalam | Stardance...
|
1793465739.1868253
|
1794070539.1868253
|
|
4685
|
Bank system by @krates | Stardance
|
krates
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Bank system by @krates | Stardance
|
1792921792.3503964
|
1793785792.3503964
|
|
4686
|
Untitled project by @Loonty | Stardance
|
Loonty
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Untitled project by @Loonty | Stardance
|
1793235222.9581044
|
1793840022.9581044
|
|
4687
|
HAND CV by @DhruvJ | Stardance
|
DhruvJ
|
0
|
4.9
|
0
|
[]
|
[{"post_id": 80774, "ts": "202 [{"post_id": 80774, "ts": "2026-10-18T19:04:58Z", "hours": 4.9042, "text": "First Devlog My Project idea seems really basic and simple and I thought so to! so, I broke down the idea into 3 parts: 1)Pre Processing (turning to grayscale and popping out the notes more) 2)actual CV model 3)converting and displaying into text So i began with the first part and realised there are so many factors 1)Resolution: -Photo needs resolution to make out actual keystrokes 2)Aspect ratio and resizing (I wasn’t aware, but models can only take in a fixed size) 3)Inconsistent Skew and orientation could really affect recognition of the same stroke 4)Different lightings in photos: I realized preprocessing on one image can be perfect but be blurry on another 5) fine turning the model So, in this devlog I was learning about different factors do account for and realised that even jpeg and png can have different outputs my first version works really bad in my attempt to making the notes pop I converted it to grayscale which wasn’t enough so I tried a per-pixel intensity remap CLAHE which I still don’t understand how it works but the other methods with gaussian blur and median type blur wasn’t helpful."}]...
|
Title: HAND CV by @DhruvJ | Stardance
Devlogs:
Fi Title: HAND CV by @DhruvJ | Stardance
Devlogs:
First Devlog My Project idea seems really basic and simple and I thought so to! so, I broke down the idea into 3 parts: 1)Pre Processing (turning to grayscale and popping out the notes more) 2)actual CV model 3)converting and displaying into text So i began with the first part and realised there are so many factors 1)Resolution: -Photo needs resolution to make out actual keystrokes 2)Aspect ratio and resizing (I wasn’t aware, but models can only take in a fixed size) 3)Inconsistent Skew and orientation could really affect recognition of the same stroke 4)Different lightings in photos: I realized preprocessing on one image can be perfect but be blurry on another 5) fine turning the model So, in this devlog I was learning about different factors do account for and realised that even jpeg and png can have different outputs my first version works really bad in my attempt to making the notes pop I converted it to grayscale which wasn’t enough so I tried a per-pixel intensity remap CLAHE which I still don’t understand how it works but the other methods with gaussian blur and median type blur wasn’t helpful....
|
1793335909.221595
|
1793940709.221595
|
|
4688
|
Batvision cap by @AlexandruB | Stardance
|
AlexandruB
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Batvision cap by @AlexandruB | Stardance
|
1793371750.7740378
|
1793976550.7740378
|
|
4689
|
My awesome macropad! by @Yoyo | Stardance
|
Yoyo
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My awesome macropad! by @Yoyo | Stardance
|
1793256785.2100425
|
1793861585.2100425
|
|
4690
|
demo by @LidikaRahman | Stardance
|
LidikaRahman
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: demo by @LidikaRahman | Stardance
|
1793372045.3907404
|
1793976845.3907404
|
|
4691
|
My awesome macropad! by @aaravgarg_del | Stardance
|
aaravgarg_del
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My awesome macropad! by @aaravgarg_del | St Title: My awesome macropad! by @aaravgarg_del | Stardance...
|
1793307398.0139542
|
1793912198.0139542
|
|
4692
|
Medical related website by @Lisa | Stardance
|
Lisa
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Medical related website by @Lisa | Stardanc Title: Medical related website by @Lisa | Stardance...
|
1793437025.3567662
|
1794041825.3567662
|
|
4693
|
My first slack bot! by @emmanuel_David | Stardance
|
emmanuel_David
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My first slack bot! by @emmanuel_David | St Title: My first slack bot! by @emmanuel_David | Stardance...
|
1793235317.9696848
|
1793840117.9696848
|
|
4695
|
My awesome macropad! by @willem | Stardance
|
willem
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My awesome macropad! by @willem | Stardance
|
1793271217.7966106
|
1793876017.7966106
|
|
4696
|
3D camera by @sjpark01 | Stardance
|
sjpark01
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: 3D camera by @sjpark01 | Stardance
|
1793451266.4659133
|
1794056066.4659133
|
|
4697
|
slack bot by @mahamansaniabdoulnasser4 | Stardance
|
mahamansaniabdoulnasser4
|
0
|
0.75
|
0
|
[]
|
[{"post_id": 1649, "ts": "2026 [{"post_id": 1649, "ts": "2026-06-03T19:38:51Z", "hours": 0.7531, "text": "A marvelious bot specializing in networking, telecommunications, and automated tasks"}]...
|
Title: slack bot by @mahamansaniabdoulnasser4 | St Title: slack bot by @mahamansaniabdoulnasser4 | Stardance
Devlogs:
A marvelious bot specializing in networking, telecommunications, and automated tasks...
|
1793296408.160483
|
1793901208.160483
|
|
4698
|
My awesome macropad! by @apishRana | Stardance
|
apishRana
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My awesome macropad! by @apishRana | Starda Title: My awesome macropad! by @apishRana | Stardance...
|
1793490983.2552943
|
1794095783.2552943
|
|
4699
|
My first slack bot! by @AliahadMelani27 | Stardanc My first slack bot! by @AliahadMelani27 | Stardance...
|
AliahadMelani27
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My first slack bot! by @AliahadMelani27 | S Title: My first slack bot! by @AliahadMelani27 | Stardance...
|
1793454876.476981
|
1794059676.476981
|
|
4700
|
Malware built in my language AiRY by @mihaidraghic Malware built in my language AiRY by @mihaidraghici023 | Stardance...
|
mihaidraghici023
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Malware built in my language AiRY by @mihai Title: Malware built in my language AiRY by @mihaidraghici023 | Stardance...
|
1792576447.376606
|
1793440447.376606
|
|
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...
|
1793487380.2327518
|
1794092180.2327518
|
|
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
|
1793379123.2981906
|
1793983923.2981906
|
|
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
|
1793436928.3624587
|
1794041728.3624587
|
|
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...
|
1793357270.0322428
|
1793962070.0322428
|
|
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
|
1793443943.645536
|
1794048743.645536
|
|
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...
|
1793469130.7295656
|
1794073930.7295656
|
|
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
|
125.53
|
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": 83431, "ts": "202 [{"post_id": 83431, "ts": "2026-10-27T23:12:02Z", "hours": 6.4089, "text": "Devlog 32 - what a grind!!! vaultforge v0.5.0 is finally out ! so many new features i honestly can’t remember all of them! just as a recap vaultforge is available on mac, linux, and windows. i’m on linux so i couldn’t really test the binaries on other oses that well. there’s a .deb and .rpm for linux for debian-based (debian, ubuntu, etc.) and fedora-based (rhel, fedora, bazzite) distros. and yes, before you ask, there is an appimage available. btw github actions is sooooo slow 🐌, especially the mac os x64 runners - grrrrrrr . i’ve been stuck here just waiting for the past 1/2 an hour… i was so frustrated that i decided to completely remove support for itnel macs cuz the build times are like 3x slower. sorry intel mac users. that took so long… finally ready to ship! tbh i mostly just did some ci stuff since last devlog but i also added some nice ui impirovements. guys please give me a good rating 🙏"}, {"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…
Devlog 32 - what a grind!!! vaultforge v0.5.0 is finally out ! so many new features i honestly can’t remember all of them! just as a recap vaultforge is available on mac, linux, and windows. i’m on linux so i couldn’t really test the binaries on other oses that well. there’s a .deb and .rpm for linux for debian-based (debian, ubuntu, etc.) and fedora-based (rhel, fedora, bazzite) distros. and yes, before you ask, there is an appimage available. btw github actions is sooooo slow 🐌, especially the mac os x64 runners - grrrrrrr . i’ve been stuck here just waiting for the past 1/2 an hour… i was so frustrated that i decided to completely remove support for itnel macs cuz the build times are like 3x slower. sorry intel mac users. that took so long… finally ready to ship! tbh i mostly just did some ci stuff since last devlog but i also added some nice ui impirovements. guys please give me a good rating 🙏
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....
|
1793317995.4762363
|
1793404395.4762363
|
|
4713
|
My awesome macropad! by @Zimy | Stardance
|
Zimy
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My awesome macropad! by @Zimy | Stardance
|
1793285740.6771464
|
1793890540.6771464
|
|
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...
|
1793368579.605573
|
1793973379.605573
|
|
4715
|
My awesome macropad! by @Varsha | Stardance
|
Varsha
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My awesome macropad! by @Varsha | Stardance
|
1793335680.665279
|
1793940480.665279
|
|
4716
|
My awesome macropad! by @divya | Stardance
|
divya
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My awesome macropad! by @divya | Stardance
|
1793342836.986793
|
1793947636.986793
|
|
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
|
1
|
101.0
|
0
|
[{"ship_num": 1, "ts": "2026-1 [{"ship_num": 1, "ts": "2026-10-26T23:30:04Z", "hours": 101.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made a realtime syncing First Tech Challenge scouting tool. It lets teams scout other teams during matches and before matches to figure out more about opponent teams, and be ready to make the best possible pick for the knockout stages.", "repo": "https://github.com/16423-Storm/Scoutmaster-React", "demo": "https://www.ftcscoutmaster.xyz/"}]...
|
[{"post_id": 83103, "ts": "202 [{"post_id": 83103, "ts": "2026-10-26T21:48:57Z", "hours": 6.5447, "text": "Devlog 18 It has been a while, but I have finally got to the final features. I have now used Render to host the python server and github pages for the actual site. I have finished the auto paths update, and now everything is setup for the final release."}, {"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
Devlog 18 It has been a while, but I have finally got to the final features. I have now used Render to host the python server and github pages for the actual site. I have finished the auto paths update, and now everything is setup for the final release.
Ships:
I made a realtime syncing First Tech Challenge scouting tool. It lets teams scout other teams during matches and before matches to figure out more about opponent teams, and be ready to make the best possible pick for the knockout stages....
|
1793490961.3407085
|
1793577361.3407085
|
|
4720
|
Untitled project by @tamas2505 | Stardance
|
tamas2505
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Untitled project by @tamas2505 | Stardance
|
1793425673.076097
|
1794030473.076097
|
|
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...
|
1793483700.370374
|
1794088500.370374
|
|
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
|
|
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...
|
1793310740.3957815
|
1793915540.3957815
|
|
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
|
1793443749.0199277
|
1794048549.0199277
|
|
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
|
1793382481.327955
|
1793987281.327955
|
|
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
|
1793393588.3776925
|
1793998388.3776925
|