Warning, /pim/kube/docs/requirements.md is written in an unsupported language. File is not indexed.

0001 # Personas
0002 Note: This is a draft only
0003 
0004 ## Roadwarrior
0005 * Fires up Kube quickly to see what's up next (it's not constantly open)
0006 * Has to deal with bad/intermittent network connection
0007 * Relies on offline capabilities to access content
0008 * Uses various mobile devices
0009 
0010 ## Average Desktop User
0011 * Relies on notifications to immediately see when he's contacted.
0012 * Requires a simple and efficient UI
0013 * Doesn't customize a lot
0014 * Has constant internet access
0015 * Works 9 to 5, doesn't care outside of business hours
0016 
0017 ## Power Desktop User
0018 * Inherits Average Desktop User Requirements
0019 * Regularly checks email on the go (mobile)
0020 * Regularly checks calendar on the go (mobile)
0021 * Creates events on the go (mobile)
0022 
0023 # Kontact Inventory
0024 We need to go through the current codebase, assess what features are available, how the implementation looks and where it is, and to what extent the code is reusable.
0025 This will help us in figuring out the useful feature set, and will allow us to reuse the lessons learned that are embedded in the codebase.
0026 
0027 This inventory is currently hosted in an ikiwiki (ikiwiki.info) git repository(https://invent.kde.org/aseigo/KontactCodebaseInventory.git)
0028 
0029 # Target platforms
0030 The codebase is supposed to be portable across a range of platforms.
0031 
0032 Any recent linux platform should work. For Windows and macOS POC's have been created, which could be revived with moderate effort.
0033 
0034 Android has not been attempted so far.
0035 
0036 # Dependencies
0037 Since the codebase needs to be portable across various platforms old and new, dependencies should be managed that they are as little and as low as possible. While we don't want to reinvent the wheel constantly or work with ancient technology, each additional dependency or dependency bump needs to be justified and we need to evaluate wether that results in a problem with any of the target platforms. This evaluation of course includes transitive dependencies.
0038 
0039 Currently available dependencies:
0040 
0041 * A c++ 20 compatible compiler
0042 * Qt 5.13
0043 * kf5-kcodecs
0044 ** dependency of kmime, email address handling (KEmailAddress)
0045 * kf5-kmime
0046 ** Parsing and assembling of mails
0047 * libcurl 7.20
0048 ** mailtransport
0049 * gpgme
0050 ** crypto-stack, currently only gpg
0051 
0052 # Codebase
0053 
0054 ## Requirements
0055 * Each module has at least rudimentary tests that can then be extended
0056     * Tests need to be deterministic, no random timeouts to check if something already happened, only `QTRY_VERIFY` and alike is allowed.
0057 * Clear layering. No depending on Sink from everywhere.
0058 * Each module comes with a clear set of justified dependencies.
0059 * Commented code is only allowed in conjunction with a task in phabricator. No dead/commented code.
0060 * Each module requires a clear interface that allows the module internals to be replaced eventually.
0061 * UI modules need to be separated from non-UI parts. All UI parts need to be eventually replacable by QML equivalents.
0062 * No dialogs in non-UI parts.
0063 * New features are only added after having been selected from the roadmap for a future release
0064 * An accounts based configuration for everything
0065 * No non-persistant data in config files (collection ids...)
0066 
0067 * No KParts
0068 * No KXMLGui
0069 
0070 ## Guidelines
0071 * Singletons that hold a modifyable state should be avoided.
0072 * Where standards are available we strive to follow those, and deviations from the standard are avoided as much as possible. Repurposing of standard elements should be avoided altogether.
0073 * Fallbacks (i.e. for configs ), should be applied in a single place only, and should be avoided wherever possible.
0074 * Libraries need to be purpose built and with clear responsibilities. No artificial boundaries that don't help something.
0075 * Modal dialogs should be avoided.
0076 
0077 ## Coding Guidelines
0078 * Run the tests before you push
0079 
0080 # Roadmap
0081 The final roadmap lives on invent.kde.org (previously phabricator.kde.org).
0082 
0083 Here's just an outdated list of features we once aimed for:
0084 
0085 ### Mail
0086 * folderlist (with search)
0087 * smart folders
0088 * multi account & identity
0089 * threading/conversation view
0090 * actions
0091     * flags: read/unread/important
0092     * delete/move/copy
0093     * reply to/reply to all/forward
0094     * bulk operations on selected/thread
0095     * move to special folder
0096         * archive
0097         * move to trash
0098 * attachments
0099 * crypto
0100 * search
0101 * tags
0102 * create event/todo from mail
0103 * snippets
0104 * mail composer
0105 * shared folders / acls
0106 * undo
0107 
0108 ### Calendar
0109 * calendarlist (with search)
0110 * smart calendars
0111 * multi account & identity
0112 * create/edit/modify event/todo (journal?)
0113 * week/month view
0114 * ical import/export
0115 * delegation of events/todos
0116 * iTip handling
0117 * freebusy for scheduling
0118 * tags
0119 
0120 ### Todos
0121 * todolists
0122 * create/edit/modify todo
0123 * tags
0124 * todo editor
0125     * summary/content/start date/due date
0126 * delegation of todos
0127 
0128 ## Feature Brainstorming
0129 * Why is it the sender of a message that dictates how/where I receive/read the message?
0130 * VOIP system knows when you're away, allows to forward the call to your mobile
0131 
0132 ### Desktop
0133 * Autocomplete conversations from sent folder: Automatically merge sent messages that belong to a conversation/thread from the sent folder (making it unnecessary to send a copy to yourself or alike)
0134 * Inbox for everything: upcoming events, uncategorized todos, open invitations, email, delegated todos. This could either be a mixed inbox for everything (as in what you have to go through), or an overview page with multiple inboxes.
0135 * No invitation in mail inbox: Mail is a transport mechanism and there is little reason to clutter your mail inbox with invitations. So move invitations to a separate queue.
0136 * Fuzzy match on folder search: It should be as easy and fast as command-t for vim (meaning as fast as you type)
0137 
0138 ### Mobile
0139 * Swipe left right through email inbox (tinder for kolab aka "kinder")
0140     * Same works for invitations (accept/decline)
0141     * Same for todos, done/do later (if not touched keep for today)
0142 * Quick inline reply in mails (what's app style)
0143 * Note taking/todo management on the run, with categorization workflow on the desktop (or also on mobile)
0144 
0145 ## Platforms
0146 Desktop linux is the primary platform that we'll pursue first, because it's the easist target. As soon as we have a viable proof of concept and the architecture is set, Windows and OS X will follow, so we ensure early on that the project works on all platforms.
0147 
0148 Android will be tried in the form of a research project, and depending on the difficulties we face the situation will be reevaluated.
0149 
0150 # Deliverables
0151 These are the high-level aims that we have to work towards. This list is not a final list of deliverables, but should convey the areas we need to work on. More detailed information should eventually be available on phabricator.
0152 
0153 * Project Vision
0154     * Target Users & Usecases
0155         * Personas
0156         * Scenarios
0157         * Description of environment
0158     * UI Mockups for envisioned clients
0159     * The target feature-set
0160 
0161 * Milestones
0162     * First working product: A simple email application for the linux desktop
0163         * read-only first
0164         * read-write second
0165     * Some intermediate releases: Largely depends on what deliverables we want, and wether we can use releases that only contain a subset of the groupware types.
0166         * Application by application (calendar, email, ...)
0167         * First release on other platforms (e.g. android)
0168     * Production ready (1.0): Includes calendar, email, addressbook, notes, tasks with basic functionality (which we need to define)
0169     * From here on we implement feature by feature from the roadmap
0170 
0171 * Implementation
0172     * Inventory of exiting kdepim: This will help to fill the functional blocks, and help in carving out the require featureset.
0173     * Functional blocks: We need to identify the function blocks that we require, see to what extent they are already existing and how we can reuse what's there already. The functinal blocks should largely follow from the identified requirements.
0174     * Prototype the domain logic: We need to prototype the domain logic as envisioned to see wether that works out. This will be an ongoing process especially while working towards the first milestone.
0175     * Prototype with domain logic + Sink + trivial UI. Show that this can work in it's basics.