I've used vanilla javascript and stolen some simple functions like a GUID and debounce function.
Since it's just vanilla and some is ES6 then it probably only works in modern Chrome and Safari atm. But this could easily be fixed with babel or similar.
Simple JSON server and static asset server. Struct handling is slightly messy in that the form closely matches the final output but I still manually assign fields. Probably best from a security point of view but I prefer completely separate structs generally.