June 15, 2025
try adding all details in the github readme too!
worked on
dreamland.js
Figured out why the npm publish workflow was broken. dreamland 2 is now on npm!
worked on
dreamland.js
Finished the new frontpage. It has an examples carousel and the bundle size graph now.
worked on
dreamland.js
Worked some more on the new frontpage. Added auto-bundling for a simple counter app in many frameworks to compare bundle size.
worked on
dreamland.js
Nevermind, I'm redesigning the frontpage again. It's pretty much a wall of text right now so I'm adding smaller headers + more examples/visuals.
worked on
dreamland.js
Hopefully last devlog before shipping: dreamland.js.org and the GitHub now point to dreamland v2! I've spent 105h on this project across Journey v1, Journey v2, and Summer of Making. It's now my top hackatime project too.
Nice work! I like the UI :D
worked on
dreamland.js
Added catchall support to the router for the new Mercury Workshop website.
worked on
dreamland.js
Did some more CSS work, polishing all the pages on mobile. Added MDI icons as well.
worked on
dreamland.js
Added a browser support disclaimer (dreamland supports major browsers that support :where()) and set up ESLint (it doesn't want to warn about new JS features like Array.prototype.at for some reason though).
worked on
dreamland.js
Moved component state hydration earlier in the hydration process for non-data components, fixed mobile docs CSS by adding a menu button
worked on
dreamland.js
Tested out and added docs for pure js (no bundler - this needs an importmap), and fixed hybrid ssr.
worked on
dreamland.js
Speedran creating a web IDE playground that uses Monaco + rollup to edit and bundle JSX to run in an iframe. Took a lot longer last time I did it in Journey v1, mostly because I was debugging the typescript worker. Now I know what to do first try.
worked on
dreamland.js
Added some docs for the router and SSR.
(need to unlock the sticker :pf:)
worked on
SoM Harbor
Updated for the new voting UI. I need to vote some more again :pf:
Added Crab Rave as a featured stop. Also fixed the router + SSG integration to actually work properly when navigating
worked on
dreamland.js
Fixed hydrating state so that my fancy rich image for Crab Rave in the SoM Grand Expedition wouldn't shift around on hydration. Also optimized it for size by removing the object wrapper and string type in SsrValue.
Updated to the latest dreamland SSR. Also updated the rich card for the gift shop and added stickerlode #3 (X marks the spot) because it fits perfectly!
worked on
Summer Of Making
Added the admin projects view.
worked on
dreamland.js
Attepted to get 100s on lighthouse for the docs site, but turns out lighthouse really doesn't like the color choice (it passes according to the rest of devtools).
worked on
dreamland.js
Added SSG'd titles to the docs site. Also optimized the prerendered DOM size a little.
worked on
dreamland.js
Finished the intro docs! Also added a manual order to the metadata of the docs pages so it isn't sorted alphabetically anymore.
worked on
dreamland.js
Finished the CSS for the docs site, now just the content of the docs is left. It'll probably need a playground as well, which ideally would be split into a different bundle so that rollup/monaco aren't loaded when opening the frontpage or docs.
worked on
dreamland.js
Added syntax highlighting to the site. This required yet another custom plugin because for some reason @mdx-js/mdx doesn't support using class as a JSX prop instead of className.
worked on
dreamland.js
Used the MDX integration to flesh out the frontpage. The frontpage's content is now in MDX while the sidebar is in JSX. I still need to tweak the content and add syntax highlighting but this looks pretty good!
worked on
dreamland.js
Implemented SSRing and hydrating MDX for the docs site!
As a result, I did a TON of SSR fixes, and implemented pruning SSR data for elements and components not in the SSR dom tree.
Built the initial site with dreamland.js + m3-dreamland. Created a PR to the grand survey expedition repo.
I'm planning to link to any cool submissions I see on the survey map.
created a project
The Mount Kablooey Summit Visitor Center. Links to cool projects in the SoM Grand Survey Expedition.
worked on
dreamland.js
Integrated SSG support with dreamland/router. This is turning into a pretty good template project, time to build my personal website from scratch with it!
worked on
dreamland.js
Started the new dreamland.js site with the new Vite SSR integration. I have SSG working too.
worked on
dreamland.js
Fixed the rest of the SSR bugs. Also rewrote state serialization to have lookup tables for keys/values, drastically reducing the SSR state size. Then I added comment/text node tracking which increased the SSR state size by like 33%, but it fixed m3-dreamland.
worked on
dreamland.js
1 month later...
Locked in and fixed SSR's bitrot! I now have it mostly-working with m3-dreamland. The only bug is something to do with dynamic text nodes not being hydrated correctly.
worked on
m3-dreamland
Implemented Slider. Spent way too long trying to fix the ticks jittering on Chrome and Chrome only (i guess safari wins this time)
worked on
SoM Harbor
Added support for instant-invalidated votes and 100-char min.
worked on
SoM Harbor
Fixed for Turnstile update and added SoM Share Votes support!
worked on
SoM Harbor
Fought with GitHub Actions to get the site deployed. Also added a card with instructions on how to install the Isolated Web App.
worked on
SoM Harbor
Tried out vibe voting (and left some failsafes in the code). I personally will never use this and was surprised at how well it worked.
worked on
SoM Harbor
Voting client finished! Uses an Isolated Web App's Controlled Frame API to fake a Chrome browser. I would have posted a devlog and commit earlier but I had hardcoded vote data to cook on UI.
worked on
SoM Harbor
Added a quick link to the projects in each vote.
worked on
SoM Harbor
Added a fetchDb function to just query straight from DB with the admin APIs. Used it to make a vote viewer.
worked on
m3-dreamland
Implemented TextFields (only the filled variant, not outlined; and no trailing icons yet either).
worked on
m3-dreamland
Added toggle buttons. It's built as a wrapper around the Button component with a flag element as a child to reuse all of its styling and props.
worked on
m3-dreamland
Fixed the linear progress bar styling.
worked on
m3-dreamland
Implemented the linear progress bar. It doesn't look exactly like the spec yet though.
worked on
SoM Harbor
Created a basic testing UI with m3-dreamland. I may be slightly contributing to the 1.1m requests sent to api/v1/devlogs according to the admin analytics
worked on
dreamland.js
Added hybrid SSR finally! It's basically a replacement of Turbo Controllers with dreamland components. You get all the benefits of dreamland state management/reactivity while still being able to use rails/etc.
worked on
m3-dreamland
Implemented Chip.
worked on
m3-dreamland
Implemented Switch, with support for custom icons in the selected state.
worked on
m3-dreamland
Implemented Button styles when disabled.
worked on
m3-dreamland
Implemented most of the button spec (except xs/s target area overrides).
worked on
m3-dreamland
Cleaned up m3-dreamland v1's ripple and implemented the Card/CardClickable component.
worked on
m3-dreamland
Set up the styles component to generate the vars I'll use for components.
worked on
dreamland.js
created a project
A Material 3 (Expressive) component library for <a href="https://summer.hackclub.com/projects/3" target="_blank" class="text-nice-blue hover:text-dark-blue font-medium transition-colors duration-200 cursor-pointer hover:underline">dreamland.js</a>
worked on
Summer Of Making
(Hopefully) fixed the users page 500 error when you have devlogs on deleted projects
worked on
dreamland.js
Added a backdoor to the JSX factory to allow for JSX data components and changed the dreamland router syntax to use those for route definitions.
worked on
Summer Of Making
Made a PR to add back markdown rendering to devlogs. Hopefully merging soon!
created a project
My contributions to Summer Of Making! I'm helping out with random stuff and finding vulns. (I personally didn't use ai so I'm not adding the tag)
worked on
dreamland.js
Cleaned up a hackfix velzie made after I procrastinated on an actual fix. Also fixed use(a, b, c) and cleaned up code that had to handle Pointer<T> | T, saving a ton of bytes. (totally not procrastinating on hybrid ssr)
I started this project a while back and forgot to add it to SoM. Right now I have a ton of intel pstate, rapl, gpu, and dptf knobs added with all of them organized into separate files in src/sensors/. I've improved the default buildroot arm64 cross compile time from ~~18m to ~~13m.
worked on
SoM Harbor
Got auth, api/v1/ endpoints, flash error handling, and some SSR scraped endpoints (getShop, probeShop, postDevlog, deleteDevlog) working. Also set up a robust multi-client and ratelimit-handling client that wasn't needed because Rowan removed the ratelimits.
worked on
dreamland.js
Implemented style object syntax (style={{ backgroundColor: "red" }}) and cleaned up the SSR bundle.
worked on
dreamland.js
Started learning rails for dreamland 2 hybrid SSR (effectively sponsored by nora btw go check nora-changelog's threads). So far I'm thinking of a phlex component subclass that automagically serializes any whitelisted state and attaches a unique ID, then the dreamland component can target selectors to attach events or clientside components to.
Also cleaned up the store code to save like 360 bytes and push dreamland/core under 8000b.
worked on
dreamland.js
Hydration is now fully working! I refactored the JSX factory to remove the dlarr code and saved 205 bytes in the process, mounted comments from the SSR tree to fix the new dynamic pointer code, and removed dl-ssr-css-id to bring down the overhead from 50+% to ~20%.
worked on
dreamland.js
Basic SSR is now working! It now uses the JSX factory element construction order to match up SSR'd elements immediately when hydrating instead of waiting until the whole tree is constructed. The SSR'd tree is now very bloated with duplicated info however, but that can be fixed later. Also the dlarr code is broken but I think I'll completely replace that soon.
worked on
dreamland.js
Worked on component state serialization for SSR. Now component state is sent to the client as a dlcss ID to JSON map in a script tag alongside the rewritten CSS. I can then parse the JSON and apply the state to the components being hydrated. Next step is to actually implement the clientside SSR lib for hydration.
worked on
dreamland.js
Started the serverside SSR implementation! The render function returns a domhandler element for the component and an array of elements that need to be put in the document head which the user can append to a dom of the whole page and serialize to HTML.
I'm currently testing the code in the CSS test project I made in Journey v2, so it isn't actually running in node yet but I'm not using dom types so it should work fine.
worked on
dreamland.js
Told copilot to write a hydrate function for SSR to laugh at it and it wrote 45% useless code, 45% copied code, and 10% partially useful code. Check it out at https://github.com/MercuryWorkshop/dreamlandjs/pull/14.
Anyway, I started SSR support by moving all DOM references into a separate file that exports them so that SSR plugins can override it. I think I have a plan for SSR now:
- Server overrides DOM to jsdom or similar for export to string, calls the server side init function
- Once on client, hydration overrides DOM to a fake version to match up elements with the server side tree and sets state (idk how I'll transfer over state I haven't decided that yet)
I need to figure out how to make deterministic CSS class names for the CSS-in-JS system first probably though
worked on
dreamland.js
Tried to find a good bundle size visualizer library and eventually settled on rollup-plugin-visualizer in sourcemap mode. Also refactored the rollup config a bit to make it cleaner.
worked on
dreamland.js
Did a ton of code golfing to reduce the (uncompressed) size down to below dreamland 1. dreamland 1 still has a better compressed size, which I think is because of the CSS selector parser using regex which is bad for compression.
brotli: 3480B dl2 after, 3598B dl2 before, 3306B dl1
gzip: 3826B dl2 after, 3951B dl2 before, 3656B dl1
worked on
dreamland.js
Attempted class components again, but it turns out there's no way to dynamically add typed properties to a class so the typescript looks very forced and bad. Reverted it and will move on to SSR now
worked on
dreamland.js
Refactored the state system to make it cleaner and less buggy. Also cleaned up the array child case in the JSX factory to use more builtin array operations.
I was going to post this devlog earlier, but I locked myself out of my projects (page 500ing) with invalid comment data.
Fixed unrewriting JS functions via sourcemaps. This means google sign in is working again and Anubis is closer to working (blob urls are still broken for anubis).
Also worked on the WASM port of the html rewriter some more, it currently provides about a 3x speedup over htmlparser2.
worked on
dreamland.js
Apparently .class::before:where(...) is invalid CSS, so I added a case for that in the CSS rewriter. Also messed with the component type some more, so that you can pass in pointers to any prop no matter what.
created a project
Summer of Making voting client. Requires Chrome + Isolated Web Apps.
created a project
An interception based web proxy designed to evade internet censorship, bypass arbitrary web browser restrictions (like enterprise browser-based web filters) and innovate web proxy technologies. This is a TEAM project (I'm part of the team; I'm not contributing externally), I wrote the JavaScript rewriter code (look at commits by r58Playz). Basically the best school filter bypassing backend out there (it's either this or very outdated Ultraviolet). You can put in a URL in the input and then press enter to load the site. If it doesn't work, try clearing all site data or switching to Chrome. Chrome is confirmed working and everyone working on Scramjet tests on Chrome.
created a project
mail.hackclub.com uses this! A utilitarian web framework with refreshing state management. Take a look at <a href="https://github.com/hackclub/theseus/blob/main/package.json" target="_blank" class="text-nice-blue hover:text-dark-blue font-medium transition-colors duration-200 cursor-pointer hover:underline">theseus package.json</a> for proof...
joined Summer of Making
This was widely regarded as a great move by everyone.