I’ve been a paying Todoist customer for many years. For some reason, they steadfastly refuse to introduce blocking/blocked by flags.
It seems so strange to me to do all the hard work of allowing arbitrarily nested projects and tasks, sub-tasks, labels, complex filters and collaboration, but then not do dependencies. Imo dependencies is the big difference between something you can use on complex projects, and a “mere” to-do list - even one with nested projects, labels, filters, whatever.
I thought that perhaps I wanted a Gantt chart tool and spent a couple of months going down that route. At least in my experience, though, what I actually wanted was just some way to establish a DAG - I didn’t even necessarily need a way to visualise it, just the ability to group and filter on it.
Vikunja looks interesting - open source, self-hosted and supports dependencies/relations. No iOS mobile client at this time, though.
This. To me, it seems like a weird market blind spot. Most of the tools in this space can't even do a proper tree - typically they limit you to 2-4 levels, like "project", "task", "subtask" and "checklist". The few that don't, stick to the tree model, even though work naturally structures itself into a DAG.
From the other end, I know MS Project has pretty much all the things you need, but has questionable UX, is quite buggy (I've personally managed to brick it after running auto-scheduling on a project with ~20 tasks...). There probably exist tools with the correct representation, perhaps even better UX - but I've never heard of any. Neither did a project manager I know, in a decades-old company with well established "classical engineering" culture, which includes all the PMBOK-related concept space.
And if I'm doing my semi-regular project management rant once again (a subset of more general ranting that, on Mastodon, I started to tag as #ItsAGraph, #NotATree), let me pile on some extra wishlist items: counterfactual modelling, conditionals, probabilities. That is, expressing the idea that there are alternative strategies to pursue, and which one to take depends on information available only partway through the project.
I made Recall[0] which is all about this. Managing tasks using a tree structure (like folder/files, no level limit). And dependency representation with DAG graphs. Give it a try, you might like it.
Unfortunately the project is currently paused since i can't figure out how to make it work financially (you can still use it though). The space is really crowded and most people don't really think about dependencies, so it's quite a hard sell.
I might open-source the project and continue with it in the near future but I'll need some validation that the tool is useful before I commit to that. So if you do like it, I'd love to have a chat :)
I wonder if there's a site where someone trying to work out whether to continue a business could post how much money they would accept to instead open source it, and then that amount could be crowdfunded by its users, or just people (this would be me in this case, I guess) who aren't current users but think it looks like it would be a valuable contribution to the world.
Oh, epic! While I do agree that most things that are modeled as yes are conceptually actually graphs, maybe my standards are lower/I just use worse software - I'd be very happy to get more trees. My typical rant topic is "just give me a damn tree". The worst offenders regarding this I can think of are note apps with their weird "notebook", "chapter","page" concepts rather than just letting me choose the depth of nesting I need.
I feel the pain. So much software doesn't even expose a proper tree, much less a DAG. But that seems to be improving somewhat - I see trees in software more often. I just worry I'll retire before the ecosystem makes the cognitive jump to start implementing/exposing DAGs.
> I can think of are note apps with their weird "notebook", "chapter","page" concepts rather than just letting me choose the depth of nesting I need.
Exactly! And then you end up using "outliner" software for this, and then people are surprised that you need rich text capabilities in it. In reality, what's needed is to combine both, to get a note-taking app with arbitrary nesting levels.
> This. To me, it seems like a weird market blind spot. Most of the tools in this space can't even do a proper tree - typically they limit you to 2-4 levels, like "project", "task", "subtask" and "checklist". The few that don't, stick to the tree model, even though work naturally structures itself into a DAG.
I did wonder that myself. But having tried implementing, I'd wager that deep many-to-many parent-child relationships are not directly visible more often is because no one has figured out good paradigms [1] to surface the functionality in a way that users would want to use most of the time (witness MS Project) versus the alternative tags, saved search, etc approaches.
[1] It's a fairly chunky challenge. Consider for example, what happens, and how is it presented to the user during the simple operation of removing an item. What happens when it has multiple parents? What about if it also has child dependencies? What about if some of those children have different ancestors? And it must be undoable and also needs to be usable on the limited screen estate of a mobile phone? ...
> I'd wager that deep many-to-many parent-child relationships are not directly visible more often is because no one has figured out good paradigms [1] to surface the functionality in a way that users would want to use most of the time
I suspect that might be a big part of the reason. I believe [0] that one big change that happens when you "upgrade" from a tree to a DAG is that you lose the ability to visualize your model in a compact and direct plaintext form
Sequences you can print an item per line, or separate by commas. Trees you can visualize with indentation, possibly decorating with some form of arrows. But DAGs seem to require you either use indirect references[1] (or duplication, which is just a more verbose and limited form of references), or give up and start drawing arrows and boxes. There's a qualitative jump in difficulty here - you (or rather, the software) needs to start thinking about layout, which is pretty much a non-issue with trees.
The biggest problems are with the evolution of the data structure. Trees and sequences don't "jump around" when you add or remove single nodes - edits cause, at worst small local rearrangement, and the rest of the tree is shifted to make/take space. DAGs are the first stage in this "from sequences to graphs" progression at which any single edit could force you to re-layout the entire visualization to keep it readable.
I have one nit though:
> And it (...) also needs to be usable on the limited screen estate of a mobile phone?
This is true now, but it wasn't true just a few years ago. Where are all the products from the last decade, that didn't have the "design for smartphones" constraint?
--
[0] - I strongly suspect this to be a mathematical fact, but I haven't encountered a proof of it.
[1] - If you want to keep parents next to their children, you're almost always forced to start doing things like:
... which kills readability, as now the reader has to keep a cache of those labels and dereference pointers in their head. If, instead of references (like #1#) you just duplicate the node (e.g. write "Parent1" again), the reader still has to keep a mental map of which nodes are represented multiple times in the text, and which are just similarly named.
Skimming through their Wiki, it looks like a tree-oriented outliner with a link graph - i.e. a similar model to what Roam, Obsidian, Logseq or org-mode (especially when paired with org-roam) offers.
This is as close as I've seen graphs at the UI level to hit mainstream, and the extreme hype generated around this class of tools (and Zettelkasten) when Roam showed up was interesting to watch - people reacted to this as if it was pure magic.
I had a quick look at demo and dependencies are here, which is, as you mention, good and rare.
I don't want to steal the thread (lets focus on Vikunja), but I currently use Obsidian and am trying to achieve DAG with creating taxonomies using some extra plugins like Dataview and Breadcrumbs. It's basically `markdown notes connected`, which allows lots of freedom in creating such taxonomies. It is still not easy to visualize it all the way I imagine it. I would really like to have it visualized after all, think seeing it all visualized (and even being able to work directly with it) helps a lot.
For me it is a big step from not-so-useful lists of tasks... simple lists of tasks are simply useless for me.
I had exactly the same thought on the DAG structure and tried to create it in Obsidian using some linking magic but found it really clunky, currently working on making something myself using CRDTs, probably not for a wider audience though.
For what it's worth, I've also come across this problem - so I made my own solution.
I call it Mondage [0], it looks like a plain todo list app, but lets you drag tasks on top of each other to set dependencies.
Tasks you can do first get sent to the top. Everything else is shown underneath.
I like graph views to get an overview, but when I'm in the weeds, a list is what I want.
The web version is live, I have Android and iOS clients built too, but only in beta release. With enough interest, I'll add full scheduling and other features, but for now, I'm keeping it simple and free. It's a little rough around the edges, but hopefully someone else can find it useful too.
The space is astonishingly crowded, and while that makes things hard to stand out or get noticed, it suggests to me that no one has properly solved this sort of problem - or that it's too personal to solve properly.
Do you feel like it's enough to have the system allow for annotation (and maybe visualisation) of the blocking relation? Or would you also want to have a way to let it enforce that relation so that the blocked task cannot be completed until its parent is done?
Couldn't you have one main task which describes the overall task and then it has a list with checkboxes that has links to the other tasks it depends on?
When one subtask is done, you check it off.
"Ideally then, given all these tasks and their dependencies, what should I work on next?"
I doubt a system can automatically propose the ideal task to work on anyway. There will be many tasks equally important and which are blocking another main task. So you would anyway have to select something by hand.
And if you would be presented with only one task to do right now, it might not be a suitable task for other practical reasons which cannot be specified using dependencies, priorities, schedules etc.
If the system gets too advanced it gets in the way more than helps. Personally I think it's better to regularly and manually walk through the list and update priorities, texts, task states, dates etc as things progresses and changes. And then you get a good overview picture of your project in the back of your head.
> Couldn't you have one main task which describes the overall task and then it has a list with checkboxes that has links to the other tasks it depends on?
That only works for trees of tasks, ie. when a task is a dependency of at most one other task.
Imagine you have two high-level tasks: "repair the chair" and "repair the computer", which both depends on the task "buy a screwdriver". Without support for DAGs of tasks, you would need a "buy a screwdriver" bullet point in both tasks, and remember to check both after you buy it.
In that case I would have created a task "buy a screwdriver" with a relatively high priority or scheduled before the other tasks and maybe link to or comment about the other tasks as motivation to why the screwdriver is needed.
In practice, when using basic to-do apps like the one mentioned here for simpler projects such as re-build the living room or a one-man software project or just some around-the-house projects then I think a DAG is a bit overkill and complicated. You would also need to remember to connect the screwdriver dependency to any new task that depends on it and also avoid creating a new duplicate "buy screwdriver" task as you did not know/find the already existing one.
For projects such as "build the next generation 747", for sure something DAG like is needed.
> In practice, when using basic to-do apps like the one mentioned here for simpler projects
The problem is, a big chunk of the software industry seems to be managed by basic to-do apps like Trello (or worse, Github/Gitlab issues).
> such as re-build the living room or a one-man software project or just some around-the-house projects then I think a DAG is a bit overkill and complicated
It depends on a project. In my experience, "overkill" manifests primarily as you spending too much time constantly tweaking the task graph. There's a point past which it's better to stick to a tree, or even a flat list, and use your own memory and common sense to manage dependencies. This is, however, affected by UX to a large degree - the easier and faster it is to "sculpt" the DAG, the smaller are the minimal projects for which this is better than a list + some extra cognitive effort.
With personal/single-person projects, I found that DAGs become more and more useful the more different aspects of it you have to track, and the greater the length of the project is. For adding a simple feature to a codebase DAGs are definitely an overkill. But for remodeling an apartment, or even "re-building the living room", it's a different story: this is the kind of project that has lots of independent concerns, requires ahead-of-time planning and thinking of contingencies, and will take months of you being involved an hour or three a day on average. You're not going to be "in the flow" in such project - you'll be re-entering it every day. DAGs help you understand the current state quickly, and prevent getting overwhelmed by the sheer size of it.
Though the most important thing I've learned so far is: don't overdo it. You probably don't need a 100+ nodes large DAG for remodeling a living room. Not because it's wrong, but because any new information, situation or realization will force you to remodel a part of the DAG, and you'll end up spending more time keeping the plan up to date than on the actual project itself.
This looks brilliant, seriously. All oss trello/todoist alternatives are either hard to use, or missing features, this looks like it has it all. Even a backend in go. On my todo list of things to try.
Funny. I just stumbled upon this yesterday. The only thing that I wish to see improved is having the backend serve the frontend from the same docker container. It's a bit of a hassle to use nginx as a proxy in the docker compose setup (or in fact set all of that up on my Synology NAS).
Initially I was also interested in this. There is the staticpath option in the backend config. You can point it to the directory of the frontend files. Theoretically, both the backend and the frontend could be served by the builtin webserver. Unfortunately, for this to work most frontend URLs must get rewritten/rerouted to /index.html and this does not seem to be implemented. Shouldn't be too complicated though.
By the way, thanks for creating this software. I especially like the clean split between the API server and the frontend. Interaction feels almost like a local application.
A mobile app is work in progress[1]. I am currently using the web interface which is quite usable on a mobile phone. Lists work quite nicely, also on smaller screens. I was using Kanboard previously and mobile usage was a bit too complicated.
CalDAV seems to be supported[2]. I have not tried it (yet).
Somewhat related to to-do apps, there was an application back in the classic Mac OS days that I remember (although I don't remember the name) which worked in a way I don't think I've seen since, but seems like a pretty reasonable approach to recurring to-do tasks.
Some repeating tasks have to happen on a fixed schedule, e.g. put the trash out every Tuesday night.
But many (most?) of my repeating tasks a) have quite a bit of wiggle room, and b) the scheduling of the next occurrence should be based on when I actually complete the previous occurrence.
So the way that application worked is you'd create tasks and say it could happen as early as this date, it would ideally happen on this date, and it must happen no later than this date. You'd also tell it the ideal time between occurrences. The "priority" of the task would automatically change as you move through that window of dates. When you mark the task as complete, the next earliest/ideal/latest dates would be based on the ideal time between occurrences.
Watering plants is a good example. Let's say I want to water my houseplants every 8 days. I could water them 7 days after I last watered them, but I could also be lazy and wait until 9 or 10 days. If I water on day 10, that doesn't mean I should water again in 6 days (which is what a strict 'repeat every 8 days' task manager would make me do); even though I'm "late" I still want to wait the ideal time until the next occurrence. [I'm just making this up, don't take houseplant care advice from me...although most of my plants live nice long lives.]
tl;dr: The ideal repeating task scheduling should allow for a window of time, not a specific day, in which a task should be completed, and the scheduling of the next window of time should be based on when I actually marked the previous one as complete.
- <2023-01-23 Mon +6d> - completing a task with such timestamp will move the time forward by 6 days. If you were supposed to do it 20 days ago, you'll have to complete it three times before it's no longer overdue (and becomes scheduled to 4 days from now, i.e. 4x6 - 20).
- <2023-01-23 Mon ++6d> - completing a task with such timestamp will move the time forward by however many 6-day increments it takes to get it at least 6 days ahead of now. E.g. if the task is overdue for 20 days, completing it now will make it due in 10 days (four 6-day increments are enough for the due date to be in the future, but you need an extra 6-day increment for due date to be at least 6 days in the future).
- <2023-01-23 Mon .+6d> - completing a task with such timestamp will move the due date to 6 days after today. If the task was 20 days overdue and you complete it now, the next due date is in 6 days.
These behaviors have some extra variations depending on whether the timestamp contains the hour/minute part, and on what unit is used for the increment - e.g. the difference between ++7d and ++1w is that the latter will ensure the task stays on the same day of the week as previously.
Taskwarrior [0] has different dates you can set that allow some of the features you want.
There’s a scheduled date (earliest date to work on task), wait date (hide task until date), due date (must be completed by date), until date (when to drop it since it’s too late to do now).
If none of those work you could create a user defined attribute for your desired feature [1].
The biggest problem with taskwarrior is taskd and its use of client certs to authenticate which prevents people just using lets encrypt with it and having to manage self signed certs.
Maybe not a great example? Isn’t watering plants a case where, with in reason, it really should tend towards a fixed interval? Isn’t the ultimate goal “10cc a day” or some such?
This is an exciting idea to me. I have fairly basic but specific wants for a mobile client that Things delivers on, but they don’t allow for collaborating.
I can see myself knocking out crappy Swift apps (iOS and watchOS) to share todos with only the features I really want with the ability to share lists with people.
Todoist is so close to being what I want but is still missing some key features, and to my detriment, has a million ways to try to optimize lists in ways I’ll get wrapped up in without really improving my systems. I love the idea of cutting down to the necessities.
That sounds like an excellent idea. Thanks for pointing me that way. I might repurpose the pi-hole for this and run these side by side. Not an expert here so in case you have some guidance or blogs to direct me to, please do.
I like EasyOrg [0] and enjoy using the Calendar view. I have been using it more or less daily for a couple of years now, mainly keeping track of personal projects. It's orgmode based.
Adds a bit more intelligence and structure than a regular text file which I used some years ago. I feel EasyOrg makes it a bit easier to work with the org-files than Emacs, but that's just my personal view, and it's also possible to switch between the two.
I love org-mode and have been using it for years now. However, these days I feel an increasing need for a mobile client and something that will give me intelligent reminders of things.
Last time I checked there was no sane solution for having org-mode on mobile that is in sync with your desktop. Yes, I did try Syncthing with Orgzly.
Moving tasks between days and weks can be done by simply updating the SCHEDULED timestamp.
Viewing can be done with orgzly or beorg or any mobile text editor. Same with editing. With orgzly or beorg you can use filters to create custom agendas.
I use orgmode mainly on desktop for project management. So not much use on mobile, but i use it for quick notes, some lists and sometimes to read my bogger project files.
Clean interface. Interesting approach. The demo account helps alot for a quick experimentation. Just the dark mode already makes this 10 times better than trello for me. Had a little bug when entering the settings screen where everything suddenly switched to russian.
I'm making a tool that's kind of like this one. Please keep that in mind, because I'm about to give a whole bunch of criticism here.
First things first, the UX and UI is really neat and there's lots of really good design and thought put into how fast the app is and how well it is handling a whole bunch of users. I was sitting in there with everyone in hacker news creating tasks and it was keeping up amazingly.
But my first impression using this is that it's going to need a lot more work on the depth of the features rather than the breath. It looks sleek and it's got lots of options on a task, but when you click through one of the options they are very bare bones. There is a depth of interaction that is missing.
One example, I click on the time to task option, and it gives me an option for repetition, but repetition comes in the form of day month or year. What happens if I want something to repeat every Tuesday, or every second month on the 5th? You just can't do it. You can repeat tasks, but because it's not powerful enough it's a system that's not going to be useful in a lot of cases. Taking my trash out happens every Tuesday. If I were to want to abandon my current system to use this app I would no longer be able to do that.
Another thing that struck me was the percentage/progress option. When I click the progress box I got a drop down list with increments of 10 which i could pick from. That was way less than I was expecting from a feature like that.
I have two criticisms here. The first is that I expected a progress system to be something of a system. Imagine having progress that is tied to the number of check boxes I've checked off, something that's not another manual thing that I have to click and keep track of.
But if it's going to just be a number entry, why is it only a number entry for progress? This could have been part of a bigger more powerful system that I can use to fit my needs. I'm not thinking "oh hey look I can keep it percentage", I'm more thinking "oh hey look I can't keep track of the amount of money I spent this week". Something as plain as a drop down with a bunch of numbers should never be a dedicated feature.
Percentage option doesn't hurt, but when you add little features like that instead of bigger systems, you're going to find that you get lots of people wanting to add new little features to fit their use cases. This will especially be true when the app is open source and everyone has the ability to go in and add that on their own.
Final criticism. There's a little bit of a disconnect in how you add a lot of stuff to a task. Take relations as an example. I click add relation, and nothing happens. I sit confused for a while, until I notice that the related tasks has already appeared in the main task window and now I need to click the plus in order to start creating a relationship.
All of those options in the right side bar which open items in the left sidebar could be in the left side bar from the start. When I click that button that starts the addition of relations to a task the app should start a process where I am now creating a relation, not popping up a new section. This way you have a direct connection between where I clicked to add a new thing, and the process for adding that new thing.
Everything I say here can be easily fixed, so it's not at all the end of the world. Don't take this as me saying the app is bad, but there are a lot of flaws here that make me hesitant to throw away what I've worked on.
> But my first impression using this is that it's going to need a lot more work on the depth of the features rather than the breath.
> but when you add little features like that instead of bigger systems, you're going to find that you get lots of people wanting to add new little features to fit their use cases.
Oh definitely. My method until this point was to build a bunch of stuff to a) have what I personally need and b) see what other people need. In this year the focus will be on going deeper on things that work and are actively used. The task detail UX is something like that which needs some work and something I'm not satisfied with. But I can wholly agree with what you said about lots of people wanting to add new little features.
> Imagine having progress that is tied to the number of check boxes I've checked off, something that's not another manual thing that I have to click and keep track of.
The progress option is indeed not great and is likely going away in the future. There is a little circle indicator on a task with the number of total vs done items on a task checklist, similar to how github does it. Is that what you meant?
> Taking my trash out happens every Tuesday. If I were to want to abandon my current system to use this app I would no longer be able to do that.
You can actually do that. It's just not as straight forward as you might think (and that's a problem): you'll need to create a task with a due date of next Tuesday and a repeating schedule of every week / every 7 days.
There has been a bit of debate recently about the repeating option lately with a few good points made so it's highly likely there will be changes to this in the future.
Regular user of Vikunja, it brings a lot of value to my life!
> It's just not as straight forward as you might think (and that's a problem): you'll need to create a task with a due date of next Tuesday and a repeating schedule of every week / every 7 days.
This is my complaint as well, if I have a task scheduled every Sunday and I'm ticking off this week's, I want that to disappear for a while until next week arrives. Currently it just doesn't go away.
Other suggestion points:
- Due time - There should by default be a reminder at the due time. I find myself setting a due date and then separately setting a reminder for it. Possibly a small checkbox with default-opt-in like `- [x] Remind?`
- Other reminder options - Email reminders are awesome, webhook reminders would also have been great. I had a WIP PR for that, but the design makes it slightly hard to have webhooks for absolutely everything (like created, updated etc events)
- Reminder UX - Reminders are there, but how can I know in advance which reminders are soon to go off? What if there was a small indication beside the task item like `Reminds in 3 hours`?
- Archive option - Oof, we definitely need this. Not all task items are executed successfully. If we mark Done / Delete a dropped/discarded task item, that's definitely lossy.
- Gantt chart - I find this not at all usable. I wish this had the Google Calendar like UX.
- Labels - In the Labels section, clicking a label should list down all the task items associated with it (O(1)). Otherwise, I find myself going to individual lists and applying filters (O(n)).
- Full text search - Since my life is on Vikunja, I'm waiting for this day when full-text search just works. I know there's an open discussion on the implementation of it.
- Templates - Templates would be nice to have. I use Vikunja to notify me (say) when a bond would mature - productivity would go ++ in these cases.
- Analytics - It'd be pretty cool to have a day-wise summary. It should tell me the task items I created today, items I moved to done etc. These stats/recap can give better insights into what's not being prioritized.
It's an OSS project, and I'd love to contribute to have these improvements in the product.
It's cool to hear from you and see you're planning on working on a lot of this.
> There is a little circle indicator on a task with the number of total vs done items on a task checklist, similar to how github does it. Is that what you meant?
Yes and no - yes in the sense that that's basically what I'm talking about, but no in the sense that when I saw that button I was looking more for "a system of progress" - a way to configure what counts as progress, maybe? A progress bar of some sort, with different ranges. Something which acts more of a customizable tool than a single input field.
Maybe something that lets you define weights to what counts as progress, or a number of days of work you expect things to take, or something of that form? This isn't so much me saying X feature is a good idea, but to describe what the mismatch was for me between expectation and result.
> you'll need to create a task with a due date of next Tuesday and a repeating schedule of every week / every 7 days.
Oof. I should have guessed that as a possibility. That's one of those fun workarounds you only get to know when you designed the system or get really invested in it and have to work around the flaws.
I used Crontab (and making it so that you can't open a template twice) to handle scheduling - putting a UI over it - it's been pretty darn good, but crontab also has some serious flaws in it - mostly around things like repeating tasks once every X > 5 days. For hourly/monthly/day-of-month and day-of-week, it works very well though.
> Out of curiosity, what are you building?
It's hard to describe or show because it's a personal project with no presence online. I'll focus on the differences from Vikunja. My system:
Focuses on repeating tasks first - it basically assumes everything inside of it will be a repeating task. I made the *mistake* of making "repeating templates" the first class citizen, so you don't create goals, you create templates and then use those templates to open up a "todo item".
Focuses on much "smaller grain" tasks - things that you might do multiple times a day. Lets say, getting up every 3 hours while you're at work.
It's more "building habit" focused than it is project focused. Scenarios for its use might be ensuring that you water your plants every day, and having the app force you to upload pictures of the plant in order to say "I'm done" - then you can go back into your history and see your plant grow over time. You might set up a task that will force you to sit quietly for 10 minutes every day. You might set up a list of exercises in one of the templates and the app will pull 2 random exercises every time that task cycles open.
Is mobile first, which is super important for day to day data entry. There are no left/right bar systems because I assume you're going to use it on your phone and it's designed to be responsive. It works on the desktop, but it's not designed for the desktop.
It's built around one-user. It wasn't built considering multi-user situations, although I want to be able to have that work as well - another mistake I've made creating it, because I'm going to have to redesign half the stupid thing to handle multi user scenarios and how to do permissions. Families and businesses will find this important, so it's a really really essential feature I just didn't bother with because I don't use it.
> This isn't so much me saying X feature is a good idea, but to describe what the mismatch was for me between expectation and result.
Gotcha. Thanks for the input!
> I used Crontab (and making it so that you can't open a template twice) to handle scheduling - putting a UI over it - it's been pretty darn good, but crontab also has some serious flaws in it - mostly around things like repeating tasks once every X > 5 days. For hourly/monthly/day-of-month and day-of-week, it works very well though.
Crontab sounds nice but I probably can't give that to someone who has never used it. Still like the idea to use it to handle repeating intervals though.
Your tool sounds nice. Like the sweetspot between "here's a thing I need to do regularly" and the usual habit trackers.
> Crontab sounds nice but I probably can't give that to someone who has never used it.
Oh, no no, it's used in the background and the interface is nothing like it. Let me send you a screenshot of what the editor looks like. Feel free to steal it.
First things first, I will probably not be using it (have a working solution for the time being).
I just wanted to check if AND works on labels (AKA tags), which is a pet peeve of mine. Unfortunately, labels are not working for me at all (I cant figure out how to access a single label to get list of tasks with this label, not to mention doing filtering with `label1` AND `label2`).
You can filter by label. There's currently no way to do this "on the fly" (which is probably what you're looking for) across lists but you can create a saved filter to search across everything.
I miss the days where app installation was just "unzip, edit the config file, upload to your web server and hit up the install page". Now it's all Docker and gulp and build and urgh soooo complicated.
I host tens of self-hosted apps for various purposes, including ones similar to this one, all via docker-compose. Setting up new ones is a breeze (thanks to Traefik), backing up the configuration and data is trivial, upgrading to the latest version takes a few minutes at most. I’m confident my workflow is simpler and more convenient than yours. Granted, the initial investment to learn and understand the tools is pretty large.
Any chance you could outline your process? E.g. if you had to start from a new VM, what all would you need to do?
I've always just set everything up via the command line, and it's tedious/not repeatable (and there's also no isolation). I'm sure there's a better way, but usually the solutions I see involve gluing together a bunch of different tools--possibly even more work than I'm already doing (although there are benefits!).
Sure! My requirements are very simple, so my setup isn’t very complicated. The process isn’t precisely repeatable because each self-hosted app has different requirements, some require multiple containers, and so on.
I start with a template docker-compose yaml that contains the barebones: network settings, labels for Traefik (eg. Let’s Encrypt config), placeholders for the image/container name, volumes, env variables, etc. I fill this in based on the container I want to setup. Many self-hosted apps provide example docker-compose configurations - I often just merge them with my template by hand. It’s usually just a couple of lines.
I edit the files in vscode (but directly over ssh). Not a huge fan of editing YAML in the terminal.
Then, I execute an aliased command that goes something like this:
docker-compose down ; docker-compose pull && docker-compose up -d && docker-compose logs -f
to see if the container stands up, and tweak if necessary.
Can't speak for the parent but since I also use a docker-compose & traefik based setup I can describe my migration process (executed by ansible in my case, could easily be done manually though):
1. Copy docker-compose.yml (for my private stuff there is a single one containing all services + traefik) and config files (host-mounted into services from a config dir) to new host.
2. Start services (docker-compose up).
3. Restore runtime data (in my case I mostly pull some db dumps from my restic repos and load them into the db containers).
In this specific case it is not very complicated and actually pretty close to unzip, edit config and run. I have deployed it on a Raspberry running FreeBSD, so Docker is not an option.
The backend server is written in Go and after building it only a single binary has to be deployed. A second repository contains the frontend (HTML, JS) which you copy to a path that you make available via your webserver. That's basically it.
I miss the days when you could install most things via apt-get and thus have security updates automated, documentation in a standard location, and so on.
Running an arbitrary thing in Docker is far easier than without it. If I want to run the PHP/MySQL-based Matomo, I can just grab the ready-made docker-compose.yml [0] and tell my main nginx to proxy_pass onto it. I don’t need to figure out how to configure MySQL/MariaDB/PHP-FPM and what hacks did my distro introduce to it (at least I’m not using Debian/Ubuntu, so there shouldn’t be that many). Similarly, I can get Zulip in Docker [1] (even if it’s apparently in alpha state) and not mess with the Python packaging trainwreck, and also setting up all of Redis, PostgreSQL, RabbitMQ and memcached.
If you run NixOS you get a similar experience because it’s often just services.foo.enable = true; edit a couple options to your needs and you‘re good to go. :-)
Nowadays, if databases are involved, I actually prefer docker. At least there is a standard way to manage them. I have portainer installed, now everything is just managed through a web interface. It is okay.
It seems so strange to me to do all the hard work of allowing arbitrarily nested projects and tasks, sub-tasks, labels, complex filters and collaboration, but then not do dependencies. Imo dependencies is the big difference between something you can use on complex projects, and a “mere” to-do list - even one with nested projects, labels, filters, whatever.
I thought that perhaps I wanted a Gantt chart tool and spent a couple of months going down that route. At least in my experience, though, what I actually wanted was just some way to establish a DAG - I didn’t even necessarily need a way to visualise it, just the ability to group and filter on it.
Vikunja looks interesting - open source, self-hosted and supports dependencies/relations. No iOS mobile client at this time, though.