We aim to improve decision-making in groups by giving participants the tools to improve a set of proposals together. All that without the need of external influence —like a committee that provides proposals— that puts the participants strictly in the role of just a voter. To evaluate our ideas in the field, we built a prototype you can find below.
In an experiment in 2019 we noticed that involved participants in a decision not only want to express their own proposals, but also actively participate in the improvement of existing proposals. They used the means available to them to express these wishes and (mis)used the discussion function to propose improvements. The problem is that mere comments are not the same as proposing a new candidate to vote for.
We hope to move from commenting on why a proposal is not good or how it can be improved to creating new and improved proposals.
You can start as many components of the project you like.When you just want to play with components in CLJS without the backend I recommend to only start the workspaces compiler.
yarn install
#### To use frontend + backend ####
# Start cljs compiler
npm run client/main
# You can find the UI of the compile server here:
# http://localhost:9630
# There you can kick of the compilation of the other targets.
# Start the backend:
clojure -A:dev -Dtrace -Dguardrails.enabled=true
Clojure 1.10.1
# The ns is defined in src/dev/user
user=> (start)
# after modifications of the backend code:
user=> (restart)
# visit http://localhost:3000
#### To only use the frontend ####
# Workspaces
npm run client/workspaces
# visit http://localhost:8023/workspaces
# CLJS Tests:
npm run client/tests
# visit http://localhost:8022
You can find the npm run
scripts in package.json
.
To understand what is called, please refer to the docs of shadow-cljs: http://shadow-cljs.org/
When you import this project into Cursive/IntelliJ the jobs above are already available as:
client/main
, server
and workspaces
.
Shadow-cljs handles the client-side development build.The file
src/main/app/client.cljs
contains the code to start and refresh
the client for hot code reload.
In general it is easiest just to run the compiler in server mode:
$ npx shadow-cljs server
INFO: XNIO version 3.3.8.Final
Nov 10, 2018 8:08:23 PM org.xnio.nio.NioXnio <clinit>
INFO: XNIO NIO Implementation Version 3.3.8.Final
shadow-cljs - HTTP server for :test available at http://localhost:8022
shadow-cljs - HTTP server for :workspaces available at http://localhost:8023
shadow-cljs - server version: 2.7.2
shadow-cljs - server running at http://localhost:9630
shadow-cljs - socket REPL running on port 51936
shadow-cljs - nREPL server started on port 9000
...
then navigate to the server URL (shown in this example as http://localhost:9630) and use the Builds menu to enable/disable whichever builds you want watched/running.
Shadow-cljs will also start a web server for any builds that configure one.This template configures one for workspaces, and one for tests:
-
Workspaces (MUST RUN SERVER): http://localhost:3000/wslive.html
-
Tests: http://localhost:8022
See the server section below for working on the full-stack app itself.
The shadow-cljs compiler starts an nREPL. It is configured to start on
port 9000 (in shadow-cljs.edn
).
In IntelliJ: add a remote Clojure REPL configuration with
host localhost
and port 9000
.
then:
(shadow/repl :main)
will connect you to the REPL for a specific build (NOTE: Make sure you have a browser running the result, or your REPL won’t have anything to talk to!)
If you’re using CIDER
see the Shadow-cljs User’s Guide
and the comments in deps.edn
for more information.
In order to work with your main application you’ll want to start your own server that can also serve your application’s API.
Start a LOCAL clj nREPL in IntelliJ (using IntelliJ’s classpath with
the dev
alias selected in the Clojure Deps tab), or from the command line:
$ clj -A:dev -J-Dtrace -J-Dguardrails.enabled=true
user=> (start)
user=> (stop)
...
user=> (restart) ; stop, reload server code, and go again
user=> (tools-ns/refresh) ; retry code reload if hot server reload fails
The -J-Dtrace
adds a JVM argument that will enable performance tracing for Fulcro Inspect’s network tab so you can see how your resolvers and mutations are performing.
The -J-Dguardrails.enabled=true
turns on guardrails instrumentation of guardrails spec’d functions, which is a wrapper of Clojure spec that makes instrumentation and production-time elision (for performance and size) much easier.
Note
|
For real development, please use an editor that has REPL integration, like Cursive (recommended) or Spacemacs. |
The URL to work on your application is then http://localhost:3000.
Hot code reload, preloads, and such are all coded into the javascript.
There is a preload file that is used on the development build of the
application app.development-preload
.You can add code here that
you want to execute before the application initializes in development
mode.
Tests are in src/test
. Any test namespace ending in -test
will be auto-detected.
src/test
└── app
└── sample_test.cljc spec runnable by client and server.
You can write plain deftest
in here, and it is preconfigured to support the helper macros in fulcro-spec
as well.
Typically you’ll just run your tests using the editor of choice (e.g. Run tests in namspace in IntelliJ).
The tests are also set up to run with Kaocha at the command line for your convenience and CI tools:
$ clj -A:dev:clj-tests --watch
See the Kaocha project for more details.
The tests can be run in any number of browsers simply by navigating to the test URL that shadow-cljs outputs.
CI support is done through the ci-test
build in shadow, and via Karma.
If you start the ci-tests
build in Shadow-cljs, then you can also run cljs tests in a terminal "watch mode"
with:
npx karma start
Of course, this make CLJS CI easy:
npx shadow-cljs compile ci-tests
npx karma start --single-run
Workspaces is a project by Nubank that is written in Fulcro, and has great support for developing in Fulcro. It is similar to devcards but has a more powerful user interface, integration with Fulcro Inspect, and much more.
The source directory for making additions to your workspace is src/workspaces
.
Important
|
Any namespace ending in -ws will be auto-detected and added to your workspace!
|