This is the official repository of the schnaq project. We are constantly working on improving the platform and adding new features. Please feel free to contribute to the project by opening issues or pull requests.
Find the project at https://app.schnaq.com
We are working on a minimal version of schnaq without the dependencies to external systems (e.g. Stripe or CleverReach).
The dev-Setup has different parts for Backend and Frontend. Please make sure to
include the dev
alias when starting a REPL, e.g. clj -M:dev:run-server
.
We are using datomic pro
as our database, which can be used during development and testing.
Get a fresh license for datomic pro starter via this URL: https://my.datomic.com/
Then, after registering visit: https://my.datomic.com/account.
Follow the instructions to set your ~/.m2/settings.xml
server to contain credentials for my.datomic.com.
You will need to create a new account after one year.
Go to https://my.datomic.com/account and copy the wget
command with the desired version.
Execute it in the schnaq folder and name it datomic-pro, or wherever you desire.
- unzip
- Enter your license-key into the datomic-pro/dev-transactor.properties (Copy it over from datomic-pro/config/samples/dev-transactor-template.properties)
Start the transactor to dev with: bin/transactor dev-transactor.properties
.
To connect to a database, provide the proper connection string. You can find the connection string when starting your datomic instance.
We put the connection string into the project's environment variables and build them into the Docker image.
The connection string from us is a format string.
We replaced <DB-NAME>
with %s
.
Set your database in the config namespace.
Start the backend-server with one of these two options:
With REPL
Start the run configuration "CLJ REPL" and execute the -main
method in
schnaq.api
.
To do this manually, you can put the following commands into the REPL in IDEA:
(require '[schnaq.api])
(schnaq.api/-main)
Without REPL
clj -M:run-server
on the terminal
The Frontend works with shadow-cljs for hot code reload.
- Run
yarn install
to get javascript dependencies. - Run
clj -M:frontend:dev
to compile the cljs and start the watcher. - Shadow-cljs starts a nrepl-server.
You can connect to localhost and the port output to the
.shadow-cljs/nrepl.port
file. - In the opened CLJ REPL you can execute
(shadow/repl :app)
to switch to the hot development REPL for CLJS.
To automatically create the stylesheets, enable a file-watcher for the public/css
directory.
In the html we use the minimized version.
So be sure to add --style compressed
or similar as an option to your sass command.
Sample command:
sass --watch ./resources/public/css/main.scss ./resources/public/css/main.min.css --no-source-map --style compressed
If you want to lint the style locally, you need to run yarn install --dev
to install stylelint.
Then just execute yarn stylelint "public/css/*.scss"
in the project root.
Run clj -M:test
Run a single test or test namespace clj -M:test --focus [namespace]/[function-name]
E.g.: clj -M:test --focus schnaq.api-test/update-meeting-test
Run:
yarn shadow-cljs compile test
node target/test/compiled/test.js
Purgecss will be installed as a dev dependency. You can run the following command from the schnaq route to find unused css in the app. (Build the app once before)
yarn purgecss -c purgecss.config.js
This outputs all unused css classes.
In the process of optimizations, the function names are reduced to a couple of
unpredictable characters. Sometimes, when doing JavaScript-Interop, these
functions are no longer accessible (e.g. when calling (.getWritable this)
).
This can also happen to fields / constants, which are renamed during the
compilation.
To avoid errors, use the oops library,
especially oget
, ocall
, and oset
(there are more useful functions).
We use the google closure compiler collection to build minimized and optimized code. Sometimes, in the minified version, the resulting code contains problems, e.g. unresolvable functions. To debug this efficiently, use the following command to prepare a production build with debug information:
yarn shadow-cljs release app --debug
Serve the assets then via an nginx. You can pick the nginx-configuration from the root of this repository, e.g. with this call:
docker run -it --rm -v $(pwd):/usr/share/nginx/html -v $(pwd)/nginx/schnaq.conf:/etc/nginx/conf.d/default.conf -p 8888:80 nginx
This code and all management code belonging to the schnaq repository is published under the AGPL 3.0 (GNU AFFERO GENERAL PUBLIC LICENSE Version 3)