diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..3a904de --- /dev/null +++ b/.gitignore @@ -0,0 +1,15 @@ +node_modules/ +dist/ +.vscode/ +.DS_Store +.idea +.run +.vite/ + +local/ +build/ +bin/ +wailsjs/ + +Gemfile.lock +_site \ No newline at end of file diff --git a/docs/Gemfile b/docs/Gemfile new file mode 100644 index 0000000..d1e5ddc --- /dev/null +++ b/docs/Gemfile @@ -0,0 +1,23 @@ +source "https://rubygems.org" + +gem "bulma-clean-theme" +group :jekyll_plugins do + gem "github-pages", "~> 231" + gem 'jemoji' +end + +# Windows and JRuby does not include zoneinfo files, so bundle the tzinfo-data gem +# and associated library. +platforms :mingw, :x64_mingw, :mswin, :jruby do + gem "tzinfo", ">= 1", "< 3" + gem "tzinfo-data" +end + +# Performance-booster for watching directories on Windows +gem "wdm", "~> 0.1.1", :platforms => [:mingw, :x64_mingw, :mswin] + +# Lock `http_parser.rb` gem to `v0.6.x` on JRuby builds since newer versions of the gem +# do not have a Java counterpart. +gem "http_parser.rb", "~> 0.6.0", :platforms => [:jruby] + +gem "webrick", "~> 1.8" diff --git a/docs/_config.yaml b/docs/_config.yaml new file mode 100644 index 0000000..f02795b --- /dev/null +++ b/docs/_config.yaml @@ -0,0 +1,59 @@ +# Site settings +# These are used to personalize your new site. If you look in the HTML files, +# you will see them accessed via {{ site.title }}, {{ site.email }}, and so on. +# You can create any custom variable you would like, and they will be accessible +# in the templates via {{ site.myvariable }}. + +title: Taskmail +description: >- + Kanban-style email client + +github_username: badarsebard +gh_sponsor: badarsebard +domain: taskmail.-is-local.org +url: "https://taskmail.is-local.org" + +defaults: + - scope: + path: "" + type: "pages" + values: + hide_hero: true + +images: "/assets/images" +favicon: "/assets/images/favicon-16x16.png" + +feed: + disable_in_development: true +google_analytics: false + +# Build settings +theme: bulma-clean-theme +fixed_navbar: top + +plugins: + - jemoji +# - jekyll-feed + +include: + - .well-known + +# Exclude from processing. +# The following items will not be processed, by default. +# Any item listed under the `exclude:` key here will be automatically added to +# the internal "default list". +# +# Excluded items can be processed by explicitly listing the directories or +# their entries' file path in the `include:` list. + +exclude: + - .sass-cache/ + - .jekyll-cache/ + - gemfiles/ + - Gemfile + - Gemfile.lock + - node_modules/ + - vendor/bundle/ + - vendor/cache/ + - vendor/gems/ + - vendor/ruby/ diff --git a/docs/_data/navigation.yaml b/docs/_data/navigation.yaml new file mode 100644 index 0000000..c08be76 --- /dev/null +++ b/docs/_data/navigation.yaml @@ -0,0 +1,9 @@ +- name: Roadmap + link: /roadmap + external: false +- name: Data Schema + link: /schema + external: false +- name: GitHub + link: https://github.com/badarsebard/Taskmail + external: true \ No newline at end of file diff --git a/docs/_includes/footer.html b/docs/_includes/footer.html new file mode 100644 index 0000000..13a1cdc --- /dev/null +++ b/docs/_includes/footer.html @@ -0,0 +1,15 @@ + \ No newline at end of file diff --git a/docs/_includes/head-scripts.html b/docs/_includes/head-scripts.html new file mode 100644 index 0000000..dc55a77 --- /dev/null +++ b/docs/_includes/head-scripts.html @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/docs/_includes/header.html b/docs/_includes/header.html new file mode 100644 index 0000000..7ca68b9 --- /dev/null +++ b/docs/_includes/header.html @@ -0,0 +1,73 @@ + \ No newline at end of file diff --git a/docs/assets/css/app.scss b/docs/assets/css/app.scss new file mode 100644 index 0000000..9422b43 --- /dev/null +++ b/docs/assets/css/app.scss @@ -0,0 +1,10 @@ +--- +--- + +.content{ + padding: 0 10rem; +} + +$primary: #1F2937FF; +// Import Main CSS file from theme +@import "main"; \ No newline at end of file diff --git a/docs/assets/images/favicon-16x16.png b/docs/assets/images/favicon-16x16.png new file mode 100644 index 0000000..ad6a8e5 Binary files /dev/null and b/docs/assets/images/favicon-16x16.png differ diff --git a/docs/assets/images/favicon-32x32.png b/docs/assets/images/favicon-32x32.png new file mode 100644 index 0000000..abb48e1 Binary files /dev/null and b/docs/assets/images/favicon-32x32.png differ diff --git a/docs/assets/images/favicon.ico b/docs/assets/images/favicon.ico new file mode 100644 index 0000000..c1300c2 Binary files /dev/null and b/docs/assets/images/favicon.ico differ diff --git a/docs/assets/images/github-mark-white.png b/docs/assets/images/github-mark-white.png new file mode 100644 index 0000000..50b8175 Binary files /dev/null and b/docs/assets/images/github-mark-white.png differ diff --git a/docs/media/logo.png b/docs/assets/images/logo.png similarity index 100% rename from docs/media/logo.png rename to docs/assets/images/logo.png diff --git a/docs/assets/images/taskmail_demo.png b/docs/assets/images/taskmail_demo.png new file mode 100644 index 0000000..2ccbc9c Binary files /dev/null and b/docs/assets/images/taskmail_demo.png differ diff --git a/docs/development.md b/docs/development.md new file mode 100644 index 0000000..bc1e801 --- /dev/null +++ b/docs/development.md @@ -0,0 +1,2 @@ + +# Development \ No newline at end of file diff --git a/docs/graph_app_registration.md b/docs/graph_app_registration.md new file mode 100644 index 0000000..a031dd4 --- /dev/null +++ b/docs/graph_app_registration.md @@ -0,0 +1,2 @@ + +# Graph App Registration diff --git a/docs/README.md b/docs/index.md similarity index 78% rename from docs/README.md rename to docs/index.md index 4d0ac5a..125c137 100644 --- a/docs/README.md +++ b/docs/index.md @@ -1,5 +1,9 @@ - +--- +title: Taskmail +--- +Taskmail demo screenshot + Taskmail is an app that combines an email client with a Kanban-style task board. Emails and tasks are presented in the same way and can be managed together or even combined. ## Active Development diff --git a/docs/layouts.txt b/docs/layouts.txt new file mode 100644 index 0000000..f9517c3 --- /dev/null +++ b/docs/layouts.txt @@ -0,0 +1,167 @@ +# Component Layouts +## App +----------------------------------------- +| Banner | +----------------------------------------- +| | | Canvas | +| S | M | | +| i | a | | +| d | i | | +| e | l | | +| b | b | | +| a | o | | +| r | x | | +| | | | +----------------------------------------- + +## Sidebar (Expanded) +--------------- +| | // expand/collapse icon +| | +| Accounts | // accounts section label +| | // user icon | account name +| | // user icon | account name +| + Add | // plus icon | Add +| | +| Folders | // folders section label +| Inbox | // inbox icon | folder name +| Sent | // sent icon | folder name +| Drafts | // drafts icon | folder name +| Trash | // trash icon | folder name +| Archive | // archive icon | folder name +| | +| | +| | +| | +--------------- + +## Sidebar (Collapsed) +------- +| | // expand/collapse icon +| | +| | // user icon +| | // user icon +| + | // plus icon +| | +| | // inbox icon +| | // sent icon +| | // drafts icon +| | // trash icon +| | // archive icon +| | +| | +| | +| | +------- + +## Mailbox +--------------- +| search bar | +| | +| Card | +| Card | +| Card | +| | +| | +| | +| | +| | +| | +| | +| | +| | +| | +| | +| | +--------------- + +## Canvas (Board) +------------------------------------- +| Columns | Expanded | C | + | Done | +| | | o | A | | +| Card | Card | l | d | Card | +| Card | Card | l | d | Card | +| Card | | a | | Card | +| | | p | B | Card | +| | | s | u | | +| | | e | t | | +| | | d | t | | +| | | | o | | +| | | | n | | +| | | | | | +------------------------------------- + +## Canvas (Details) +------------------------------------- +| Header | +|-----------------------------------| +| Track | +|-----------------------------------| +| Conversation | +| Message 1 | +| Message 2 | +| Message 3 | +|-----------------------------------| + +## Card +---------------------------------- +| From | H | // icon is FROM initials or clipboard, Hover Palette (HoP) overlays timestamp and appears on card hover +| | Subject... Time| o | // light vertical bar between top and bottom icons only when bottom icon displays +| Preview | P | // FROM, Subject, and Time in wrapped flexbox, FROM for email only +---------------------------------- // bottom icon is paperclip only when there is an attachment +| (tag color) (tag color) | // tags, narrow pills +---------------------------------- +| (Snooze) (Due) (to-dos m/n) | // flex box +| (notes #) (group #) | +---------------------------------- +| + Add To-do | // add to-do +| To-do 1 | // to-dos +---------------------------------- +| + Add Note | // add note +| Note 1 | // notes +| Note 2 | +---------------------------------- +|*| |----------------------------| // |*| is a vertical colored (cyan?) bar +|*| | Sub-card 1 | // sub-cards +|*| | | // no grouping in sub-cards +|*| | | // no snooze in sub-cards +|*| |----------------------------| +|*| |----------------------------| +|*| | Sub-card 2 | +|*| | | +|*| | | +|*| |----------------------------| + + + +## Card (Untracked) (!Hover) +------------------------------------- +| FROM | +| Subject... Time | +| Preview | +------------------------------------- + +## Card (Tracked) (!Hover) +------------------------------------- +| FROM | +| Subject... Time | +| Preview | +------------------------------------- +| Column Name | +------------------------------------- + +## Card (Untracked) (Hover) +------------------------------------- +| FROM | | // mark done +| Subject... Ti| | // move to column | timestamp covered +| Preview | | // delete +------------------------------------- + +## Card (Tracked) (Hover) +------------------------------------- +| FROM | | // mark seen +| Subject... Ti| | // timestamp covered +| Preview | | // locate card +------------------------------------- +| Column Name | +------------------------------------- \ No newline at end of file diff --git a/docs/roadmap.md b/docs/roadmap.md index b830388..8988301 100644 --- a/docs/roadmap.md +++ b/docs/roadmap.md @@ -1,14 +1,29 @@ +--- +title: Roadmap +permalink: /roadmap +--- + # Roadmap ## Initial Release -- [ ] Email client support for Outlook -- [ ] Task board support - - [ ] User-defined columns +- [x] Email client support for Outlook +- [x] Basic task board support + - [x] Add/delete columns + - [x] Collapse/expand columns + - [x] Add/delete cards + - [x] Drag and drop cards + - [x] Basic card actions: done, move, delete, seen, locate + {: style='list-style-type: none'} + +- [ ] Additional task board features - [ ] Due dates - [ ] Snoozing - [ ] Notes + - [ ] Todo items - [ ] Tags - [ ] Attachments - [ ] Grouping cards / sub-cards + {: style='list-style-type: none'} +{: style='list-style-type: none'} ## Todoist Integration - [ ] Add Todoist integration @@ -33,3 +48,7 @@ - [ ] Window pop-outs - [ ] Drafts - [ ] Reading pane + +## Improvements +- [ ] Address fields use tags instead of raw strings +- [ ] Connect address fields to contacts (people API) \ No newline at end of file diff --git a/docs/schema.md b/docs/schema.md new file mode 100644 index 0000000..f5204a9 --- /dev/null +++ b/docs/schema.md @@ -0,0 +1,168 @@ +--- +title: Data Schema +permalink: /schema +--- + +:warning: __WARNING: This document is a work in progress and may not be accurate or complete during active development.__ :warning: + +# App Collections + +## Accounts `accounts` + +| Field | Type | Notes | +|-------------------|---------------------|-----------------| +| _id | UUIDv4 | Clover internal | +| address | string | Email address | +| active | bool | | +| folderDeltaLink | string | | +| messageDeltaLinks | map\[string\]string | | +| expandMenu | bool | | + +# Account Collections + +## Folders `folders` + +| Field | Type | Notes | +|----------------|----------|-----------------| +| _id | UUIDv4 | Clover internal | +| id | string | MS Graph Id | +| displayName | string | | +| parentFolderId | string | MS Graph Id | +| isHidden | bool | | +| childFolders | string[] | MS Graph Ids | + +## Messages `messages` + +| Field | Type | Notes | +|----------------------------|-----------|-----------------| +| _id | UUIDv4 | Clover internal | +| id | string | MS Graph Id | +| conversationIndex | byte[] | | +| sentDateTime | timestamp | | +| sender | object | | +| ⤷ name | string | | +| ⤷ address | string | | +| subject | string | | +| bodyPreview | string | | +| @odata.type | string | | +| createdDateTime | timestamp | | +| lastModifiedDateTime | timestamp | | +| changeKey | string | | +| categories | string[] | | +| receivedDateTime | timestamp | | +| hasAttachments | bool | | +| internetMessageId | string | | +| importance | string | enum: 0, 1, 2 | +| parentFolderId | string | MS Graph Id | +| conversationId | string | MS Graph Id | +| isDeliveryReceiptRequested | bool | | +| isReadReceiptRequested | bool | | +| isRead | bool | | +| isDraft | bool | | +| webLink | string | | +| inferenceClassification | string | enum: 0, 1 | +| body | object | | +| ⤷ contentType | string | | +| ⤷ content | string | | +| from | object | | +| ⤷ name | string | | +| ⤷ address | string | | +| toRecipients | object[] | | +| ⤷ name | string | | +| ⤷ address | string | | +| ccRecipients | object[] | | +| ⤷ name | string | | +| ⤷ address | string | | +| bccRecipients | object[] | | +| ⤷ name | string | | +| ⤷ address | string | | +| replyTo | object[] | | +| ⤷ name | string | | +| ⤷ address | string | | +| flag | object | | +| ⤷ flagStatus | string | enum: 0, 1, 2 | +| attachments | object[] | | +| ⤷ id | string | MS Graph Id | +| ⤷ contentType | string | | +| ⤷ isInLine | bool | | +| ⤷ lastModifiedDateTime | timestamp | | +| ⤷ name | string | | +| ⤷ size | int | | + +## Attachments `attachments` + +| Field | Type | Notes | +|----------------------|-----------|-----------------| +| _id | UUIDv4 | Clover internal | +| id | string | MS Graph Id | +| contentType | string | | +| isInLine | bool | | +| lastModifiedDateTime | timestamp | | +| name | string | | +| size | int | | +| contentBytes | byte[] | | +| contentId | string | | +| contentLocation | string | | + +## Conversations `conversations` + +| Field | Type | Notes | +|---------------------|-----------|-----------------| +| _id | UUIDv4 | Clover internal | +| id | string | MS Graph Id | +| messages | object[] | MessageSummary | +| ⤷ id | string | MS Graph Id | +| ⤷ conversationIndex | byte[] | | +| ⤷ receivedDateTime | timestamp | | +| ⤷ sender | object | | +| ⤷ ⤷ name | string | | +| ⤷ ⤷ address | string | | +| ⤷ subject | string | | +| ⤷ bodyPreview | string | | +| folders | string[] | MS Graph Ids | +| latestTime | timestamp | | + +## Cards `cards` + +| Field | Type | Notes | +|----------------|-----------|---------------------------| +| _id | UUIDv4 | Clover internal | +| done | bool | | +| seen | bool | | +| conversationId | UUIDv4 | fk: conversations._id | +| sender | object | message only | +| ⤷ name | string | | +| ⤷ address | string | | +| folders | string[] | fk: conversations.folders | +| title | string | | +| time | timestamp | | +| bodyPreview | string | | +| body | string | | +| column | UUIDv4 | fk: columns._id | +| tags | object[] | | +| ⤷ name | string | | +| ⤷ color | string | 6-digit HEX code | +| snoozeDate | timestamp | | +| dueDate | timestamp | | +| todoItems | object[] | | +| ⤷ text | string | | +| ⤷ completed | bool | | +| notes | object[] | | +| ⤷ text | string | | +| ⤷ time | timestamp | | +| attachments | UUIDv4[] | fk: attachments._id | +| parentId | UUIDv4 | fk: cards._id | +| hasChildren | bool | | + +## Columns `columns` + +| Field | Type | Notes | +|-----------|--------|-----------------------------------------------------------------| +| _id | UUIDv4 | Clover internal | +| board | string | Value is static `default. Other values to be implemented later. | +| position | int | | +| title | string | | +| color | string | 6-digit HEX code | +| collapsed | bool | | +| sortType | string | enum: due, received, created | +| sortDir | string | enum: asc, desc | \ No newline at end of file