Hello Cody!
There are no shortage of things to do! Here are some things that are at the top of my mind.
1. dynamic plugin loading via Nix
Recently I spent a bunch of time learning nix and learning how to deploy websites via nixops. It seems to me that Nix is right platform for building the one-click plugin archive. Using Nix, plugins could be prebuilt by a hydra server, and users could one-click install the prebuilt plugins.
The first piece, really, is getting plugins-ng fully operational:
Originally, I thought plugins-ng might use cabal and cabal sandboxes. But it seems that Nix is probably a more appropriate solution as far as clckwrks is concerned. But the low-level plugin loading stuff is still required.
Once plugins-ng works, then it is just a matter of using nix to fetch/build a plugin and plugins-ng to load it (via web-plugins-dynamic).
2. Say Goodbye to Javascript
Now that GHCJS is rockin' I am entirely ready to ditch the bits of javascript in clckwrks and using GHCJS for the clientside stuff. Of course, that means we need a solid clientside framework. I have been experimenting with clientside Haskell framework that is inspired by Elm and isomorphic javascript:
At present, I only have a simple clientside example working. The next step is to include communication with the server and the isomorphic aspects. Check out the Main.hs
It has a Model, and Update, and a View. The View uses HSX for embedded HTML syntax.
At present it re-renders the entire DOM for each update, but doing virtual dom style diffs should be a fairly transparent optimization to add later.
A coworker is also working on a different GHCJS based clientside framework, which he promises to release any day now.
In addition to picking/building a good clientside framework, the serverside needs work. In theory, the server-side should have a more REST/JSON API. That was the intention from the start, but I don't think it really happened.
3. I18N
There are some hardcoded strings in clckwrks. I'd like to convert everything to support I18N. I think that figuring out the clientside stuff is probably a good prerequisite though.
4. acid-state S3 backend
It would be great (in theory) to add S3 logging to acid-state. That would result in a very durable transaction log.
5. clckwrks S3 plugin
It would also be great to have a plugin that makes it easy to store media (images, movies, etc) on S3. I have started this plugin already, but then got side tracked by the clientside framework stuff.
6. stack support
People seem excited about this new stack stuff. But as a Nix user, I do not think it is something I have much personal need for. It would be great if someone who uses stack could make sure that the clckwrks stuff does whatever is needed to support stack and keep it up to date.
7. Anything you want!
You can really pick any part of clckwrks that you think is less than stellar and we can figure out a plan to improve it. Everything about clckwrks is still very changeable.
Feel free to ask questions!
- jeremy