# I am the Watcher. I am your guide through this vast new twtiverse.
# 
# Usage:
#     https://watcher.sour.is/api/plain/users              View list of users and latest twt date.
#     https://watcher.sour.is/api/plain/twt                View all twts.
#     https://watcher.sour.is/api/plain/mentions?uri=:uri  View all mentions for uri.
#     https://watcher.sour.is/api/plain/conv/:hash         View all twts for a conversation subject.
# 
# Options:
#     uri     Filter to show a specific users twts.
#     offset  Start index for quey.
#     limit   Count of items to return (going back in time).
# 
# twt range = 1 6
# self = https://watcher.sour.is/conv/vkbdkua
I just finished a roughly six-week push to produce a demo of a simulation I've been working on. Mainly this post is a brain dump of technology used.

I built the user interface in scalajs--first time I've used it--using the Laminar library to wire up all the reactive stuff. I made heavy use of the Scalably Typed ecosystem because I wanted to use Mapbox GL for maps and Pixijs for an animated, interactive map overlay. I used the Laminar bindings for the SAP UI5 web components for all the non-map user interface elements. There are some other choices, mainly libraries to help with time, geometry, and geospatial calculations, that I'm not listing.

This was my first large scala 3 project.
The combination of scalajs and Laminar is absolutely amazing and I don't think I would even consider using anything else if I ever build a big web-based GUI again. Scalably Typed has some warts, mostly owing to the impedance mismatch between scala and Javascript, but overall is great to work with, too. Once I understood the warts, incorporating pixijs and mapboxjs GL, which are Javascript/Typescript libraries, into scala code was straightforward. The SAP UI5 web components are pretty nice too, but I have very limited experience in the world of web components and Javascript frontend frameworks so take that with a grain of salt.
I started using scala at a significant level in 2013 or so, when it was still version 2.9 iirc. I followed it up to scala 2.13 but have mostly resisted switching to scala 3 because I assumed there were significant differences and worried the switch would slow me down. I'm usually on work deadlines when I'm coding and have a lot less free time to tinker now that I have a baby, so I tend to be pretty conservative with technology choices. Anyway, I was wrong about that. Scala 3 is largely similar to scala 2.13 for most things you do at a "user" level. There are significant changes to implicits and macros, but these mostly affect library-level code. You can write what you're used to writing in scala 2.13 for the most part and it'll work with scala 3. For the most part you can also use scala 2.13 dependencies in scala 3 code if there isn't a scala 3 version.
One thing I started to really appreciate about scala 3 is its optional significant whitespace. I especially like that it's optional; python's mandatory significant whitespace drives me batty. In scala 3 you can use braces if you want, or you can toss out the braces and use indents. I found that I'd skip the braces for shorter blocks of code, but for anything more than 10 lines or so, I used braces because they helped me visually understand and navigate the structure better.

Anyway, that's my yarn for today.
@abucci have you heard of Svelte yet? ;P
@akoizumi Of course! But I don't want to work in Javascript or its variants. Scalajs allows you to write your frontend in scala, which is what my simulation and other backend code is written in.