top | item 28359239

(no title)

vbsteven | 4 years ago

I'm the author of the article, it's always fun to see your own articles pop up on HN unexpectedly.

This post was written several months ago and in the meantime I have given up on trying to cobble something together using existing solutions because they don't provide the extensibility that I want.

I'm building my own replacement from scratch focussing on tasks/projects/calendars first. The architecture is a postgres db exposing CRUD API endpoints and all changes are broadcasted over MQTT so I can easily hook into everything for automation and extension.

I have a desktop application in JavaFX and a mobile Android app so I can use Kotlin as one language across all clients and backend. Lots of code sharing going on for things like API models.

discuss

order

Const-me|4 years ago

MS Exchange server for tasks and calendar, OneNote for notes, SharePoint to sync these notes.

Closed source, expensive, designed to be supported by professionals, you might need more than 1 server/VM to run them all, requires AMD64 processors.

Well tested (used by millions of people every day), relatively secure, not terribly hard to setup (follow installation guide / best practices documents carefully, and you should be fine).

Godel_unicode|4 years ago

OneNote is worth it by itself, it's so good. It also works on mobile really well, the search is awesome,I just wish the sync was slightly less opaque for large notebooks with multiple authors.

vbsteven|4 years ago

Actually my business email is currently setup like this. I have a business o365 account and use Outlook on Windows/MacOS/android/iphone and Thunderbird on Linux.

But I want to move away from it because I want to 1) gain control over my data and 2) extend the system with automations.

Thats why I started researching open source and self hosted alternatives.

0xCMP|4 years ago

I planned to comment on the conclusion as well. I think these protocols often do not handle things well enough and in the end the apps out there do not implement them properly anyways. You always end up building some kind of CRUD/RPC thing that works via HTTP/WebSocket which is why things like Todoist and etc work well and are able to add the features everyone wants in the end.

vbsteven|4 years ago

This is what I concluded as well. The end goal for my desired system is to make it straightforward to hook into events so I can add automation.

This turns out to be very hard to do based on CalDAV/WebDAV protocols because many clients and services implement the spec differently or only parts of it.

That's why I switched my approach and I'm writing my own backend storage layer that has my desired event system builtin on that layer (Using Kotlin/JVM for the backend, postgres for storage and MQTT for pub-sub to events). On top of that storage/api layer I'm building CalDAV/WebDAV support so external clients can connect to it.

Having my own HTTP+MQTT API makes it a lot easier to build modern clients as well. In fact because I chose Kotlin/JVM as my baseline and have already written a pure Kotlin client library I'm making a lot of progress on both desktop, android and cli tools to interact with the system.

asymmetric|4 years ago

> You always end up building some kind of CRUD/RPC thing that works via HTTP

Isn't that what WebDAV is?

mch82|4 years ago

Have you noticed if any of the calendar protocols allow for recording an appointment without specifying a date?

Consider a haircut that will take 45 minutes & will invite two people (me & the barber), but the day/time is still undecided. Perhaps that sort of appointment can park at a placeholder date with infinite capacity until the real date is scheduled?

brongondwana|4 years ago

There's a draft that's been floating around and renewed multiple times over the years called VPOLL which is supposed to do basically this, but it's very tricky to get the edge cases sensible, so it's still not totally done. Generally one party offers appointment times and the other party books one, which simplifies it considerably.

hammyhavoc|4 years ago

I really like the idea of free-floating scheduling.

JoBrad|4 years ago

I think that’s called a draft :)

3np|4 years ago

Radicale supports WebDAV and has built-in authentication.

Also, it could be worth to add Calendso to the list. Quite new project with a bit bigger scope than Sabre/Radicale. WebUI, recently added CalDAV.

https://github.com/calendso/calendso

foresto|4 years ago

Thanks for dropping in. Can you explain this comment about Radicale?

> Does not handle authentication by default, needs to be handled by the reverse proxy

My Radicale instance validates users on its own, using credentials in an htpasswd file with bcrypt hashes. Doesn't that count as authentication?

vbsteven|4 years ago

It looks like I missed the option to set an htpasswd file directly on the radicale server. After a second look at the Radicale documentation it looks like it supports both, htpasswd directly on the server or configured on the reverse proxy.