Kanban board in one HTML using localstorage
github.com
github.com
It is something I wrote for my own use after looking at all existing options and finding them not to my liking. This is pretty much a weekend hack, it is from 2019 and it's still close to what I need. When I have time I plan to improve keyboard support, add color tags and archiving of completed items. It will also be redone to not use localStorage and to support a remote storage option. Shared use (with 2+ instances working with the same copy of the data) is also something that I'd like to do, but that's on a back burner.
The Show HN post from 2019 - https://news.ycombinator.com/item?id=20077177
Should be pretty easy, local-first, and allow synchronous as well as asynchronous collaboration and syncing. Even p2p over LAN, webrtc or whatever (I'm unsure how to do local peer discovery in a web browser, on the desktop you'd simply use link-local multicast/avahi (DNS-SD)).
With respect to embedding source code - you can wrap it in "pre" and "code" tags, I believe. But are you referring to executing a source block as you might in org-mode? You can also jam whatever custom CSS you want into the https://logseq.com/#/file/logseq%2Fcustom.css file to render code the way you would like.
The Discord channel is also extremely active and the dev team is on there all the time. I am old so I find this all very confusing but they have definitely helped me out several times - https://discord.gg/KpN4eHY
I am a pretty basic user of this, but if there is anything else you want to know, please ask.
Love it. I love the minimalism. It just fits my use case so well. I just tried it and it just works with no fuss.
I love the style as well.
In the same spirit of Kanban, I had built an offline-first personal Kanban app - https://brisqi.com
Initially I built it for myself but I decided to put it out there for folks who were looking for an offline Kanban app.
I am not sure having everything in a single HTML file is any feat though. You can of course compress all your JS deps and CSS to a single HTML file, but it's not very cache efficient if your content is dynamic on the HTTP level.
Targeting raw DOM without jQuery might be actually possible these days though, but they're not doing it.
This bears repeating. By this logic all projects, including convoluted React SPAs, are just a bundled away from claiming they are a single-HTML file project.
Anyways also as a self plug: I recently wrote a quick little dom library [2] (that is not published and only exists on a single code sandbox [doesn’t even have a license yet]) it’s in the file dom-lib.js. I made it in the last two days that people could look at just to see how you might go about writing a small framework that rerenders an app from top to bottom each time. Super unperformant and without optimizations. Well you can take a look, but don’t assume it’s anything more than two days work and some old code that I had laying around to help me traverse an object. I definitely don’t recommend adopting it or anything especially for production, but it works well enough as a lower-level dom library for the moment and I might make something more of it at some point (Be careful of XSS and understand that when something is assigned to .innerHTML, like the second parameter of the El function, then it should not contain user input. User input is what the third parameter of El is for.)
[1]: http://youmightnotneedjquery.com/ [2]: https://codesandbox.io/embed/example-plain-js-app-u6ce7?code...
[0] https://developer.mozilla.org/en-US/docs/Web/API/IndexedDB_A... [1] https://caniuse.com/indexeddb
Code of bookmarklet:
javascript:(function() { var backup = {}; for (i = 0; i < localStorage.length; i++) { var key = localStorage.key(i); var value = localStorage.getItem(key); backup[key] = escape(encodeURIComponent(value)); } var json = JSON.stringify(backup); var base = btoa(json); var href = 'data:text/javascript;charset=utf-8;base64,' + base; var link = document.createElement('a'); link.setAttribute('download', 'backup.json'); link.setAttribute('href', href); document.querySelector('body').appendChild(link); link.click(); link.remove();})()
Perhaps re-read the statement. ;-)
But subscription based.
Only if you need syncing to cloud with end-to-end encryption then you'd need a subscription.
Only if you need to sync with other devices then you can choose to do so by getting a subscription, but it's not a requirement to use the app at all. It only syncs your data to cloud if you're signed in and have a subscription, otherwise it doesn't.
There is a long list of task/project management adaptions, including more kanban implementations, here: https://dynalist.io/d/zUP-nIWu2FFoXH-oM7L7d9DM
[1] https://ibnishak.github.io/Tesseract/projects/tekan/Tekan.ht...
[0] https://akhater.github.io/drift/
[1] https://groups.google.com/g/tiddlywiki/c/GRkskZRzj_o/m/M0QVJ...
Are you just hosting this on a VPS?
Of course the problem is coming up with a good syncing model. However I think even something simple would be good enough. This of course leaves the complexity to the app but we can let libraries step in until we find something that works well then consider standardizing that.
There are of course limitations with this model (you can't do inter-user logic like "friends") and for "sharing" you need another solution. (However this solution only needs to deal with "public" data).
I think the biggest problem though is that people will try to use it for tracking. But it would be super useful.
I had this same problem for my own app[0], I ended up solving it by just using dynamodb in my personal AWS account as the storage. Generous free tier, great uptime, and no users, security, etc to manage for me, like you mention.
It's way more technical than I'd like of course, since anyone who wants to use it needs to have a personal AWS account. And it isn't "synced", like you say, it's just using the AWS JS SDK to speak to dynamodb directly. But still it's been a real pleasure to build a web app this way -- the fact that anyone can use the app by plugging in their own storage is kind of the web development holy grail IMO, really interested in seeing what else can be done in this space.
I definitely don't want users to need to set up their own database. Ideally I could just publish a static website (or an HMTL file) and users can use their own synced storage.
It can sync browser db to remote database.
HTML is a document format. It defines the CONTENT of a webpage. That it has an API or is usually styled is secondary. The semantic tags– as used here, as used to STORE DATA here– are what make it possible to build a kanban solution so easily.
HTML is also a data format. It can be styled through the use of CSS.
That said, I'm interesting in that DSL, care to link it/talk more about it?
Open a typical modern website– you'll see a horrible mess of divs. People using very large amounts of HTML to do what should be very simple tasks. People writing complex JavaScript and React and SPAs instead of simply writing HTML. This is a case of people doing what should be done in HTML, in JavaScript.
> That said, I'm interesting in that DSL, care to link it/talk more about it?
view-source:https://wwwperiodictable.surge.sh/
I see where you are coming from but people embedding static content in a scripting language doesn't make HTML a programming language. Yes, it can be used for more than what it is used for right now, but you can't "program" in HTML. You can indeed build state machines in CSS but still...
(obviously you also know this, but it could confuse people starting new)
https://swapped.cc/#!/personal-mark
This "personal mark" seems to be encapsulated well in this kanban board. Bravo!
I'ts on my to-do list, but life always puts aonther thing on top of that :-)
That said, if you will get to the point of doing anything with an aim of submitting a pull request - do ask me first. Chances are that it will take a very long time to accept the request, because that too requires a weekend to review.
As I'm often developing on my laptop while being on 2G slow, this extension is offline-ready and automatically synchronizes the issues once visiting the /issues URL of an online repository again.
I posted it a while ago but I thought nobody was interested in something like this? [2]
No frameworks, no compilers, it's FAST as hell, and you can view source and learn exactly how it works.
For self-hosted personal Kanban board with persistent DB storage and potential shared access, I've had good experience with Kanboard, https://kanboard.org/ , I'm running on a DO droplet with Nginx (or Apache) & MySQL.
One can also access the board via an JSON RPC android app, GNU GPL 3.0. https://f-droid.org/en/packages/in.andres.kandroid/
Kanboard is distributed under MIT, needs a web-server, database and php. For DB: Sqlite, Mysql/Postgres, others.
Requirements here: https://docs.kanboard.org/en/latest/admin_guide/requirements...
If you want to run it on your local machine, a LAMP / LNMP / *nix, php & DB setup (or just use docker, one command install) is quite fast and convenient. Kanboard is not as elegantly minimalist as the parent-linked-project, but since there were requests for self-hosted Kanban solutions with persistent storage and possibly web-access, I decided to share my experience. Kanboard works well for me and mobile access has been handy.
Archive link to previous discussion on Kanban & HN https://news.ycombinator.com/item?id=22888734
Exclusive use of jQuery, not using browser drag and drop (manually edits element position), using JS to animate and fade/transition instead of CSS, etc.
Is localStorage the only modern/HTML5 concept being used?
What's wrong with any of these?
I get that you may not personally want to work on a project like this, but as a tool you either use or don't, what does it matter whether localStorage is the only "modern" concept being used?
Not saying this to be polemic, I would genuinely like to know why as programmers we're always so critical of each others' tools.
i just learned of it from this comment. cool!
But in general, I agree!
Kanban has branched into so many different directions from the original, since people feel inspired to create their own boards. The double column approach may have its own advantages. What bothers me is when tools layer on more functionality that interfere with the basic act of moving items between columns. The last iteration of Microsoft’s kanban tool wanted you to set status by right clicking and coloring. By clicking done the task would vanish from the board. In their conception of kanban the columns were only for categorization and not for a process.
I've gotten into this myself. I made a couple of (actually) single file web apps for navigating/viewing videos on a web server, or Markdown on a web server.
I don't need board/list management so I made simplified version with a fixed HTML structure, only the notes are dynamic. Also uses localStorage, browser drag & drop and single file without dependencies. Pretty fun exercise in building small single page applications with just JS. Thanks for the idea OP!
I wonder, for offline apps like this, how would you organize the data, like e.g. backing it up, synchronize to other PCs, just making sure that you don't accidentally loose it? I wouldn't quite trust localstorage. Maybe only temporarily.
In Japanese Kanban means : signboard; sign; billboard; hoarding; doorplate
RAS syndrome, which itself and "IT technologies" are an example, only concerns about a single word in both abbreviated and unabbreviated forms.
[1] https://en.wikipedia.org/wiki/List_of_tautological_place_nam...