All user visible changes to organice will be documented in this file.
When there are updates to the changelog, you will be notified and see a ‘gift’ icon appear on the top right corner.
- No UI/UX changes, but lots of tooling upgrades
- Major version technical upgrades
- nodejs (from 12 to 20)
- Create React App (from 3 to 4)
- eslint (from 6 to 7)
- node-sass to sass
- Minor version technical upgrades
- redux-undo
- React
PRs:
- Prevent app crash when deleting a list item immediately after exiting edit mode
- PR: 200ok-ch#996
- Thank you kjmatsuda for the PR🙏
- doc: Clarify where to find docs (interactive tutorial vs. manual)
- PR: 200ok-ch#991
- Add a
flake.nix
file to provide a development shell for Nix users.- PR: 200ok-ch#987
- Ability to print all content (including below the fold)
- PR: 200ok-ch#969
- Capture template variable
%y
expanding to the raw year- PR: 200ok-ch#964
- Using a capture template that is available from all Org files, but should always capture to just one file (not necessarily the currently open one).
- PR: 200ok-ch#965
- Ticking a checkbox should only tick the checkbox, not enable the list item manipulating functions from
handleListItemSelect
.- Relevant discussion: 200ok-ch#950
- PR: 200ok-ch#951
- Color of unchecked checkbox in a list
- PR: 200ok-ch#949
- Implements list manipulation functions
- PR: 200ok-ch#945
- Thank you kjmatsuda for the PR🙏
- On a header, don’t cancel swipe due to vertical movements
- PR: 200ok-ch#938
- Thank you neildavidforrest for the PR🙏
- Checking or unchecking a checkbox discards text with markup
- PR: 200ok-ch#928
- Thank you saikiransathpadi for the PR🙏
- Don’t replace all leading
*
in the description- Only when followed by a space, it would become a headline. Otherwise it’s markup for bold text.
- PR: 200ok-ch#931
- Deadline overlay UI improvements
- PR: 200ok-ch#925
- Thank you dmorlitz for the PR🙏
- Configuration option for a default Org file on startup.
- By default, when you start organice, it will display your root file directory. If you prefer to display a specific Org file instead, you can select it in the file settings.
- Option to display DEADLINE values (near the clocking value) on each headline
- The default for this option is false - so there is no change to the default behavior - until you enable this option via Settings.
- PR: 200ok-ch#891
- Thank you dmorlitz for the PR🙏
- Rotation of table editor icons to reflect their action.
- PR: 200ok-ch#890
- Thank you dmorlitz for the PR🙏
- Prevent the user from invalidating her Org file by entering a description that leads with
*
- If the user starts any line with a
*
, wanting to start a new list, it is immediately converted to a-
. - PR: 200ok-ch#920
- Thank you saikiransathpadi for the PR🙏
- If the user starts any line with a
- Disable auto-capitalization for search
- Before:
- When using the search or task list text inputs the Android/iOS keyboards automatically apply the shift key, meaning that the first character is capitalized.
- 99% of the time this is not what we want because:
- Having mixed case triggers a case sensitive search. This is quite confusing when I did not intentionally use capitalization, but it was added anyway. For example, I type “and”, and it actually inputs and searches for “And”, which yields no results.
- Many of the keywords in the search grammar are lower case, e.g.,
deadline:
,desc:
.
- Now: Auto-capitalization is turned off
- PR: 200ok-ch#914
- Thank you neildavidforrest for the PR🙏
- Before:
- Improve parser to read lines with multiple inline markup statements
- PR: 200ok-ch#910
- Thank you lechten for the PR🙏
- Filtering by description
- PR: 200ok-ch#907
- Thank you neildavidforrest for the PR🙏
- Use correct HTML anchor tag inside public.html <noscript>
- PR: 200ok-ch#902
- Thank you josephmturner for the PR🙏
- When opening an Org file, show it from the top
- PR: 200ok-ch#878
- Changelog has a
Back
button in the HeaderBar- PR: 200ok-ch#882
- Change log renders above previously opened view component
- PR: 200ok-ch#869
- Make HeaderBar sticky
- PR: 200ok-ch#870
- Setting to change textbox height in the description editor
- PR: 200ok-ch#875
- Thank you dmorlitz for the PR🙏
- Upgrade Dropbox authentication flow: switch from OAuth to OAuth 2
and PKCE
- Rationale: Dropbox switched OAuth from long lived tokens to short lived tokens.
- PR: 200ok-ch#851
- Undo looks like it is persisting changes, but it persisted old
state. Hence, reloading the file was bringing back the version of
the file before undoing.
- PR: 200ok-ch#861
- Simplify UX in task modal
- “Change todo keyword set” is now an explicit button. Also, it’s only shown when there is more than one todo keyword set configured for the current Org file.
- Todo keywords can be selected and unselected on the same button. No trash can necessary to unselect a todo keyword..
- PR: 200ok-ch#862
- Ability to delete header from task modal.
- PR: 200ok-ch#862
- Ability to handle empty files
- This takes care of a big UX problem for users who solely rely on organice. So far, we’ve shown a parser error if the file is empty or if the file did not contain a headline.
- Now, if the user opens a file that is empty, or has no headlines, she will see the call to action to create a new headline.
- PR: 200ok-ch#853
- Capture template variables
%r
and%R
expanding to raw timestamps- PR: 200ok-ch#838
- Thank you dmorlitz for the PR🙏
- Create new file from file browser
- PR: 200ok-ch#818
- Specify default webDAV URL in .env file
- PR: 200ok-ch#829
- Thank you dmorlitz for the PR🙏
- Docker image recognizes env vars
- PR: 200ok-ch#835
- see doc for more information
- Google Drive support. This backend had a few issues:
- We waited for years for Google to put the Google Drive API into production mode. Without that, only very few people were actually allowed by Google to use organice with Google Drive. A lot of time and effort went into this from quite a few of people. Even Google employees tried to expedite from within Google, but to no avail. The maintainers of organice gave up on this issue since July 2020 and announced that the support for Google Drive will be removed unless someone steps up and takes over this task. Nobody did in the two years since, so we’re removing it.
- Replace integration of Google Drive through <script> include in index.html with NPM module
- Sign in to Google Drive from new versions of Chrome dysfunctional
- Proper Landing Page
- PR: 200ok-ch#809
- In-buffer settings can be in lowercase or uppercase. Before, they
had to be in uppercase.
- PR: 200ok-ch#776
- Manifest for PWAs
- Before, the ‘install’ button did not appear for Android devices and both Chrome and Firefox showed warnings for the manifest.
- Issue: 200ok-ch#779
- PR: 200ok-ch#781
- Thank you tbruckmaier for the PR🙏
- Title editor text loss.
- Since the introduction of the semantic Title editor on [2021-11-22 Mon], if you modified the text of a title and then click a todo, the todo keyword got saved which triggers a rerender before the text got saved. Therefore the text is reset to the state it was in when the title editor was opened.
- This is fixed, now.
- EPIC Bookmark functionality for search
- After entering a search string, you can bookmark it using the ⭐ button.
- Bookmarked search strings populate the suggestions if no search string is entered into the input field.
- Bookmarks are saved by context, so there are separate bookmarks for search, task-list, and refile.
- There are at most ten bookmarks for a context. Newly saved bookmarks are inserted at the top of the list. If the list gets too long, the last search strings are dropped. Duplicate bookmarks are dropped too. The list of bookmarks is ordered by last used.
- Bookmarks are unaware of file context. Therefore, you always have the same bookmarks.
- Relevant PR: 200ok-ch#758
- Title and Description fields are not edited as raw text by default.
- Instead, a semantic editor comes up when editing them.
- To edit raw values, click the ‘edit’ icon, again.
- Search and Task List open in one modal with tabs.
- Modal opens to “Search” by default, but remembers what was opened last.
- If there are open clocks, a third modal “Clock List” is added
that looks like “Search” for
clock:now
without the search input field. - Notes can be multi-line and are properly indented.
- Setting to respect OS light/dark-mode preferences
- organice already queried the OS for light/dark-mode preference. But changing the setting in organice would override the OS preference.
- Relevant PR: 200ok-ch#749
- Fix repeater adjusting time of date when using
.+
- When repeaterUnit is not “h”, hour and minutes are never touched.
- When repeaterUnit is “h”, hour and minutes are set to n hour(s) from now (as it was already implemented before this fix).
- Relevant PR: 200ok-ch#746
- Fix GitLab OAuth token refresh
- PR: 200ok-ch#740
- Thank you chasecaleb for the PR🙏
- EPIC Add GitLab as a sync back-end
- PR: 200ok-ch#734
- Thank you chasecaleb for the PR🙏
- Loading settings when using WebDAV as synchronization back-end
- PR: 200ok-ch#727
- Thank you mcordell for the PR🙏
- Parse and preserve habit timestamp ranges
- A timestamp may have minimum and maximum ranges specified by using the syntax
.+2d/3d
, which says that you want to do the task at least every three days, but at most every two days. - Upstream documentation: https://orgmode.org/manual/Tracking-your-habits.html
- Relevant PR: 200ok-ch#674
- Thank you tomonacci for the PR🙏
- A timestamp may have minimum and maximum ranges specified by using the syntax
- Agenda starts on Monday by default (as it does in Emacs Org mode)
- Ability to set the “Start of week for weekly agenda” in the Settings
- Akin to the Emacs org mode variable
org-agenda-start-on-weekday
- Akin to the Emacs org mode variable
- Relevant PRs:
- 200ok-ch#676
- Thank you tomonacci for the PR🙏
- 200ok-ch#677
- 200ok-ch#676
- EPIC: Multiple file support
- Agenda, Search, Task List, Refile and Capture Templates have the ability to work on multiple files.
- You can adjust the behavior for these on a file per file basis by creating “file settings” in the settings menu.
- EPIC: Offline file support
- Every file opened in organice will automatically be cached on your device.
- When visiting the file, again, it will immediately be loaded from the local storage and then loaded from the remote back-end.
- That makes loading and switching between files instant and gives you the ability to work on multiple files when being offline.
- Relevant PRs:
- When going to the Agenda view, the selected tab is persisted - meaning it will be pre-selected when you go to the Agenda next time.
- Relevant PR: 200ok-ch#562
- Having an active timestamp with a repeater was broken.
- When the TODO state changes for a header that has a repeater (either as SCHEDULED, DEADLINE or active timestamp), a log entry is written and the timestamp is updated.
- Relevant PR: 200ok-ch#568
- Removing an active timestamp was broken.
- Relevant PR: 200ok-ch#568
- organice understands
:PROPERTIES:
drawers and smartly parses the values in case one of the values is a timestamp.- However, parsing all the values and saving the parsed result in any case will lead to wrong results. Most values of properties are just plain text and non-interactive things in Org mode.
- For example, a value like
something_with_underscores
would have been treated as ‘underlined text’ which doesn’t make sense for a property drawer. When saving the value back, organice would have squashed the underlines. - Now, the values are used and preserved as they are. Timestamps still work, of course.
- Relevant PR: 200ok-ch#578
- When repeating a task, an active date timestamp was logged instead of an inactive datetime timestamp.
- Safeguard against selecting text by accident.
- Additional themes. You now can choose between:
- Solarized
- One
- Gruvbox
- Smyck
- Code
- All of these are themes work in light and dark mode!
- We have enabled some default settings by default, because they are reasonable for a new user:
shouldStoreSettingsInSyncBackend
, because it enables using organice on multiple clients.shouldLiveSync
, because it reduces the chance to have a conflict in the open Org file.shouldSyncOnBecomingVisibile
, because it reduces the chance to have a conflict in the open Org file.
bulletStyle
is set to “Fancy”, because it looks more visually pleasing than an asterisk (*) and hence makes organice look better on a first test run.- If you personally do not want them enabled, you can disable them separately in the settings any time.
- organice has various settings that the user can configure. Before manual configuration, there organice loads sane defaults. Loading and persisting some of these defaults was buggy before.
- Loading and persisting of defaults works now.
- Previously saved wrong values are removed from
localStorage
to reduce future bug potential. - Changing this is - strictly speaking - not visible to the end-user, so it wouldn’t ordinarily show up in this changelog. However, since it makes changes to the already saved settings (in cleaning up old faulty values), it theoretically could introduce a bug in the settings. Hence, the change is added to the changelog.
- Related PRs:
- The ‘focus header’ feature is renamed.
- Narrowing means focusing on this header, making the rest temporarily inaccessible.
- Canceling the narrowing, which makes all headers once again accessible, is called widening.
- Add ‘dark mode’ next to ‘light mode’ as a setting.
- Add ‘recursive clock times in search’.
- Add ‘time range’ queries to search for planning items (SCHEDULED and DEADLINE), plain active timestamps or clocked work time.
- When a header is focused, and the user uses the ‘search’ or ‘task list’ feature, then the searched header list is automatically narrowed to only subheaders of the originally focused header.
- Improve header stickiness
- Added Documentation on repeaters and delays to
sample.org
and to mouseovers for the relevant buttons.
- Recognize US and Swiss phone numbers and make them clickable
- Next to ‘canonical’ phone numbers like +49123456789, also recognize:
- US phone numbers:
- 123-456-7890
- (123) 456-7890
- 123 456 7890
- 123.456.7890
- +91 (123) 456-7890
- Swiss phone numbers:
- 0783268674
- 078 326 86 74
- 041783268675
- 0041783268674
- +41783268676
- +41783268677
- US phone numbers:
- Added the capability to chose the start screen when installing organice to the homescreen.
- More information on how to install organice like this, see https://organice.200ok.ch/documentation.html#installation
- Search and Todo List modals could be moved off screen on iOS since [2020-08-30 Sun]. The fix is to disable
autoFocus
on iOS. The rationale for that documented here: 200ok-ch#462
- Add note to header (
M-x org-add-note
)- This adds a button for taking notes to tasks (org-add-note). They will be prepended to the header contents after :PROPERTIES: and before the :LOGBOOK:
- Auto-focus filter input fields (search and task-list)
- If a user folds a header, all its subheaders should collapse as well, so that when the user reopens it, they stay closed.
- The previous behavior is buggy in a way that it keeps the subheaders open as they were, restoring their openness when the header is unfolded.
- The previous behavior is useful, though. So this change introduces a user setting to toggle the behaviour.
- Thank you necto for your PR 🙏
- Updating table cell values and removing table rows or colums was not undoable
- Sync stuck when working in the background
- When the user put organice into the background during a sync and comes back, organice was stuck in sync mode, but doesn’t actually sync anymore. This means that any new changes to the Org file will not be persisted. This is due to mobile browsers cutting off most resources to browser apps in the background, so organice cannot guarantee that a sync happens properly in the background.
- It’s not trivial to find out if the job is stuck
- Time is not a good indicator as bigger files on slower connections will always take longer.
- There’s no JS API to reliably find out if the browser just got back from the background or is put into the foreground. The =visibilitychange= API just triggers for both these events.
- Hence, the implementation is generic in nature: Whenever the user hits the ‘sync’ button, an actual ‘sync’ is forced - even if organice thinks there’s currently a sync in progress or that it should be debounced. That makes sense, because manual actions by the user should always be obeyed.
- Closes issue 200ok-ch#252
- 2. On iOS >13.1, when organice is used in SPA mode (as a bookmark on the homescreen), and the user navigates away from the original bookmark, a huge URL Bar would show up with a “Done” button. This is a regression in how iOS handles full-screen SPAs. These are the relevant APIs:
- 3. Feature detection for
crypto.subtle
module- This is used for change detection in the changelog. The module is only available in secure contexts. Hence, when used locally and on a private IP range, depending on the browser, it might not be available.
- Allow template-variables in the header-path in a capture template
- Thank you jayesh-bhoot for your PR 🙏
file:
links are sanity checked before opened
- Planning items now respect the new hard-indent setting.
- Append new tags correctly to title.
- If a header didn’t have tags before, the first tags were erroneously appended without a space.
- Support org-adapt-indentation
- Settings screen has proper title and “back” button
- As a user, when I visit Search, Task List or Agenda whilst having a dirty file, I’m not getting a pop up a dialogue notifying me about unpushed changes
- Headers with active timestamps in the header or description appear in agenda
- ‘Insert timestamp’ for headers and descriptions
- Comprehensive documentation: https://organice.200ok.ch/documentation.html
- You can find the link from the ‘settings’ screen or on top of the readme.
- When editing a
:LOGBOOK:
drawer within a headers description, the relevant logbook entries are updated (which might entail them being deleted).
- When refiling a header, don’t show subheaders in the refile drawer
- When doing a ‘Search’ or ‘Refile’, the action is reflected in the name of the opening drawer.
- In the agenda view, fix relative time distance for future dates
- Put Floating Action Button “Move a header” into the middle of the screen, so that it has enough space to render all arrows on mobile devices.
- Notify on changes for changelog
- This is done with a similar UX than other productivity apps (like Slack) do it. The user will see a ‘gift’ icon whenever there’s a change to the changelog she has not seen, yet.
- “Show Org filename in Header” is configurable in settings and off by default
- Show error message when using a capture template with a badly configured header path
- Make HeaderBar sticky
- Making undo/redo, file browser and help always available (before it was required to scroll all the way to the top)
- Deselect headline by clicking into the title (or empty space) in the HeaderBar
- Show Org filename in Header
- Major synchronization improvements
- After undo/redo, synchronize Org file
- Debounce Sync
- When a user changes things quickly (which happens easily when having ‘live sync’ enabled and using undo/redo for example), multiple syncs ran in parallel. The back-ends will either get confused or fail with errors (429 too many write operations). In any case, likely the last written state would not have been the state of the Org file in organice.
- Safeguard against concurrent sync requests to the back-end
- In case of synchronization error, show the error to the user and retry synchronization
- Don’t actually sync a whole Org file for an empty header. When the user adds some data and triggers UPDATE_HEADER_TITLE, then it makes sense to save it.
- All HeaderActionItems are undoable and redoable
- Refile
- When reviewing the captured data, you may want to refile or to copy some of the entries into a different list, for example into a project.
- Add button in HeaderActionBar to open property editor
- All HeaderActionDrawer actions have icons. The icons are documented in sample.org and have a mouseover title.
- Ability to search headlines
- It has the same syntax as the search field in the Task List feature
- Sort order in Task List
- Place cursor after the TODO keyword when creating a new header
- Highlight verbatim markup
- Highlight cookies and cookie percentages according to Solarized color scheme
- Don’t update search results when using an invalid search filter
- On mobile: Styling of Search / Task List drawer when searching all headlines
- On mobile: Ability to scroll Search / Task List
- Teach #+TODO parser to understand (..) suffix
- Support single- and double-quoted strings in the search filter
- Trim whitespace for entered or updated headlines
- Capture templates in iOS 13.3 are positioned properly
- iOS 13 introduced a styling regression when setting focus without user interaction. iOS 13.3 reverts to the way other browsers do it.
- Revert “Move HeaderActionDrawer before headline”
- As per #188, the changes introduced in #100 didn’t fare well with the community. Hence, as a first step to improve UX, we’re reverting to the previous state.
- Searching of headlines/todos with a composable query language
- Routing for Settings (/settings) and Sample (/sample)
- Routing for Agenda and TaskList
- The action for capture templates now uses a more idiomatic ‘plus’ icon instead of a ‘list’ icon
- Proper coloring of DONE todoKeywords from custom todo sequences
- Place TODO keyword of previous header in the new header
- “Share” button for headlines (sharing via email)
- Automatically render links for URLs with www prefix, but without protocol
- Suggestion list for inputs in property editor
- Automatically render links for URLs, e-mail addresses and phone numbers
- Suggestion list for inputs in tag editor
- Android PWA implementation was broken (issue #134)
- It required two more icon sizes
- Thank you dotcs for your PR!
- Docker Support
- The CI/CD workflow now also builds a Docker container which is then published to https://hub.docker.com/repository/docker/twohundredok/organice
- Thank you dotcs for your PR!
- As a user, when I’m on a headline with a planning item (schedule or deadline), I want to be able to remove it.
- Clicking the Timestamp in a TODO within the agenda toggles from the date to a human readable timespan
- Instructions on configuring Nextcloud+haproxy to allow WebDAV
- Documentation on how to share from Nextcloud using WebDAV
- Thank you runejuhl for your PR!
- Honor the ‘nologrepeat’ option
- Handle non-clock entries in
:LOGBOOK:
drawers- Fixes issue #111, issue #108 and issue #110
- Thank you @jamesnvc for your PR!
- Safeguard against potential Dropbox SDK Bug
- More information in issue #108
- Don’t put newlines after headers with no content, add newline at EOF
- Clocking work time
- Org mode allows you to clock the time you spend on specific tasks in a project: https://orgmode.org/manual/Clocking-Work-Time.html#Clocking-Work-Time
- organice is compatible with logbook clocking, now
- You can ‘clock in’ and ‘clock out’ to a header
- Thank you @jamesnvc for your PR!
- Keep all in-file settings and content lines from top of file
- Thank you @andersjohansson for your PR!
- Show login options as clickable links with cursor pointer
- Also improve wording with regards to login options
- Thank you @rodrigomaia17 for your PR!
- WebDAV as a sync backend!
- Thank you @TristanCacqueray for your PR!
- As a user, when I swipe a header, I want the icon to contrast the background, so that better see the action taken
- As a user, when I hover a clickable element, I want my cursor to
change, so that I can see that it is clickable.
- On iOS 13, fix the regression which made capture input fields hide
under the keyboard
- More information and screenshots in the ticket: 200ok-ch#46
- Turns out this issue is non trivial to fix and requires specific rules for every size of iPhone. I tested against the Xs and 6s. If you have a different form factor and the capture template input screen looks off to you, please send me a screenshot of what it looks like and I’ll add the dimensions for your form factor right away!
- Implemented a
redo
Button next to theundo
button
- Parser bug which would interpret bold statements in the beginning of a line as a header.
- Parser bug which would delete newlines between headers and items
- @MTrost introduced a new testing library called React Testing Library which greatly simplified writing interaction tests.
- Constraining to a max width and centering for tablets and bigger
- The ‘Sync on application becoming visible’ feature works on iOS and
Safari
- If enabled, the current org file is pulled from the sync backend when the browser tab becomes visible. This prevents you from having a stale file before starting to make changes to it.
- Documented how to use organice from a bookmarklet using the capture template feature
- Removed Google Analytics tracking, because it has no place here
- Configure Google Drive for the free community version of organice at https://organice.200ok.ch
- Documented SPA routing for self-hosting
- Wrote and publicized a Privacy Policy
- Color scheme has been ported to the popular Solarized (light mode)
- Whilst doing so, CSS variables have been introduced, so that there’s not a whole lot of repetition of magic rgb values going on
- The logo has been adapted, too
- The landing page and settings screens have been de-cluttered
- Continuous deployment: Merging to
master
triggers a build on CI and when successful, it triggers a deploy to https://org.200ok.ch - Add a new temporary™ logo:
- Since we want organice to be a community driven project, we have added:
- Add CircleCI to run the tests on every commit
- They are also integrated as a check for PRs with the benefit that contributors get automated feedback by running the regression test suite.
- Add Greenkeeper for automated dependency management
- Add Codeclimate for automated maintainability analysis
- Upgraded to Node 12.9
- The default keybindings (when used from a desktop browser) are now more in line with the defaults in Emacs itself
- The keybindings work on non-macOS operating systems
- As a user, when in a directory listing, I want the folders and files to be sorted alphabetically. Furthermore, I only want to see files that organice can open (that is org and org archive files).
- Note: This is only implemented for the Dropbox back-end at this time.
- Filters files from a directory listing down to org files.
- Sorts folders atop of files.
- Sorts both folders and files alphabetically.
- When the browser tab becomes visible, pull the latest version of the
Org file
- This is rather helpful when the app is used in production. Since the production build supports loading the complete application and org-file from cache, it can be open for a very long time. When the org-file hasn’t been pulled in a “very long time”™, then chances are non-nil that the file has been changed by another client in the meantime.
- Without this change, when the user opens the app after a while, makes changes to the file and wants to sync to the back-end, there might be the message “Since you last pulled, a newer version of the file has been pushed to the server.”. Now the user has two conflicting versions of the same file and can only chose to keep one (Which in itself is great UX and great error handling for cases in which we do encounter a merge conflict, of course!).
- This situation is mitigated with this change. Now the user has the option to enable “Sync on application becoming visible” which acts similarly to “Live Sync”. When the user opts to use this feature, whenever the application gets pulled from the background or started through the service worker, the first thing that happens it that a new version of the org-file is pulled from the server. It’s therefore much harder for the user to create conflicts.
- Parser doesn’t break indentation of existing files in fewer places
- Planning Items are formatted as in Emacs Org mode
- Properties are formatted as in Emacs Org mode
- Tags are formatted as in Emacs Org mode
- Documented deployment options
- People have been asking for tighter access restrictions.
- Imo the best answer to that request is to make it as easy as possible to host organice.
- There’s myriads of good options, of course. I picked to document two that will (potentially) be cost-free to the users and which are very easy and quick to set up: Ftp and Heroku.
- Tests on
master
were red- Partly due to obsolete tests
- Partly because tests weren’t updated according to changes in the code