β–ˆβ–ˆβ–“     β–ˆ    β–ˆβ–ˆ  β–ˆβ–ˆ β–„β–ˆβ–€ β–ˆβ–ˆβ–ˆβ–„ β–„β–ˆβ–ˆβ–ˆβ–“     β–“β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–„ β–“β–ˆβ–ˆβ–ˆβ–ˆβ–ˆ β–ˆβ–ˆβ–’   β–ˆβ–“
β–“β–ˆβ–ˆβ–’     β–ˆβ–ˆ  β–“β–ˆβ–ˆβ–’ β–ˆβ–ˆβ–„β–ˆβ–’ β–“β–ˆβ–ˆβ–’β–€β–ˆβ–€ β–ˆβ–ˆβ–’     β–’β–ˆβ–ˆβ–€ β–ˆβ–ˆβ–Œβ–“β–ˆ   β–€β–“β–ˆβ–ˆβ–‘   β–ˆβ–’
β–’β–ˆβ–ˆβ–‘    β–“β–ˆβ–ˆ  β–’β–ˆβ–ˆβ–‘β–“β–ˆβ–ˆβ–ˆβ–„β–‘ β–“β–ˆβ–ˆ    β–“β–ˆβ–ˆβ–‘     β–‘β–ˆβ–ˆ   β–ˆβ–Œβ–’β–ˆβ–ˆβ–ˆ   β–“β–ˆβ–ˆ  β–ˆβ–’β–‘
β–’β–ˆβ–ˆβ–‘    β–“β–“β–ˆ  β–‘β–ˆβ–ˆβ–‘β–“β–ˆβ–ˆ β–ˆβ–„ β–’β–ˆβ–ˆ    β–’β–ˆβ–ˆ      β–‘β–“β–ˆβ–„   β–Œβ–’β–“β–ˆ  β–„  β–’β–ˆβ–ˆ β–ˆβ–‘β–‘
β–‘β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–’β–’β–’β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–“ β–’β–ˆβ–ˆβ–’ β–ˆβ–„β–’β–ˆβ–ˆβ–’   β–‘β–ˆβ–ˆβ–’ β–ˆβ–ˆβ–“ β–‘β–’β–ˆβ–ˆβ–ˆβ–ˆβ–“ β–‘β–’β–ˆβ–ˆβ–ˆβ–ˆβ–’  β–’β–€β–ˆβ–‘  
β–‘ β–’β–‘β–“  β–‘β–‘β–’β–“β–’ β–’ β–’ β–’ β–’β–’ β–“β–’β–‘ β–’β–‘   β–‘  β–‘ β–’β–“β–’  β–’β–’β–“  β–’ β–‘β–‘ β–’β–‘ β–‘  β–‘ ▐░  
β–‘ β–‘ β–’  β–‘β–‘β–‘β–’β–‘ β–‘ β–‘ β–‘ β–‘β–’ β–’β–‘β–‘  β–‘      β–‘ β–‘β–’   β–‘ β–’  β–’  β–‘ β–‘  β–‘  β–‘ β–‘β–‘  
  β–‘ β–‘    β–‘β–‘β–‘ β–‘ β–‘ β–‘ β–‘β–‘ β–‘ β–‘      β–‘    β–‘    β–‘ β–‘  β–‘    β–‘       β–‘β–‘  
    β–‘  β–‘   β–‘     β–‘  β–‘          β–‘     β–‘     β–‘       β–‘  β–‘     β–‘  
                                     β–‘   β–‘                 β–‘   

Crustacean Station

2025-11-01

Crustacean Station is a small collection of developer tools built to explore Leptos, a reactive Rust framework targeting WASM. I wanted a weekend-sized project that let me try out Leptos in a practical way; and along the journey I even contributed a documentation fix to the project.

Technologies:

  • Leptos
  • Tailwind CSS

It features:

  • Dark/light mode switch: Uses Tailwind’s color variables and localStorage to persist the user’s preference.
  • JSON formatter: Formats and validates a JSON blob using serde.
  • UUID generator: Generates n UUID v4 values, with an option to control casing.
  • Copy-to-clipboard component: A reusable button for copying outputs.

What I learned:

  • Leptos is delightful. It feels familiar to React (which I use often) but brings some Rust-specific advantages.
  • Pulling in serde and uuid significantly increased the WASM bundle size.
    • I tried bundle splitting, but GitHub Pages didn’t play well with the setup.
    • In the future, I’d likely roll my own lightweight implementations instead of relying on larger crates for a small tool.
  • SPA routing on GitHub Pages requires a 404.html redirecting to index.html. After discovering this, I contributed a pull request to improve the official Leptos documentation.

Links:

The code is available on GitHub gh