Changelog
What changed in MergeTime, newest first.
Version 0.19
You can now keep more than one set of people apart. A new card, "Keep several groups side by side", sits directly under the availability box: name the lines you have typed (say "Tuesday team"), press Save lines as a group, and one press of Load puts those lines back into the box and re-runs the merge. Each group keeps the lines, your shortest-window limit and your 12/24-hour setting. Saving a name you already used replaces that group rather than adding a second copy, and a Delete button removes one; Delete all groups clears the list. This is the item the About section had listed as "not built yet".
Groups are held in memory for the current visit only. Nothing is written to your device and nothing is sent anywhere, because MergeTime stores nothing between visits at all: reload the page and the list is empty again. That is a real limit, and the page says so in the card, in the About section and in the status line under the buttons, rather than pretending the groups persist.
Smaller things in the same version: the card shows how many people each group holds (counted from the lines, so a line without the | separator is not counted), Enter in the group-name box saves, an empty box or a missing name is refused with a plain sentence instead of saving something useless, and the list holds up to 8 groups in one visit. The About section now explains the groups instead of promising them.
Known limits: groups live only as long as the tab is open; there is no way to rename a group without saving it again under the new name; the merge, the calendar file and the copied text are unaffected by this version. The author still has no real browser here, so this version is tested by re-reading the code only.
Version 0.18
It is now obvious on the first screen that the availability box already holds a three-person example and that its result is already on the page. A highlighted note sits directly under the box saying so, and a new Load example button beside Clear puts the example back after you have emptied the box. Until now a first-time visitor had to guess that the lines in the box were sample data and that the numbers further down were a real merged result.
The note hides itself as soon as the box no longer holds the example (you type your own lines, or press Clear), so it never claims something untrue about what is in the box. Load example restores the example lines, the shortest-window limit back to 0, the 24-hour clock and re-runs the merge in one press.
Known limits: the example text lives in the page's own code, so it is the same example every time and cannot be saved or edited. Nothing is stored between visits — reload the page and the example is back, your own lines are gone. The author still has no real browser here, so this version is tested by re-reading the code only.
Version 0.17
The events in the .ics file are now written as free time. Each event carries the line TRANSP:TRANSPARENT, which is the calendar standard for "this does not make me busy". Before, a shared window saved into a calendar showed up as a normal appointment and blocked that slot; now it shows as available time — which is what the file actually means, since the window is when everyone could meet, not a booking. The window still appears in your calendar at the right day and time; only its busy/free status changed. The status line under the buttons and the "saved" message now say "marked as free time" so it is clear what was written.
Also tidied an internal detail: the first-date box was filled by building a date string in a roundabout way (converting a timestamp and cutting it up). It now uses a small inputDate() helper that formats the year, month and day directly. Same value, less fragile code.
Known limits: some calendars ignore free/busy on imported events, or show them anyway — MergeTime cannot control that, so the tag is a request, not a guarantee. There is still no timezone in the events and no "every other week" repeat. Nothing is stored between visits. The author still has no real browser here, so this version is tested by re-reading the code only.
Version 0.16
Fixed: the name suggestions in the picker card went stale. The list behind the Name box was rebuilt only when you pressed Add block, so a name you typed or deleted by hand in the availability box did not appear there (or kept appearing after you removed it) until you added another block. The list now follows every edit to the availability box, including typing, pasting and the Clear button.
Also shortened the About text, which had grown to four long paragraphs. It now says the same things in less space, so the page is quicker to read through on a phone. Nothing about how the merge works has changed.
Known limits: the picker card still has to read the availability box itself to find the names, so its idea of a line ("everything before the |") must stay in step with the merge parser — the two are separate pieces of code. Nothing is stored between visits. The author still has no real browser here, so this version is tested by re-reading the code only.
Version 0.15
A new card, "Add a block with the pickers", sits between the availability box and the results. Instead of typing Mon 09:00-10:30 by hand, you choose a name, a day (Monday to Sunday) and a start and end time, and press Add block: MergeTime writes the block onto that line for you and re-runs the merge straight away. Typing a name that is already in the box appends the new block to that person's existing line rather than starting a second line for them; a new name starts a new line. The name box suggests the names already found in your text, and pressing Enter in any of the three boxes adds the block too.
If the end time is earlier than the start time the block is written as one that runs past midnight (for example Mon 23:00-01:00), and the line under the pickers says so. Empty or same-times are refused with a plain message instead of writing a line that would come back as an error.
Known limits: the pickers write plain text into the box, so anything you then edit by hand is exactly what is merged — there is no undo beyond deleting the line or editing the box. A block is still one weekday at a time, with no date, and the pickers do not know about your calendar. Nothing is stored between visits. The author still has no real browser here, so this version is tested by re-reading the code only; the pickers reuse the same merge code path as the "Find shared windows" button. (Version 0.16 made the name suggestions follow hand edits too.)
Version 0.14
The calendar card now takes an end date instead of a number of weeks. "Repeat weekly for (weeks)" is gone; in its place is Repeat weekly until (optional), a date box. Leave it empty and you get one week, exactly as before. Set it to, say, the last session of the term and MergeTime writes one event per shared window per week from your first date up to that date — so a Wednesday 18:00 window becomes every Wednesday 18:00 through the end of the run, without you counting the weeks. The 8-week and 100-event caps still apply.
The line under the buttons now reports the range it will write, for example "2 shared windows over 6 weeks: 12 events, from Mon 12 Oct 2026 to the week of Mon 16 Nov 2026." It also says plainly when the end date cannot be used: an end date that is empty, unreadable or not after the first date falls back to a single week, and it tells you that instead of quietly writing one event. An end date more than 8 weeks out gives a "stops after 8" note.
Known limits: the count is whole weeks that start on or before your end date, so an end date part-way through a week still writes that whole week (the last event can land a few days after the end date you typed). There is no "every other week" or weekday-only repeat, and times are still written without a timezone. Nothing is stored between visits, so both dates are forgotten on reload. The author still has no real browser here, so this version is tested by re-reading the code only; whether the download itself works depends on the browser, and the copy route works either way.
Version 0.13
You choose the dates for the calendar file instead of getting "next week" whether you wanted it or not. The calendar card gained two boxes: First date to use (a date box, filled with today, so the events land on the matching weekday on or after the day you pick) and Repeat weekly for (1 to 8 weeks, default 1). With 3 weeks, a Wednesday window becomes three Wednesday events, one per week, each with the week's starting date in its notes. Changing either box re-dated the events straight away; the merge above is untouched, because the merge is about weekdays, not dates.
Known limits: the file is capped at 100 events (a long range with many windows is truncated, and the page says so). Nothing is stored between visits, so the dates are forgotten on reload. The author still has no real browser here, so this is tested by re-reading the code only. Version 0.14 replaced the week count with an end date, so you no longer have to count weeks yourself, and version 0.17 tagged the events as free time.
Version 0.12
The "closest slots" list now names who is free in each slot as well as who is missing. Before it only told you who could not make it; now each line reads like Wed 15:30–16:00 · 30 min — Dana and Emil free, only Fay is missing. The same line goes into the copied text. This makes the near-miss list useful when the missing person is the one you already know about — you can see at a glance whether the slot is otherwise the right group.
Known limits: it is still only shown when no window works for everyone in the week. A slot is listed only when at least two people are free; a slot with a single person free is not shown. Nothing is stored between visits. The author still has no real browser here, so this change is tested by re-reading the code only. (The blocks that run past midnight are counted once. In version 0.13 the calendar file dates stopped being fixed to "next week".)
Version 0.11
A finished result can now become a calendar file. A new card under the results offers "Save .ics file": one event per shared window, dated to the next occurrence of that weekday from today, with the window in the title and the day, length and the people it is for in the notes. Times are written without a timezone, so a calendar keeps the times exactly as shown here. A window that runs past midnight gets an end time on the following day.
Because a strict browser or sandbox can block a file download, the card also has "Show .ics text": it puts the same calendar text in a box you can select and copy into a file named mergetime.ics. If the save is refused, MergeTime says so and falls back to that box by itself. The card appears only when a clean result has at least one window that works for everyone; if any line has an error, no calendar file is offered.
Known limits: the author still has no real browser here, so it is tested by re-reading the code only, and whether the download itself works depends on the browser — the copy route works either way, and the page says which one it used. Events were dated to next week only rather than the meeting you actually had in mind; version 0.13 replaced that with a first date and a week count. A recurring series is not written: each week is a separate event. (Version 0.17 made the events show as free time rather than busy appointments.)
Version 0.10
Fixed a counting bug from version 0.9. An overnight block such as Mon 23:00-01:00 is stored as two pieces internally, and the results line ("Read 3 people · 6 time blocks.") counted it as two blocks even though you typed one. The line now counts the blocks you actually wrote, so a person with two normal blocks and one overnight block reads "3 time blocks". The merge, the shown windows and the total shared time are unchanged.
Known limits: this fix only changes the count on the summary line — the overnight block is still kept as two pieces while the merge runs. Nothing is stored between visits, and the page has still not been opened in a real browser by its author, so it is tested by re-reading the code only. (The calendar file this version was missing arrived in version 0.11.)
Version 0.9
Blocks that run past midnight now work. Mon 23:00-01:00 (or Mon 11pm-1am, or Fri 22:00-02:00) is no longer refused: the evening part counts on the day you wrote and the early part on the next day, so late-night shifts, gigs and overnight trips can be merged like any other time. If the shared window itself runs past midnight, it is shown as one stretch with "(next day)" after it — for example Mon 23:00–01:00 (next day) · 2 h — and the total shared time counts its real length. The "closest slots" list stitches overnight slots the same way, so they no longer appear as two separate short pieces.
Also: writing a block that ends at the same time it starts (such as Mon 09:00-09:00) is now reported as its own clear error, with the overnight form suggested, instead of an unclear "ends at or before it starts".
Known limits: only the display is stitched across midnight — a block is still stored as two pieces internally while the merge runs. (The one visible trace of that, an overnight block counting as two on the results line, was fixed in version 0.10.) Sunday night running into Monday morning wraps around the week in the same way. A chain longer than one midnight (a block that runs a full day and beyond) is not supported.
Version 0.8
Shorter windows hidden by the "Shortest window to show" limit are now listed even when longer ones passed it. Before, if one window was long enough and another was not, the shorter one disappeared silently. Now the result keeps the normal list and adds a short line under it: how many more windows work for everyone but are shorter than the limit, up to six of them, longest first with their length, and the same lines go into the copied text.
Also tidied the wording in the About section ("with or without minutes, in either style" instead of "hours apart or not").
Known limits: the shorter extras are capped at six per result (the page says so when there are more), and the full-under-the-limit list still appears only when the limit hides every overlap. Version 0.9 then added overnight blocks, which this version still refused.
Version 0.7
Times you paste in can now be 12-hour, like Mon 9:30am-11am or Mon 9 am - 11:30 am, and you can mix the two styles in one box — a line in 24-hour and another in am/pm both work. Whole hours without minutes still work (Mon 9-11), as does 9-11am, where the am/pm at the end is read onto the start too. The example box now shows a mixed paste so you can see it on first load, and the format hint on the page says am/pm is allowed.
Known limits: with this version 11pm-1am was still refused; version 0.9 added it. 12am is midnight and 12pm is noon. A wrong am/pm is reported with its line number instead of being guessed at.
Version 0.6
When the "Shortest window to show" limit is the only thing hiding a real overlap, the result no longer comes up empty. It now says how many windows work for everyone but are shorter than the limit, lists up to ten of them longest first with their length, and tells you which limit would show them as normal results. The same list goes into the copied text.
Also fixed: a person whose name is a built-in word such as "constructor" or "toString" is now listed in the "Leave someone out" control. Previously such a name was skipped.
Known limits: this list appeared only when the limit hid every overlap; version 0.8 added the shorter windows that were hidden when longer ones passed the limit. There is no way to ignore the limit for one run without typing a lower number.
Version 0.5
A "Leave someone out" control beside the other options. It lists the people found in your lines; pick one and the merge is re-run without that person, so you can see what the rest can do. The result says who was left out, the copied text says it too, and the control goes back to "Nobody — use everyone" to include them again. If only one person would remain, the page says so instead of showing a result.
Known limits: the choice is not remembered between visits, because the page stores nothing. People are matched by name, so two lines with the same name are removed together. Leaving someone out re-runs the whole merge — there is no side-by-side comparison of "with" and "without".
Version 0.4
A "12-hour clock (am/pm)" switch next to the other controls. Turn it on and every time on the page and in the copied text is shown as 9:30 am / 1:15 pm instead of 09:30 / 13:15; turn it off for 24-hour times. The copied text says which clock it used. Times you type are still read as 24-hour either way, and 24:00 shows as 12:00 pm.
Known limits: the switch is not remembered between visits, because the page stores nothing.
Version 0.3
The result can now be copied as plain text. A "Result as plain text" card appears under the results with the same content in a selectable box (the people, the days, the windows with their length, the total, or the closest partial slots with who is missing) and a "Copy text" button. The button uses the browser clipboard; where that is not allowed it selects the text and tells you to press Ctrl/Cmd + C.
Known limits: when any line has an error, the copy box is hidden rather than exporting a partial result. The text is a fixed plain-text layout — no calendar file (.ics) yet.
Version 0.2
When no window works for everyone, the result no longer stops at "no shared window". It now works out the closest slots — the stretches of a day where the most people are free at once — lists up to eight of them with their length, and names who is missing (for example "Wed 15:30–16:00 · 30 min — only Fay is missing"). The shortest-window limit is applied here too. If no two people are free on the same day at all, it says that instead.
Known limits: it only suggests slots where at least two people are free, and it lists partial overlaps only when there is no full overlap anywhere in the week. Sort order inside a day is longest slot first.
Version 0.1
First version. Paste one line of availability per person (Name | Mon 09:00-11:30, Wed 13:00-16:00) and MergeTime merges the blocks and shows the windows that work for everyone, grouped by day, with the total shared time. Optional minimum window length. Invalid lines are listed with the line number instead of being guessed at.