Vinland To Do App
August 30, 2024 ยท View on GitHub
Demo: create and manage To Do lists
This application is an example of the Vinland web framework.

Features:
- Register an account: claim a unique username and set a password
- Sign in
- Create and delete To Do lists
- Create, delete, and mark complete/incomplete tasks within each To Do list
- Demonstration of setting and removing non-session cookies
- Sign out
Technologies:
- Server: woo
- Database: rucksack (Lisp object persistence)
- Framework: vinland
- JavaScript libraries: Hotwire Turbo and Stimulus, Shoelace web components
Tested on SBCL.
Installation
It is strongly recommended to use Qlot to manage the project dependencies.
Once you have Qlot installed, clone this repository and install the dependency versions specified in qlfile.lock:
qlot install
Build
After installing dependencies with Qlot, build the program by running:
qlot exec sbcl --eval '(asdf:make :vinland-todo-app)'
The binary is written to ./bin/todo-app.
The application writes Rucksack data to /tmp/todo-app.
Run
./bin/todo-app start -p 8080 -a 0.0.0.0 -w 4
Development
Woo is used as the server when starting the application from the generated binary (see: src/cli.lisp).
You may prefer to start the server from the REPL using clack, which allows for specifying Hunchentoot or another alternative server backend.
Start a REPL, using the Qlot-installed dependencies:
rlwrap qlot exec sbcl
Start the server:
(ql:quickload '("vinland-todo-app" "clack"))
(clack:clackup todo-app/app:*app* :port 8080 :server :hunchentoot :use-default-middlewares nil :debug nil)
Troubleshooting
To clear the Rucksack database, delete the directory /tmp/todo-app.
Contributing
Not accepting PRs to this repo, but feel free to open an Issue on GitHub if there's a problem.
Dependencies
- cl-bcrypt
- clingon
- com.inuoe.jzon
- foo.lisp.lack-middleware-charset
- foo.lisp.lack-middleware-debug
- foo.lisp.lack-middleware-errors
- foo.lisp.lack-middleware-head
- foo.lisp.lack-middleware-http-methods
- foo.lisp.lack-middleware-redact
- foo.lisp.lack-middleware-redis
- foo.lisp.lack-middleware-request-id
- foo.lisp.lack-middleware-security-headers
- foo.lisp.lack-middleware-user
- foo.lisp.lack-session-store-redis-pool
- foo.lisp.vinland
- frugal-uuid
- lack
- lack-middleware-session
- lack-middleware-static
- local-time
- make-hash
- rucksack
- safety-params
- spinneret
- trivia
- woo
Tests
JavaScript
Author
- John Newton
Copyright
Copyright (c) 2024 John Newton
License
Apache-2.0