|
17201
|
RSA Encryption Model by @Vishwak | Stardance
|
Vishwak
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: RSA Encryption Model by @Vishwak | Stardanc Title: RSA Encryption Model by @Vishwak | Stardance...
|
1793375300.3690336
|
1793980100.3690336
|
|
17202
|
My awesome macropad! by @MRme22 | Stardance
|
MRme22
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My awesome macropad! by @MRme22 | Stardance
|
1793487206.5605204
|
1794092006.5605204
|
|
17203
|
Site but Retro by @Josh | Stardance
|
Josh
|
1
|
6.0
|
42
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-11T04:30:06Z", "hours": 6.0, "multiplier": 8.07, "payout": 42, "blessing": "neutral", "text": "Ive built the start of the site from scratch!", "repo": "https://gitlab.com/castawhat/sitebutretro", "demo": "https://slitro.studio"}]...
|
[{"post_id": 26383, "ts": "202 [{"post_id": 26383, "ts": "2026-07-11T04:29:33Z", "hours": 2.5508, "text": "Its (mostly done!) Ive added a new blog post some cool new features i fixed the guestbook I added the my stuff page"}, {"post_id": 8436, "ts": "2026-06-14T01:12:35Z", "hours": 2.9911, "text": "Started work on the website! webring page works contact page works 88by31 page works Next I think I’m going to add the stats page :D"}]...
|
Title: Site but Retro by @Josh | Stardance
Devlog Title: Site but Retro by @Josh | Stardance
Devlogs:
Started work on the website! webring page works contact page works 88by31 page works Next I think I’m going to add the stats page :D
Its (mostly done!) Ive added a new blog post some cool new features i fixed the guestbook I added the my stuff page
Ships:
Ive built the start of the site from scratch!...
|
1793706928.7636917
|
1793793328.7636917
|
|
17204
|
Lunar Storage by @lunapuppygirl | Stardance
|
lunapuppygirl
|
0
|
22.7
|
0
|
[]
|
[{"post_id": 13152, "ts": "202 [{"post_id": 13152, "ts": "2026-06-21T15:00:11Z", "hours": 13.6758, "text": "the second devlog Didn’t make any for some time cuz I didn’t feel like making a devlog for each new page/thing I add :p Login I’m using Spring’s OAuth2 client for it. Currently only Discord’s OAuth2 is supported, more will come in the future. It’s creating a JWT cookie and storing user’s UUID there. Home page Home page contains link to the GitHub repository and the storage itself. It’s also available to create an announcement that will display there, with 4 levels of it (low, medium, high and critical) each with different color. Storage Finished making the storage display page, it works with database and has icons based on the entry type (file/folder), if file/folder’s permission level is higher than user’s, it will show a red block icon and redirect on click to a login page instead of the file itself. Dashboard Made the home page of the dashboard, right now there are only request statistics available (requests in a day/hour/minute) Config and stats Both are stored in a separate JSON files, I’m using Gson and made a manager so it’s easier to manage and edit them."}, {"post_id": 8092, "ts": "2026-06-13T14:44:56Z", "hours": 9.0222, "text": "the first devlog So I’m making a personal storage website where the owner will be able to store files and manage access to them. The project is written in Java and uses the Spring framework and JWT tokens. The pages are built as Thymeleaf templates, which makes it easier to pass data from the backend to the frontend. Database Currently I made it to be compatible with MySQL and PostgreSQL. writing the queries was soo boring 😭😭 It’s easy to add more DBMSs as it only requires to add a case to switch in DatabaseConfig class, create an implementation of AbstractDatabase and implementations of Repository for each table. Github Actions CI/CD workflow Created a CI/CD workflow to automatically build and push the image of LunarStorage to ghcr.io . It also builds and adds Tailwind CSS to the project resources. Proof-of-Work captcha Made the captcha to prevent bots from scraping the contents of the storage. The progress bar is only an estimate of progress so it may take less or longer than shown. Currently it only supports JavaScript for hashing. well so um for now that’s it i guess, bye :3"}]...
|
Title: Lunar Storage by @lunapuppygirl | Stardance Title: Lunar Storage by @lunapuppygirl | Stardance
Devlogs:
the first devlog So I’m making a personal storage website where the owner will be able to store files and manage access to them. The project is written in Java and uses the Spring framework and JWT tokens. The pages are built as Thymeleaf templates, which makes it easier to pass data from the backend to the frontend. Database Currently I made it to be compatible with MySQL and PostgreSQL. writing the queries was soo boring 😭😭 It’s easy to add more DBMSs as it only requires to add a case to switch in DatabaseConfig class, create an implementation of AbstractDatabase and implementations of Repository for each table. Github Actions CI/CD workflow Created a CI/CD workflow to automatically build and push the image of LunarStorage to ghcr.io . It also builds and adds Tailwind CSS to the project resources. Proof-of-Work captcha Made the captcha to prevent bots from scraping the contents of the storage. The progress bar is only an estimate of progress so it may take less or longer than shown. Currently it only supports JavaScript for hashing. well so um for now that’s it i guess, bye :3
the second devlog Didn’t make any for some time cuz I didn’t feel like making a devlog for each new page/thing I add :p Login I’m using Spring’s OAuth2 client for it. Currently only Discord’s OAuth2 is supported, more will come in the future. It’s creating a JWT cookie and storing user’s UUID there. Home page Home page contains link to the GitHub repository and the storage itself. It’s also available to create an announcement that will display there, with 4 levels of it (low, medium, high and critical) each with different color. Storage Finished making the storage display page, it works with database and has icons based on the entry type (file/folder), if file/folder’s permission level is higher than user’s, it will show a red block icon and redirect on click to a login page instead of the file itself. Dashboard Made the home page of the dashboard, right now there are only request statistics available (requests in a day/hour/minute) Config and stats Both are stored in a separate JSON files, I’m using Gson and made a manager so it’s easier to manage and edit them....
|
1793198939.2385154
|
1793803739.2385154
|
|
17205
|
My awesome macropad! by @Kian_Sequeira | Stardance
|
Kian_Sequeira
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My awesome macropad! by @Kian_Sequeira | St Title: My awesome macropad! by @Kian_Sequeira | Stardance...
|
1792921859.7307389
|
1793785859.7307389
|
|
17206
|
Drone by @sevithawakulindu | Stardance
|
sevithawakulindu
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Drone by @sevithawakulindu | Stardance
|
1793433435.0977569
|
1794038235.0977569
|
|
17207
|
Untitled project by @Aniketttt | Stardance
|
Aniketttt
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Untitled project by @Aniketttt | Stardance
|
1793559322.6912065
|
1794164122.6912065
|
|
17208
|
My very own WebOS by @tamamajumdar3675 | Stardance
|
tamamajumdar3675
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My very own WebOS by @tamamajumdar3675 | St Title: My very own WebOS by @tamamajumdar3675 | Stardance...
|
1793368609.7188144
|
1793973409.7188144
|
|
17209
|
My awesome macropad! by @pooh_aaa2 | Stardance
|
pooh_aaa2
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My awesome macropad! by @pooh_aaa2 | Starda Title: My awesome macropad! by @pooh_aaa2 | Stardance...
|
1793368349.4859228
|
1793973149.4859228
|
|
17210
|
Untitled by @Aniketttt | Stardance
|
Aniketttt
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Untitled by @Aniketttt | Stardance
|
1793555282.9487472
|
1794160082.9487472
|
|
17211
|
Untitled by @YH | Stardance
|
YH
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Untitled by @YH | Stardance
|
1793440566.5483928
|
1794045366.5483928
|
|
17212
|
first project by @Harkeerat_Singh | Stardance
|
Harkeerat_Singh
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: first project by @Harkeerat_Singh | Stardan Title: first project by @Harkeerat_Singh | Stardance...
|
1793328988.1896803
|
1793933788.1896803
|
|
17213
|
LumusPad by @araadh3111 | Stardance
|
araadh3111
|
1
|
1.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-12T10:37:49Z", "hours": 1.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made a hackpad based on hackclubs hackpad guide I worked really really hard on this but lapse was down I even have friends who were on call with me while I was working on this, this is my first hardware project I have made a pcb with 5 cherry mx switches one 0’91 inch oled and one rotary encoder and 5 rgb backlights I have made a really great cyberpunkish case with 3 layers , which can be screwed together by m3 screws", "repo": "https://github.com/Araadh3111/Lumushackpad", "demo": ""}]...
|
[{"post_id": 7403, "ts": "2026 [{"post_id": 7403, "ts": "2026-06-12T10:31:45Z", "hours": 0.2903, "text": "My hack pad is done with small design changes now done and commited everything is done!!"}, {"post_id": 7382, "ts": "2026-06-12T09:46:28Z", "hours": 0.5056, "text": "I am officially done with my hackpad!!!!! I have been workingon it for a long time but forgot to record in lapse these 28 minutes of firmware writing is all I have to show, But I have 2 friends that can vouch for me as I was on calll grinding 6 hrs making this hackpad, U can see its repo at https://github.com/Araadh3111/Lumushackpad- here are some images of case and pcb"}]...
|
Title: LumusPad by @araadh3111 | Stardance
Devlog Title: LumusPad by @araadh3111 | Stardance
Devlogs:
I am officially done with my hackpad!!!!! I have been workingon it for a long time but forgot to record in lapse these 28 minutes of firmware writing is all I have to show, But I have 2 friends that can vouch for me as I was on calll grinding 6 hrs making this hackpad, U can see its repo at https://github.com/Araadh3111/Lumushackpad- here are some images of case and pcb
My hack pad is done with small design changes now done and commited everything is done!!
Ships:
I made a hackpad based on hackclubs hackpad guide I worked really really hard on this but lapse was down I even have friends who were on call with me while I was working on this, this is my first hardware project I have made a pcb with 5 cherry mx switches one 0’91 inch oled and one rotary encoder and 5 rgb backlights I have made a really great cyberpunkish case with 3 layers , which can be screwed together by m3 screws...
|
1793706937.7572167
|
1793793337.7572167
|
|
17214
|
Bastion Go by @moeezmoeez917 | Stardance
|
moeezmoeez917
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Bastion Go by @moeezmoeez917 | Stardance
|
1793494381.1355963
|
1794099181.1355963
|
|
17215
|
My awesome macropad! by @Zara | Stardance
|
Zara
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My awesome macropad! by @Zara | Stardance
|
1793202628.6050146
|
1793807428.6050146
|
|
17216
|
Cadence Music PLayer by @shubworks | Stardance
|
shubworks
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Cadence Music PLayer by @shubworks | Starda Title: Cadence Music PLayer by @shubworks | Stardance...
|
1792936375.3643076
|
1793800375.3643076
|
|
17217
|
Untitled by @krystof_jurda | Stardance
|
krystof_jurda
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Untitled by @krystof_jurda | Stardance
|
1793505215.6046586
|
1794110015.6046586
|
|
17218
|
My awesome macropad! by @kuba | Stardance
|
kuba
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My awesome macropad! by @kuba | Stardance
|
1793562712.4252825
|
1794167512.4252825
|
|
17219
|
My awesome macropad! by @BayerischKind | Stardance
|
BayerischKind
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My awesome macropad! by @BayerischKind | St Title: My awesome macropad! by @BayerischKind | Stardance...
|
1793505408.3381925
|
1794110208.3381925
|
|
17220
|
4×n Chomp P-position Solver by @gargarnav2007 | St 4×n Chomp P-position Solver by @gargarnav2007 | Stardance...
|
gargarnav2007
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: 4×n Chomp P-position Solver by @gargarnav20 Title: 4×n Chomp P-position Solver by @gargarnav2007 | Stardance...
|
1793181330.6810887
|
1793786130.6810887
|
|
17221
|
Desktop Quick Note Taker by @Greg_ios | Stardance
|
Greg_ios
|
0
|
0.78
|
0
|
[]
|
[{"post_id": 7417, "ts": "2026 [{"post_id": 7417, "ts": "2026-06-12T10:59:16Z", "hours": 0.3425, "text": "Add note-taking application with system tray support Implemented a Tkinter-based GUI for taking and displaying notes. Integrated JSON file handling for saving and loading notes. Added functionality to show notes in a tree view. Included keyboard shortcut (Ctrl + Alt + N) to open the note-taking app. Set up a system tray icon using pystray for easy access to the application. Added an exit option in the system tray menu to close the application. Included an image asset (notes.png) for the system tray icon."}, {"post_id": 7406, "ts": "2026-06-12T10:36:17Z", "hours": 0.4328, "text": "Make the basic logic for the Desktop Quick Note Taker. But I have some problems with the show notes"}]...
|
Title: Desktop Quick Note Taker by @Greg_ios | Sta Title: Desktop Quick Note Taker by @Greg_ios | Stardance
Devlogs:
Make the basic logic for the Desktop Quick Note Taker. But I have some problems with the show notes
Add note-taking application with system tray support Implemented a Tkinter-based GUI for taking and displaying notes. Integrated JSON file handling for saving and loading notes. Added functionality to show notes in a tree view. Included keyboard shortcut (Ctrl + Alt + N) to open the note-taking app. Set up a system tray icon using pystray for easy access to the application. Added an exit option in the system tray menu to close the application. Included an image asset (notes.png) for the system tray icon....
|
1793519471.016951
|
1794124271.016951
|
|
17222
|
My very own WebOS by @dhuhazubair397 | Stardance
|
dhuhazubair397
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My very own WebOS by @dhuhazubair397 | Star Title: My very own WebOS by @dhuhazubair397 | Stardance...
|
1793523106.0938294
|
1794127906.0938294
|
|
17223
|
Algorithm to play a Fractal Zoom Game by @arnvg | Algorithm to play a Fractal Zoom Game by @arnvg | Stardance...
|
arnvg
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Algorithm to play a Fractal Zoom Game by @a Title: Algorithm to play a Fractal Zoom Game by @arnvg | Stardance...
|
1793436844.583101
|
1794041644.583101
|
|
17224
|
Untitled by @Sasindu25 | Stardance
|
Sasindu25
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Untitled by @Sasindu25 | Stardance
|
1793364922.5069735
|
1793969722.5069735
|
|
17225
|
Frictionless by @Sasindu25 | Stardance
|
Sasindu25
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Frictionless by @Sasindu25 | Stardance
|
1793487440.7665334
|
1794092240.7665334
|
|
17226
|
Untitled by @Sasindu25 | Stardance
|
Sasindu25
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Untitled by @Sasindu25 | Stardance
|
1793249707.9347415
|
1793854507.9347415
|
|
17227
|
Untitled by @Sasindu25 | Stardance
|
Sasindu25
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Untitled by @Sasindu25 | Stardance
|
1793267259.1630113
|
1793872059.1630113
|
|
17228
|
My awesome macropad! by @zoe_beudeker | Stardance
|
zoe_beudeker
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My awesome macropad! by @zoe_beudeker | Sta Title: My awesome macropad! by @zoe_beudeker | Stardance...
|
1793447489.3716247
|
1794052289.3716247
|
|
17229
|
NULL
|
NULL
|
0
|
0.0
|
0
|
[]
|
[]
|
|
1792939681.687202
|
1793803681.687202
|
|
17230
|
AraadhOS by @araadh3111 | Stardance
|
araadh3111
|
1
|
2.89
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-23T19:11:53Z", "hours": 2.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made a webos based on hackclubs mission of webos1", "repo": "https://github.com/Araadh3111/WebOS", "demo": "https://web-os-phi-six.vercel.app/"}]...
|
[{"post_id": 26082, "ts": "202 [{"post_id": 26082, "ts": "2026-07-10T17:44:09Z", "hours": 0.8889, "text": "I added ai usage in readme!"}, {"post_id": 12477, "ts": "2026-06-20T11:32:36Z", "hours": 2.3233, "text": "AraadhOS — Devlog From an empty repo to a working web desktop. Vanilla HTML, CSS, and JavaScript — no frameworks, no build step, no shortcuts. —## Initial commitEvery project starts with a small act of faith: a README.md with two lines in it. No code yet, just a freshly initialized git repo and the decision that this is the thing to build — WebOS , a desktop operating system that lives in a browser tab.## Scaffolding — “made three files”The skeleton: index.html , script.js , and style.css . The JS and CSS were empty, the HTML just 8 lines. The unglamorous-but-essential moment of wiring the three files together — followed by the classic merge commit to reconcile local and remote.## First pixels — “the basic landing page”The first commit where AraadhOS started to look like something: 61 lines of CSS and a boot terminal window with the three traffic-light dots. The aesthetic locked in here too — the moody ayu-dark palette, the gold accent ( #E6B450 ), JetBrains Mono. A landing screen that boots you in rather than just dropping you on a desktop.## Bringing it to life — “basic animations”The first JavaScript showed up and the boot screen started doing things: a typing effect spelling out “Welcome to AraadhOS”, a braille spinner cycling like a real loader, and a blinking ASCII mascot — a little (◕‿◕) face that winks and back. The project stopped being a webpage and became an experience .## The big bang — “v1 of Araadh OS”The monster commit. +1,160 lines. script.js went from a few dozen lines to 767. In one push, AraadhOS became a real desktop environment:- A window system — open, close, drag-by-titlebar, focus-to-front, single-instance apps, cascading windows. Generic and shared, so every app gets it free.- An app registry — the architectural heart. Every app is just { name, icon, render() } . Add an entry and it appears in the dock, the menu bar, and the terminal automatically.- A frosted-glass dock — hover-lift, click-bounce, tooltips, open-app indicators.- The apps — Terminal (a working command interpreter), About, Projects, Files, Calculator, Settings.- Persistent settings — accent color, 12/24-hour clock, UI scale, wallpaper, all saved to localStorage .- A PROFILE object — one place to edit your real content; every app renders from it.Not a prototype — a real, usable thing.## The polish sessionA refinement pass to make the whole thing feel finished :- Squashed a bug — a stray keystroke had broken the clock on startup.- Redesigned the menu-bar — frosted glass to match the dock, a gradient brand chip, restyled buttons, and a clock with a live date.- Built a Notes app — an auto-saving notepad with a live word/character counter, backed by localStorage . It slotted straight in thanks to the app registry.- Removed dead weight — a resume.pdf link that 404’d, and the whoami command (a deliberate “no auth rabbit hole right now” call).- Filled the empty desktop — a grid of desktop icons: single-click to select, double-click to open.## Where it standsIn a handful of commits plus a polish session, AraadhOS went from a two-line README to a browser-based desktop OS with a window manager, a dock, desktop icons, seven working apps, persistent theming, and a boot sequence with real character. The architecture is clean enough that adding the next app is a five-minute job. Next: push the polish work, turn on hosting, and let people boot it."}]...
|
Title: AraadhOS by @araadh3111 | Stardance
Devlog Title: AraadhOS by @araadh3111 | Stardance
Devlogs:
AraadhOS — Devlog From an empty repo to a working web desktop. Vanilla HTML, CSS, and JavaScript — no frameworks, no build step, no shortcuts. —## Initial commitEvery project starts with a small act of faith: a README.md with two lines in it. No code yet, just a freshly initialized git repo and the decision that this is the thing to build — WebOS , a desktop operating system that lives in a browser tab.## Scaffolding — “made three files”The skeleton: index.html , script.js , and style.css . The JS and CSS were empty, the HTML just 8 lines. The unglamorous-but-essential moment of wiring the three files together — followed by the classic merge commit to reconcile local and remote.## First pixels — “the basic landing page”The first commit where AraadhOS started to look like something: 61 lines of CSS and a boot terminal window with the three traffic-light dots. The aesthetic locked in here too — the moody ayu-dark palette, the gold accent ( #E6B450 ), JetBrains Mono. A landing screen that boots you in rather than just dropping you on a desktop.## Bringing it to life — “basic animations”The first JavaScript showed up and the boot screen started doing things: a typing effect spelling out “Welcome to AraadhOS”, a braille spinner cycling like a real loader, and a blinking ASCII mascot — a little (◕‿◕) face that winks and back. The project stopped being a webpage and became an experience .## The big bang — “v1 of Araadh OS”The monster commit. +1,160 lines. script.js went from a few dozen lines to 767. In one push, AraadhOS became a real desktop environment:- A window system — open, close, drag-by-titlebar, focus-to-front, single-instance apps, cascading windows. Generic and shared, so every app gets it free.- An app registry — the architectural heart. Every app is just { name, icon, render() } . Add an entry and it appears in the dock, the menu bar, and the terminal automatically.- A frosted-glass dock — hover-lift, click-bounce, tooltips, open-app indicators.- The apps — Terminal (a working command interpreter), About, Projects, Files, Calculator, Settings.- Persistent settings — accent color, 12/24-hour clock, UI scale, wallpaper, all saved to localStorage .- A PROFILE object — one place to edit your real content; every app renders from it.Not a prototype — a real, usable thing.## The polish sessionA refinement pass to make the whole thing feel finished :- Squashed a bug — a stray keystroke had broken the clock on startup.- Redesigned the menu-bar — frosted glass to match the dock, a gradient brand chip, restyled buttons, and a clock with a live date.- Built a Notes app — an auto-saving notepad with a live word/character counter, backed by localStorage . It slotted straight in thanks to the app registry.- Removed dead weight — a resume.pdf link that 404’d, and the whoami command (a deliberate “no auth rabbit hole right now” call).- Filled the empty desktop — a grid of desktop icons: single-click to select, double-click to open.## Where it standsIn a handful of commits plus a polish session, AraadhOS went from a two-line README to a browser-based desktop OS with a window manager, a dock, desktop icons, seven working apps, persistent theming, and a boot sequence with real character. The architecture is clean enough that adding the next app is a five-minute job. Next: push the polish work, turn on hosting, and let people boot it.
I added ai usage in readme!
Ships:
I made a webos based on hackclubs mission of webos1...
|
1793846905.1721692
|
1793933305.1721692
|
|
17231
|
My very own WebOS by @fizaattiq | Stardance
|
fizaattiq
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My very own WebOS by @fizaattiq | Stardance
|
1793393273.962163
|
1793998073.962163
|
|
17232
|
My very own WebOS by @Hikaru_Jing | Stardance
|
Hikaru_Jing
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My very own WebOS by @Hikaru_Jing | Stardan Title: My very own WebOS by @Hikaru_Jing | Stardance...
|
1793181374.0652974
|
1793786174.0652974
|
|
17233
|
Minesweeper by @landaic25 | Stardance
|
landaic25
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Minesweeper by @landaic25 | Stardance
|
1793346657.5873692
|
1793951457.5873692
|
|
17234
|
Rocket, with solid fuel by @shaansha568 | Stardanc Rocket, with solid fuel by @shaansha568 | Stardance...
|
shaansha568
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Rocket, with solid fuel by @shaansha568 | S Title: Rocket, with solid fuel by @shaansha568 | Stardance...
|
1793335706.1162643
|
1793940506.1162643
|
|
17235
|
Untitled project by @xlramixg | Stardance
|
xlramixg
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Untitled project by @xlramixg | Stardance
|
1793224569.3642578
|
1793829369.3642578
|
|
17236
|
Synthetic Problem Generator for Organic Chem by @g Synthetic Problem Generator for Organic Chem by @gauranshbansal338 | Stardance...
|
gauranshbansal338
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Synthetic Problem Generator for Organic Che Title: Synthetic Problem Generator for Organic Chem by @gauranshbansal338 | Stardance...
|
1793246159.2895713
|
1793850959.2895713
|
|
17237
|
Frictionless by @nainapatel042013 | Stardance
|
nainapatel042013
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Frictionless by @nainapatel042013 | Stardan Title: Frictionless by @nainapatel042013 | Stardance...
|
1793289259.45168
|
1793894059.45168
|
|
17238
|
Music_tracker by @F3rro_32 | Stardance
|
F3rro_32
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Music_tracker by @F3rro_32 | Stardance
|
1793551686.6383798
|
1794156486.6383798
|
|
17239
|
DataFlow by @landaic25 | Stardance
|
landaic25
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: DataFlow by @landaic25 | Stardance
|
1793267361.155008
|
1793872161.155008
|
|
17240
|
My first slack bot! by @CitrusB1 | Stardance
|
CitrusB1
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My first slack bot! by @CitrusB1 | Stardanc Title: My first slack bot! by @CitrusB1 | Stardance...
|
1793238478.9955642
|
1793843278.9955642
|
|
17241
|
Frictionless by @aditya-taneja | Stardance
|
aditya-taneja
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Frictionless by @aditya-taneja | Stardance
|
1793382874.148469
|
1793987674.148469
|
|
17242
|
Untitled by @Aureo | Stardance
|
Aureo
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Untitled by @Aureo | Stardance
|
1793404160.1621432
|
1794008960.1621432
|
|
17243
|
My first slack bot! by @reyansh_ | Stardance
|
reyansh_
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My first slack bot! by @reyansh_ | Stardanc Title: My first slack bot! by @reyansh_ | Stardance...
|
1793324874.7112958
|
1793929674.7112958
|
|
17244
|
My awesome macropad! by @LEGEND | Stardance
|
LEGEND
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My awesome macropad! by @LEGEND | Stardance
|
1793357578.9334803
|
1793962378.9334803
|
|
17245
|
Echoes Beyond by @Hu6Odazz | Stardance
|
Hu6Odazz
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Echoes Beyond by @Hu6Odazz | Stardance
|
1793768002.682179
|
1794372802.682179
|
|
17246
|
Untitled project by @MartabakManis | Stardance
|
MartabakManis
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Untitled project by @MartabakManis | Starda Title: Untitled project by @MartabakManis | Stardance...
|
1793278268.4060202
|
1793883068.4060202
|
|
17247
|
My very own WebOS by @Samuel-Dingle | Stardance
|
Samuel-Dingle
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My very own WebOS by @Samuel-Dingle | Stard Title: My very own WebOS by @Samuel-Dingle | Stardance...
|
1793296520.819672
|
1793901320.819672
|
|
17248
|
Wanderpin by @darshjain | Stardance
|
darshjain
|
1
|
40.0
|
735
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-16T08:35:27Z", "hours": 40.0, "multiplier": 18.23, "payout": 735, "blessing": "neutral", "text": "Wanderpin is a 3D-globe trip planner where the journey is the product, not the spreadsheet. Drop pins on a spinning night-earth, watch your route stitch together, then hit Play and fly the whole trip as a cinematic reel - gliding across the globe for long hops and dropping into real 3D terrain when two stops are close. The hardest part was making the globe-to-3D handoff feel continuous. Two heavy engines (three.js for the globe, MapLibre for terrain) had to crossfade without a tile-load flash, so I warm the 3D view in the background and only commit once it’s actually ready. I also caught the play-through reel re-rendering the entire app - globe included - on every caption tick; moving the caption into its own useSyncExternalStore so only it updates made the fly-through visibly smoother. I’m proud that it feels like a journey instead of a form: the cinematic reel, ~40k curated places that each carry a vibe and a fun fact, and one-tap sharing as a postcard, a public link, or an embeddable live globe. To try it: open the live link, search a city or just click the globe to drop pins (or start from a template like India’s Golden Triangle), then hit Play. Zoom all the way into a pin to watch it cross into street-level 3D. Built with React 19 + TypeScript, three.js, MapLibre GL, and Vercel serverless.", "repo": "https://github.com/darshnerd/wanderpin", "demo": "https://wanderpin-ecru.vercel.app/"}]...
|
[{"post_id": 9766, "ts": "2026 [{"post_id": 9766, "ts": "2026-06-16T06:22:00Z", "hours": 3.9347, "text": "Wanderpin - the first five seconds, final touchups Everything in this batch is about the moment someone lands : a blank globe is intimidating, so I built a real first-run, made it personal, and fixed a jank I’d been ignoring. A front door instead of an empty globe New visitors get a welcome dialog: Plan a trip, or Remember one you took. Either way there are starter templates (a week in Italy, around the world, a California road trip) you can drop in with one tap and start dragging stops around. Coachmarks that follow the actual UI A short guided tour spotlights real elements: search, the view toggle, Play. It measures each target’s live bounding rect, re-measures on resize and focus, flips above/below by screen half, and hides itself the moment you focus the search box so it never fights you while typing. Dismissals persist so it doesn’t nag on return visits. Where it stands Build’s green, all staged, not yet committed. Next: watch real first sessions, do people tap through a template or skip straight to search?"}, {"post_id": 9295, "ts": "2026-06-15T16:44:56Z", "hours": 4.0172, "text": "Wanderpin - getting routes to leave the ground Live: https://wanderpin-ecru.vercel.app/ One update, mostly one stubborn visual I’d twice given up on: real lifted route arcs on the 3D map. Arcs that finally hug the globe deck.gl’s ArcLayer drifts on a MapLibre globe (it only knows Web Mercator), and my earlier hand-rolled layer compiled, ran, threw zero errors, and painted nothing. The fix came from reading MapLibre’s own shaders: inject its projection prelude and call projectTileFor3D(pos, elevation) . The thing I’d missed every time - elevation is in meters above the sphere , fed through five per-frame uniforms, not a raw matrix. Then the polish fights: a z-fight speckle (fixed by not writing depth), a 50 km minimum lift that made short hops launch like fireworks, and a fat vertical wall at city zoom (now fades out past ~zoom 10). An optional day timeline New “Days” view in the trip panel. Weekend trip? You’ll never see it. Month-long? Hit “Organize into days” and stops group into collapsible days you can split, reorder, fit the globe to, or play one at a time. A day is a contiguous slice of the route, so “move to Day 3” repositions the stop and re-normalizes - the route and itinerary stay honest. Days travel on share links too. Where it stands Live at site, (Also squashed a deploy bug: one .tsx API route made Vercel type-check the whole api/ folder with no tsconfig - a tiny api/tsconfig.json fixed it.)"}, {"post_id": 9121, "ts": "2026-06-15T08:21:12Z", "hours": 5.0136, "text": "Wanderpin - the globe looked dumb on a 20 km hop, so I taught it to zoom This batch turns a Wanderpin trip from a thing on your screen into a thing you can send to a friend - with a real link preview, an embeddable globe, and a reel that finally looks good on short hops. Share a journey, for real Hit Share and you get a public link ( /t/slug ) in a box, plus Copy, the native share sheet, and WhatsApp / Instagram / X buttons. The interesting part is what happens when someone opens that link: /t/:slug is server-rendered ( api/share.ts ) and serves a dynamically generated Open Graph image ( api/og.tsx via @vercel/og ) - so pasting a Wanderpin link into a chat unfurls into a proper preview card instead of a blank rectangle. There’s an embeddable globe too: /embed/:slug renders just the spinning globe (a tiny route check in main.tsx swaps the whole app for EmbedView ), and the share dialog hands you the <iframe> snippet. Shared trips auto-expire after 7 days via a pg_cron job, so the table stays small and old links quietly die. The reel got smarter - 3D for the short hops The globe fly-through looks flat when two stops are 20 km apart - the arc is a stub and the camera barely moves. So now the Play reel checks each leg: anything under 200 km crosses into the 3D map (terrain + buildings) with a zoom picked from the distance, longer legs stay as globe arcs. It asks once before playing, and video recording stays globe-only so captures never go blank. What bit me Instagram has no web “share a link” intent (unlike WhatsApp/X). So the IG button copies the link and opens Instagram - the native share sheet handles it properly on phones. The slug kept vanishing from the URL. A shared trip was calling replaceState(\"/\") the instant it loaded, so /t/slug disappeared mid-playback and you couldn’t re-share what you were watching. Moved that reset onto the “Create yourslongs. The reel switch reused the globe↔3D handoff plumbing, and the type-checker caught a flyTo signature mismatch before it shipped - the map handle wants { zoom } , not a bare number. Where it stands It all builds clean, Try it: https://wanderpin-ecru.vercel.app/"}, {"post_id": 8858, "ts": "2026-06-14T19:05:10Z", "hours": 6.1658, "text": "Wanderpin - zoom into the world Two big things landed this week: the map went from 26 hand-picked places to ~40,000, and zooming into the globe now drops you into a real 3D city. From 26 places to 40,000 - and they all have a vibe Wanderpin used to know about 26 famous spots. Now it knows ~40k: cities, towns, UNESCO sites, landmarks, and the world’s most-visited attractions - each tagged with a one-word vibe (Coastal, Alpine, Arid, Heritage, Sacred, Volcanic…). The fun part is the vibes aren’t hand-typed. They’re derived at build time from real data: a Köppen climate raster (so Cairo reads “Arid” and Athens “Mediterranean”), distance to an actual coastline for “Coastal”, GeoNames elevation/feature codes for peaks and castles, and Wikidata’s annual-visitor numbers to rank “most visited”. Facts come from Wikipedia and UNESCO descriptions. Search is now instant and offline - type “Firenze” and Florence shows up. The fun part: zoom in and the globe becomes a city The home view is a space globe (three.js). The close-up is a different engine entirely - maplibre with 3D terrain and buildings. I wired up a level-of-detail handoff between them: zoom into a pin and it crosses from globe to 3D automatically, and zoom back out and it returns to the globe. The trick to making it not feel janky: when you start zooming in, it quietly mounts the 3D map hidden and lets it pull tiles in the background. Only once the tiles are warm does it crossfade. No blank loading flash. What broke (twice) It hung forever in preload. The crossfade waited on maplibre’s idle event to know tiles were ready - but that event sometimes never fires. The globe just kept zooming into black. Fix: commit after a 2.2s fallback even if idle is silent. The way back never worked. Zooming out in 3D wouldn’t return to the globe. Turned out map.on(\"zoom\") captured the callback once at mount - back when the view was still “globe” - so its if (view !== \"3d\") return guard killed every event forever. Fix: call the latest callback through a ref. Both are real bugs that would’ve bitten actual users on slow connections, not just test artifacts. Where it stands Globe -> 3D -> globe round-trips cleanly on both laptop and mobile, with zero console errors. Try it: https://wanderpin-ecru.vercel.app/"}, {"post_id": 8556, "ts": "2026-06-14T06:57:59Z", "hours": 3.3139, "text": "Wanderpin - Blog 5 - Update press play, watch your trip turn into a movie Live: https://wanderpin-ecru.vercel.app/ You drop a few pins on a globe and hit Play - and instead of a checklist, you get a cinematic fly-through you can actually share. This update was about chasing one idea until the app felt alive : the journey is the hero, the logistics hide in a drawer. The payoff Play used to just stop. Now it lands: the camera pulls back to frame the route, the arcs light up, and a date-stamped card counts up your distance, stops, countries and time. A little classifier scores the trip and picks the camera - a city hop zooms in, a round-the-world trip shows the marble. You also pick how you travel each leg (walk/train/flight…), which bends both the arc shape and the trip’s duration. Then three swings: export the fly-through as a video (recorded straight off the globe canvas, no server), “been there” pins that glow gold once visited, and a living globe - a warm daylight terminator plus each stop’s local time and current weather. What broke Geocode 500’d in prod, every call. Not a geocoding bug at all: type: \"module\" means Vercel runs the API as native ESM, and Node demands file extensions on imports. from \"./_nominatim\" crashed at load. One .js fixed it. The terminator looked gloomy. Darkening the night side just made an already-night map muddy. I flipped it - glow the sunlit side instead - and it finally read as “half the globe is lit.” Two suns. Every clear-sky stop showed ☀️ 06:28 · ☀️ 15° - my day marker next to the weather glyph. ngl used AI to build this image 😛"}, {"post_id": 8281, "ts": "2026-06-13T19:28:41Z", "hours": 4.5656, "text": "Wanderpin - I deleted the spreadsheet You open the app or you can :) (check it out - https://wanderpin-ecru.vercel.app/ ). A night-side Earth, city lights glowing, a slow spin. You drop a pin in Paris. Another in Tokyo. The arc draws across the globe, and right next to all of that, a panel quietly tells you your dream weighs 2.2 tonnes of CO₂ . That panel was killing the magic. This phase was about fixing it. The shift I stopped showing the numbers on the dream surface. Same numbers, just hidden one click deep behind a “Trip details” disclosure. In their place: one warm line that grows with the trip - “4 stops · 4 countries · An adventure taking shape.” You build a journey. The app reacts like it’s excited about it. Surprise me, the most fun thing the app could do, was buried under a dice icon. It’s the front door now: Take me somewhere. The empty state stopped being homework - “Your map’s a blank canvas, click to start” - and became an invitation: “Where are you dreaming of?” Drop your very first pin and the app whispers back: “Your journey begins in Santorini ✨” . Hover over a stop and a small card appears: “Why go - its iconic caldera is the rim of a colossal volcanic eruption.” Hit Play and the screen goes cinematic. Full-screen overlay, place name, vibe, progress dots, the route lighting up beneath. The trip used to be a spreadsheet. Now it’s a memory you haven’t made yet. The mobile catch Almost shipped a bug that would’ve made this look broken. On a phone, the empty-state “Take me somewhere” lives inside a bottom sheet. Tap it, and the surprise card was rendering behind the still-open sheet. To the user, nothing happened. To me, a testing pass on an iPhone-shaped viewport caught it the morning of. One-line fix. The kind that disappears in the diff but would have left every mobile user thinking the button was broken. Where it stands Empty state, surprise card, first pin, the reel - all warm now. The numbers are still there for the planners, behind one small toggle. The dreamers don’t see them at all. When Play ends, the camera pulls back, the whole route lights up, and the same numbers I just buried come surging back as a celebration - “You crossed 4 countries. Today, that’s a journey.” Same data, different feeling. The closing frame becomes a postcard you can share. The whole phase is one belief: people don’t open a travel app because they want to know how many kilometres a trip is. They open it because they want, for a minute, to imagine going somewhere. So show them the somewhere."}, {"post_id": 8043, "ts": "2026-06-13T12:44:32Z", "hours": 5.3458, "text": "Wanderpin - phase 3: real sharing, and the bug that ate an afternoon This update gave Wanderpin proper short links, a saved-trips library, and a route optimizer. But the part I’ll remember is a 100 KB mystery. Short links + a trip library Sharing used to cram the whole trip into a giant #... URL. Now there’s a tiny Supabase backend: hit Share and you get a clean …/t/aB3xY9 link that anyone can open, no login. Reads come straight from the browser (a public read policy), and writes go through a serverless function with the secret key, so nobody can scribble on the database from the client. When someone opens a shared link, the route flies stop to stop and a little “Make your own” card invites them to start their own. Click polish Spinning the globe was dropping stray pins, because react-globe.gl fires a click even at the end of a drag. Added a pointer-distance guard (under ~5px = a real click). Clicking open ocean now offers an “Add anyway” instead of a useless pin, and there’s an “Optimize route” button that reorders stops with nearest-neighbour + 2-opt to cut total distance. The bug: a 5-stop trip that was 400 KB Share kept failing in the browser with a 413 (payload too large). But the function worked fine when I hit it with curl. Same 5-stop trip, totally different size. I had the user dump their saved trip in the console. Five stops. 403,682 characters. Each stop had two mystery keys: __threeObjPoint and __threeObjLabel , ~100 KB each. Turns out react-globe.gl mutates the data objects you hand it - it bolts the entire Three.js render object (meshes, geometry, materials) straight onto your data. I was passing my live trip array to the globe, so it was quietly fattening every stop by 100 KB, which then got saved to localStorage and sent on publish. The hash link looked fine only because it re-packs specific fields, so it never saw the junk. Fix was two-fold: hand the globe throwaway copies so it scribbles on those instead of my real data, and sanitize trips to known fields on save/load (which also cleans up the bloated localStorage on next visit). Back to ~1 KB per trip. Where it stands Live at https://wanderpin-ecru.vercel.app/ - build a trip, optimize it, save it, share a short link, watch it fly. Honest caveats: shared trips are snapshots (open a link, get a copy - not live collaboration), and the globe’s three.js bundle is still the heavy chunk (lazy-loaded, so it only hits the 3D view). Lesson logged: never trust a viz library not to mutate your state."}, {"post_id": 7632, "ts": "2026-06-12T19:09:46Z", "hours": 3.2525, "text": "Wanderpin - phase 2: trips you can shape, share, and watch fly Phase 1 let you drop pins on a globe. Phase 2 turns that into an actual trip planner: reorder stops, edit them, share a link, and hit Play to watch the camera fly your whole route. Play: the globe earns its keep The feature I’m happiest with. There’s now a Play button that flies the camera stop to stop along your route, advancing the highlighted pin as it goes. On the 3D globe it looks the way I wanted the whole app to feel. The nice surprise: it was almost free. Back in phase 1 both the globe and the flat map exposed the same tiny flyTo handle. So the tour loop doesn’t know or care which view you’re on Editing, sharing, exporting Reorder by dragging (dnd-kit), with the route redrawing live. The drag handle is the only draggable bit, so dragging never fights tapping a stop to edit it. Edit a stop inline — rename, swap the emoji, add a note. Undo on remove and “clear all” via the toast, because I deleted my own trip twice testing it. Share builds a link with the whole trip compressed into the URL (lz-string), no backend. Open it anywhere and the trip loads. IDs are regenerated on import so a shared trip never collides with one you already have. Export to JSON or GPX, so a route can open in Google Earth. Where it stands Live at https://wanderpin-ecru.vercel.app/ . Every phase builds clean ( tsc + Vite) and deploys to Vercel on push. The loop now: build a trip, reorder and annotate it, watch it fly, share the link."}, {"post_id": 7419, "ts": "2026-06-12T11:12:40Z", "hours": 4.6761, "text": "Wanderpin - first build Check it out yourself -> https://wanderpin-ecru.vercel.app/ A little travel app where you drop pins on a spinning 3D globe (or a flat map if you prefer), and it stitches them into a trip with distances and country counts. Here’s where it’s at after the first couple of sessions. What it does so far Globe + map, same data. A 3D night-earth globe (three.js via react-globe.gl) with glowing pins and animated arcs between stops, and a 2D Leaflet map with a dashed route line. One toggle swaps between them - they render off the same trip array. Search and click to add. Type a city and it geocodes through OpenStreetMap’s Nominatim; or just click anywhere on the map and it reverse-geocodes the spot into a named pin. Surprise me. A pile of hand-picked destinations, each with a fun fact and a vibe, for when you don’t know where you want to go. It remembers. Trip, view, and “is this still the sample” all persist to localStorage. First-time visitors get a seeded Paris -> Rome -> Cairo route so the app isn’t empty on load. Spent a bit making the Nominatim calls polite: searches are debounced so a fast typer doesn’t fire a request per keystroke. Where it stands The core loop works end to end: search or click -> pin lands on globe and map -> trip panel updates distance (haversine) and country count -> reload and it’s all still there. Next up is editing/reordering stops and tidying the mobile layout"}]...
|
Title: Wanderpin by @darshjain | Stardance
Devlog Title: Wanderpin by @darshjain | Stardance
Devlogs:
Wanderpin - first build Check it out yourself -> https://wanderpin-ecru.vercel.app/ A little travel app where you drop pins on a spinning 3D globe (or a flat map if you prefer), and it stitches them into a trip with distances and country counts. Here’s where it’s at after the first couple of sessions. What it does so far Globe + map, same data. A 3D night-earth globe (three.js via react-globe.gl) with glowing pins and animated arcs between stops, and a 2D Leaflet map with a dashed route line. One toggle swaps between them - they render off the same trip array. Search and click to add. Type a city and it geocodes through OpenStreetMap’s Nominatim; or just click anywhere on the map and it reverse-geocodes the spot into a named pin. Surprise me. A pile of hand-picked destinations, each with a fun fact and a vibe, for when you don’t know where you want to go. It remembers. Trip, view, and “is this still the sample” all persist to localStorage. First-time visitors get a seeded Paris -> Rome -> Cairo route so the app isn’t empty on load. Spent a bit making the Nominatim calls polite: searches are debounced so a fast typer doesn’t fire a request per keystroke. Where it stands The core loop works end to end: search or click -> pin lands on globe and map -> trip panel updates distance (haversine) and country count -> reload and it’s all still there. Next up is editing/reordering stops and tidying the mobile layout
Wanderpin - phase 2: trips you can shape, share, and watch fly Phase 1 let you drop pins on a globe. Phase 2 turns that into an actual trip planner: reorder stops, edit them, share a link, and hit Play to watch the camera fly your whole route. Play: the globe earns its keep The feature I’m happiest with. There’s now a Play button that flies the camera stop to stop along your route, advancing the highlighted pin as it goes. On the 3D globe it looks the way I wanted the whole app to feel. The nice surprise: it was almost free. Back in phase 1 both the globe and the flat map exposed the same tiny flyTo handle. So the tour loop doesn’t know or care which view you’re on Editing, sharing, exporting Reorder by dragging (dnd-kit), with the route redrawing live. The drag handle is the only draggable bit, so dragging never fights tapping a stop to edit it. Edit a stop inline — rename, swap the emoji, add a note. Undo on remove and “clear all” via the toast, because I deleted my own trip twice testing it. Share builds a link with the whole trip compressed into the URL (lz-string), no backend. Open it anywhere and the trip loads. IDs are regenerated on import so a shared trip never collides with one you already have. Export to JSON or GPX, so a route can open in Google Earth. Where it stands Live at https://wanderpin-ecru.vercel.app/ . Every phase builds clean ( tsc + Vite) and deploys to Vercel on push. The loop now: build a trip, reorder and annotate it, watch it fly, share the link.
Wanderpin - phase 3: real sharing, and the bug that ate an afternoon This update gave Wanderpin proper short links, a saved-trips library, and a route optimizer. But the part I’ll remember is a 100 KB mystery. Short links + a trip library Sharing used to cram the whole trip into a giant #... URL. Now there’s a tiny Supabase backend: hit Share and you get a clean …/t/aB3xY9 link that anyone can open, no login. Reads come straight from the browser (a public read policy), and writes go through a serverless function with the secret key, so nobody can scribble on the database from the client. When someone opens a shared link, the route flies stop to stop and a little “Make your own” card invites them to start their own. Click polish Spinning the globe was dropping stray pins, because react-globe.gl fires a click even at the end of a drag. Added a pointer-distance guard (under ~5px = a real click). Clicking open ocean now offers an “Add anyway” instead of a useless pin, and there’s an “Optimize route” button that reorders stops with nearest-neighbour + 2-opt to cut total distance. The bug: a 5-stop trip that was 400 KB Share kept failing in the browser with a 413 (payload too large). But the function worked fine when I hit it with curl. Same 5-stop trip, totally different size. I had the user dump their saved trip in the console. Five stops. 403,682 characters. Each stop had two mystery keys: __threeObjPoint and __threeObjLabel , ~100 KB each. Turns out react-globe.gl mutates the data objects you hand it - it bolts the entire Three.js render object (meshes, geometry, materials) straight onto your data. I was passing my live trip array to the globe, so it was quietly fattening every stop by 100 KB, which then got saved to localStorage and sent on publish. The hash link looked fine only because it re-packs specific fields, so it never saw the junk. Fix was two-fold: hand the globe throwaway copies so it scribbles on those instead of my real data, and sanitize trips to known fields on save/load (which also cleans up the bloated localStorage on next visit). Back to ~1 KB per trip. Where it stands Live at https://wanderpin-ecru.vercel.app/ - build a trip, optimize it, save it, share a short link, watch it fly. Honest caveats: shared trips are snapshots (open a link, get a copy - not live collaboration), and the globe’s three.js bundle is still the heavy chunk (lazy-loaded, so it only hits the 3D view). Lesson logged: never trust a viz library not to mutate your state.
Wanderpin - I deleted the spreadsheet You open the app or you can :) (check it out - https://wanderpin-ecru.vercel.app/ ). A night-side Earth, city lights glowing, a slow spin. You drop a pin in Paris. Another in Tokyo. The arc draws across the globe, and right next to all of that, a panel quietly tells you your dream weighs 2.2 tonnes of CO₂ . That panel was killing the magic. This phase was about fixing it. The shift I stopped showing the numbers on the dream surface. Same numbers, just hidden one click deep behind a “Trip details” disclosure. In their place: one warm line that grows with the trip - “4 stops · 4 countries · An adventure taking shape.” You build a journey. The app reacts like it’s excited about it. Surprise me, the most fun thing the app could do, was buried under a dice icon. It’s the front door now: Take me somewhere. The empty state stopped being homework - “Your map’s a blank canvas, click to start” - and became an invitation: “Where are you dreaming of?” Drop your very first pin and the app whispers back: “Your journey begins in Santorini ✨” . Hover over a stop and a small card appears: “Why go - its iconic caldera is the rim of a colossal volcanic eruption.” Hit Play and the screen goes cinematic. Full-screen overlay, place name, vibe, progress dots, the route lighting up beneath. The trip used to be a spreadsheet. Now it’s a memory you haven’t made yet. The mobile catch Almost shipped a bug that would’ve made this look broken. On a phone, the empty-state “Take me somewhere” lives inside a bottom sheet. Tap it, and the surprise card was rendering behind the still-open sheet. To the user, nothing happened. To me, a testing pass on an iPhone-shaped viewport caught it the morning of. One-line fix. The kind that disappears in the diff but would have left every mobile user thinking the button was broken. Where it stands Empty state, surprise card, first pin, the reel - all warm now. The numbers are still there for the planners, behind one small toggle. The dreamers don’t see them at all. When Play ends, the camera pulls back, the whole route lights up, and the same numbers I just buried come surging back as a celebration - “You crossed 4 countries. Today, that’s a journey.” Same data, different feeling. The closing frame becomes a postcard you can share. The whole phase is one belief: people don’t open a travel app because they want to know how many kilometres a trip is. They open it because they want, for a minute, to imagine going somewhere. So show them the somewhere.
Wanderpin - Blog 5 - Update press play, watch your trip turn into a movie Live: https://wanderpin-ecru.vercel.app/ You drop a few pins on a globe and hit Play - and instead of a checklist, you get a cinematic fly-through you can actually share. This update was about chasing one idea until the app felt alive : the journey is the hero, the logistics hide in a drawer. The payoff Play used to just stop. Now it lands: the camera pulls back to frame the route, the arcs light up, and a date-stamped card counts up your distance, stops, countries and time. A little classifier scores the trip and picks the camera - a city hop zooms in, a round-the-world trip shows the marble. You also pick how you travel each leg (walk/train/flight…), which bends both the arc shape and the trip’s duration. Then three swings: export the fly-through as a video (recorded straight off the globe canvas, no server), “been there” pins that glow gold once visited, and a living globe - a warm daylight terminator plus each stop’s local time and current weather. What broke Geocode 500’d in prod, every call. Not a geocoding bug at all: type: "module" means Vercel runs the API as native ESM, and Node demands file extensions on imports. from "./_nominatim" crashed at load. One .js fixed it. The terminator looked gloomy. Darkening the night side just made an already-night map muddy. I flipped it - glow the sunlit side instead - and it finally read as “half the globe is lit.” Two suns. Every clear-sky stop showed ☀️ 06:28 · ☀️ 15° - my day marker next to the weather glyph. ngl used AI to build this image 😛
Wanderpin - zoom into the world Two big things landed this week: the map went from 26 hand-picked places to ~40,000, and zooming into the globe now drops you into a real 3D city. From 26 places to 40,000 - and they all have a vibe Wanderpin used to know about 26 famous spots. Now it knows ~40k: cities, towns, UNESCO sites, landmarks, and the world’s most-visited attractions - each tagged with a one-word vibe (Coastal, Alpine, Arid, Heritage, Sacred, Volcanic…). The fun part is the vibes aren’t hand-typed. They’re derived at build time from real data: a Köppen climate raster (so Cairo reads “Arid” and Athens “Mediterranean”), distance to an actual coastline for “Coastal”, GeoNames elevation/feature codes for peaks and castles, and Wikidata’s annual-visitor numbers to rank “most visited”. Facts come from Wikipedia and UNESCO descriptions. Search is now instant and offline - type “Firenze” and Florence shows up. The fun part: zoom in and the globe becomes a city The home view is a space globe (three.js). The close-up is a different engine entirely - maplibre with 3D terrain and buildings. I wired up a level-of-detail handoff between them: zoom into a pin and it crosses from globe to 3D automatically, and zoom back out and it returns to the globe. The trick to making it not feel janky: when you start zooming in, it quietly mounts the 3D map hidden and lets it pull tiles in the background. Only once the tiles are warm does it crossfade. No blank loading flash. What broke (twice) It hung forever in preload. The crossfade waited on maplibre’s idle event to know tiles were ready - but that event sometimes never fires. The globe just kept zooming into black. Fix: commit after a 2.2s fallback even if idle is silent. The way back never worked. Zooming out in 3D wouldn’t return to the globe. Turned out map.on("zoom") captured the callback once at mount - back when the view was still “globe” - so its if (view !== "3d") return guard killed every event forever. Fix: call the latest callback through a ref. Both are real bugs that would’ve bitten actual users on slow connections, not just test artifacts. Where it stands Globe -> 3D -> globe round-trips cleanly on both laptop and mobile, with zero console errors. Try it: https://wanderpin-ecru.vercel.app/
Wanderpin - the globe looked dumb on a 20 km hop, so I taught it to zoom This batch turns a Wanderpin trip from a thing on your screen into a thing you can send to a friend - with a real link preview, an embeddable globe, and a reel that finally looks good on short hops. Share a journey, for real Hit Share and you get a public link ( /t/slug ) in a box, plus Copy, the native share sheet, and WhatsApp / Instagram / X buttons. The interesting part is what happens when someone opens that link: /t/:slug is server-rendered ( api/share.ts ) and serves a dynamically generated Open Graph image ( api/og.tsx via @vercel/og ) - so pasting a Wanderpin link into a chat unfurls into a proper preview card instead of a blank rectangle. There’s an embeddable globe too: /embed/:slug renders just the spinning globe (a tiny route check in main.tsx swaps the whole app for EmbedView ), and the share dialog hands you the <iframe> snippet. Shared trips auto-expire after 7 days via a pg_cron job, so the table stays small and old links quietly die. The reel got smarter - 3D for the short hops The globe fly-through looks flat when two stops are 20 km apart - the arc is a stub and the camera barely moves. So now the Play reel checks each leg: anything under 200 km crosses into the 3D map (terrain + buildings) with a zoom picked from the distance, longer legs stay as globe arcs. It asks once before playing, and video recording stays globe-only so captures never go blank. What bit me Instagram has no web “share a link” intent (unlike WhatsApp/X). So the IG button copies the link and opens Instagram - the native share sheet handles it properly on phones. The slug kept vanishing from the URL. A shared trip was calling replaceState("/") the instant it loaded, so /t/slug disappeared mid-playback and you couldn’t re-share what you were watching. Moved that reset onto the “Create yourslongs. The reel switch reused the globe↔3D handoff plumbing, and the type-checker caught a flyTo signature mismatch before it shipped - the map handle wants { zoom } , not a bare number. Where it stands It all builds clean, Try it: https://wanderpin-ecru.vercel.app/
Wanderpin - getting routes to leave the ground Live: https://wanderpin-ecru.vercel.app/ One update, mostly one stubborn visual I’d twice given up on: real lifted route arcs on the 3D map. Arcs that finally hug the globe deck.gl’s ArcLayer drifts on a MapLibre globe (it only knows Web Mercator), and my earlier hand-rolled layer compiled, ran, threw zero errors, and painted nothing. The fix came from reading MapLibre’s own shaders: inject its projection prelude and call projectTileFor3D(pos, elevation) . The thing I’d missed every time - elevation is in meters above the sphere , fed through five per-frame uniforms, not a raw matrix. Then the polish fights: a z-fight speckle (fixed by not writing depth), a 50 km minimum lift that made short hops launch like fireworks, and a fat vertical wall at city zoom (now fades out past ~zoom 10). An optional day timeline New “Days” view in the trip panel. Weekend trip? You’ll never see it. Month-long? Hit “Organize into days” and stops group into collapsible days you can split, reorder, fit the globe to, or play one at a time. A day is a contiguous slice of the route, so “move to Day 3” repositions the stop and re-normalizes - the route and itinerary stay honest. Days travel on share links too. Where it stands Live at site, (Also squashed a deploy bug: one .tsx API route made Vercel type-check the whole api/ folder with no tsconfig - a tiny api/tsconfig.json fixed it.)
Wanderpin - the first five seconds, final touchups Everything in this batch is about the moment someone lands : a blank globe is intimidating, so I built a real first-run, made it personal, and fixed a jank I’d been ignoring. A front door instead of an empty globe New visitors get a welcome dialog: Plan a trip, or Remember one you took. Either way there are starter templates (a week in Italy, around the world, a California road trip) you can drop in with one tap and start dragging stops around. Coachmarks that follow the actual UI A short guided tour spotlights real elements: search, the view toggle, Play. It measures each target’s live bounding rect, re-measures on resize and focus, flips above/below by screen half, and hides itself the moment you focus the search box so it never fights you while typing. Dismissals persist so it doesn’t nag on return visits. Where it stands Build’s green, all staged, not yet committed. Next: watch real first sessions, do people tap through a template or skip straight to search?
Ships:
Wanderpin is a 3D-globe trip planner where the journey is the product, not the spreadsheet. Drop pins on a spinning night-earth, watch your route stitch together, then hit Play and fly the whole trip as a cinematic reel - gliding across the globe for long hops and dropping into real 3D terrain when two stops are close. The hardest part was making the globe-to-3D handoff feel continuous. Two heavy engines (three.js for the globe, MapLibre for terrain) had to crossfade without a tile-load flash, so I warm the 3D view in the background and only commit once it’s actually ready. I also caught the play-through reel re-rendering the entire app - globe included - on every caption tick; moving the caption into its own useSyncExternalStore so only it updates made the fly-through visibly smoother. I’m proud that it feels like a journey instead of a form: the cinematic reel, ~40k curated places that each carry a vibe and a fun fact, and one-tap sharing as a postcard, a public link, or an embeddable live globe. To try it: open the live link, search a city or just click the globe to drop pins (or start from a template like India’s Golden Triangle), then hit Play. Zoom all the way into a pin to watch it cross into street-level 3D. Built with React 19 + TypeScript, three.js, MapLibre GL, and Vercel serverless....
|
1793771479.2350152
|
1794635479.2350152
|
|
17249
|
My first slack bot! by @Bilal_12 | Stardance
|
Bilal_12
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My first slack bot! by @Bilal_12 | Stardanc Title: My first slack bot! by @Bilal_12 | Stardance...
|
1793408092.1000245
|
1794012892.1000245
|
|
17250
|
NerdyNeighbor by @Scrax99 | Stardance
|
Scrax99
|
1
|
6.0
|
15
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-17T15:14:47Z", "hours": 6.0, "multiplier": 2.57, "payout": 15, "blessing": "neutral", "text": "I made a study tool that tracks the amount of time you’ve studied, helps you create a todo list, and has an inbuilt A.I. model that makes it to where you don’t get distracted when you’re doing your homework and just need a simple question answered. I learned a lot from this project about a whole bunch of different libraries, and how to use Cloud Flare’s API key security tool which was really useful. I also learned about the struggles of frontend devs which was eyeopening. Anyways I hope that you enjoy the project and are able to use it.", "repo": "https://github.com/scraxx99/NerdyNeighbor", "demo": "https://scraxx99.github.io/NerdyNeighbor/"}]...
|
[{"post_id": 10668, "ts": "202 [{"post_id": 10668, "ts": "2026-06-17T15:06:53Z", "hours": 1.9861, "text": "Finally finished the final security bit for NerdyNeighbor and I’m ready to publish. Thank you for following along, and I learned a whole lot."}, {"post_id": 9102, "ts": "2026-06-15T06:40:55Z", "hours": 1.1308, "text": "Just added tailwind and am now going to work on finishing up all the styling"}, {"post_id": 8683, "ts": "2026-06-14T12:54:49Z", "hours": 1.0375, "text": "Finished the todo function on the app and it works wonderfully (gulp) I was having issues with the tasks disappearing if you reloaded the page, but that was a simple fix (I’m not using A.I. on this one for code so easier said than done) it may look like a caveman built it, but I’m proud of it because I’m building something I understand and I’m not using A.I. nearly as much as I had been previously."}, {"post_id": 7989, "ts": "2026-06-13T10:16:30Z", "hours": 1.9094, "text": "I decided that I was gonna make a project by handwriting all of the code and only using A.I. when I absolutely have too. I decided on a study agent that I could scale until I needed the help of A.I. Today I added a timer that took quite a while, but I’m very proud. I know all of the logic behind it and can implement it in another project if necessary, so it was time well spent. This project may come out looking less impressive, but I’ll be content knowing that it was all of my own code and ideas. Underneath is a photo of what I have so far, and it is indeed quite simple, but I’m just using this is a learning tool so I’m content. The next thing to build is a notes taking feature/ ToDo list."}]...
|
Title: NerdyNeighbor by @Scrax99 | Stardance
Devl Title: NerdyNeighbor by @Scrax99 | Stardance
Devlogs:
I decided that I was gonna make a project by handwriting all of the code and only using A.I. when I absolutely have too. I decided on a study agent that I could scale until I needed the help of A.I. Today I added a timer that took quite a while, but I’m very proud. I know all of the logic behind it and can implement it in another project if necessary, so it was time well spent. This project may come out looking less impressive, but I’ll be content knowing that it was all of my own code and ideas. Underneath is a photo of what I have so far, and it is indeed quite simple, but I’m just using this is a learning tool so I’m content. The next thing to build is a notes taking feature/ ToDo list.
Finished the todo function on the app and it works wonderfully (gulp) I was having issues with the tasks disappearing if you reloaded the page, but that was a simple fix (I’m not using A.I. on this one for code so easier said than done) it may look like a caveman built it, but I’m proud of it because I’m building something I understand and I’m not using A.I. nearly as much as I had been previously.
Just added tailwind and am now going to work on finishing up all the styling
Finally finished the final security bit for NerdyNeighbor and I’m ready to publish. Thank you for following along, and I learned a whole lot.
Ships:
I made a study tool that tracks the amount of time you’ve studied, helps you create a todo list, and has an inbuilt A.I. model that makes it to where you don’t get distracted when you’re doing your homework and just need a simple question answered. I learned a lot from this project about a whole bunch of different libraries, and how to use Cloud Flare’s API key security tool which was really useful. I also learned about the struggles of frontend devs which was eyeopening. Anyways I hope that you enjoy the project and are able to use it....
|
1793692592.2402017
|
1793778992.2402017
|