├── .gitignore ├── .dockerignore ├── Dockerfile ├── app ├── extras │ ├── Barlow-Medium.woff │ ├── Barlow-Regular.woff │ └── jquery-1.8.3.min.js └── index.html ├── docker-compose.yml ├── .github └── workflows │ └── image.yml ├── LICENSE └── README.md /.gitignore: -------------------------------------------------------------------------------- 1 | **node_modules** -------------------------------------------------------------------------------- /.dockerignore: -------------------------------------------------------------------------------- 1 | **node_modules** -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | ARG arch= 2 | FROM ${arch}nginx:1.18.0-alpine 3 | COPY ./app /usr/share/nginx/html -------------------------------------------------------------------------------- /app/extras/Barlow-Medium.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rsoper/nullboard/HEAD/app/extras/Barlow-Medium.woff -------------------------------------------------------------------------------- /app/extras/Barlow-Regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rsoper/nullboard/HEAD/app/extras/Barlow-Regular.woff -------------------------------------------------------------------------------- /docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: "3" 2 | services: 3 | nullboard: 4 | image: richardsoper/nullboard:latest 5 | ports: 6 | - "80:80" 7 | container_name: "Nullboard" 8 | -------------------------------------------------------------------------------- /.github/workflows/image.yml: -------------------------------------------------------------------------------- 1 | name: Build multi-architecture images 2 | 3 | on: 4 | push: 5 | branches: master 6 | 7 | jobs: 8 | build: 9 | runs-on: ubuntu-latest 10 | steps: 11 | - name: checkout code 12 | uses: actions/checkout@v2 13 | - name: install buildx 14 | id: buildx 15 | uses: crazy-max/ghaction-docker-buildx@v1 16 | with: 17 | version: latest 18 | - name: login to docker hub 19 | run: echo "${{ secrets.DOCKER_PASSWORD }}" | docker login -u "${{ secrets.DOCKER_USERNAME }}" --password-stdin 20 | - name: build the images 21 | run: | 22 | docker buildx build --push \ 23 | --tag richardsoper/nullboard:latest \ 24 | --platform linux/amd64,linux/arm/v7,linux/arm64 . -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | +-------------------------------------------------------------+ 2 | | | 3 | | Nullboard, a minimalist kanban board | 4 | | https://nullboard.io | 5 | | | 6 | +-------------------------------------------------------------+ 7 | 8 | LICENSE 9 | 10 | The 2-clause BSD license with the Commons Clause condition. 11 | 12 | IN SHORT 13 | 14 | You can use, change and distribute the software free of charge 15 | provided that you do not sell it or make money off it in 16 | certain less direct ways as specified below. When distributed, 17 | the software must include a complete copy of this license. 18 | 19 | IN FULL 20 | 21 | The Software is provided to you by the Licensor under the 22 | License, as defined below, subject to the following condition. 23 | 24 | Without limiting other conditions in the License, the grant of 25 | rights under the License will not include, and the License does 26 | not grant to you, the right to Sell the Software. 27 | 28 | For purposes of the foregoing, "Sell" means practicing any or 29 | all of the rights granted to you under the License to provide 30 | to third parties, for a fee or other consideration (including 31 | without limitation fees for hosting or consulting/ support 32 | services related to the Software), a product or service whose 33 | value derives, entirely or substantially, from the functionality 34 | of the Software. Any license notice or attribution required 35 | by the License must also include this Commons Clause License 36 | Condition notice. 37 | 38 | Software: Nullboard 39 | License: The 2-clause BSD License 40 | Licensor: Alexander Pankratov / swapped.ch 41 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Nullboard 2 | 3 | Nullboard is a minimalist take on a kanban board / a task list manager, designed to be compact, readable and quick in use. 4 | 5 | https://nullboard.io/preview 6 | 7 |  8 | 9 | The name also happens to abbreviate to [NB](https://en.wikipedia.org/wiki/Nota_bene), which I think is a nice touch. 10 | 11 | ## Run with docker 12 | 13 | Run Nullboard in a docker container using `docker-compose up -d`. The image is now available on docker hub. 14 | 15 | ## Dead simple 16 | 17 | * Single-page web app - just one HTML file, an ancient jQuery package and a webfont pack. 18 | * Can be used completely offline. In fact, it's written exactly with this use in mind. 19 | 20 | ## Locally stored 21 | 22 | * All data is stored locally, for now using [localStorage](https://developer.mozilla.org/en/docs/Web/API/Window/localStorage). 23 | * The data can also be exported to- or imported from a plain text file in a simple JSON format. 24 | 25 | ## Beta 26 | 27 | Still very much in beta. Caveat emptor and all that. 28 | 29 | ## UI & UX 30 | 31 | The whole thing is largely about making it convenient to use. 32 | 33 | Everything is editable in place, all changes are saved automatically and last 50 revisions are kept for undo/redo: 34 | 35 |  36 | 37 | New notes can be quickly added directly where they are needed, e.g. before or after existing notes: 38 | 39 |  40 | 41 | Notes can also be dragged around, including to and from other lists: 42 | 43 |  44 | 45 | Nearly all controls are hidden by default to reduce visual clutter to its minimum: 46 | 47 |  48 | 49 | Longer notes can be collapsed to show just the first line, for even more compact view of the board: 50 | 51 |  52 | 53 | The font is [Barlow](https://tribby.com/fonts/barlow/) - it's both narrow *and* still very legible. Absolutely fantastic design! 54 | 55 |  56 | 57 | Notes can also be set to look a bit different. This is useful for partitioning lists into sections: 58 | 59 |  60 | 61 | Links starting with https:// and http:// are recognized. They will "pulse" on mouse hover and can be opened via the right-click menu. 62 | 63 |  64 | 65 | Pressing CapsLock will highlight all links and make them left-clickable. 66 | 67 |  68 | 69 | Lists can be moved around as well, though not as flashy as notes: 70 | 71 |  72 | 73 | The color theme can be inversed and the font size can be increased: 74 | 75 |  76 | 77 | Also: 78 | 79 | * Support for multiple boards with near-instant switching 80 | * Undo/redo for 50 revisions per board (configurable in the code) 81 | * Keyboard shortcuts, including Tab'ing through notes 82 | 83 | ## Caveats 84 | 85 | * Written for desktop and keyboard/mouse use 86 | * Essentially untested on mobile devices and against tap/touch input 87 | * Works in Firefox, tested in Chrome, should work in Safari and may work in Edge (or what it's called now) 88 | * Uses localStorage for storing boards/lists/notes, so be careful around [clearing your cache](https://stackoverflow.com/questions/9948284/how-persistent-is-localstorage) 89 | 90 | You spot a bug, file an issue. 91 | 92 | ## Dockerized version 93 | 94 | See [this fork](https://github.com/rsoper/nullboard). 95 | 96 | ## Background 97 | 98 | Nullboard is something that handles ToDo lists in the way that works really well. For *me* that is. 99 | 100 | Tried a lot of options, some were almost *it*, but none was 100%. 101 | 102 | **Trello** wasn't bad, but never was comfortable with the idea of storing my data in cloud without any actual need. 103 | 104 | **Wekan** looked promising, but ultimately too heavy and had no offline usage support or a local storage option. 105 | 106 | **Things** was beautiful, but not the right tool for the job. 107 | 108 | **Inkscape** - I kid you not - with a laundry list of text items was actually OK, but didn't scale well. 109 | 110 | Ditto for the plain **text files**. 111 | 112 | Pieces of **paper** were almost there, but rearranging items can be quite a hassle. 113 | 114 | So finally got annoyed enough to sit down and write exactly what I wanted. 115 | 116 | And, voilà, Nullboard came out => https://nullboard.io/preview 117 | 118 | ## License 119 | 120 | The [2-clause BSD license](https://opensource.org/licenses/BSD-2-Clause/) with the [Commons Clause](https://commonsclause.com/). 121 | 122 | That is, you can use, change and re-distribute it for as long as you don't try and sell it. 123 | 124 | ## Updates 125 | 126 | Primary feed is through [@nullboard](https://twitter.com/nullboard) on Twitter. 127 | -------------------------------------------------------------------------------- /app/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 |
4 | 48 | 49 || t |