Powered by AppSignal & Oban Pro
Would you like to see your link here? Contact us

Development Roadmap

010-klepsidra_development_roadmap.livemd

Development Roadmap

Outline

  1. Release 0.1.3 <== Current
  2. Release 0.1.4 <== In development
  3. Release 0.1.5
  4. Release 0.1.6
  5. Release 0.2
  6. Release 0.3
  7. Someday/maybe

Release 0.1.3

Ensure all code works, that any obvious bugs have been quashed.

  • [X] Tagging projects
  • [X] Tagging journal entries
  • [X] Make it possible to drill into the tag from the live component
  • [X] Provide ability to set new tag colour when creating freeform tag in live component
  • [X] Improve search functionality to perform fuzzy query directly in the database
  • [X] Develop ability to cope with temporary data structures, before an entity has been created
  • [X] Reformat timer listing display to a more useful format, relegating full description field to a popup box or tooltip, showing only a truncated version spanning at most two lines
  • [X] Change date display to more informative format
  • [X] Allow stopping a timer from timer ‘show’ view
  • [X] Changing the tag selection in any way on a modal screen should send back a message only if it’s inside a show view which also has a tag selector in it

Release 0.1.4

Implement basic trip tracker functionality, recording how many days have been spent in each country or block, with particular regard to visa regulation regimes.

Implement a notes functionality, where users can record snippets of any thoughts, information needed for later, inspirations, and any other information deemed useful for the future.

The inspiration for this feature, most directly, is TiddlyWiki.

> TiddlyWiki, a unique non-linear notebook for capturing, organising and sharing complex information

What is incredibly useful about this software is that these snippets can be opened alone, together with other tiddleres, which can be expanded or collapsed, or closed entirely at any time.

  • [X] Creation of quotes and citations of wisdom entity
  • [X] Meaningful display of quotes in a prominent place
  • [X] Develop a more generic patch of phoenix_live_head, and push as a PR, for the library to be extended upstream.
  • [ ] Create new feature, recording time spent in economic territories/countries, for nomads, showing how close to limit they are, according to the prevailing legislation
    • [X] Create users entity
    • [X] Create document_types entity
    • [X] Create document_issuers entity
    • [X] Create documents entity
    • [ ] Create travel_visa_types entity
    • [ ] Create travel_visas entity
    • [X] Create trips entity
    • [X] Add country entry and exit points in trips
  • [X] Create notes functionality
    • [X] Implement note tagging
    • [X] Develop full-text search on new and general notes entity
      • [X] Develop FTS virtual table and all necessary triggers keeping it up to date
      • [X] Develop the context necessary to be able to query the FTS virtual table
      • [X] Develop the Live Component enabling the search
    • [X] Develop FTS search inside live_select component, merely as a rich way of finding records to select in forms
    • [X] Implement note interlinking
      • [X] Create knowledge_management_relationship_types entity
      • [X] Create knowledge_management_linksentity
      • [X] Develop infinite note interlinking, with relationship types
      • [X] Convert note relationships into stream assigns
      • [X] On creation of new relation, add to stream
      • [X] Permit deletion, and removal from stream
    • [ ] Develop a FTS search feature, opening a page listing all matching results
      • [X] Develop unified entity view
      • [X] Create FTS table
      • [X] Create query for completely rebuilding the FTS table from the view
      • [X] Create mix task for easy rebuilding of FTS table
      • [ ] Create protocol for rebuilding the FTS index, and its periodicity
        • [X] Established automatic, cron-like hourly rebuild protocol
        • [ ] Plan for more sophisticated rebuild trigger, one based aroung time delay and actual database change
      • [X] Implement global search view
      • [X] Implement global search view, displaying all results directly in the view, not a modal
  • [ ] UI and UX improvements
    • [X] Start implementing new colour scheme based around Peach Fuzz, Pantone 13-1023
    • [ ] Randomise colours for new tags
    • [ ] Display tags for open and closed timers, on timer listings
    • [ ] Restyle timer listings, giving more visual value to the time recorded, rather than the times the timer was started and stopped
  • [ ] Debugging
    • [X] Tagging notes that haven’t yet been saved doesn’t work
    • [X] Updating notes fails with the following error message:
    • [X] Journal entries cannot be viewed as the show view breaks
    • [ ] There seems to be an issue when the last tag has been removed from an edit view, and a new one is manually added in the show view, where suddenly both are attached to the entity, only temporarily, on the show view (still recorded somewhere in component)
    • [ ] A new bug is present in production, in timer form_component views, related to the tag live_select component:
** (FunctionClauseError) no function clause matching in KlepsidraWeb.StartPageLive.handle_event/3          
    (klepsidra 0.1.3) lib/klepsidra_web/live/start_page_live.ex:159: KlepsidraWeb.StartPageLive.handle_event("selection_
recovery", [%{"bg_colour" => "#94a3b8", "description" => "", "fg_colour" => "#fff", "label" => "project research", "tag_
class" => "tag-project_research", "value" => "c4840fda-5983-4081-be05-bdb956ccc714"}]...

Release 0.1.5

Audit all existing code for documentation quality, documenting missing functionality; ensure all functionality has type specifications; ensure all backend functionality has at least basic unit tests defined; add property tests where relevant.

  • [ ] Add field(s) to projects
    • [ ] End date, project review date, deadline date, etc.
    • [ ] Completed, completion notes, type of completion, e.g. finished, cancelled, deprioritised, etc.
  • [ ] UI and UX improvements
    • [ ] Convert all colour references to OKCLH
    • [ ] On timer note timeline, next to the created_on date, display the updated_on date in a visually highlighted way, showing that a note was edited and when
    • [ ] Ensure a second warning message is displayed to the user, ensuring they truly understand the impact of deleting a timer with notes attached
    • [ ] Look for good UX examples, as this is likely to become a UX annoyance, more than a saviour of data loss
    • [ ] Develop a card component
      • [ ] Wrap the quote of the day component in a card, for a more visually delineated aesthetic
      • [ ] Apply the quote component on the show view, cleaning up extraneous information
      • [ ] Apply the quote component on the listing view, creating a new listing interface, moving away from a merely tabular presentation
  • [ ] Create new feature, recording time spent in economic territories/countries, for nomads, showing how close to limit they are, according to the prevailing legislation
    • [ ] Create user_preferences entity
    • [ ] Create notifications entity
    • [ ] Create visa_types entity
    • [ ] Create visas entity
    • [ ] Create visa_blocks entity
    • [ ] Create country_visa_blocks entity
  • [ ] Increase the power of knowledge base notes, through forced spaced repetition, automated by the system
  • [ ] Make notes accessible to uses outside the application, through a text editor, provided in Markdown and possibly plain text formats
  • [ ] Today view
    • [ ] Provide daily navigation facility: back and forward a day; jump to today
  • [ ] Timer reporting and analysis
    • [ ] Develop tag-based filtering in the reporting view
    • [ ] Report on aggregate time spent, or timed, by tag, reporting on tag show page
    • [ ] Report on aggregate time spent by activity type, reporting on activitytype _show page
  • [ ] Develop soft-delete/undelete in database (Automatic Undo/Redo Using SQLite)

Release 0.1.6

  • [ ] Expand full text search to encompass all relevant tables and fields in application
    • [ ] Enable SQLite notes fields full-text search (timers, business partners, projects)
    • [ ] Enable SQLite description fields full-text search (tags, projects)
  • [ ] Use SQLite built-in functionality to regularly create database backup

Release 0.2

By this point, the application is not only fully self-hosted, but can also be used by a wider range of users—it is not yet widely usable, but is acceptable to power users and those willing to be active testers of the system.

During the lifetime of this release, adopt one consistent UI component system, converting the application to using it. Fully audit the entire user interface, unifying it in a new direction, ensuring the system is consistent and visually easy to use.

  • [ ] Audit other timers for strengths and weaknesses
  • [ ] Permit pausing and resuming timers; add forward-pointing field to next timer, like a linked list
  • [ ] Extend tagging functionality
    • [ ] Provide way to deactivate old tags
    • [ ] Make it possible to merge tags which are similar, where having both starts causing complications
    • [ ] Develop way to create tag hierarchies
  • [ ] UI/UX improvements
    • [ ] Select a UI component framework, to aid in the building of a modern web app
    • [ ] Resize datetime, duration and duration unit controls to more efficiently use space
    • [ ] Redevelop all series 0.1.x views, modularising displays into reusable components
    • [ ] Improve on cryptic or incomplete UI error messages
    • [ ] Calculate duration of open timers, client-side, updating continuously
    • [ ] Replace timer listing description pop-up (title attribute), with a proper HTML-formatted popover component

Release 0.3

  • [ ] UI/UX improvements
    • [ ] Incorporate Gov.uk Design System (https://design-system.service.gov.uk/) accessibility and user interface/experience decisions, starting from input controls
    • [ ] Start implementing colour palette
    • [ ] Improve presentation of currency fields; at present they use an input control of type ‘number’ which is unintuitive UX
  • [ ] Look into default timestamps() fields; it appears that datetime stamps are in UTC, where local timezone may be preferable
    • [ ] This is most specifically important for timestamps recorded for notes and activities, where the times reported may be relied on by users

Someday/maybe

Multitasking

One major area at which web applications fall short is multitasking; in the desktop paradign, we have been trained to enjoy the ability to run multiple programs side by side, and to open windows next to each other for cross-reference. Web apps cannot do this, and usually—at best—only provide modal content as an attempt at a solution.

Logseq provides a real alternative to this problem, taking its cue from TiddlyWiki: it opens a permanent sidebar, which can be populated with any kind of content. This content can be stacked up endlessly, any or all items can be minimised to reduce clutter, and any and all can also be closed. The sidebar stays populated with the option of choice for the duration of the session.

  • [ ] Multitasking

    • [ ] Provide a sidebar in which any type of content, and any number of entitits can be openedo Once opened, this content lives in the sidebar for continues reference; any item can be minimised or closed (‘Logseq: A Privacy-First, Open-Source Knowledge Base’).
    • [ ] This sidebar is a permanent companion to the app. Whichever area of the system people are in, the sidebar is present (though it can be hidden), with the information previously opened in it (‘Logseq: A Privacy-First, Open-Source Knowledge Base’.).
  • Start creating an undo feature, reducing reliance on confirmation dialogs, particularly for deletions

    • Build an audit trail-like functionality, to be able to undo any deletion or modification, at any time, as well as to see a history of actions taken
  • Document truncate and markdown_to_html functions

  • Markdown and other markup languages

    • Provide ability to use other popular markup languages: Org-mode, TiddlyWiki, etc.
    • Refactor conversion of plain text to Markdown everywhere; should interpretation happen at table layout level, or earlier at query level?
    • Create a dedicated field to markdown text, and another for HTML, to improve performance, by not requiring just in time mardown interpretation
  • Expand role of activity types beyond the hour rate, to act as a rigid categorisation for major types of activities, which cannot be entrusted to tags only, e.g. exercise, learning, professional development

    • Automate billable, duration unit measurements, and tags within it; selecting this on an activity should automatically adjust these attributes on a timer
  • Security improvements

Interface

  • [ ] Develop keyboard shortcut functionality for an improved power-user interface
  • [ ] Develop command-line interface, providing another input method for power users
  • [ ] Develop voice recognition interface, making it possible to use aspects of the application in circumstances where a keyboard doesn’t exist (watches), or is impractical (phones), or merely undesirable (tablets)
  • [ ] Develop self-contained version of the app—LiveView Native—packaging it as a macOS desktop app, and an iOS iPhone and iPad app, with a potential iWatch app where timers can be quickly started and stopped

References

  1. logseq. ‘Logseq: A Privacy-First, Open-Source Knowledge Base’, 29 July 2024. https://logseq.com.