|
46823
|
3D Dino by @mohamedassem495 | Stardance
|
mohamedassem495
|
1
|
6.0
|
28
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-18T22:48:55Z", "hours": 6.0, "multiplier": 4.75, "payout": 28, "blessing": "neutral", "text": "The Dino game in 3D view, it was a little bit challenging to load these models as they are in one file. I really like the idea of the game as I spend too much time playing Dino when the internet is off.", "repo": "https://github.com/Mohammed-Assem/Dino", "demo": "https://mohammed-assem.github.io/Dino/"}]...
|
[{"post_id": 49944, "ts": "202 [{"post_id": 49944, "ts": "2026-08-18T22:36:55Z", "hours": 0.5689, "text": "I have added a readme file also made the game faster as u continue in it"}, {"post_id": 49568, "ts": "2026-08-18T13:29:33Z", "hours": 5.2489, "text": "I’m about to finish this game. It’s the dino game, but in a 3d view. I have added 3 lanes to move between, and the cactus model loads and chooses a random lane to appear every 0.5 sec; you can control motion between the lanes using the arrows. I am planning now to add the duck and jump shapes"}]...
|
Title: 3D Dino by @mohamedassem495 | Stardance
De Title: 3D Dino by @mohamedassem495 | Stardance
Devlogs:
I’m about to finish this game. It’s the dino game, but in a 3d view. I have added 3 lanes to move between, and the cactus model loads and chooses a random lane to appear every 0.5 sec; you can control motion between the lanes using the arrows. I am planning now to add the duck and jump shapes
I have added a readme file also made the game faster as u continue in it
Ships:
The Dino game in 3D view, it was a little bit challenging to load these models as they are in one file. I really like the idea of the game as I spend too much time playing Dino when the internet is off....
|
1793551826.6234531
|
1793638226.6234531
|
|
21172
|
Untitled by @vaibhav2 | Stardance
|
vaibhav2
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Untitled by @vaibhav2 | Stardance
|
1793551827.7483945
|
1794156627.7483945
|
|
22036
|
Braille_beacon by @lamoyi_matias | Stardance
|
lamoyi_matias
|
0
|
3.26
|
0
|
[]
|
[{"post_id": 14403, "ts": "202 [{"post_id": 14403, "ts": "2026-06-23T14:58:10Z", "hours": 0.555, "text": "Licence Upgrade, Landing Page"}, {"post_id": 13448, "ts": "2026-06-22T00:56:46Z", "hours": 1.0958, "text": "box assambley almost done"}, {"post_id": 13166, "ts": "2026-06-21T15:30:09Z", "hours": 1.6061, "text": "Backplate structure for the tag and creating repo context + selecting electrical components for the future PCB + Readme"}]...
|
Title: Braille_beacon by @lamoyi_matias | Stardanc Title: Braille_beacon by @lamoyi_matias | Stardance
Devlogs:
Backplate structure for the tag and creating repo context + selecting electrical components for the future PCB + Readme
box assambley almost done
Licence Upgrade, Landing Page...
|
1793551828.6476896
|
1794156628.6476896
|
|
20223
|
AI Mental Math Coach by @KrishM | Stardance
|
KrishM
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: AI Mental Math Coach by @KrishM | Stardance
|
1793551829.5729284
|
1794156629.5729284
|
|
3111
|
My awesome macropad! by @L | Stardance
|
L
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My awesome macropad! by @L | Stardance
|
1793551830.9515853
|
1794156630.9515853
|
|
45447
|
xdna.cpp by @satvikhardat | Stardance
|
|
1
|
87.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-31T15:45:47Z", "hours": 87.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "Run GGUF quantized models directly on AMD XDNA1 NPUs (Ryzen AI 7040 / 8040 series) with llama.cpp its a fork or bettter said plugin of llama.cpp specially made to run models using amd NPUs Using AMD’s hawkpoint NPUs to run LLMs!! its a llama.cpp plugin not a standalone runtime to ensure supporting most models, but it has a few cool kernels targeted at the the xdna1 arch bcs as it turns out, the support for xdna1 NPUs is like really dead everyones like xdna2 yay, but i hv a xdna1 CPU so ima use every bit of it ig lol", "repo": "https://github.com/random-unknown-username/xdna.cpp", "demo": "https://github.com/random-unknown-username/xdna.cpp/releases/tag/v1.0.0"}]...
|
[{"post_id": 58984, "ts": "202 [{"post_id": 58984, "ts": "2026-08-31T15:43:02Z", "hours": 7.7858, "text": "Devlog 08 — Aug 31: The Crossover Spectrum & v1.0 Ship Finished multi-model crossover validation across three scales (0.5B, 3B, 27B): // Adaptive Heterogeneous Scheduling if ( N <= 256 ) { // Tiny matrices (<60 KB) run on CPU SIMD to avoid driver dispatch overhead cpu_engine -> run ( weights , weight_bytes , N , K , act , out ); } else { // Medium/Large matrices stream to 16 AIE2 compute tiles xdna_engine -> run ( weights , weight_bytes , N , K , act , out ); } Measured Crossover Scoreboard Qwen2.5-0.5B (403 MB) : CPU favored (106.5 t/s vs 72.6 t/s XDNA hybrid) due to small 60 KB payloads. Qwen2.5-3B (1.86 GB) : XDNA wins decisively: 16.5 tok/s vs 9.8 tok/s CPU (+68.8% / 1.69× speedup) . Qwen3.8-27B (15.2 GB) : XDNA sustains 1.72 tok/s streaming 12.6 GiB smoothly on a 32 GB laptop. Numerical Quality : Verified 100% Top-1 token match across all 3 scales. Shipped v1.0.0 with standalone binaries and clean architecture docs!"}, {"post_id": 57796, "ts": "2026-08-30T02:55:21Z", "hours": 12.8164, "text": "Devlog 07: Bounded 128MB Staging Ring & The 11.5x Recovery Architected the fix for the 27B memory collapse: a bounded double-buffered staging ring in src/xdna-gemv-engine.cpp . // Allocate exactly two 64 MB host-only staging buffers (128 MB total pinned memory) static constexpr size_t STAGING_BO_SIZE = 64 * 1024 * 1024 ; bo_staging [ 0 ] = std :: make_unique < xrt :: bo > ( * device , STAGING_BO_SIZE , xrt :: bo :: flags :: host_only , 0 ); bo_staging [ 1 ] = std :: make_unique < xrt :: bo > ( * device , STAGING_BO_SIZE , xrt :: bo :: flags :: host_only , 0 ); // Double-buffered stream from mmap page cache size_t stage_idx = current_op % 2 ; std :: memcpy ( bo_staging_map [ stage_idx ], mmap_weight_ptr , weight_bytes ); kernel_dpu -> operator ()(..., * bo_staging [ stage_idx ], ...); flags::host_only : Limits pinned kernel memory strictly to $2 \\times 64\\text{ MB} = \\mathbf{128\\text{ MB}}$. mmap_weight_ptr : Weights stay in standard page cache ( MAP_SHARED ), freely managed by Linux VM. Result: pgmajfault and swap dropped to 0 . 27B decode speed jumped from 0.15 tok/s to 1.72 tok/s —an 11.5× end-to-end recovery ."}, {"post_id": 54488, "ts": "2026-08-25T14:40:48Z", "hours": 12.2272, "text": "Devlog 06 The 27B Disaster & 12.6 GB Unevictable BO Crisis Tried loading Qwen3.8-27B-Q4_0 (15.2 GB). Everything collapsed: token speed plummeted to 0.15 tok/s (6.67 seconds/token) . Ran /proc/meminfo and /proc/vmstat diffs during decode to find the bottleneck: /proc/meminfo during 27B crash: MemTotal: 31,842 MB Unevictable: 12,640 MB <-- 369 persistent XRT BOs locked in RAM! pgmajfault: 520,118 <-- 520k disk page reads PER TOKEN pswpout: 18,400 <-- active swap storm The bug: Allocating persistent xrt::bo objects for all 369 model tensors pinned 12.6 GB into Unevictable kernel memory . The result: On a 32 GB laptop with OS and KV cache, Linux was starved of clean page cache. Every layer forced synchronous swap-outs and major page faults to disk. Persistent BO allocation for large models is fundamentally broken on consumer RAM."}, {"post_id": 50947, "ts": "2026-08-20T12:42:25Z", "hours": 9.7175, "text": "Devlog 05: Standalone GEMV Ceiling: Sustaining 38.5 GB/s Built tools/bench-aie-gemv-standalone.cpp to measure pure hardware DMA bandwidth without graph scheduler overhead. auto t0 = std :: chrono :: high_resolution_clock :: now (); bo_weights -> sync ( XCL_BO_SYNC_BO_TO_DEVICE ); kernel_run . wait (); auto t1 = std :: chrono :: high_resolution_clock :: now (); double gb_s = ( bytes / ( dt_ns * 1e-9 )) / 1e9 ; sync(TO_DEVICE) : Flushes dirty CPU lines and triggers DMA transport. kernel_run.wait() : Waits for AIE vector compute completion. Tested synthetic matrix sizes out to 1 GB ($K=5120$): 16 MB: 31.87 GB/s (0.53 ms) 128 MB: 34.27 GB/s (3.92 ms) 1024 MB: 38.57 GB/s (27.84 ms) Linear fit: $T(\\text{bytes}) \\approx 0.15\\text{ ms} + \\frac{\\text{bytes}}{38.5\\text{ GB/s}}$. The ~150 µs startup overhead gets amortized as matrix size grows."}, {"post_id": 47977, "ts": "2026-08-16T07:59:35Z", "hours": 11.2086, "text": "Devlog 04: 4-Column Planar Prepacking & First Real AIE Run Standard GGUF interleaves nibbles row-by-row. But AIE2 vector tiles need weights split into 4 independent planar column channels aligned to 64-byte boundaries. Wrote xdna-q4-prepack.cpp to deinterleave GGUF Q4 weights: // 4-Column Planar Deinterleaving for ( size_t col = 0 ; col < 4 ; ++ col ) { uint8_t * dst_col = packed_out + col * col_bytes ; for ( size_t row = 0 ; row < N ; ++ row ) { const uint8_t * src_nibbles = src_weights + row * row_stride + col * ( K / 4 ) / 2 ; deinterleave_and_align64 ( src_nibbles , dst_col + row * 64 , K / 4 ); } } col * (K / 4) : Strips matrix columns across the 4 independent NPU memory tiles. 64-byte alignment : Direct DMA streaming into tile L1 SRAM without unaligned stalls. Inside AIE: aie::unpack converts uint4 to BF16, scales, and computes fused vector MACs. First interactive generation on physical NPU! Cosine similarity against CPU FP32 oracle: 0.9999 ."}, {"post_id": 46963, "ts": "2026-08-14T15:29:37Z", "hours": 13.0922, "text": "Devlog 03: The CPU Baseline (AVX2 / FMA Golden Oracle) Before writing custom AIE kernels, we needed an unyielding golden oracle to check numerical correctness and see how fast the host CPU is. Wrote an unrolled AVX2/FMA Q4_0 vector engine in src/cpu-q4-gemv-engine.cpp : const __m256i raw = _mm256_loadu_si256 ( reinterpret_cast < const __m256i *> ( w_ptr )); const __m256i lo_nibbles = _mm256_and_si256 ( raw , _mm256_set1_epi8 ( 0x0F )); const __m256 w_f32 = _mm256_cvtepi32_ps ( _mm256_sub_epi32 ( lo_nibbles , _mm256_set1_epi32 ( 8 ))); acc = _mm256_fmadd_ps ( _mm256_mul_ps ( w_f32 , scale_vec ), act_vec , acc ); _mm256_and_si256(..., 0x0F) : Masks out the low 4-bit nibbles from 32 packed weights. _mm256_sub_epi32(..., 8) : Subtracts the Q4_0 symmetric offset (8). _mm256_fmadd_ps : Fused multiply-accumulate with FP32 activations in single-cycle throughput. Benchmarked Qwen2.5-0.5B on CPU: 106.5 tok/s (9.38 ms/tok) on 8 threads. Modern Zen 4 AVX2 is blazing fast on small models, so the NPU has a high bar to clear."}, {"post_id": 44511, "ts": "2026-08-10T09:54:07Z", "hours": 8.0289, "text": "Devlog 02: Hardware Smoke Tests & The 14ms Trap why have random shi like gate-1? bcs xdna1 is the worst supported from amd, idk their docs are incomplete im like testing and figuring stuff out Gate 1 milestone: getting real AIE execution contexts spinning via AMD XRT. Initial prototype had a huge bug: we were creating an xrt::hw_context and reloading the .xclbin bitstream inside the operator compute loop. Profiling showed this added ~14 ms of pure driver overhead per tensor dispatch —which murdered performance before we even started doing math. Fixed it by making the context a persistent backend singleton: // Initialize context & load bitstream ONCE at startup device = std :: make_unique < xrt :: device > ( device_index ); xrt :: uuid uuid = device -> register_xclbin ( xclbin_img ); hw_ctx = std :: make_unique < xrt :: hw_context > ( * device , uuid ); xrt :: module mod ( elf_img ); kernel_dpu = std :: make_unique < xrt :: kernel > ( xrt :: ext :: kernel ( * hw_ctx , mod , \"DPU\" )); device->register_xclbin : Flashes the DPU bitstream once into the NPU fabric. hw_ctx : Persistent hardware context reused across all tensor iterations. Dispatch overhead instantly dropped from 14 ms down to ~38 µs."}, {"post_id": 43766, "ts": "2026-08-09T05:55:28Z", "hours": 12.0031, "text": "Devlog 01: Talking to the Silicon (DRM & Phoenix Discovery) So the plan is simple: get GGUF models running straight on the Ryzen AI NPU without touching bloated ONNX or Vitis runtimes. First step was checking if we could even talk to /dev/accel/accel0 directly without root. Wrote a quick probe calling the kernel’s amdxdna DRM driver ioctls: struct amdxdna_drm_get_info info {}; info . param = DRM_AMDXDNA_GET_INFO_TOPOLOGY ; ioctl ( fd , DRM_IOCTL_AMDXDNA_GET_INFO , & info ); DRM_IOCTL_AMDXDNA_GET_INFO : Queries the hardware directly from the kernel. info.param = TOPOLOGY : Confirmed our Phoenix chip has 4 columns × 4 compute rows = 16 AIE2 tiles. Instead of dragging in a 10 GB SDK, we wrote our own include/xdna/amdxdna_uapi.h directly matching the kernel driver structs. Zero bloat, instant builds."}]...
|
Title: xdna.cpp by @satvikhardat | Stardance
Devl Title: xdna.cpp by @satvikhardat | Stardance
Devlogs:
Devlog 01: Talking to the Silicon (DRM & Phoenix Discovery) So the plan is simple: get GGUF models running straight on the Ryzen AI NPU without touching bloated ONNX or Vitis runtimes. First step was checking if we could even talk to /dev/accel/accel0 directly without root. Wrote a quick probe calling the kernel’s amdxdna DRM driver ioctls: struct amdxdna_drm_get_info info {}; info . param = DRM_AMDXDNA_GET_INFO_TOPOLOGY ; ioctl ( fd , DRM_IOCTL_AMDXDNA_GET_INFO , & info ); DRM_IOCTL_AMDXDNA_GET_INFO : Queries the hardware directly from the kernel. info.param = TOPOLOGY : Confirmed our Phoenix chip has 4 columns × 4 compute rows = 16 AIE2 tiles. Instead of dragging in a 10 GB SDK, we wrote our own include/xdna/amdxdna_uapi.h directly matching the kernel driver structs. Zero bloat, instant builds.
Devlog 02: Hardware Smoke Tests & The 14ms Trap why have random shi like gate-1? bcs xdna1 is the worst supported from amd, idk their docs are incomplete im like testing and figuring stuff out Gate 1 milestone: getting real AIE execution contexts spinning via AMD XRT. Initial prototype had a huge bug: we were creating an xrt::hw_context and reloading the .xclbin bitstream inside the operator compute loop. Profiling showed this added ~14 ms of pure driver overhead per tensor dispatch —which murdered performance before we even started doing math. Fixed it by making the context a persistent backend singleton: // Initialize context & load bitstream ONCE at startup device = std :: make_unique < xrt :: device > ( device_index ); xrt :: uuid uuid = device -> register_xclbin ( xclbin_img ); hw_ctx = std :: make_unique < xrt :: hw_context > ( * device , uuid ); xrt :: module mod ( elf_img ); kernel_dpu = std :: make_unique < xrt :: kernel > ( xrt :: ext :: kernel ( * hw_ctx , mod , "DPU" )); device->register_xclbin : Flashes the DPU bitstream once into the NPU fabric. hw_ctx : Persistent hardware context reused across all tensor iterations. Dispatch overhead instantly dropped from 14 ms down to ~38 µs.
Devlog 03: The CPU Baseline (AVX2 / FMA Golden Oracle) Before writing custom AIE kernels, we needed an unyielding golden oracle to check numerical correctness and see how fast the host CPU is. Wrote an unrolled AVX2/FMA Q4_0 vector engine in src/cpu-q4-gemv-engine.cpp : const __m256i raw = _mm256_loadu_si256 ( reinterpret_cast < const __m256i *> ( w_ptr )); const __m256i lo_nibbles = _mm256_and_si256 ( raw , _mm256_set1_epi8 ( 0x0F )); const __m256 w_f32 = _mm256_cvtepi32_ps ( _mm256_sub_epi32 ( lo_nibbles , _mm256_set1_epi32 ( 8 ))); acc = _mm256_fmadd_ps ( _mm256_mul_ps ( w_f32 , scale_vec ), act_vec , acc ); _mm256_and_si256(..., 0x0F) : Masks out the low 4-bit nibbles from 32 packed weights. _mm256_sub_epi32(..., 8) : Subtracts the Q4_0 symmetric offset (8). _mm256_fmadd_ps : Fused multiply-accumulate with FP32 activations in single-cycle throughput. Benchmarked Qwen2.5-0.5B on CPU: 106.5 tok/s (9.38 ms/tok) on 8 threads. Modern Zen 4 AVX2 is blazing fast on small models, so the NPU has a high bar to clear.
Devlog 04: 4-Column Planar Prepacking & First Real AIE Run Standard GGUF interleaves nibbles row-by-row. But AIE2 vector tiles need weights split into 4 independent planar column channels aligned to 64-byte boundaries. Wrote xdna-q4-prepack.cpp to deinterleave GGUF Q4 weights: // 4-Column Planar Deinterleaving for ( size_t col = 0 ; col < 4 ; ++ col ) { uint8_t * dst_col = packed_out + col * col_bytes ; for ( size_t row = 0 ; row < N ; ++ row ) { const uint8_t * src_nibbles = src_weights + row * row_stride + col * ( K / 4 ) / 2 ; deinterleave_and_align64 ( src_nibbles , dst_col + row * 64 , K / 4 ); } } col * (K / 4) : Strips matrix columns across the 4 independent NPU memory tiles. 64-byte alignment : Direct DMA streaming into tile L1 SRAM without unaligned stalls. Inside AIE: aie::unpack converts uint4 to BF16, scales, and computes fused vector MACs. First interactive generation on physical NPU! Cosine similarity against CPU FP32 oracle: 0.9999 .
Devlog 05: Standalone GEMV Ceiling: Sustaining 38.5 GB/s Built tools/bench-aie-gemv-standalone.cpp to measure pure hardware DMA bandwidth without graph scheduler overhead. auto t0 = std :: chrono :: high_resolution_clock :: now (); bo_weights -> sync ( XCL_BO_SYNC_BO_TO_DEVICE ); kernel_run . wait (); auto t1 = std :: chrono :: high_resolution_clock :: now (); double gb_s = ( bytes / ( dt_ns * 1e-9 )) / 1e9 ; sync(TO_DEVICE) : Flushes dirty CPU lines and triggers DMA transport. kernel_run.wait() : Waits for AIE vector compute completion. Tested synthetic matrix sizes out to 1 GB ($K=5120$): 16 MB: 31.87 GB/s (0.53 ms) 128 MB: 34.27 GB/s (3.92 ms) 1024 MB: 38.57 GB/s (27.84 ms) Linear fit: $T(\text{bytes}) \approx 0.15\text{ ms} + \frac{\text{bytes}}{38.5\text{ GB/s}}$. The ~150 µs startup overhead gets amortized as matrix size grows.
Devlog 06 The 27B Disaster & 12.6 GB Unevictable BO Crisis Tried loading Qwen3.8-27B-Q4_0 (15.2 GB). Everything collapsed: token speed plummeted to 0.15 tok/s (6.67 seconds/token) . Ran /proc/meminfo and /proc/vmstat diffs during decode to find the bottleneck: /proc/meminfo during 27B crash: MemTotal: 31,842 MB Unevictable: 12,640 MB <-- 369 persistent XRT BOs locked in RAM! pgmajfault: 520,118 <-- 520k disk page reads PER TOKEN pswpout: 18,400 <-- active swap storm The bug: Allocating persistent xrt::bo objects for all 369 model tensors pinned 12.6 GB into Unevictable kernel memory . The result: On a 32 GB laptop with OS and KV cache, Linux was starved of clean page cache. Every layer forced synchronous swap-outs and major page faults to disk. Persistent BO allocation for large models is fundamentally broken on consumer RAM.
Devlog 07: Bounded 128MB Staging Ring & The 11.5x Recovery Architected the fix for the 27B memory collapse: a bounded double-buffered staging ring in src/xdna-gemv-engine.cpp . // Allocate exactly two 64 MB host-only staging buffers (128 MB total pinned memory) static constexpr size_t STAGING_BO_SIZE = 64 * 1024 * 1024 ; bo_staging [ 0 ] = std :: make_unique < xrt :: bo > ( * device , STAGING_BO_SIZE , xrt :: bo :: flags :: host_only , 0 ); bo_staging [ 1 ] = std :: make_unique < xrt :: bo > ( * device , STAGING_BO_SIZE , xrt :: bo :: flags :: host_only , 0 ); // Double-buffered stream from mmap page cache size_t stage_idx = current_op % 2 ; std :: memcpy ( bo_staging_map [ stage_idx ], mmap_weight_ptr , weight_bytes ); kernel_dpu -> operator ()(..., * bo_staging [ stage_idx ], ...); flags::host_only : Limits pinned kernel memory strictly to $2 \times 64\text{ MB} = \mathbf{128\text{ MB}}$. mmap_weight_ptr : Weights stay in standard page cache ( MAP_SHARED ), freely managed by Linux VM. Result: pgmajfault and swap dropped to 0 . 27B decode speed jumped from 0.15 tok/s to 1.72 tok/s —an 11.5× end-to-end recovery .
Devlog 08 — Aug 31: The Crossover Spectrum & v1.0 Ship Finished multi-model crossover validation across three scales (0.5B, 3B, 27B): // Adaptive Heterogeneous Scheduling if ( N <= 256 ) { // Tiny matrices (<60 KB) run on CPU SIMD to avoid driver dispatch overhead cpu_engine -> run ( weights , weight_bytes , N , K , act , out ); } else { // Medium/Large matrices stream to 16 AIE2 compute tiles xdna_engine -> run ( weights , weight_bytes , N , K , act , out ); } Measured Crossover Scoreboard Qwen2.5-0.5B (403 MB) : CPU favored (106.5 t/s vs 72.6 t/s XDNA hybrid) due to small 60 KB payloads. Qwen2.5-3B (1.86 GB) : XDNA wins decisively: 16.5 tok/s vs 9.8 tok/s CPU (+68.8% / 1.69× speedup) . Qwen3.8-27B (15.2 GB) : XDNA sustains 1.72 tok/s streaming 12.6 GiB smoothly on a 32 GB laptop. Numerical Quality : Verified 100% Top-1 token match across all 3 scales. Shipped v1.0.0 with standalone binaries and clean architecture docs!
Ships:
Run GGUF quantized models directly on AMD XDNA1 NPUs (Ryzen AI 7040 / 8040 series) with llama.cpp its a fork or bettter said plugin of llama.cpp specially made to run models using amd NPUs Using AMD’s hawkpoint NPUs to run LLMs!! its a llama.cpp plugin not a standalone runtime to ensure supporting most models, but it has a few cool kernels targeted at the the xdna1 arch bcs as it turns out, the support for xdna1 NPUs is like really dead everyones like xdna2 yay, but i hv a xdna1 CPU so ima use every bit of it ig lol...
|
1793551831.8490946
|
1793638231.8490946
|
|
3388
|
My awesome macropad! by @BugHunter | Stardance
|
BugHunter
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My awesome macropad! by @BugHunter | Starda Title: My awesome macropad! by @BugHunter | Stardance...
|
1793551833.0335383
|
1794156633.0335383
|
|
23498
|
dopamine shopping by @akshanpathe_1 | Stardance
|
akshanpathe_1
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: dopamine shopping by @akshanpathe_1 | Stard Title: dopamine shopping by @akshanpathe_1 | Stardance...
|
1793551833.9653575
|
1794156633.9653575
|
|
15794
|
My very own WebOS by @rogersrhy | Stardance
|
rogersrhy
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My very own WebOS by @rogersrhy | Stardance
|
1793551834.8618143
|
1794156634.8618143
|
|
39746
|
My first slack bot! by @Slly | Stardance
|
Slly
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My first slack bot! by @Slly | Stardance
|
1793551835.7754018
|
1794156635.7754018
|
|
4243
|
3D printed UPS by @vladm1 | Stardance
|
vladm1
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: 3D printed UPS by @vladm1 | Stardance
|
1793551836.6782088
|
1794156636.6782088
|
|
14318
|
My very own os by @unknown_coder | Stardance
|
unknown_coder
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My very own os by @unknown_coder | Stardanc Title: My very own os by @unknown_coder | Stardance...
|
1793551837.5602076
|
1794156637.5602076
|
|
49376
|
My own site! by @lmao_DK | Stardance
|
lmao_DK
|
2
|
3.0
|
1
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-19T13:41:07Z", "hours": 0.0, "multiplier": 2.13, "payout": 1, "blessing": "neutral", "text": "just finished with all the updates", "repo": "https://github.com/Code-Breaker16/personal-site", "demo": "https://personal-site-eta-ebon.vercel.app/"}, {"ship_num": 2, "ts": "2026-08-17T18:22:42Z", "hours": 3.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I just completed my first project here not my first html project but one of the complex yet easy ones ive worked on. The java script part a bit tricky but im glad i pushed myself to acheive it and finally i love how the whole site comes out many of u might thinks its ai generated but trust me it is not ive worked 3hrs on this basic project to make it look how it looks rn. Thank you and hope u guys will show some love to it .", "repo": "https://github.com/Code-Breaker16/personal-site", "demo": "https://personal-site-eta-ebon.vercel.app/"}]...
|
[{"post_id": 50278, "ts": "202 [{"post_id": 50278, "ts": "2026-08-19T13:04:28Z", "hours": 0.3797, "text": "just finished with all the updates"}, {"post_id": 49083, "ts": "2026-08-17T18:14:50Z", "hours": 1.7508, "text": "finally done with the project"}, {"post_id": 48365, "ts": "2026-08-16T17:57:15Z", "hours": 0.6386, "text": "Just done with the main html part starting off with css and jss"}, {"post_id": 48038, "ts": "2026-08-16T10:17:32Z", "hours": 0.4811, "text": "Just started working on my site not my first website, but the most special one. Done with the first section, the About Me part. Now I’ll be taking a break and studying for my exam tomorrow"}]...
|
Title: My own site! by @lmao_DK | Stardance
Devlo Title: My own site! by @lmao_DK | Stardance
Devlogs:
Just started working on my site not my first website, but the most special one. Done with the first section, the About Me part. Now I’ll be taking a break and studying for my exam tomorrow
Just done with the main html part starting off with css and jss
finally done with the project
just finished with all the updates
Ships:
I just completed my first project here not my first html project but one of the complex yet easy ones ive worked on. The java script part a bit tricky but im glad i pushed myself to acheive it and finally i love how the whole site comes out many of u might thinks its ai generated but trust me it is not ive worked 3hrs on this basic project to make it look how it looks rn. Thank you and hope u guys will show some love to it .
just finished with all the updates...
|
1793551838.4672477
|
1793638238.4672477
|
|
4989
|
My awesome macropad! by @fayv | Stardance
|
fayv
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My awesome macropad! by @fayv | Stardance
|
1793551839.6656516
|
1794156639.6656516
|
|
23614
|
My very own WebOS by @adifications | Stardance
|
adifications
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My very own WebOS by @adifications | Starda Title: My very own WebOS by @adifications | Stardance...
|
1793551840.6082997
|
1794156640.6082997
|
|
2953
|
My first slack bot! by @Izzy | Stardance
|
Izzy
|
0
|
1.5
|
0
|
[]
|
[{"post_id": 2331, "ts": "2026 [{"post_id": 2331, "ts": "2026-06-04T19:24:48Z", "hours": 1.5047, "text": "Pls how do i complete this slack bot I’m done with evrything dunno how to end or more like close it so i can ship i’m done with the bot"}]...
|
Title: My first slack bot! by @Izzy | Stardance
D Title: My first slack bot! by @Izzy | Stardance
Devlogs:
Pls how do i complete this slack bot I’m done with evrything dunno how to end or more like close it so i can ship i’m done with the bot...
|
1793551842.697396
|
1794156642.697396
|
|
36379
|
CRUD! with Creatu by @misofartist | Stardance
|
misofartist
|
1
|
1.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-17T10:37:53Z", "hours": 1.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "probably won’t go furtherthanthis; this was a demonstration of crud on React.js with supabase! i will be using these skills in bigger future projects ^^ for now, you may play with “hatching” and creating a (shared) army of creatu ^^ (note: i do not own the IP of creatu; all rghts reserved to Truelight Media)", "repo": "https://github.com/mmicat/creatu-crud", "demo": "https://creatu.netlify.app"}]...
|
[{"post_id": 30058, "ts": "202 [{"post_id": 30058, "ts": "2026-07-17T10:37:23Z", "hours": 0.9619, "text": "probably won’t go furtherthanthis; this was a demonstration of crud on React.js with supabase! i will be using these skills in bigger future projects ^^ for now, you may play with “hatching” and creating a (shared) army of creatu ^^ (note: i do not own the IP of creatu; all rghts reserved to Truelight Media)"}]...
|
Title: CRUD! with Creatu by @misofartist | Stardan Title: CRUD! with Creatu by @misofartist | Stardance
Devlogs:
probably won’t go furtherthanthis; this was a demonstration of crud on React.js with supabase! i will be using these skills in bigger future projects ^^ for now, you may play with “hatching” and creating a (shared) army of creatu ^^ (note: i do not own the IP of creatu; all rghts reserved to Truelight Media)
Ships:
probably won’t go furtherthanthis; this was a demonstration of crud on React.js with supabase! i will be using these skills in bigger future projects ^^ for now, you may play with “hatching” and creating a (shared) army of creatu ^^ (note: i do not own the IP of creatu; all rghts reserved to Truelight Media)...
|
1793551843.7152274
|
1793638243.7152274
|
|
21852
|
My very own WebOS by @VoidHollow2021 | Stardance
|
VoidHollow2021
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My very own WebOS by @VoidHollow2021 | Star Title: My very own WebOS by @VoidHollow2021 | Stardance...
|
1793551848.5236757
|
1794156648.5236757
|
|
39833
|
WarioWare Game by @cooper_lockhart | Stardance
|
cooper_lockhart
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: WarioWare Game by @cooper_lockhart | Starda Title: WarioWare Game by @cooper_lockhart | Stardance...
|
1793551849.451293
|
1794156649.451293
|
|
19233
|
My awesome macropad! by @Shaxriyor | Stardance
|
Shaxriyor
|
1
|
1.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-22T16:24:35Z", "hours": 1.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I designed and built CodePad, a custom, compact macro pad to help me while I’m coding on my Mac. It features a 2x3 layout with 6 mechanical switches, one push-button rotary encoder and 0.91” OLED screen. The hardware consists of a custom PCB designed in KiCad, powered by a Seeeduino XIAO RP2040 microcontroller, and housed in a custom-designed 3D-printed enclosure made using Fusion 360. On the software side, it runs custom QMK firmware. Since I only had 6 keys, I wired them using a direct pin layout (each key wired straight to its own GPIO pin on the XIAO) to avoid using diodes. However, QMK’s firmware architecture fundamentally relies on an electrical coordinate matrix. I had to learn how to translate a non-matrix, direct-wired hardware schema into a virtual matrix grid within the modern info.json data configuration format. I am proud that even though I have never tried to make a schematic or designed pcb I was able to do it and find solutions to the hardships I faced along the way. To test it(even I haven’t tested it cause it needs to be assembled and I haven’t got my kit) I guess you need make your own and feel the journey.", "repo": "https://github.com/shaxa484/CodePad", "demo": ""}]...
|
[{"post_id": 13778, "ts": "202 [{"post_id": 13778, "ts": "2026-06-22T16:11:33Z", "hours": 0.41, "text": "I have a prior experience with blender but never worked with real things. Fusion gave me the most headache, it was hard to point out each millimeter but I still made it."}, {"post_id": 13704, "ts": "2026-06-22T13:57:40Z", "hours": 0.3908, "text": "Working on a pcb was harder than I thought. It was like finding ways through a maze. Thank god there was a backside or I wouldn’t have connected some of the pins."}]...
|
Title: My awesome macropad! by @Shaxriyor | Starda Title: My awesome macropad! by @Shaxriyor | Stardance
Devlogs:
Working on a pcb was harder than I thought. It was like finding ways through a maze. Thank god there was a backside or I wouldn’t have connected some of the pins.
I have a prior experience with blender but never worked with real things. Fusion gave me the most headache, it was hard to point out each millimeter but I still made it.
Ships:
I designed and built CodePad, a custom, compact macro pad to help me while I’m coding on my Mac. It features a 2x3 layout with 6 mechanical switches, one push-button rotary encoder and 0.91” OLED screen. The hardware consists of a custom PCB designed in KiCad, powered by a Seeeduino XIAO RP2040 microcontroller, and housed in a custom-designed 3D-printed enclosure made using Fusion 360. On the software side, it runs custom QMK firmware. Since I only had 6 keys, I wired them using a direct pin layout (each key wired straight to its own GPIO pin on the XIAO) to avoid using diodes. However, QMK’s firmware architecture fundamentally relies on an electrical coordinate matrix. I had to learn how to translate a non-matrix, direct-wired hardware schema into a virtual matrix grid within the modern info.json data configuration format. I am proud that even though I have never tried to make a schematic or designed pcb I was able to do it and find solutions to the hardships I faced along the way. To test it(even I haven’t tested it cause it needs to be assembled and I haven’t got my kit) I guess you need make your own and feel the journey....
|
1793551850.3846219
|
1793638250.3846219
|
|
5409
|
Untitled by @rshoa001 | Stardance
|
rshoa001
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Untitled by @rshoa001 | Stardance
|
1793551852.5714982
|
1794156652.5714982
|
|
10368
|
My first slack bot! by @comodo | Stardance
|
comodo
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My first slack bot! by @comodo | Stardance
|
1793551854.7994146
|
1794156654.7994146
|
|
53214
|
Docked Website by @remymoreau12 | Stardance
|
remymoreau12
|
2
|
1.0
|
2
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-31T08:44:53Z", "hours": 0.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "Yoo finished it and added more content", "repo": "https://github.com/squeakycleanfreshie-cloud/Docked", "demo": "https://docked.lol"}, {"ship_num": 2, "ts": "2026-08-23T09:09:13Z", "hours": 1.0, "multiplier": 3.01, "payout": 2, "blessing": "neutral", "text": "Yay! I shipped my fully finished website! Its live on a custom domain too!", "repo": "https://github.com/squeakycleanfreshie-cloud/Docked", "demo": "https://docked.lol"}]...
|
[{"post_id": 56230, "ts": "202 [{"post_id": 56230, "ts": "2026-08-27T22:06:17Z", "hours": 0.4822, "text": "Made it even more content, add like longer webpage, its now like a real website."}, {"post_id": 52893, "ts": "2026-08-23T08:44:32Z", "hours": 0.5228, "text": "guys I made the basic website, and like added some graphic design I made but i forgot to record it on lapse even tho it took like an hour! So then i just put that onto some website and added a button and then, YAY! its done!"}]...
|
Title: Docked Website by @remymoreau12 | Stardance Title: Docked Website by @remymoreau12 | Stardance
Devlogs:
guys I made the basic website, and like added some graphic design I made but i forgot to record it on lapse even tho it took like an hour! So then i just put that onto some website and added a button and then, YAY! its done!
Made it even more content, add like longer webpage, its now like a real website.
Ships:
Yay! I shipped my fully finished website! Its live on a custom domain too!
Yoo finished it and added more content...
|
1793551855.7163112
|
1793638255.7163112
|
|
2995
|
Neural network! by @CY3er | Stardance
|
CY3er
|
0
|
0.42
|
0
|
[]
|
[{"post_id": 478, "ts": "2026- [{"post_id": 478, "ts": "2026-06-01T22:49:15Z", "hours": 0.4181, "text": "just started on the intense learning curve for machien learning wish me luck! today I started working out how the nerons work and got the “output layers” (its not the actule output layer just they were the eaisest for me to learn with). all the data that i have is just test data rn"}]...
|
Title: Neural network! by @CY3er | Stardance
Devl Title: Neural network! by @CY3er | Stardance
Devlogs:
just started on the intense learning curve for machien learning wish me luck! today I started working out how the nerons work and got the “output layers” (its not the actule output layer just they were the eaisest for me to learn with). all the data that i have is just test data rn...
|
1793551856.8775024
|
1794156656.8775024
|
|
54550
|
My own site! by @vehimi6313 | Stardance
|
vehimi6313
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My own site! by @vehimi6313 | Stardance
|
1793551857.7714853
|
1794156657.7714853
|
|
54551
|
My awesome macropad! by @ketchup | Stardance
|
ketchup
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My awesome macropad! by @ketchup | Stardanc Title: My awesome macropad! by @ketchup | Stardance...
|
1793551858.6813128
|
1794156658.6813128
|
|
35731
|
Frictionless by @jann_ | Stardance
|
jann_
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Frictionless by @jann_ | Stardance
|
1793551859.6086228
|
1794156659.6086228
|
|
40131
|
A Website for the gamer to see the current treadin A Website for the gamer to see the current treading by @adi437831 | Stardance...
|
adi437831
|
1
|
10.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-27T07:35:57Z", "hours": 10.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "HI, Guys i Have made a Webiste for the the gamers and game dev also to share there point of view on different games ect so i would like to tell you share you feedback and let us know we will try to improve this", "repo": "https://github.com/aditya1973c/arcade-room/blob/main/README.md", "demo": "https://arcade-room-sand.vercel.app/"}]...
|
[{"post_id": 35179, "ts": "202 [{"post_id": 35179, "ts": "2026-07-26T13:10:26Z", "hours": 9.9906, "text": "Hi, i have made this website for the games to keep them in trending this website is live now and for testing phase so you guys try and let us know the feedback that will help us to improve the website. https://arcade-room-sand.vercel.app/"}]...
|
Title: A Website for the gamer to see the current Title: A Website for the gamer to see the current treading by @adi437831 | Stardance
Devlogs:
Hi, i have made this website for the games to keep them in trending this website is live now and for testing phase so you guys try and let us know the feedback that will help us to improve the website. https://arcade-room-sand.vercel.app/
Ships:
HI, Guys i Have made a Webiste for the the gamers and game dev also to share there point of view on different games ect so i would like to tell you share you feedback and let us know we will try to improve this...
|
1793551860.5330226
|
1793638260.5330226
|
|
54552
|
My awesome macropad! by @Cosmin198 | Stardance
|
Cosmin198
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My awesome macropad! by @Cosmin198 | Starda Title: My awesome macropad! by @Cosmin198 | Stardance...
|
1793551861.505279
|
1794156661.505279
|
|
16953
|
Cosmic Ray Muon Detector by @rensinna | Stardance
|
rensinna
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Cosmic Ray Muon Detector by @rensinna | Sta Title: Cosmic Ray Muon Detector by @rensinna | Stardance...
|
1793551862.4121854
|
1794156662.4121854
|
|
54553
|
LamaxOS (the web one) by @olivercz | Stardance
|
olivercz
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: LamaxOS (the web one) by @olivercz | Starda Title: LamaxOS (the web one) by @olivercz | Stardance...
|
1793551863.332694
|
1794156663.332694
|
|
29678
|
KuroOS by @kuro | Stardance
|
kuro
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: KuroOS by @kuro | Stardance
|
1793551864.2596998
|
1794156664.2596998
|
|
26854
|
Water quality prediction system using formulas in Water quality prediction system using formulas in HTML by @Roahit | Stardance...
|
Roahit
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Water quality prediction system using formu Title: Water quality prediction system using formulas in HTML by @Roahit | Stardance...
|
1793551865.157096
|
1794156665.157096
|
|
54555
|
SWAN OS by @AviAnmol | Stardance
|
AviAnmol
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: SWAN OS by @AviAnmol | Stardance
|
1793551866.0516393
|
1794156666.0516393
|
|
17040
|
Personal Dashboard! by @evadiva | Stardance
|
evadiva
|
1
|
20.89
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-15T19:31:55Z", "hours": 19.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "This started as Canvas won’t remind me about anything type project and turned into way more hours than I meant to spend on it lol. I hope it’s useful to you too! The problem Canvas doesn’t proactively tell you about new assignments. You either check it manually and constantly, or you miss things. On top of that, the tools people actually use to manage a semester (calendar, reading list, task list, project tracker) live in five different apps with zero connection between them. This is a self-hosted, single-user desktop app that pulls all of that into one place and checks Canvas automatically so the user doesn’t have to. How to test it Download the .dmg from the Releases page and open it. Since this is an unsigned build (no Apple Developer account), macOS Gatekeeper will block a normal double-click — right-click the app → Open → confirm. This is documented in the README. First launch prompts for a name (used in the time-based greeting) and Canvas credentials. There’s a collapsible “How do I get this?” section in the onboarding screen itself that walks through generating a Canvas personal access token step by step — no need to leave the app or guess. Once connected, the dashboard populates with real Canvas assignment data, polling automatically in the background. From there, everything else is explorable: add a task to the checklist, add a reading list item by pasting a book URL (auto-fetches the cover), add a project, set a monthly goal, add a notable event with a date, start the countdown timer, drop a personal photo into the layout. The layout itself is customizable — drag widgets to reorder them, drag them between rows, and the grid auto-adjusts to fit. That’s configurable further in Settings if someone wants more control over row/column structure. Google Calendar integration is optional and also has its own in-app walkthrough for generating OAuth credentials, since that’s the one part of setup that requires an external Google Cloud step. Three major QoL improvements Automatic assignment tracking replaces manual checking. Canvas gets polled on a schedule and the dashboard reflects new assignments without the user having to open Canvas at all. One dashboard instead of five apps. Assignments, calendar, reading list, tasks, projects, goals, and a timer all live in a single always-open window instead of scattered across separate tools and browser tabs. A layout that’s actually customizable, not fixed. Most dashboard tools hand you a template. This one lets you drag widgets into your own arrangement, resize rows, and drop in your own photos, so the tool ends up looking and working like something built for the person using it, not a generic productivity template. Scope note This is intentionally a local, single-user tool; there’s no server, no accounts system, no multi-user support. Each person who runs it connects their own Canvas token and their own Google Calendar credentials, entered once during setup and stored securely on their own machine.", "repo": "https://github.com/evadiva3/personal-dashboard", "demo": "https://github.com/evadiva3/personal-dashboard/releases/tag/v0.3.1"}]...
|
[{"post_id": 63369, "ts": "202 [{"post_id": 63369, "ts": "2026-09-07T04:40:16Z", "hours": 1.89, "text": "release fix"}, {"post_id": 29108, "ts": "2026-07-15T19:27:50Z", "hours": 0.6225, "text": "devlog 007: v2 shipped this session. The launch rendering bug got fixed. Saved checklist items, along with the other affected widgets, were only appearing after new input was added rather than on initial load. The root cause was a gap between the initial data fetch and the render call — the fetch was either running before the backend health check resolved, or the render function was only ever being triggered from the “add” success path and never from the initial dashboard load. Once that was corrected, everything populates immediately on launch the way it should have from the start. Spotify got the redesign it needed. The old full iframe embed rendered Spotify’s own boxed dark player UI, which clashed with the rest of the dashboard and took up more visual weight than the widget deserved. It’s now a minimal custom player built on Spotify’s oEmbed API — just cover art and a title, no chrome, no background box, sitting flush against the card. Clicking the cover opens the playlist in the browser instead of playing inline, which is a real tradeoff, but it’s the right one for how small this widget is meant to be. Both fixes went through the full release cycle again: verified in a real running app rather than just read from source, rebuilt with cargo tauri build, and repackaged as a fresh .dmg. The build is tagged and out as v0.2.0."}, {"post_id": 28704, "ts": "2026-07-15T03:45:00Z", "hours": 3.6783, "text": "devlog 006: This session closed out the zone layout work and pushed the project to a shippable state. Zone capacity enforcement went in first. Zones now auto-expand their column count when a widget is dragged into a full row rather than rejecting the drop, capped at 4 columns before overflow gets pushed to the next zone. The reverse case also got fixed: when a widget is dragged back out of a zone that had auto-expanded to fit it, the zone shrinks back down and the remaining widgets fill the space instead of leaving a gap. That required tracking which zones were auto-expanded versus manually set in Settings, so a shrink never undoes an intentional user choice. The palette shifted from dark sepia to a lighter parchment tone this session, then got a second pass after the first attempt left text nearly unreadable against the new light background. Text colors moved to near-black warm browns, and cards got a soft brown drop shadow to give them separation from the background. A zone count mismatch between the dashboard and settings panel turned out to be two different code paths reading from two different sources of truth instead of one shared value. Fixed by routing both through the same localStorage key. The bulk of the session was a full release pass. Every feature got audited end to end, name capture and time-based greetings were added to onboarding, collapsible help sections were added explaining how to get a Canvas token and Google OAuth credentials, and the first production build shipped as an unsigned .dmg since there’s no Apple Developer account. The README got rewritten from scratch for a stranger with zero context, including the exact Gatekeeper workaround steps for opening an unsigned app on macOS. Two issues surfaced immediately after: saved checklist and widget data wasn’t rendering on launch, only appearing after new input was added, which turned out to be an initial-fetch-versus-render-on-add gap rather than a data problem. The Spotify widget also got flagged as visually heavy and is being replaced with a minimal cover-art-and-title player using Spotify’s oEmbed API instead of the full iframe. v0.2.0 is in progress to address both before the next release."}, {"post_id": 27360, "ts": "2026-07-12T21:05:09Z", "hours": 2.3975, "text": "devlog 005 This session was almost entirely layout architecture, which went through several pivots before landing somewhere that actually makes sense. The first attempt was free corner-drag resizing with a Canva-style harmonizer that would proportionally redistribute card widths after every drop or resize. The harmonizer worked in isolation but broke down in practice because SortableJS and flex-wrap fight each other on drop target resolution; the visual drop position and the DOM reorder disagree when cards have arbitrary widths. After two iterations trying to patch that, I scrapped it. The replacement is a zone-based layout system. The dashboard is divided into horizontal zones, each zone being an independent row with its own column count and height. Zone 1 might have 3 columns, zone 2 might have 2, zone 3 might have 4; each is configured independently in the settings panel. Widgets drag freely within and between zones via SortableJS with cross-group drag enabled. The settings panel has a miniature zone editor with draggable column dividers to set proportional widths, height inputs per zone, and add/remove zone controls. All changes apply live to the dashboard without a save button. Zone definitions persist to localStorage, widget positions to the SQLite layout table. The immediate open issue is that zones don’t currently enforce their column cap, so widgets can overflow past the zone boundary when dragged in. The fix is straightforward: SortableJS onAdd callback checks current child count against cols, bounces the card back to the source zone if the zone is full, and briefly flashes the target zone border to signal the rejection. Settings col count reductions that would orphan widgets push the overflow to the next zone automatically. That fix is going in next. Photos are first-class zone items. Height snapping (200/400/500px presets) applies via right-click menu. The snap guide lines and settings inputs from the previous session carried over."}, {"post_id": 21884, "ts": "2026-07-04T01:52:16Z", "hours": 1.5939, "text": "Devlog 004: This session was mostly infrastructure and debugging rather than new features, but it cleared several blockers that had been compounding across sessions. The backend crash loop got permanently fixed. The root cause was _exit_if_orphaned in the Python process firing on every Rust hot-reload during npm run tauri dev. When Cargo rebuilds the Tauri binary, the parent PID relationship changes momentarily, which was triggering the orphan detection and killing Python deliberately with exit code 0. The monitor thread interpreted that as a clean exit and did not restart it. The fix was disabling orphan detection entirely in dev mode via the CANVAS_HUB_DEV environment variable, and switching the production check from getppid() == 1 to os.kill(parent_pid, 0) for a more robust existence check. The Rust monitor thread also got crash logging via dirs::home_dir() so it is no longer dependent on the Tauri AppHandle being available from a background thread. Tile resizing and photo row contagion were also fixed this session, and the actual root causes turned out to be completely different from where previous fixes were looking. The resize buttons were never broken at the event handling level. The real problem was an init race condition: renderPhotos() was fetching /photos before the backend was up, throwing an unhandled error, and killing the rest of initDashboard() before initResizeControls() ever ran. A waitForBackend() health poll now gates all data fetches, so resize listeners are always wired up regardless of how long the backend takes to start. The photo row contagion was caused by height: 100% on the photo resolving to the image’s natural aspect-ratio height during grid track sizing, inflating the row for every neighbor. Switching to position: absolute; inset: 0 on the image fixes the height to the tile bounds and removes it from the track sizing calculation entirely. Goals this month is now its own separate widget card, extracted from the assignments card where it had been living under a rule separator."}, {"post_id": 20210, "ts": "2026-07-01T19:16:43Z", "hours": 2.5761, "text": "devlog #004: This session was a chaotic debugging spiral. I set out to finish the draggable grid, but the layout engine absolutely broke.In trying to fix some initial resizing glitches, I overcorrected so hard that I accidentally locked the entire grid down. Nothing could resize at all. Once I untangled that, I hit a new nightmare: whenever I tried to drag a widget, it would interpret the movement as a resize command and stretch wildly across the screen instead of moving.The fixes: 1. Unlocked the layout logic so widgets can actually scale again. 2. Fixed the drag vs. resize conflict. Now, dragging the header moves the widget smoothly, and edge-pulling handles the resizing. No more morphing. It was an exhausting troubleshooting session, but the grid is finally stable."}, {"post_id": 17407, "ts": "2026-06-28T05:30:17Z", "hours": 2.4019, "text": "devlog 003: personal dashboard Mostly a fixes session. Nothing new shipped but a lot of things that were broken or annoying got resolved. The calendar was the biggest one. It had been crammed into a half-width column sharing space with the timer and reading list, which made the weekly view basically unusable. It now takes up the full right two-thirds of the screen, which is what it needed to actually function as a calendar. Time blocks, day columns, navigation arrows, auto-scroll to the current hour on load. It looks right now. Google Calendar auth also finally works. The onboarding screen had appeared once, I hit “later,” and the flag that tracks whether it had been seen was permanently set with no way to reset it from the UI. A connect button in settings now clears that flag and shows the onboarding immediately, no restart needed. Went through the actual browser consent flow and it works: browser opens, redirect hits the loopback server, token stores correctly. Two bugs on the smaller side. The photo picker was freezing the app completely because the file dialog was running on the main Tauri thread using the blocking API variant instead of the async one. One-line fix once the cause was clear. The calendar time labels were getting clipped by overflow collapsing the absolute-positioned label column. Widening the column tracks from 36px to 48px cleared it. Spotify got shrunk. It was taking up a full-width row with nothing in it. Now it is a compact 80px cell in the top strip next to the timer and reading list, which is the right amount of space for it. Next session: draggable grid with persistent layout."}, {"post_id": 14807, "ts": "2026-06-24T01:31:56Z", "hours": 1.6436, "text": "devlog 002: personal dashboard The dashboard is starting to look good!!! The biggest change was pulling the pink theme entirely and replacing it with a warm sepia palette: dark brown base, aged gold accents, serif headers on everything. I wanted it to feel a little more academic. The layout also got reworked into an asymmetric bento grid, where Canvas takes up a tall left column, the calendar strip runs wide across the bottom right, and the smaller widgets fill in around them. New widgets added this session: a reading list that resolves book covers from whatever URL you paste in (it checks for an Open Graph image tag first, then falls back to the Google Books API if that fails), an active projects tracker, monthly goals that scope themselves to the current month without deleting older ones, notable events displayed as date pills, a countdown timer that fires a native desktop notification when it hits zero, and photo panels that slot into the bento grid as pure image tiles with no widget chrome around them. Spotify was simpler than expected. The embedded player works fine once you add Spotify’s domain to the Tauri Content Security Policy config. Without that one line, the iframe loads blank with no error, which took a minute to figure out. Google Calendar had been stuck because the onboarding screen appeared once, I dismissed it with “later,” and there was no way back to it. Connect and disconnect controls are now in the settings page, so that’s no longer a dead end. The one remaining item for Google Calendar is entering real credentials from the Google Cloud Console and completing an actual browser OAuth consent flow."}, {"post_id": 13491, "ts": "2026-06-22T02:42:16Z", "hours": 3.8283, "text": "devlog 001: personal dashboard got a working desktop app running by end of session. the whole point was to stop missing Canvas assignments; one screen, always open, checks automatically. backend is FastAPI running as a sidecar inside a Tauri shell, SQLite for storage, APScheduler polling Canvas every 30 minutes. token lives in the OS keychain, never the repo. first-run onboarding handles the whole flow. the bugs took most of the time. CORS was failing because Tauri dev mode sends a different webview origin than a production build; nothing in the docs tells you this. the /setup endpoint would silently hang because there was no timeout on the Canvas validation request. the dashboard never appeared after login because a display: flex rule was winning over the hidden attribute, so onboarding just stayed on screen even after auth worked fine. and at some point the app started spawning duplicate processes with separate backends, which needed single-instance enforcement to fix. real credentials work, assignments load from the live API, checklist survives restarts. it’s on GitHub. palette is plum and pink, pulled from my VS Code theme. next up is Google Calendar."}]...
|
Title: Personal Dashboard! by @evadiva | Stardance Title: Personal Dashboard! by @evadiva | Stardance
Devlogs:
devlog 001: personal dashboard got a working desktop app running by end of session. the whole point was to stop missing Canvas assignments; one screen, always open, checks automatically. backend is FastAPI running as a sidecar inside a Tauri shell, SQLite for storage, APScheduler polling Canvas every 30 minutes. token lives in the OS keychain, never the repo. first-run onboarding handles the whole flow. the bugs took most of the time. CORS was failing because Tauri dev mode sends a different webview origin than a production build; nothing in the docs tells you this. the /setup endpoint would silently hang because there was no timeout on the Canvas validation request. the dashboard never appeared after login because a display: flex rule was winning over the hidden attribute, so onboarding just stayed on screen even after auth worked fine. and at some point the app started spawning duplicate processes with separate backends, which needed single-instance enforcement to fix. real credentials work, assignments load from the live API, checklist survives restarts. it’s on GitHub. palette is plum and pink, pulled from my VS Code theme. next up is Google Calendar.
devlog 002: personal dashboard The dashboard is starting to look good!!! The biggest change was pulling the pink theme entirely and replacing it with a warm sepia palette: dark brown base, aged gold accents, serif headers on everything. I wanted it to feel a little more academic. The layout also got reworked into an asymmetric bento grid, where Canvas takes up a tall left column, the calendar strip runs wide across the bottom right, and the smaller widgets fill in around them. New widgets added this session: a reading list that resolves book covers from whatever URL you paste in (it checks for an Open Graph image tag first, then falls back to the Google Books API if that fails), an active projects tracker, monthly goals that scope themselves to the current month without deleting older ones, notable events displayed as date pills, a countdown timer that fires a native desktop notification when it hits zero, and photo panels that slot into the bento grid as pure image tiles with no widget chrome around them. Spotify was simpler than expected. The embedded player works fine once you add Spotify’s domain to the Tauri Content Security Policy config. Without that one line, the iframe loads blank with no error, which took a minute to figure out. Google Calendar had been stuck because the onboarding screen appeared once, I dismissed it with “later,” and there was no way back to it. Connect and disconnect controls are now in the settings page, so that’s no longer a dead end. The one remaining item for Google Calendar is entering real credentials from the Google Cloud Console and completing an actual browser OAuth consent flow.
devlog 003: personal dashboard Mostly a fixes session. Nothing new shipped but a lot of things that were broken or annoying got resolved. The calendar was the biggest one. It had been crammed into a half-width column sharing space with the timer and reading list, which made the weekly view basically unusable. It now takes up the full right two-thirds of the screen, which is what it needed to actually function as a calendar. Time blocks, day columns, navigation arrows, auto-scroll to the current hour on load. It looks right now. Google Calendar auth also finally works. The onboarding screen had appeared once, I hit “later,” and the flag that tracks whether it had been seen was permanently set with no way to reset it from the UI. A connect button in settings now clears that flag and shows the onboarding immediately, no restart needed. Went through the actual browser consent flow and it works: browser opens, redirect hits the loopback server, token stores correctly. Two bugs on the smaller side. The photo picker was freezing the app completely because the file dialog was running on the main Tauri thread using the blocking API variant instead of the async one. One-line fix once the cause was clear. The calendar time labels were getting clipped by overflow collapsing the absolute-positioned label column. Widening the column tracks from 36px to 48px cleared it. Spotify got shrunk. It was taking up a full-width row with nothing in it. Now it is a compact 80px cell in the top strip next to the timer and reading list, which is the right amount of space for it. Next session: draggable grid with persistent layout.
devlog #004: This session was a chaotic debugging spiral. I set out to finish the draggable grid, but the layout engine absolutely broke.In trying to fix some initial resizing glitches, I overcorrected so hard that I accidentally locked the entire grid down. Nothing could resize at all. Once I untangled that, I hit a new nightmare: whenever I tried to drag a widget, it would interpret the movement as a resize command and stretch wildly across the screen instead of moving.The fixes: 1. Unlocked the layout logic so widgets can actually scale again. 2. Fixed the drag vs. resize conflict. Now, dragging the header moves the widget smoothly, and edge-pulling handles the resizing. No more morphing. It was an exhausting troubleshooting session, but the grid is finally stable.
Devlog 004: This session was mostly infrastructure and debugging rather than new features, but it cleared several blockers that had been compounding across sessions. The backend crash loop got permanently fixed. The root cause was _exit_if_orphaned in the Python process firing on every Rust hot-reload during npm run tauri dev. When Cargo rebuilds the Tauri binary, the parent PID relationship changes momentarily, which was triggering the orphan detection and killing Python deliberately with exit code 0. The monitor thread interpreted that as a clean exit and did not restart it. The fix was disabling orphan detection entirely in dev mode via the CANVAS_HUB_DEV environment variable, and switching the production check from getppid() == 1 to os.kill(parent_pid, 0) for a more robust existence check. The Rust monitor thread also got crash logging via dirs::home_dir() so it is no longer dependent on the Tauri AppHandle being available from a background thread. Tile resizing and photo row contagion were also fixed this session, and the actual root causes turned out to be completely different from where previous fixes were looking. The resize buttons were never broken at the event handling level. The real problem was an init race condition: renderPhotos() was fetching /photos before the backend was up, throwing an unhandled error, and killing the rest of initDashboard() before initResizeControls() ever ran. A waitForBackend() health poll now gates all data fetches, so resize listeners are always wired up regardless of how long the backend takes to start. The photo row contagion was caused by height: 100% on the photo resolving to the image’s natural aspect-ratio height during grid track sizing, inflating the row for every neighbor. Switching to position: absolute; inset: 0 on the image fixes the height to the tile bounds and removes it from the track sizing calculation entirely. Goals this month is now its own separate widget card, extracted from the assignments card where it had been living under a rule separator.
devlog 005 This session was almost entirely layout architecture, which went through several pivots before landing somewhere that actually makes sense. The first attempt was free corner-drag resizing with a Canva-style harmonizer that would proportionally redistribute card widths after every drop or resize. The harmonizer worked in isolation but broke down in practice because SortableJS and flex-wrap fight each other on drop target resolution; the visual drop position and the DOM reorder disagree when cards have arbitrary widths. After two iterations trying to patch that, I scrapped it. The replacement is a zone-based layout system. The dashboard is divided into horizontal zones, each zone being an independent row with its own column count and height. Zone 1 might have 3 columns, zone 2 might have 2, zone 3 might have 4; each is configured independently in the settings panel. Widgets drag freely within and between zones via SortableJS with cross-group drag enabled. The settings panel has a miniature zone editor with draggable column dividers to set proportional widths, height inputs per zone, and add/remove zone controls. All changes apply live to the dashboard without a save button. Zone definitions persist to localStorage, widget positions to the SQLite layout table. The immediate open issue is that zones don’t currently enforce their column cap, so widgets can overflow past the zone boundary when dragged in. The fix is straightforward: SortableJS onAdd callback checks current child count against cols, bounces the card back to the source zone if the zone is full, and briefly flashes the target zone border to signal the rejection. Settings col count reductions that would orphan widgets push the overflow to the next zone automatically. That fix is going in next. Photos are first-class zone items. Height snapping (200/400/500px presets) applies via right-click menu. The snap guide lines and settings inputs from the previous session carried over.
devlog 006: This session closed out the zone layout work and pushed the project to a shippable state. Zone capacity enforcement went in first. Zones now auto-expand their column count when a widget is dragged into a full row rather than rejecting the drop, capped at 4 columns before overflow gets pushed to the next zone. The reverse case also got fixed: when a widget is dragged back out of a zone that had auto-expanded to fit it, the zone shrinks back down and the remaining widgets fill the space instead of leaving a gap. That required tracking which zones were auto-expanded versus manually set in Settings, so a shrink never undoes an intentional user choice. The palette shifted from dark sepia to a lighter parchment tone this session, then got a second pass after the first attempt left text nearly unreadable against the new light background. Text colors moved to near-black warm browns, and cards got a soft brown drop shadow to give them separation from the background. A zone count mismatch between the dashboard and settings panel turned out to be two different code paths reading from two different sources of truth instead of one shared value. Fixed by routing both through the same localStorage key. The bulk of the session was a full release pass. Every feature got audited end to end, name capture and time-based greetings were added to onboarding, collapsible help sections were added explaining how to get a Canvas token and Google OAuth credentials, and the first production build shipped as an unsigned .dmg since there’s no Apple Developer account. The README got rewritten from scratch for a stranger with zero context, including the exact Gatekeeper workaround steps for opening an unsigned app on macOS. Two issues surfaced immediately after: saved checklist and widget data wasn’t rendering on launch, only appearing after new input was added, which turned out to be an initial-fetch-versus-render-on-add gap rather than a data problem. The Spotify widget also got flagged as visually heavy and is being replaced with a minimal cover-art-and-title player using Spotify’s oEmbed API instead of the full iframe. v0.2.0 is in progress to address both before the next release.
devlog 007: v2 shipped this session. The launch rendering bug got fixed. Saved checklist items, along with the other affected widgets, were only appearing after new input was added rather than on initial load. The root cause was a gap between the initial data fetch and the render call — the fetch was either running before the backend health check resolved, or the render function was only ever being triggered from the “add” success path and never from the initial dashboard load. Once that was corrected, everything populates immediately on launch the way it should have from the start. Spotify got the redesign it needed. The old full iframe embed rendered Spotify’s own boxed dark player UI, which clashed with the rest of the dashboard and took up more visual weight than the widget deserved. It’s now a minimal custom player built on Spotify’s oEmbed API — just cover art and a title, no chrome, no background box, sitting flush against the card. Clicking the cover opens the playlist in the browser instead of playing inline, which is a real tradeoff, but it’s the right one for how small this widget is meant to be. Both fixes went through the full release cycle again: verified in a real running app rather than just read from source, rebuilt with cargo tauri build, and repackaged as a fresh .dmg. The build is tagged and out as v0.2.0.
release fix
Ships:
This started as Canvas won’t remind me about anything type project and turned into way more hours than I meant to spend on it lol. I hope it’s useful to you too! The problem Canvas doesn’t proactively tell you about new assignments. You either check it manually and constantly, or you miss things. On top of that, the tools people actually use to manage a semester (calendar, reading list, task list, project tracker) live in five different apps with zero connection between them. This is a self-hosted, single-user desktop app that pulls all of that into one place and checks Canvas automatically so the user doesn’t have to. How to test it Download the .dmg from the Releases page and open it. Since this is an unsigned build (no Apple Developer account), macOS Gatekeeper will block a normal double-click — right-click the app → Open → confirm. This is documented in the README. First launch prompts for a name (used in the time-based greeting) and Canvas credentials. There’s a collapsible “How do I get this?” section in the onboarding screen itself that walks through generating a Canvas personal access token step by step — no need to leave the app or guess. Once connected, the dashboard populates with real Canvas assignment data, polling automatically in the background. From there, everything else is explorable: add a task to the checklist, add a reading list item by pasting a book URL (auto-fetches the cover), add a project, set a monthly goal, add a notable event with a date, start the countdown timer, drop a personal photo into the layout. The layout itself is customizable — drag widgets to reorder them, drag them between rows, and the grid auto-adjusts to fit. That’s configurable further in Settings if someone wants more control over row/column structure. Google Calendar integration is optional and also has its own in-app walkthrough for generating OAuth credentials, since that’s the one part of setup that requires an external Google Cloud step. Three major QoL improvements Automatic assignment tracking replaces manual checking. Canvas gets polled on a schedule and the dashboard reflects new assignments without the user having to open Canvas at all. One dashboard instead of five apps. Assignments, calendar, reading list, tasks, projects, goals, and a timer all live in a single always-open window instead of scattered across separate tools and browser tabs. A layout that’s actually customizable, not fixed. Most dashboard tools hand you a template. This one lets you drag widgets into your own arrangement, resize rows, and drop in your own photos, so the tool ends up looking and working like something built for the person using it, not a generic productivity template. Scope note This is intentionally a local, single-user tool; there’s no server, no accounts system, no multi-user support. Each person who runs it connects their own Canvas token and their own Google Calendar credentials, entered once during setup and stored securely on their own machine....
|
1793551866.947019
|
1793638266.947019
|
|
23075
|
My awesome macropad! by @tom_straka01 | Stardance
|
tom_straka01
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My awesome macropad! by @tom_straka01 | Sta Title: My awesome macropad! by @tom_straka01 | Stardance...
|
1793551868.1509917
|
1794156668.1509917
|
|
54556
|
SWAN OS by @AviAnmol | Stardance
|
AviAnmol
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: SWAN OS by @AviAnmol | Stardance
|
1793551869.0912356
|
1794156669.0912356
|
|
4218
|
ESP32 Game by @Vincent | Stardance
|
Vincent
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: ESP32 Game by @Vincent | Stardance
|
1793551869.9863186
|
1794156669.9863186
|
|
22754
|
StarOS by @Eric-K | Stardance
|
Eric-K
|
1
|
3.0
|
0
|
[{"ship_num": 1, "ts": "2026-1 [{"ship_num": 1, "ts": "2026-10-31T11:52:01Z", "hours": 3.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I tried to make the windows draggable but everyone I knew had no idea how to fix it, maybe somebody else can try to fix it (Warning it is going to be a challenge)(Not completed)", "repo": "https://github.com/Electro-Dev817/web-os", "demo": "https://electro-dev817.github.io/web-os/"}]...
|
[{"post_id": 27262, "ts": "202 [{"post_id": 27262, "ts": "2026-07-12T17:49:00Z", "hours": 0.3969, "text": "I tried fixing the dragging but it didn’t work and I have hit a dead end so I will try working on another project"}, {"post_id": 26043, "ts": "2026-07-10T16:57:57Z", "hours": 1.9589, "text": "I redid the entire project as I was running into problems and this time I started following the guide. I am a bit stuck on the dragging as it seems to not be working."}, {"post_id": 17711, "ts": "2026-06-28T16:57:14Z", "hours": 1.1089, "text": "I started the web OS named Star OS and added a few things along with the attribution but I next need to work on fixing the start menu and figuring out why everything looks normal when I open my project with live server in VScode but in GitHub pages it missing things"}]...
|
Title: StarOS by @Eric-K | Stardance
Devlogs:
I s Title: StarOS by @Eric-K | Stardance
Devlogs:
I started the web OS named Star OS and added a few things along with the attribution but I next need to work on fixing the start menu and figuring out why everything looks normal when I open my project with live server in VScode but in GitHub pages it missing things
I redid the entire project as I was running into problems and this time I started following the guide. I am a bit stuck on the dragging as it seems to not be working.
I tried fixing the dragging but it didn’t work and I have hit a dead end so I will try working on another project
Ships:
I tried to make the windows draggable but everyone I knew had no idea how to fix it, maybe somebody else can try to fix it (Warning it is going to be a challenge)(Not completed)...
|
1793551870.8850346
|
1793638270.8850346
|
|
6338
|
Light-Link by @Hani | Stardance
|
Hani
|
0
|
1.45
|
0
|
[]
|
[{"post_id": 2216, "ts": "2026 [{"post_id": 2216, "ts": "2026-06-04T16:27:14Z", "hours": 1.4508, "text": "started building the web app transmitter of the lifi project"}]...
|
Title: Light-Link by @Hani | Stardance
Devlogs:
s Title: Light-Link by @Hani | Stardance
Devlogs:
started building the web app transmitter of the lifi project...
|
1793551872.0742505
|
1794156672.0742505
|
|
53223
|
cinematch by @rushabh69 | Stardance
|
rushabh69
|
1
|
26.74
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-25T05:34:13Z", "hours": 21.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "CineMatch is a movie recommendation engine I built on the MovieLens dataset (~100K ratings) — it compares five approaches (popularity baseline, user-based and item-based collaborative filtering, SVD matrix factorization, and a content+CF hybrid), gives cited “because you liked X, Y, Z” explanations, handles brand-new users with a cold-start fallback, has a similar-movies search, and shows a live model-comparison dashboard, all deployed on Streamlit with poster art from TMDB. The challenging parts were both ML and infra: my neighborhood models kept top-ranking obscure movies that one person rated 5 stars so precision was ~0.01 until I added support-based shrinkage (jumped to ~0.13), and I learned the hard way that the best-RMSE model isn’t the best recommender — SVD won on RMSE but the hybrid ranks best — plus the posters worked locally but the deploy fought me with SSL cert errors and random TLS connection resets that I fixed with certifi and a curl fallback. I’m proud that it’s not just “a recommender” but actually evaluates models honestly with real metrics (RMSE, MAE, precision@k, recall@k), explains its picks, handles cold start two ways, and is shipped live end-to-end with a clean UI. To test it, just open the live app at https://cinematch-c7yuqnyee7sy2f3im28wbv.streamlit.app/ (no setup) — pick any user ID for personalized recs with explanations, search a title under “Similar Movies” (try “Matrix”), use “New User” to simulate a cold start by picking a few movies you like, and check the “Model Comparison” page to see how the five models stack up; the first load takes a few seconds to warm up.", "repo": "https://github.com/rushabh69/cinematch", "demo": "https://sprightly-horse-f8df5b.netlify.app/"}]...
|
[{"post_id": 55400, "ts": "202 [{"post_id": 55400, "ts": "2026-08-27T06:30:15Z", "hours": 5.7367, "text": "got feedback that streamlit sleeps, so i moved cinematch off it. instead of a live server i precomputed all the recommendations, similar movies and posters into json (build_static.py), and wrote a small static frontend — index.html, style.css, app.js — that just loads those and shows the cards. now it’s a plain static site i can throw on netlify/pages for free with no sleeping. bonus: posters get baked in at build time so the whole tmdb ssl mess on windows goes away."}, {"post_id": 54268, "ts": "2026-08-25T04:59:57Z", "hours": 5.2047, "text": "wrapped up cinematch today. spent way too long fighting the movie posters lol - added tmdb api to show poster art instead of plain tables, worked instantly on my main machine but the vm kept throwing ssl cert errors and then random connection resets (10054). turned out the vm’s python couldnt verify https certs so fixed that with certifi, and then some antivirus/firewall thing was resetting python’s tls connections while curl worked fine, so i made it fall back to curl when urllib fails. finally got posters loading. also cleaned up so it gracefully shows placeholder cards if theres no api key. then deployed the whole thing to streamlit community cloud (free) so theres an actual live demo link now, added the tmdb key as a secret so its not exposed. so cinematch is officially done - 5 recommendation models compared, cited “because you liked x,y,z” explanations, cold start handling, similar movies, model comparison dashboard, poster art, tests passing, readme + report written, and deployed live. pretty happy with how it turned out."}, {"post_id": 54032, "ts": "2026-08-24T19:42:30Z", "hours": 7.1494, "text": "back on cinematch today, mostly turning the models into something you can actually use. wrapped everything behind a facade class so theres one clean api (get_recommendations, get_similar_movies, cold start fold-in, explanations) instead of poking at each model directly. then built a cli with subcommands - recommend, similar, search, newuser, compare etc - which made testing way faster. after that did the streamlit app, four tabs: personalized recs with the “because you liked x,y,z” reasons, a similar-movies search, a new-user cold start page, and a model comparison page with the rmse/precision charts. kinda satisfying seeing the numbers from the terminal turn into an actual clickable ui. small stuff slowed me down (forgot to activate the venv once, a typo’d argparse arg) but nothing major. everything pushed to github. next up is tests + cleaning the readme, then trying to deploy the streamlit app."}, {"post_id": 53699, "ts": "2026-08-24T11:32:18Z", "hours": 9.1169, "text": "spent basically the whole day on cinematch, my movie recommender built on the movielens data. got the data pipeline done first (cleaning, filtering out users/movies with under 5 ratings, per-user 80/20 split) then built 5 models to actually compare instead of just picking one - popularity baseline, user-based CF, item-based CF, SVD with the surprise library, and a hybrid mixing collaborative + content. most annoying part was my neighborhood models kept recommending random obscure movies that one person happened to rate 5 stars, precision was like 0.01. added some shrinkage so thinly-backed picks get pushed down and it jumped to ~0.13. also kind of learned the hard way that best RMSE doesnt mean best recommendations - SVD won on RMSE but the hybrid actually ranks better. threw in cold-start handling, a similar-movies feature and “because you liked x, y, z” explanations, then wrapped it all in a streamlit app. also fixed a dumb 248mb cache bug (dense matrices that shouldve been sparse, now ~34mb). 11 tests passing. pretty happy with it, gonna clean up the readme and try deploying tomorrow."}]...
|
Title: cinematch by @rushabh69 | Stardance
Devlog Title: cinematch by @rushabh69 | Stardance
Devlogs:
spent basically the whole day on cinematch, my movie recommender built on the movielens data. got the data pipeline done first (cleaning, filtering out users/movies with under 5 ratings, per-user 80/20 split) then built 5 models to actually compare instead of just picking one - popularity baseline, user-based CF, item-based CF, SVD with the surprise library, and a hybrid mixing collaborative + content. most annoying part was my neighborhood models kept recommending random obscure movies that one person happened to rate 5 stars, precision was like 0.01. added some shrinkage so thinly-backed picks get pushed down and it jumped to ~0.13. also kind of learned the hard way that best RMSE doesnt mean best recommendations - SVD won on RMSE but the hybrid actually ranks better. threw in cold-start handling, a similar-movies feature and “because you liked x, y, z” explanations, then wrapped it all in a streamlit app. also fixed a dumb 248mb cache bug (dense matrices that shouldve been sparse, now ~34mb). 11 tests passing. pretty happy with it, gonna clean up the readme and try deploying tomorrow.
back on cinematch today, mostly turning the models into something you can actually use. wrapped everything behind a facade class so theres one clean api (get_recommendations, get_similar_movies, cold start fold-in, explanations) instead of poking at each model directly. then built a cli with subcommands - recommend, similar, search, newuser, compare etc - which made testing way faster. after that did the streamlit app, four tabs: personalized recs with the “because you liked x,y,z” reasons, a similar-movies search, a new-user cold start page, and a model comparison page with the rmse/precision charts. kinda satisfying seeing the numbers from the terminal turn into an actual clickable ui. small stuff slowed me down (forgot to activate the venv once, a typo’d argparse arg) but nothing major. everything pushed to github. next up is tests + cleaning the readme, then trying to deploy the streamlit app.
wrapped up cinematch today. spent way too long fighting the movie posters lol - added tmdb api to show poster art instead of plain tables, worked instantly on my main machine but the vm kept throwing ssl cert errors and then random connection resets (10054). turned out the vm’s python couldnt verify https certs so fixed that with certifi, and then some antivirus/firewall thing was resetting python’s tls connections while curl worked fine, so i made it fall back to curl when urllib fails. finally got posters loading. also cleaned up so it gracefully shows placeholder cards if theres no api key. then deployed the whole thing to streamlit community cloud (free) so theres an actual live demo link now, added the tmdb key as a secret so its not exposed. so cinematch is officially done - 5 recommendation models compared, cited “because you liked x,y,z” explanations, cold start handling, similar movies, model comparison dashboard, poster art, tests passing, readme + report written, and deployed live. pretty happy with how it turned out.
got feedback that streamlit sleeps, so i moved cinematch off it. instead of a live server i precomputed all the recommendations, similar movies and posters into json (build_static.py), and wrote a small static frontend — index.html, style.css, app.js — that just loads those and shows the cards. now it’s a plain static site i can throw on netlify/pages for free with no sleeping. bonus: posters get baked in at build time so the whole tmdb ssl mess on windows goes away.
Ships:
CineMatch is a movie recommendation engine I built on the MovieLens dataset (~100K ratings) — it compares five approaches (popularity baseline, user-based and item-based collaborative filtering, SVD matrix factorization, and a content+CF hybrid), gives cited “because you liked X, Y, Z” explanations, handles brand-new users with a cold-start fallback, has a similar-movies search, and shows a live model-comparison dashboard, all deployed on Streamlit with poster art from TMDB. The challenging parts were both ML and infra: my neighborhood models kept top-ranking obscure movies that one person rated 5 stars so precision was ~0.01 until I added support-based shrinkage (jumped to ~0.13), and I learned the hard way that the best-RMSE model isn’t the best recommender — SVD won on RMSE but the hybrid ranks best — plus the posters worked locally but the deploy fought me with SSL cert errors and random TLS connection resets that I fixed with certifi and a curl fallback. I’m proud that it’s not just “a recommender” but actually evaluates models honestly with real metrics (RMSE, MAE, precision@k, recall@k), explains its picks, handles cold start two ways, and is shipped live end-to-end with a clean UI. To test it, just open the live app at https://cinematch-c7yuqnyee7sy2f3im28wbv.streamlit.app/ (no setup) — pick any user ID for personalized recs with explanations, search a title under “Similar Movies” (try “Matrix”), use “New User” to simulate a cold start by picking a few movies you like, and check the “Model Comparison” page to see how the five models stack up; the first load takes a few seconds to warm up....
|
1793551872.9849334
|
1793638272.9849334
|
|
37336
|
local file manager by @flicker_1311 | Stardance
|
flicker_1311
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: local file manager by @flicker_1311 | Stard Title: local file manager by @flicker_1311 | Stardance...
|
1793551874.15182
|
1794156674.15182
|
|
36032
|
my APOD site by @sujay_innovator_robu | Stardance
|
|
1
|
3.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-16T17:37:54Z", "hours": 3.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "🚀 I built a clean, custom space dashboard that displays NASA’s daily astronomy picture or video using their public APOD API! What I Made: A single-page web dashboard using Vite, Vanilla JS, and custom CSS. It loads the title, copyright information, hd-resolutions, and descriptions dynamically based on the date selected. What was Challenging: The biggest challenge was handling the different media formats returned by NASA’s API. Sometimes they return static images, sometimes raw video files, and other times YouTube links. I wrote code in JS to dynamically detect these types and parse YouTube URLs to load them directly into custom, responsive iframes. What I’m Proud of: I’m proud of how clean the final space-themed dark layout looks and how responsive it is across desktop, tablet, and mobile screen sizes. Testing the Project: Open the Netlify link and try selecting past dates on the date picker to look up older pictures from NASA’s history!", "repo": "https://github.com/sujayinnovatorrobu-ui/Give-Your-Website-a-Pulse", "demo": "https://sujay-nasa-apod.netlify.app/"}]...
|
[{"post_id": 29610, "ts": "202 [{"post_id": 29610, "ts": "2026-07-16T17:31:08Z", "hours": 1.2489, "text": "🚀 Devlog #2: Time Travel & Media Playback (Netlify Deployment) Hey hackers! 🌌 Today, I leveled up my APOD dashboard by adding date selectors, video support, and launching it live! -Temporal Query (Date Selector) 📅: Integrated a dynamic date input. Users can now query NASA’s historical image database going back to 1995, with system-clock checks blocking future dates to prevent empty responses. -Flexible Media Showcase 🎬: Handled all NASA APOD file formats! The display engine now automatically formats images (with full-res download flags), direct MP4/WebM videos, and translates standard YouTube watch links into silent, inline iframe embeds. -Production Deployment 🌐: Configured netlify.toml for seamless compilation pipelines and successfully deployed the site live on Netlify! -Clean Code & Git Branching 💻: Renamed branches and consolidated all code commits onto the GitHub main branch. Check out the live dashboard at: 🌐 Live Link: https://sujay-nasa-apod.netlify.app/ 💻 Source Code: https://github.com/sujayinnovatorrobu-ui/Give-Your-Website-a-Pulse"}, {"post_id": 29562, "ts": "2026-07-16T16:11:08Z", "hours": 2.0403, "text": "🌌 Devlog #1: Intercepting Deep Space Signals (Vite & NASA API Setup) Hey builders! 🚀 I’m starting a new devlog series for my APOD site!For my first milestone, I wanted to build a web dashboard that automatically fetches and showcases NASA’s Astronomy Picture of the Day using their official public APOD API. 📡 Vite Dev Environment ⚡: Initialized a modern Vanilla JS project with Vite for a fast local server and hot-reloading. NASA API & Secrets 🔐: Configured local environment variables (.env) to safely house my NASA API key and keep it hidden from public git commits. Modern Space Dashboard 🎨: Crafted a refined dark dashboard using Space Grotesk and Orbitron typography, featuring custom loading spinner states, error handlers, and support for high-res image and video/YouTube embeds! WakaTime Connected ⏱️: Set up project-level tracking to log all my building hours under give-your-website-a-pulse."}]...
|
Title: my APOD site by @sujay_innovator_robu | Sta Title: my APOD site by @sujay_innovator_robu | Stardance
Devlogs:
🌌 Devlog #1: Intercepting Deep Space Signals (Vite & NASA API Setup) Hey builders! 🚀 I’m starting a new devlog series for my APOD site!For my first milestone, I wanted to build a web dashboard that automatically fetches and showcases NASA’s Astronomy Picture of the Day using their official public APOD API. 📡 Vite Dev Environment ⚡: Initialized a modern Vanilla JS project with Vite for a fast local server and hot-reloading. NASA API & Secrets 🔐: Configured local environment variables (.env) to safely house my NASA API key and keep it hidden from public git commits. Modern Space Dashboard 🎨: Crafted a refined dark dashboard using Space Grotesk and Orbitron typography, featuring custom loading spinner states, error handlers, and support for high-res image and video/YouTube embeds! WakaTime Connected ⏱️: Set up project-level tracking to log all my building hours under give-your-website-a-pulse.
🚀 Devlog #2: Time Travel & Media Playback (Netlify Deployment) Hey hackers! 🌌 Today, I leveled up my APOD dashboard by adding date selectors, video support, and launching it live! -Temporal Query (Date Selector) 📅: Integrated a dynamic date input. Users can now query NASA’s historical image database going back to 1995, with system-clock checks blocking future dates to prevent empty responses. -Flexible Media Showcase 🎬: Handled all NASA APOD file formats! The display engine now automatically formats images (with full-res download flags), direct MP4/WebM videos, and translates standard YouTube watch links into silent, inline iframe embeds. -Production Deployment 🌐: Configured netlify.toml for seamless compilation pipelines and successfully deployed the site live on Netlify! -Clean Code & Git Branching 💻: Renamed branches and consolidated all code commits onto the GitHub main branch. Check out the live dashboard at: 🌐 Live Link: https://sujay-nasa-apod.netlify.app/ 💻 Source Code: https://github.com/sujayinnovatorrobu-ui/Give-Your-Website-a-Pulse
Ships:
🚀 I built a clean, custom space dashboard that displays NASA’s daily astronomy picture or video using their public APOD API! What I Made: A single-page web dashboard using Vite, Vanilla JS, and custom CSS. It loads the title, copyright information, hd-resolutions, and descriptions dynamically based on the date selected. What was Challenging: The biggest challenge was handling the different media formats returned by NASA’s API. Sometimes they return static images, sometimes raw video files, and other times YouTube links. I wrote code in JS to dynamically detect these types and parse YouTube URLs to load them directly into custom, responsive iframes. What I’m Proud of: I’m proud of how clean the final space-themed dark layout looks and how responsive it is across desktop, tablet, and mobile screen sizes. Testing the Project: Open the Netlify link and try selecting past dates on the date picker to look up older pictures from NASA’s history!...
|
1793551875.0488336
|
1793638275.0488336
|
|
54563
|
My awesome macropad! by @raghavgupta | Stardance
|
raghavgupta
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My awesome macropad! by @raghavgupta | Star Title: My awesome macropad! by @raghavgupta | Stardance...
|
1793551876.1841192
|
1794156676.1841192
|
|
21194
|
os by @karex | Stardance
|
karex
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: os by @karex | Stardance
|
1793551877.0881052
|
1794156677.0881052
|
|
54565
|
My awesome macropad! by @omkgbtpg | Stardance
|
omkgbtpg
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My awesome macropad! by @omkgbtpg | Stardan Title: My awesome macropad! by @omkgbtpg | Stardance...
|
1793551878.018044
|
1794156678.018044
|
|
49399
|
Jagrat by @Dat-One-Dev | Stardance
|
Dat-One-Dev
|
2
|
4.0
|
2
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-30T04:33:05Z", "hours": 0.0, "multiplier": 4.47, "payout": 2, "blessing": "neutral", "text": "Jagrat is a new tab experience inspired by Indian Philosophy and designed to make the browser start page feel intentionally waking, it has music weather search widgets with ability to switch between different search engines..", "repo": "https://github.com/Dat-one-dev/Jagrat", "demo": "https://jagrat.vercel.app/"}, {"ship_num": 2, "ts": "2026-08-23T09:57:50Z", "hours": 4.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "Jagrat is a new tab experience inspired by Indian Philosophy and designed to make the browser start page feel intentionally waking, it has music weather search widgets with ability to switch between different search engines..", "repo": "https://github.com/Dat-one-dev/Jagrat", "demo": "https://jagrat.vercel.app/"}]...
|
[{"post_id": 53790, "ts": "202 [{"post_id": 53790, "ts": "2026-08-24T14:23:15Z", "hours": 0.4036, "text": "Jagrat Devlog 2 Nothing…it just got rejected during shipping so I had to fix the weather API issues…I also added IP ADDRESS fallback if the plan a fails…."}, {"post_id": 49473, "ts": "2026-08-18T10:19:36Z", "hours": 4.0528, "text": "Jagrat Devlog 1 I finished my first Stardance project - Jagrat I will not technically say finish because I still have some more features I want to add but I would say it is around 90% done. I built it using HTML CSS and JavaScript with a focus on making the browser start page feel calm useful and connected to Indian culture. I went for the maximalist spiritualist approach with this one I know this might look very complicated at first but trust me it is not. The only thing that makes it look so complex is the wallpaper I am using which was generated with ChatGPT [No other internet wallpaper suited, like as u can see in repo I tested many wallpaper but only thing one looked good, Maybe I will add a custom wallpaper feature]. Other than that around 80%-85% of the project was made by me [I just dk how to make musics]. I also learned a lot while building this especially with JavaScript browser API geolocation API openmeteo fetching data from APIs and making the whole interface work together. I will also add an AI disclosure in the README and here since I did use AI for some parts of the project [mostly assets like bg bgm] This project took me around 4 hours to build and it was also my first time properly working with Stardance Now that Jagrat is mostly done I am moving on to my second project Swapna"}]...
|
Title: Jagrat by @Dat-One-Dev | Stardance
Devlogs Title: Jagrat by @Dat-One-Dev | Stardance
Devlogs:
Jagrat Devlog 1 I finished my first Stardance project - Jagrat I will not technically say finish because I still have some more features I want to add but I would say it is around 90% done. I built it using HTML CSS and JavaScript with a focus on making the browser start page feel calm useful and connected to Indian culture. I went for the maximalist spiritualist approach with this one I know this might look very complicated at first but trust me it is not. The only thing that makes it look so complex is the wallpaper I am using which was generated with ChatGPT [No other internet wallpaper suited, like as u can see in repo I tested many wallpaper but only thing one looked good, Maybe I will add a custom wallpaper feature]. Other than that around 80%-85% of the project was made by me [I just dk how to make musics]. I also learned a lot while building this especially with JavaScript browser API geolocation API openmeteo fetching data from APIs and making the whole interface work together. I will also add an AI disclosure in the README and here since I did use AI for some parts of the project [mostly assets like bg bgm] This project took me around 4 hours to build and it was also my first time properly working with Stardance Now that Jagrat is mostly done I am moving on to my second project Swapna
Jagrat Devlog 2 Nothing…it just got rejected during shipping so I had to fix the weather API issues…I also added IP ADDRESS fallback if the plan a fails….
Ships:
Jagrat is a new tab experience inspired by Indian Philosophy and designed to make the browser start page feel intentionally waking, it has music weather search widgets with ability to switch between different search engines..
Jagrat is a new tab experience inspired by Indian Philosophy and designed to make the browser start page feel intentionally waking, it has music weather search widgets with ability to switch between different search engines.....
|
1793551878.960422
|
1793638278.960422
|
|
54566
|
My awesome macropad! by @Tabi | Stardance
|
Tabi
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My awesome macropad! by @Tabi | Stardance
|
1793551880.1234188
|
1794156680.1234188
|
|
9995
|
B.I.O.-M.A.G. Slate (Biogenic Iron-Oxide Magnetic B.I.O.-M.A.G. Slate (Biogenic Iron-Oxide Magnetic Analysis Gauge) by @jainil | Stardance...
|
jainil
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: B.I.O.-M.A.G. Slate (Biogenic Iron-Oxide Ma Title: B.I.O.-M.A.G. Slate (Biogenic Iron-Oxide Magnetic Analysis Gauge) by @jainil | Stardance...
|
1793551881.0258658
|
1794156681.0258658
|
|
54568
|
My awesome macropad! by @rahilatheeq74 | Stardance
|
rahilatheeq74
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My awesome macropad! by @rahilatheeq74 | St Title: My awesome macropad! by @rahilatheeq74 | Stardance...
|
1793551881.932651
|
1794156681.932651
|