How syncing works
Syncing runs both ways, but not everything runs in both. Here is exactly what leaves Budem, what we accept back, and what happens to the day it touches.
Setting it up on an actual phone is in Android: getting Budem into Google Calendar.
Two addresses, not one
There are two ways out, and which one you pick makes a difference:
| CalDAV | Subscription link (ICS feed) | |
|---|---|---|
| Direction | both ways | read-only |
| Signing in | e-mail and a device password | none — the address itself is the key |
| What can use it | Apple Calendar, Thunderbird, Evolution, DAVx⁵ | everything, Google Calendar included |
| Refresh | within the hour, as the client is set | whenever the service feels like it, commonly hours |
Until you flip Syncing to your calendar app in the calendar's settings, neither address answers at all. A calendar with that switch off does not leave the app.
What goes out
Every piece of the content has its own switch — "sync my calendar" means something different to everybody:
| Switch | What shows up in the calendar | Can a client change it? |
|---|---|---|
| Collected days | an all-day event on every day you wrote down | yes |
| Badges earned | an all-day event on the day you earned it | no |
| The next badge | one event in the future, on the day you would reach it | no |
| Reminder | a repeating event with an alarm, at the hour you set | no |
| Notes | the note's text under the data line in the description | — |
The events that cannot be changed cannot be changed even by a client that tries: the server answers 403. They are things the app works out from the record, not fields to fill in.
In your calendar app the calendar keeps its own colour — the one it has in Budem.
The event title
The default is ✓ Calendar name — day 23, and it is a translation, so you get it in your own language. If it does not suit you, write your own template in the calendar's settings. You can use:
{icon}, {calendar}, {day}, {value}, {unit}, {rating}
The Slovak names ({ikona}, {kalendar}, {den}, {hodnota}, {jednotka}, {hodnotenie}) work just the same. Anything in the template that is not a variable stays as you typed it, and empty variables are tidied up along with the dashes around them — so {icon} {calendar} — {value} {unit} on a calendar that measures nothing does not end up as "Walk —".
{day} is the day's position in the run. Fill in an older day and the run is renumbered, so the titles of the days after it change — that is fine, the client downloads them again.
The event description
The first line carries the data, the rest is the note:
10/5
First time the whole ten without stopping.
Before the slash is the value, after it a rating from 1 to 5. The half you leave out is a dash — 10/-, -/5. If the calendar measures nothing and the day has no rating, no data line is written at all.
The note goes out only if you switch it on. That switch is off by default, because a note is the most private thing in this app, and once it is in somebody else's calendar service we have no way of taking it back.
All day, no time
Everything except the reminder goes out as an all-day event with no timezone. That is deliberate: a date with a time can render as the previous day in another zone, and "did I mark today?" would start answering differently depending on the hour.
The reminder is the one exception — it is about an hour rather than a day, and that hour is counted in your own timezone.
What we accept back
This works over CalDAV only, not over the subscription link.
- Create an event in the Budem calendar → the day is marked.
- Delete the event → the day is unmarked.
- Move the event to another day → the mark moves with it.
The day is taken from the event's date, not from its title. If a client sends an event with a time, we count it to that day in your timezone — somebody tapping a slot at six in the evening meant today.
The title is not yours to write. Whatever you type into it, the next sync replaces it with the template's. The title is ours, the description is yours.
The first line of the description is read strictly. It only counts as data when it really looks like number/rating; anything else means the whole description is a note. Type a sentence on the first line and you will not lose it.
The event is the whole state of that day. Delete the data line and the value and the rating go with it — it does not mean "leave those as they were". And a note from a client is only stored when you have notes switched on; otherwise an empty note from a phone would write over the one you wrote in the app.
When the server says no
Always with a 403, which a client shows as a sync error. It is not a fault:
| Situation | Why |
|---|---|
| The date is more than three days back, or in the future | Today and three days back is the window. The same rule as in the app, decided in the same one place in the code. |
| A client tries to change a badge or the reminder | The app works those out; they are not fields to fill in. |
| Deleting a day that carries a note | One swipe on a phone should not erase a few sentences written in the evening. Take such a day back in the app. |
| An archived calendar | An archive is a closed book. |
How a client knows something changed
It does not ask for the whole calendar. Every collection carries a version number and every event a signature; the client asks for those, and when nothing has moved it downloads nothing. The version goes up on every change a client could see — marking a day, and flipping a switch in the settings alike.
So a change does not appear on the phone instantly, but at the next sync. Most apps also have "Sync now" in their menu.
What never goes out
- Calendars that do not have syncing switched on.
- The letter to your future self. It stays in the app even when everything else is on.
- Anything about your account — your e-mail, your settings, your other calendars.
- Notes, until you switch them on yourself.
And none of it is written to a log anywhere — not a note, not a feed address. In full in the privacy notice.
Device passwords
Never put your account password into a calendar app. Create a device password in your account settings instead: you name it after the phone, it is shown once, and it can be revoked on its own without touching the rest of your account. If you sign in with Google, you have no other password anyway.
A subscription link has no password — the address itself is the key. Which means the same thing applies: whoever holds it can read the calendar. It is revoked with one click, and a new one is made the same way.