Sfoglia il codice sorgente

Remove the website (#4369)

Merlijn Vos 2 anni fa
parent
commit
6430a00aa9
100 ha cambiato i file con 10 aggiunte e 7364 eliminazioni
  1. 0 92
      .browsersync.js
  2. 0 61
      .github/workflows/website.yml
  3. 0 30
      bin/prepare-web-deploy
  4. 0 10
      netlify.toml
  5. 3 17
      package.json
  6. 6 56
      private/locale-pack/index.mjs
  7. 1 4
      private/locale-pack/package.json
  8. 0 21
      website/VUEORG_LICENSE
  9. 0 153
      website/_config.yml
  10. 0 102
      website/build-examples.js
  11. 0 3
      website/doc-order.json
  12. 0 279
      website/inject.js
  13. 0 52
      website/package.json
  14. 0 8
      website/postcss.config.js
  15. 0 55
      website/private_modules/hexo-renderer-uppyexamples/index.js
  16. 0 9
      website/private_modules/hexo-renderer-uppyexamples/package.json
  17. 0 71
      website/scripts/highlight.js
  18. 0 18
      website/scripts/scss.js
  19. 0 1
      website/src/CNAME
  20. 0 60
      website/src/_data/authors.yml
  21. 0 12
      website/src/_data/design_goals.yml
  22. 0 18
      website/src/_data/features.yml
  23. 0 6
      website/src/_data/plugins.yml
  24. 0 16
      website/src/_data/taglines.yml
  25. 0 47
      website/src/_posts/2016-06-uppy-begins.md
  26. 0 83
      website/src/_posts/2016-08-0.8.0.md
  27. 0 74
      website/src/_posts/2016-08-0.9.0.md
  28. 0 99
      website/src/_posts/2016-09-0.10.md
  29. 0 74
      website/src/_posts/2016-11-0.11.md
  30. 0 64
      website/src/_posts/2016-12-0.12.md
  31. 0 123
      website/src/_posts/2017-02-0.14.md
  32. 0 80
      website/src/_posts/2017-03-0.15.md
  33. 0 83
      website/src/_posts/2017-05-0.16.md
  34. 0 151
      website/src/_posts/2017-05-0.17.md
  35. 0 102
      website/src/_posts/2017-07-golden-retriever.md
  36. 0 111
      website/src/_posts/2017-08-0.18.md
  37. 0 98
      website/src/_posts/2017-09-0.19.md
  38. 0 180
      website/src/_posts/2017-10-0.20.md
  39. 0 136
      website/src/_posts/2017-10-0.21.md
  40. 0 178
      website/src/_posts/2017-12-0.22.md
  41. 0 191
      website/src/_posts/2018-02-0.23.md
  42. 0 144
      website/src/_posts/2018-04-0.24.md
  43. 0 103
      website/src/_posts/2018-06-0.25.md
  44. 0 77
      website/src/_posts/2018-07-0.26.md
  45. 0 105
      website/src/_posts/2018-08-0.27.md
  46. 0 104
      website/src/_posts/2018-10-0.28.md
  47. 0 91
      website/src/_posts/2018-12-0.29.md
  48. 0 108
      website/src/_posts/2019-03-0.30.md
  49. 0 41
      website/src/_posts/2019-03-liftoff-01.md
  50. 0 37
      website/src/_posts/2019-03-liftoff-02.md
  51. 0 51
      website/src/_posts/2019-03-liftoff-03.md
  52. 0 32
      website/src/_posts/2019-03-liftoff-04.md
  53. 0 16
      website/src/_posts/2019-03-liftoff-05.md
  54. 0 17
      website/src/_posts/2019-03-liftoff-06.md
  55. 0 132
      website/src/_posts/2019-04-1.0.md
  56. 0 42
      website/src/_posts/2019-04-liftoff-07.md
  57. 0 55
      website/src/_posts/2019-04-liftoff-08.md
  58. 0 51
      website/src/_posts/2019-04-liftoff-09.md
  59. 0 40
      website/src/_posts/2019-04-liftoff-10.md
  60. 0 48
      website/src/_posts/2019-04-liftoff-11.md
  61. 0 16
      website/src/_posts/2019-04-liftoff-12.md
  62. 0 17
      website/src/_posts/2019-04-liftoff-13.md
  63. 0 42
      website/src/_posts/2019-04-liftoff-14.md
  64. 0 45
      website/src/_posts/2019-04-liftoff-15.md
  65. 0 39
      website/src/_posts/2019-04-liftoff-16.md
  66. 0 43
      website/src/_posts/2019-04-liftoff-17.md
  67. 0 28
      website/src/_posts/2019-04-liftoff-18.md
  68. 0 16
      website/src/_posts/2019-04-liftoff-19.md
  69. 0 17
      website/src/_posts/2019-04-liftoff-20.md
  70. 0 34
      website/src/_posts/2019-04-liftoff-21.md
  71. 0 41
      website/src/_posts/2019-04-liftoff-22.md
  72. 0 50
      website/src/_posts/2019-04-liftoff-23.md
  73. 0 35
      website/src/_posts/2019-04-liftoff-24.md
  74. 0 18
      website/src/_posts/2019-04-liftoff-25.md
  75. 0 18
      website/src/_posts/2019-04-liftoff-26.md
  76. 0 17
      website/src/_posts/2019-04-liftoff-27.md
  77. 0 22
      website/src/_posts/2019-04-liftoff-28.md
  78. 0 35
      website/src/_posts/2019-04-liftoff-29.md
  79. 0 39
      website/src/_posts/2019-04-liftoff-30.md
  80. 0 151
      website/src/_posts/2019-08-1.3.md
  81. 0 169
      website/src/_posts/2019-10-1.5.md
  82. 0 70
      website/src/_posts/2019-11-1.6.md
  83. 0 68
      website/src/_posts/2019-12-1.7.md
  84. 0 112
      website/src/_posts/2020-03-1.9.md
  85. 0 563
      website/src/_posts/2020-03-custom-providers.md
  86. 0 54
      website/src/_posts/2020-04-1.10.md
  87. 0 105
      website/src/_posts/2020-04-1.13.md
  88. 0 47
      website/src/_posts/2020-07-1.18-image-editor.md
  89. 0 36
      website/src/_posts/2020-09-companion-2.0.md
  90. 0 54
      website/src/_posts/2020-10-1.22.md
  91. 0 105
      website/src/_posts/2020-11-1.23.md
  92. 0 98
      website/src/_posts/2020-12-1.24.md
  93. 0 53
      website/src/_posts/2021-01-1.25.md
  94. 0 82
      website/src/_posts/2021-02-1.26.md
  95. 0 96
      website/src/_posts/2021-04-1.27.md
  96. 0 79
      website/src/_posts/2021-04-1.29.md
  97. 0 80
      website/src/_posts/2021-07-1.30.md
  98. 0 255
      website/src/_posts/2021-08-2.0.md
  99. 0 121
      website/src/_posts/2021-12-2.1-2.3.md
  100. 0 72
      website/src/_posts/2022-03-2.4-2.7.md

+ 0 - 92
.browsersync.js

@@ -1,92 +0,0 @@
-/*
- |--------------------------------------------------------------------------
- | Browser-sync config file
- |--------------------------------------------------------------------------
- |
- | For up-to-date information about the options:
- |   http://www.browsersync.io/docs/options/
- |
- | There are more options than you see here, these are just the ones that are
- | set internally. See the website for more info.
- |
- |
- */
-module.exports = {
-    "ui": {
-        "port": 3001,
-        "weinre": {
-            "port": 8080
-        }
-    },
-    "files": [ "examples/bundle/*"],
-    "index": "index.html",
-    "watchOptions": {},
-    "server": true,
-    "proxy": false,
-    "port": 3000,
-    "middleware": false,
-    "serveStatic": ["examples/bundle"],
-    "ghostMode": {
-        "clicks": false,
-        "scroll": false,
-        "forms": {
-            "submit": false,
-            "inputs": false,
-            "toggles": false
-        }
-    },
-    "logLevel": "info",
-    "logPrefix": "BS",
-    "logConnections": false,
-    "logFileChanges": true,
-    "logSnippet": true,
-    "rewriteRules": false,
-    "open": "local",
-    "browser": "default",
-    "xip": false,
-    "hostnameSuffix": false,
-    "reloadOnRestart": false,
-    "notify": true,
-    "scrollProportionally": true,
-    "scrollThrottle": 0,
-    "scrollRestoreTechnique": "window.name",
-    "reloadDelay": 0,
-    "reloadDebounce": 0,
-    "plugins": [],
-    "injectChanges": true,
-    "startPath": null,
-    "minify": true,
-    "host": null,
-    "codeSync": true,
-    "timestamps": true,
-    "clientEvents": [
-        "scroll",
-        "input:text",
-        "input:toggles",
-        "form:submit",
-        "form:reset",
-        "click"
-    ],
-    "socket": {
-        "socketIoOptions": {
-            "log": false
-        },
-        "path": "/browser-sync/socket.io",
-        "clientPath": "/browser-sync",
-        "namespace": "/browser-sync",
-        "clients": {
-            "heartbeatTimeout": 5000
-        }
-    },
-    "tagNames": {
-        "less": "link",
-        "scss": "link",
-        "css": "link",
-        "jpg": "img",
-        "jpeg": "img",
-        "png": "img",
-        "svg": "img",
-        "gif": "img",
-        "js": "script"
-    }
-};

+ 0 - 61
.github/workflows/website.yml

@@ -1,61 +0,0 @@
-name: Deploy uppy.io
-
-on:
-  push:
-    branches: main
-    paths:
-      - yarn.lock
-      - 'website/**'
-      - '.github/workflows/website.yml'
-  workflow_dispatch:
-
-env:
-  YARN_ENABLE_GLOBAL_CACHE: false
-
-jobs:
-  deploy:
-    name: Deploy
-    runs-on: ubuntu-latest
-    steps:
-      - name: Checkout sources
-        uses: actions/checkout@v3
-      - name: Get yarn cache directory path
-        id: yarn-cache-dir-path
-        run: echo "dir=$(corepack yarn config get cacheFolder)" >> $GITHUB_OUTPUT
-
-      - uses: actions/cache@v3
-        id: yarn-cache # use this to check for `cache-hit` (`steps.yarn-cache.outputs.cache-hit != 'true'`)
-        with:
-          path: ${{ steps.yarn-cache-dir-path.outputs.dir }}
-          key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }}
-          restore-keys: |
-            ${{ runner.os }}-yarn-
-      - name: Install Node.js
-        uses: actions/setup-node@v3
-        with:
-          node-version: lts/*
-      - name: Install dependencies
-        run: corepack yarn install --immutable
-        env:
-          # https://docs.cypress.io/guides/references/advanced-installation#Skipping-installation
-          CYPRESS_INSTALL_BINARY: 0
-      - name: Build Uppy
-        run: corepack yarn run build
-      - name: Build website
-        run: corepack yarn run web:build
-      - name: Prepare deployment
-        run: corepack yarn run web:prepare-deploy --quiet
-        env:
-          DEPLOY_DIR: ${{github.workspace}}/_deploy
-      - name: Push to Github Pages
-        uses: crazy-max/ghaction-github-pages@v2
-        with:
-          target_branch: gh-pages
-          build_dir: _deploy # relative to `github.workspace`
-          committer: 'Uppy Bot <uppybot@uppy.io>'
-          author: 'Uppy Bot <uppybot@uppy.io>'
-          commit_message: Update transloadit/uppy website
-          fqdn: uppy.io
-          jekyll: false
-        env:
-          GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}}

+ 0 - 30
bin/prepare-web-deploy

@@ -1,30 +0,0 @@
-#!/usr/bin/env bash
-set -o pipefail
-set -o errexit
-set -o nounset
-# set -o xtrace
-
-ghpages_repo=${GHPAGES_REPO:-"transloadit/uppy"}
-ghpages_branch=${GHPAGES_BRANCH:-"gh-pages"}
-ghpages_url=${GHPAGES_URL:-"git@github.com:${ghpages_repo}.git"}
-
-localDir="${DEPLOY_DIR:-${HOME:-/home/${USER:-travis}}/.${ghpages_repo}/deploy}"
-echo "--> Preparing deployment in '${localDir}'.."
-mkdir -p "${localDir}"
-
-# Custom steps
-rsync \
-  --archive \
-  --delete \
-  --exclude=.git* \
-  --exclude=node_modules \
-  --exclude=lib \
-  --checksum \
-  --no-times \
-  --no-group \
-  --no-motd \
-  --no-owner \
-./website/public/ "${localDir}" > /dev/null
-
-echo 'This branch is just a deploy target. Do not edit. You changes will be lost.' \
-  |tee "${localDir}/README.md" > /dev/null

+ 0 - 10
netlify.toml

@@ -1,10 +0,0 @@
-[Settings]
-ID = "uppy"
-
-[main]
-# (no main build settings, we use Github Pages)
-
-[context.deploy-preview]
-command = "yarn run build && yarn run web:inject-disc && yarn run web:build"
-environment = { NODE_VERSION = "16" }
-publish = "website/public"

+ 3 - 17
package.json

@@ -31,7 +31,6 @@
     "packages/uppy",
     "private/*",
     "test/endtoend",
-    "website",
     "e2e"
   ],
   "devDependencies": {
@@ -108,6 +107,8 @@
     "vue-template-compiler": "workspace:*"
   },
   "scripts": {
+    "start:companion": "bash bin/companion.sh",
+    "start:companion:with-loadbalancer": "e2e/start-companion-with-load-balancer.mjs",
     "build:bundle": "yarn node ./bin/build-bundle.mjs",
     "build:clean": "rm -rf packages/*/lib packages/@uppy/*/lib packages/*/dist packages/@uppy/*/dist",
     "build:companion": "yarn workspace @uppy/companion build",
@@ -129,9 +130,6 @@
     "lint": "eslint . --cache",
     "release": "PACKAGES=$(yarn workspaces list --json) yarn workspace @uppy-dev/release interactive",
     "size": "echo 'JS Bundle mingz:' && cat ./packages/uppy/dist/uppy.min.js | gzip | wc -c && echo 'CSS Bundle mingz:' && cat ./packages/uppy/dist/uppy.min.css | gzip | wc -c",
-    "start:companion": "bash bin/companion.sh",
-    "start:companion:with-loadbalancer": "e2e/start-companion-with-load-balancer.mjs",
-    "start": "npm-run-all --parallel watch start:companion web:start",
     "e2e": "yarn build && yarn e2e:skip-build",
     "e2e:skip-build": "npm-run-all --parallel watch:js:lib e2e:client start:companion:with-loadbalancer e2e:cypress",
     "e2e:ci": "start-server-and-test 'npm-run-all --parallel e2e:client start:companion:with-loadbalancer' '1234|3020' e2e:headless",
@@ -154,19 +152,7 @@
     "watch:js:bundle": "onchange 'packages/{@uppy/,}*/src/**/*.js' --initial --verbose -- yarn run build:bundle",
     "watch:js:lib": "onchange 'packages/{@uppy/,}*/src/**/*.js' --initial --verbose -- yarn run build:lib",
     "watch:js": "npm-run-all --parallel watch:js:bundle watch:js:lib",
-    "watch": "npm-run-all --parallel watch:css watch:js",
-    "web:build-examples": "cd website && node build-examples.js",
-    "web:build": "npm-run-all web:inject-bundles-misc web:generate web:build-examples web:inject-frontpagecodesample",
-    "web:bundle-watch-inject": "onchange 'packages/uppy/dist/**/*.css' 'packages/uppy/dist/**/*.js' --initial --verbose -- yarn run web:inject-bundles-misc",
-    "web:clean": "cd website && touch db.json && yarn run hexo clean",
-    "web:prepare-deploy": "bash ./bin/prepare-web-deploy",
-    "web:generate": "cd website && touch db.json && yarn run hexo generate",
-    "web:inject-bundles-misc": "cd website && node inject.js",
-    "web:inject-frontpagecodesample": "yarn run web:generate && cp -f website/public/frontpage-code-sample.html website/themes/uppy/layout/partials/frontpage-code-sample.html && touch website/themes/uppy/layout/index.ejs",
-    "web:start-server": "cd website && touch db.json && node inject.js && node build-examples.js && yarn run hexo server",
-    "web:start": "yarn run web:start-server",
-    "web:watch-examples": "yarn run web:bundle-watch-inject && yarn run web:watch",
-    "web:watch": "npm-run-all build:lib --parallel watch:css web:watch-examples web:bundle-watch-inject web:start_server"
+    "watch": "npm-run-all --parallel watch:css watch:js"
   },
   "jest": {
     "automock": false,

+ 6 - 56
private/locale-pack/index.mjs

@@ -1,20 +1,12 @@
 /* eslint-disable no-console, prefer-arrow-callback */
 import path from 'node:path'
-import fs from 'node:fs'
-import { open, readFile, writeFile } from 'node:fs/promises'
+import { readFile, writeFile } from 'node:fs/promises'
 import { fileURLToPath } from 'node:url'
 
 import dedent from 'dedent'
-import { remark } from 'remark'
-import { headingRange } from 'mdast-util-heading-range'
-import remarkFrontmatter from 'remark-frontmatter'
-
-import remarkConfig from '../remark-lint-uppy/index.js'
 
 import { getLocales, sortObjectAlphabetically } from './helpers.mjs'
 
-const { settings: remarkSettings } = remarkConfig
-
 const root = fileURLToPath(new URL('../../', import.meta.url))
 
 const localesPath = path.join(root, 'packages', '@uppy', 'locales')
@@ -69,47 +61,6 @@ function generateTypes (pluginName, locale) {
   return writeFile(localePath, localeTypes)
 }
 
-async function generateLocaleDocs (pluginName) {
-  const fileName = `${pluginName}.md`
-  const docPath = path.join(root, 'website', 'src', 'docs', fileName)
-  const localePath = path.join(root, 'packages', '@uppy', pluginName, 'src', 'locale.js')
-  const rangeOptions = { test: 'locale: {}', ignoreFinalDefinitions: true }
-
-  let docFile
-
-  try {
-    docFile = await open(docPath, 'r+')
-  } catch (err) {
-    console.error(
-      `⚠️  Could not find markdown documentation file for "${pluginName}". Make sure the plugin name matches the markdown file name.`,
-    )
-    throw err
-  }
-
-  const file = await remark()
-    .data('settings', remarkSettings)
-    .use(remarkFrontmatter)
-    .use(() => (tree) => {
-      // Replace all nodes after the locale heading until the next heading (or eof)
-      headingRange(tree, rangeOptions, (start, _, end) => [
-        start,
-        {
-          type: 'code',
-          lang: 'js',
-          meta: null,
-          value: fs.readFileSync(localePath, 'utf-8').trimEnd(),
-        },
-        end,
-      ])
-    })
-    .process(await docFile.readFile())
-
-  const { bytesWritten } = await docFile.write(String(file), 0, 'utf-8')
-  await docFile.truncate(bytesWritten)
-
-  await docFile.close()
-}
-
 const [[locales, combinedLocale], fileString] = await Promise.all([
   getLocalesAndCombinedLocale(),
   readFile(templatePath, 'utf-8'),
@@ -118,13 +69,12 @@ const formattedLocale = JSON.stringify(combinedLocale, null, ' ')
 
 await Promise.all([
   // Populate template
-  writeFile(englishLocalePath, fileString.replace('en_US.strings = {}', `en_US.strings = ${formattedLocale}`))
-    .then(() => console.log(`✅ Generated '${englishLocalePath}'`)),
+  writeFile(
+    englishLocalePath,
+    fileString.replace('en_US.strings = {}', `en_US.strings = ${formattedLocale}`),
+  ).then(() => console.log(`✅ Generated '${englishLocalePath}'`)),
   // Create locale files
   ...Object.entries(locales).flatMap(([pluginName, locale]) => [
-    generateLocaleDocs(pluginName)
-      .then(() => console.log(`✅ Generated locale docs for ${pluginName}`)),
-    generateTypes(pluginName, locale)
-      .then(() => console.log(`✅ Generated types for ${pluginName}`)),
+    generateTypes(pluginName, locale).then(() => console.log(`✅ Generated types for ${pluginName}`)),
   ]),
 ])

+ 1 - 4
private/locale-pack/package.json

@@ -11,9 +11,6 @@
   "dependencies": {
     "chalk": "^5.0.0",
     "dedent": "^0.7.0",
-    "glob": "^8.0.0",
-    "mdast-util-heading-range": "^3.1.0",
-    "remark": "^14.0.1",
-    "remark-frontmatter": "^4.0.1"
+    "glob": "^8.0.0"
   }
 }

+ 0 - 21
website/VUEORG_LICENSE

@@ -1,21 +0,0 @@
-The MIT License (MIT)
-
-Copyright (c) 2013-2015 Yuxi Evan You
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.

+ 0 - 153
website/_config.yml

@@ -1,153 +0,0 @@
-# Hexo Configuration
-## Docs: http://zespia.tw/hexo/docs/configuration.html
-## Source: https://github.com/tommy351/hexo/
-
-# Theme
-root_domain: transloadit.github.io
-
-# Site
-title: Uppy
-subtitle: "Almost as cute as a puppy"
-logo_large: /uppy/images/logos/uppy-dog-full.svg
-logo_medium: /uppy/images/logos/uppy-logo-2019.svg
-logo_icon: /uppy/images/logos/uppy-dog-head-arrow.png
-description: >
-  Uppy fetches files locally and from remote places like Dropbox or Instagram.
-  With its seamless integration, reliability and ease of use,
-  Uppy is truly your best friend in file uploading.
-descriptionWho: >
-  Uppy is brought to you by the people
-  behind <a href="https://transloadit.com">Transloadit</a>, and as such will
-  have first class support
-  for adding their uploading and encoding backend, but this is opt-in,
-  and you can just as easily roll your own.
-author: Transloadit
-email: uppybot@uppy.io
-language: English
-
-# URL
-## If your site is put in a subdirectory, set url as 'http://yoursite.com/child' and root as '/child/'
-url: https://transloadit.github.io/uppy
-root: /uppy/
-permalink: blog/:year/:month/:title/
-tag_dir: tags
-archive_dir: archives
-category_dir: categories
-code_dir: examples
-
-# Directory
-source_dir: src
-public_dir: public
-
-# Writing
-new_post_name: :year-:month-:title.md # File name of new posts
-default_layout: post
-auto_spacing: false # Add spaces between asian characters and western characters
-titlecase: false # Transform title into titlecase
-external_link: true # Open external links in new tab
-max_open_file: 100
-multi_thread: true
-filename_case: 0
-render_drafts: false
-post_asset_folder: false
-highlight:
-  enable: false
-  line_number: false
-
-# Category & Tag
-default_category: uncategorized
-category_map:
-tag_map:
-
-# Archives
-## 2: Enable pagination
-## 1: Disable pagination
-## 0: Fully Disable
-archive: 0
-category: 0
-tag: 0
-
-# Server
-## Hexo uses Connect as a server
-## You can customize the logger format as defined in
-## http://www.senchalabs.org/connect/logger.html
-port: 4000
-logger: false
-logger_format:
-
-# Date / Time format
-## Hexo uses Moment.js to parse and display date
-## You can customize the date format as defined in
-## http://momentjs.com/docs/#/displaying/format/
-date_format: MMM D YYYY
-time_format: H:mm:ss
-
-# Pagination
-## Set per_page to 0 to disable pagination
-per_page: 10
-pagination_dir: page
-
-# Disqus
-disqus_shortname:
-
-# Extensions
-## Plugins: https://github.com/tommy351/hexo/wiki/Plugins
-## Themes: https://github.com/tommy351/hexo/wiki/Themes
-theme: uppy
-exclude_generator:
-
-# hexo-tag-emojis plugin configuration
-emojis:
-  image_dir: images/emojis
-
-# Markdown
-## https://github.com/chjj/marked
-marked:
-  gfm: true
-  pedantic: false
-  sanitize: false
-  tables: true
-  breaks: true
-  smartLists: true
-  smartypants: true
-  # modifyAnchors: 1
-  autolink: true
-
-feed:
-  type: atom
-  path: atom.xml
-  limit: 20
-
-# https://github.com/crimx/hexo-filter-github-emojis
-githubEmojis:
-  enable: true
-  className: github-emoji
-  inject: true
-  styles:
-  customEmojis:
-
-node_sass:
-  debug: false
-  outputStyle: compressed
-  precision: 5
-  sourceComments: false
-
-browsersync:
-  files: 'public/examples/**/*.js'
-  watchOptions:
-    awaitWriteFinish:
-      - stabilityThreshold: 3000
-      - pollInterval: 100
-
-skip_render:
-  - '*.js'
-  - '**/*.js'
-  - '*.es6'
-  - '**/*.es6'
-
-alias:
-  examples/: examples/dashboard/
-
-include_markdown:
-  dir: "src/_template"   # Base directory of template markdown
-  verbose : true

+ 0 - 102
website/build-examples.js

@@ -1,102 +0,0 @@
-/**
- * build-examples.js
- * --------
- * Searches for each example's `js/app.es6` file.
- * Creates a new watchify instance for each `app.es6`.
- * Changes to Uppy's source will trigger rebundling.
- *
- * Run as:
- *
- * build-examples.js               # to build all examples one-off
- * build-examples.js watch         # to keep rebuilding examples with an internal watchify
- * build-examples.js <path>        # to build just one example app.es6
- * build-examples.js <path> <path> # to build just one example app.es6 to a specific location
- *
- * Note:
- * Since each example is dependent on Uppy's source,
- * changing one source file causes the 'file changed'
- * notification to fire multiple times. To stop this,
- * files are added to a 'muted' Set that is checked
- * before announcing a changed file.  It's removed from
- * the Set when it has been bundled.
- */
-
-const { glob } = require('multi-glob')
-const chalk = require('chalk')
-const path = require('node:path')
-const notifier = require('node-notifier')
-
-const esbuild = require('esbuild')
-const alias = require('esbuild-plugin-alias')
-
-const babelImport = import('esbuild-plugin-babel')
-
-const webRoot = __dirname
-
-let srcPattern = `${webRoot}/src/examples/**/app.es6`
-let dstPattern = `${webRoot}/public/examples/**/app.js`
-
-const watchifyEnabled = process.argv[2] === 'watch'
-
-// Instead of 'watch', build-examples.js can also take a path as cli argument.
-// In this case we'll only bundle the specified path/pattern
-if (!watchifyEnabled && process.argv.length > 2) {
-  [, , srcPattern, dstPattern] = process.argv
-}
-
-// Find each app.es6 file with glob.
-glob(srcPattern, (err, files) => {
-  if (err) throw new Error(err)
-
-  if (watchifyEnabled) {
-    console.log('--> Watching examples..')
-  }
-
-  files.forEach((file) => {
-    const exampleName = path.basename(path.dirname(file))
-    const outfile = dstPattern.replace('**', exampleName)
-
-    babelImport.then(({ default: babel }) => esbuild.build({
-      bundle: true,
-      sourcemap: true,
-      watch: watchifyEnabled,
-      entryPoints: [file],
-      outfile,
-      banner: {
-        js: '"use strict";',
-      },
-      loader: {
-        '.es6': 'js',
-      },
-      plugins: [
-        alias({
-          '@uppy': path.resolve(__dirname, `../packages/@uppy`),
-        }),
-        babel({
-          filter: /\.(es6|js)$/,
-          config: { root: path.join(__dirname, '..') },
-        }),
-      ],
-    })).catch(onError) // eslint-disable-line no-use-before-define
-  })
-})
-
-/**
- * Logs to console and shows desktop notification on error.
- * Calls `this.emit(end)` to stop bundling.
- *
- * @param  {object} err Error object
- */
-function onError (err) {
-  console.error(chalk.red('✗ error:'), chalk.red(err.message))
-  notifier.notify({
-    title: 'Build failed:',
-    message: err.message,
-  })
-  this?.emit?.('end')
-
-  // When running without watch, process.exit(1) on error
-  if (!watchifyEnabled) {
-    process.exit(1)
-  }
-}

+ 0 - 3
website/doc-order.json

@@ -1,3 +0,0 @@
-{
-  "order": ["Core", "Utils", "Translator", "Plugin"]
-}

+ 0 - 279
website/inject.js

@@ -1,279 +0,0 @@
-const fs = require('node:fs')
-const path = require('node:path')
-const chalk = require('chalk')
-const { spawn } = require('node:child_process')
-const readline = require('node:readline')
-const YAML = require('js-yaml')
-const gzipSize = require('gzip-size')
-const prettierBytes = require('@transloadit/prettier-bytes')
-const esbuild = require('esbuild')
-const touch = require('touch')
-const glob = require('glob')
-
-const webRoot = __dirname
-const uppyRoot = path.join(__dirname, '../packages/uppy')
-const localesRoot = path.join(__dirname, '../packages/@uppy/locales')
-
-const configPath = path.join(webRoot, '/themes/uppy/_config.yml')
-// eslint-disable-next-line import/no-dynamic-require
-const { version } = require(path.join(uppyRoot, '/package.json'))
-
-const regionalDisplayNames = new Intl.DisplayNames('en-US', { type: 'region' })
-const languageDisplayNames = new Intl.DisplayNames('en-US', { type: 'language' })
-
-const defaultConfig = {
-  comment: 'Auto updated by inject.js',
-  uppy_version_anchor: '001',
-  uppy_version: '0.0.1',
-  uppy_bundle_kb_sizes: {},
-  config: {},
-}
-
-// Keeping a whitelist so utils etc are excluded
-// It may be easier to maintain a blacklist instead
-const packages = [
-  // Bundles
-  'uppy',
-  // Integrations
-  '@uppy/react',
-  // Core
-  '@uppy/core',
-  // Plugins -- please keep these sorted alphabetically
-  '@uppy/aws-s3',
-  '@uppy/aws-s3-multipart',
-  '@uppy/dashboard',
-  '@uppy/drag-drop',
-  '@uppy/dropbox',
-  '@uppy/file-input',
-  '@uppy/form',
-  '@uppy/golden-retriever',
-  '@uppy/google-drive',
-  '@uppy/informer',
-  '@uppy/instagram',
-  '@uppy/image-editor',
-  '@uppy/progress-bar',
-  '@uppy/screen-capture',
-  '@uppy/status-bar',
-  '@uppy/thumbnail-generator',
-  '@uppy/transloadit',
-  '@uppy/tus',
-  '@uppy/url',
-  '@uppy/webcam',
-  '@uppy/xhr-upload',
-  '@uppy/drop-target',
-  // Stores
-  '@uppy/store-default',
-  '@uppy/store-redux',
-]
-
-const excludes = {
-  '@uppy/react': ['react'],
-}
-
-// eslint-disable-next-line no-use-before-define
-inject().catch((err) => {
-  console.error(err)
-  process.exit(1)
-})
-
-async function getMinifiedSize (pkg, name) {
-  const packageJSON = fs.readFileSync(path.join(pkg, 'package.json'))
-  // eslint-disable-next-line no-shadow
-  const { main, version } = JSON.parse(packageJSON)
-
-  const external = excludes[name] ?? []
-  if (name !== '@uppy/core' && name !== 'uppy') {
-    // Preact is already unconditionally included through @uppy/core
-    external.unshift('@uppy/core', 'preact')
-  }
-
-  const { outputFiles:[{ contents: bundle }] } = await esbuild.build({
-    write: false,
-    bundle: true,
-    entryPoints: [path.resolve(pkg, main)],
-    minify: true,
-    external,
-  })
-  const gzipped = await gzipSize(bundle)
-
-  return {
-    minified: bundle.length,
-    gzipped,
-    version,
-  }
-}
-
-async function injectSizes (config) {
-  console.info(chalk.grey('Generating bundle sizes…'))
-  const padTarget = Math.max(...packages.map((cur) => cur.length)) + 2
-
-  const sizesPromise = Promise.all(
-    packages.map(async (pkg) => {
-      const result = await getMinifiedSize(path.join(__dirname, '../packages', pkg), pkg)
-      console.info(chalk.green(
-        // ✓ @uppy/pkgname:     10.0 kB min  / 2.0 kB gz
-        `  ✓ ${pkg}: ${' '.repeat(padTarget - pkg.length)}${
-          `${prettierBytes(result.minified)} min`.padEnd(10)
-        } / ${prettierBytes(result.gzipped)} gz`,
-      ))
-      return [pkg, {
-        ...result,
-        prettyMinified: prettierBytes(result.minified),
-        prettyGzipped: prettierBytes(result.gzipped),
-      }]
-    }),
-  ).then(Object.fromEntries)
-
-  // eslint-disable-next-line no-param-reassign
-  config.uppy_bundle_kb_sizes = await sizesPromise
-}
-
-const sourceUppy = path.join(webRoot, '/themes/uppy/source/uppy/')
-const sourceUppyLocales = path.join(sourceUppy, 'locales')
-async function injectBundles () {
-  await Promise.all([
-    fs.promises.mkdir(sourceUppy, { recursive:true }),
-    fs.promises.mkdir(sourceUppyLocales, { recursive:true }),
-  ])
-  const cmds = [
-    `cp -vfR ${path.join(uppyRoot, '/dist/*')} ${sourceUppy}`,
-    `cp -vfR ${path.join(localesRoot, '/dist/*')} ${sourceUppyLocales}`,
-  ].join(' && ')
-
-  const cp = spawn(cmds, { stdio:['ignore', 'pipe', 'inherit'], shell: true })
-  await Promise.race([
-    new Promise((resolve, reject) => cp.on('error', reject)),
-    (async () => {
-      const stdout = readline.createInterface({
-        input: cp.stdout,
-      })
-
-      for await (const line of stdout) {
-        console.info(chalk.green('✓ injected: '), chalk.grey(line))
-      }
-    })(),
-  ])
-}
-
-// re-enable after rate limiter issue is fixed
-//
-async function injectGhStars () {
-  const opts = {}
-  if ('GITHUB_TOKEN' in process.env) {
-    opts.auth = process.env.GITHUB_TOKEN
-  }
-
-  // eslint-disable-next-line global-require
-  const { Octokit } = require('@octokit/rest')
-  const octokit = new Octokit(opts)
-
-  const { headers, data } = await octokit.repos.get({
-    owner: 'transloadit',
-    repo: 'uppy',
-  })
-
-  console.log(`${headers['x-ratelimit-remaining']} requests remaining until we hit GitHub ratelimiter`)
-
-  const dstpath = path.join(webRoot, 'themes', 'uppy', 'layout', 'partials', 'generated_stargazers.ejs')
-  fs.writeFileSync(dstpath, String(data.stargazers_count), 'utf-8')
-
-  console.log(`${data.stargazers_count} stargazers written to '${dstpath}'`)
-}
-
-async function injectMarkdown () {
-  const sources = {
-    '.github/CONTRIBUTING.md': 'src/_template/contributing.md',
-  }
-
-  for (const src of Object.keys(sources)) {
-    const dst = sources[src]
-    // strip yaml frontmatter:
-    const srcpath = path.join(uppyRoot, `/../../${src}`)
-    const dstpath = path.join(webRoot, dst)
-    const parts = fs.readFileSync(srcpath, 'utf-8').split(/---\s*\n/)
-    if (parts.length >= 3) {
-      parts.shift()
-      parts.shift()
-    }
-    let content = `<!-- WARNING! This file was injected. Please edit in "${src}" instead and run "${path.basename(__filename)}" -->\n\n`
-    content += parts.join('---\n')
-    fs.writeFileSync(dstpath, content, 'utf-8')
-    console.info(chalk.green('✓ injected: '), chalk.grey(srcpath))
-  }
-  touch(path.join(webRoot, '/src/support.md'))
-}
-
-function injectLocaleList () {
-  const mdTable = [
-    `<!-- WARNING! This file was automatically injected. Please run "${path.basename(__filename)}" to re-generate -->\n\n`,
-    '| %count% Locales | NPM                | CDN                 | Source on GitHub |',
-    '| --------------- | ------------------ | ------------------- | ---------------- |',
-  ]
-  const mdRows = []
-  const localeList = {}
-
-  const localePackagePath = path.join(localesRoot, 'src', '*.js')
-  // eslint-disable-next-line import/no-dynamic-require, global-require
-  const localePackageVersion = require(path.join(localesRoot, 'package.json')).version
-
-  glob.sync(localePackagePath).forEach((localePath) => {
-    const localeName = path.basename(localePath, '.js')
-    const [languageCode, regionCode, variant] = localeName.split(/[-_]/)
-
-    const languageName = languageDisplayNames.of(languageCode)
-    const regionName = regionalDisplayNames.of(regionCode)
-    const npmPath = `<code class="raw"><a href="https://www.npmjs.com/package/@uppy/locales">@uppy/locales</a>/lib/${localeName}</code>`
-    const cdnPath = `[\`${localeName}.min.js\`](https://releases.transloadit.com/uppy/locales/v${localePackageVersion}/${localeName}.min.js)`
-    const githubSource = `[\`${localeName}.js\`](https://github.com/transloadit/uppy/blob/main/packages/%40uppy/locales/src/${localeName}.js)`
-    const mdTableRow = `| ${languageName}<br/> <small>${regionName}</small>${variant ? `<br /><small>(${variant})</small>` : ''} | ${npmPath} | ${cdnPath} | ✏️ ${githubSource} |`
-    mdRows.push(mdTableRow)
-
-    localeList[localeName] = `${languageName} (${regionName}${variant ? `, ${variant}` : ''})`
-  })
-
-  const resultingMdTable = mdTable.concat(mdRows.sort()).join('\n').replace('%count%', mdRows.length)
-
-  const dstpath = path.join(webRoot, 'src', '_template', 'list_of_locale_packs.md')
-  const localeListDstPath = path.join(webRoot, 'src', 'examples', 'locale_list.json')
-  fs.writeFileSync(dstpath, `${resultingMdTable}\n`, 'utf-8')
-  console.info(chalk.green('✓ injected: '), chalk.grey(dstpath))
-  fs.writeFileSync(localeListDstPath, JSON.stringify(localeList), 'utf-8')
-  console.info(chalk.green('✓ injected: '), chalk.grey(localeListDstPath))
-}
-
-async function readConfig () {
-  try {
-    const buf = await fs.promises.readFile(configPath, 'utf8')
-    return YAML.safeLoad(buf)
-  } catch (err) {
-    return {}
-  }
-}
-
-async function inject () {
-  const config = await readConfig()
-
-  await injectGhStars()
-
-  await injectMarkdown()
-
-  injectLocaleList()
-
-  config.uppy_version = version
-  config.uppy_version_anchor = version.replace(/[^\d]+/g, '')
-  await injectSizes(config)
-
-  const saveConfig = { ...defaultConfig, ...config }
-  await fs.promises.writeFile(configPath, YAML.safeDump(saveConfig), 'utf-8')
-  console.info(chalk.green('✓ rewritten: '), chalk.grey(configPath))
-
-  try {
-    await injectBundles()
-  } catch (error) {
-    console.error(
-      chalk.red('x failed to inject: '),
-      chalk.grey(`uppy bundle into site, because: ${error}`),
-    )
-    process.exit(1)
-  }
-}

+ 0 - 52
website/package.json

@@ -1,52 +0,0 @@
-{
-  "name": "uppy.io",
-  "version": "0.0.0",
-  "private": true,
-  "hexo": {
-    "version": "4.2.1"
-  },
-  "devDependencies": {
-    "@aduh95/hexo-renderer-postcss": "^3.0.0",
-    "@babel/core": "^7.4.4",
-    "@octokit/rest": "16.43.1",
-    "@transloadit/prettier-bytes": "0.0.7",
-    "autoprefixer": "^10.2.6",
-    "chalk": "2.4.2",
-    "cssnano": "^5.0.6",
-    "drag-drop": "^4.2.0",
-    "esbuild": "^0.16.1",
-    "esbuild-plugin-alias": "^0.2.1",
-    "esbuild-plugin-babel": "^0.2.3",
-    "glob": "^7.2.0",
-    "gzip-size": "5.1.1",
-    "he": "^1.2.0",
-    "hexo": "4.2.1",
-    "hexo-browsersync": "^0.3.0",
-    "hexo-cli": "3.1.0",
-    "hexo-filter-github-emojis": "arturi/hexo-filter-github-emojis",
-    "hexo-generator-alias": "^0.1.3",
-    "hexo-generator-archive": "^1.0.0",
-    "hexo-generator-category": "^1.0.0",
-    "hexo-generator-feed": "^2.1.1",
-    "hexo-generator-index": "^1.0.0",
-    "hexo-generator-tag": "^1.0.0",
-    "hexo-helper-inline-svg": "^1.1.3",
-    "hexo-include-markdown": "^1.0.2",
-    "hexo-renderer-ejs": "^1.0.0",
-    "hexo-renderer-marked": "2.0.0",
-    "hexo-server": "^1.0.0",
-    "hexo-util": "^1.9.1",
-    "js-yaml": "^3.13.1",
-    "marked": "^0.7.0",
-    "mdast-util-inject": "1.1.0",
-    "multi-glob": "^1.0.2",
-    "node-notifier": "^8.0.1",
-    "postcss-inline-svg": "^5.0.0",
-    "prismjs": "^1.17.1",
-    "sass": "^1.29.0",
-    "touch": "3.1.0"
-  },
-  "scripts": {
-    "hexo": "hexo"
-  }
-}

+ 0 - 8
website/postcss.config.js

@@ -1,8 +0,0 @@
-module.exports = {
-  plugins: {
-    'postcss-inline-svg': {
-      paths: ['src/images'],
-    },
-    cssnano: { safe: true },
-  },
-}

+ 0 - 55
website/private_modules/hexo-renderer-uppyexamples/index.js

@@ -1,55 +0,0 @@
-// We listen for hexo changes on *.es6 extensions.
-// We fire our own build-examples.js and tell it which example to build -
-// that script then writes temporary js files
-// which we return via the callback.
-const { exec } = require('node:child_process')
-const path = require('node:path')
-const fs = require('node:fs')
-const uuid = require('uuid')
-
-const webRoot = path.dirname(path.dirname(__dirname))
-const browserifyScript = `${webRoot}/build-examples.js`
-
-function parseExamplesBrowserify (data, options, callback) {
-  if (!data || !data.path) {
-    callback(null)
-    return
-  }
-
-  if (!data.path.match(/\/examples\//)) {
-    callback(null, data.text)
-  }
-
-  // var slug    = data.path.replace(/[^a-zA-Z0-9\_\.]/g, '-')
-  const slug = uuid.v4()
-  const tmpFile = `/tmp/${slug}.js`
-  const cmd = `node ${browserifyScript} ${data.path} ${tmpFile} --colors`
-  // hexo.log.i('hexo-renderer-uppyexamples: change detected in examples. running: ' + cmd);
-  exec(cmd, (err, stdout) => {
-    if (err) {
-      callback(err)
-      return
-    }
-
-    hexo.log.i(`hexo-renderer-uppyexamples: ${stdout.trim()}`)
-
-    // eslint-disable-next-line no-shadow
-    fs.readFile(tmpFile, 'utf-8', (err, bundledJS) => {
-      if (err) {
-        callback(err)
-        return
-      }
-      // hexo.log.i('hexo-renderer-uppyexamples: read: ' + tmpFile);
-
-      // @TODO remove this hack
-      // once this is resolved: https://github.com/hexojs/hexo/issues/1663
-      // bundledJS = bundledJS.replace(/</g, ' < ');
-      // eslint-disable-next-line no-param-reassign
-      bundledJS = bundledJS.replace(/<(?!=)/g, ' < ')
-
-      callback(null, bundledJS)
-    })
-  })
-}
-
-hexo.extend.renderer.register('es6', 'js', parseExamplesBrowserify)

+ 0 - 9
website/private_modules/hexo-renderer-uppyexamples/package.json

@@ -1,9 +0,0 @@
-{
-  "name": "hexo-renderer-uppyexamples",
-  "version": "0.0.1",
-  "private": true,
-  "main": "index",
-  "dependencies": {
-    "uuid": "3.4.0"
-  }
-}

+ 0 - 71
website/scripts/highlight.js

@@ -1,71 +0,0 @@
-const Prism = require('prismjs')
-const entities = require('he')
-const { readFile } = require('node:fs/promises')
-const path = require('node:path')
-
-// oof
-// I think this is the way to add Prism components that it doesn't include
-// in the default build?
-global.Prism = Prism
-// the / is needed to force it to resolve to the directory
-require('prismjs/components/')()
-
-const unhighlightedCodeRx = /<pre><code class="([^"]*)?">([\s\S]*?)<\/code><\/pre>/igm
-
-// eslint-disable-next-line no-shadow
-function highlight (lang, code) {
-  const startTag = `<figure class="highlight ${lang}"><table><tr><td class="code"><pre>`
-  const endTag = '</pre></td></tr></table></figure>'
-  let parsedCode = ''
-  if (Prism.languages[lang]) {
-    parsedCode = Prism.highlight(code, Prism.languages[lang])
-  } else {
-    parsedCode = code
-  }
-
-  return startTag + parsedCode + endTag
-}
-
-function prismify (data) {
-  // eslint-disable-next-line no-param-reassign
-  data.content = data.content.replace(unhighlightedCodeRx,
-    // eslint-disable-next-line no-shadow
-    (_, lang, code) => highlight(lang, entities.decode(code)))
-  // eslint-disable-next-line no-param-reassign
-  data.excerpt = data.excerpt.replace(unhighlightedCodeRx,
-    // eslint-disable-next-line no-shadow
-    (_, lang, code) => highlight(lang, entities.decode(code)))
-
-  return data
-}
-
-function code (args, content) {
-  let lang = ''
-  if (args[0].startsWith('lang:')) {
-    lang = args.shift().replace(/^lang:/, '')
-  }
-
-  return highlight(lang, content)
-}
-
-async function includeCode (args) {
-  let lang = ''
-  if (args[0].startsWith('lang:')) {
-    lang = args.shift().replace(/^lang:/, '')
-  }
-
-  const file = path.join(hexo.source_dir, hexo.config.code_dir, args.join(' '))
-  const content = await readFile(file, 'utf8')
-  return highlight(lang, content.trim())
-}
-
-// Highlight as many things as we possibly can
-hexo.extend.tag.register('code', code, true)
-hexo.extend.tag.register('codeblock', code, true)
-hexo.extend.tag.register('include_code', includeCode, { async: true })
-hexo.extend.tag.register('include-code', includeCode, { async: true })
-
-// Hexo includes its own code block handling by default which may
-// cause the above to miss some things, so do another pass when the page
-// is done rendering to pick up any code blocks we may have missed.
-hexo.extend.filter.register('after_post_render', prismify)

+ 0 - 18
website/scripts/scss.js

@@ -1,18 +0,0 @@
-const sass = require('sass')
-
-function scssRenderer (data) {
-  const result = sass.renderSync({
-    data: data.text,
-    file: data.path,
-    outputStyle: 'nested',
-    sourceComments: false,
-    indentedSyntax: data.path.endsWith('.sass'),
-    ...this.theme.config.node_sass,
-    ...this.config.node_sass,
-  })
-
-  return result.css.toString()
-}
-
-hexo.extend.renderer.register('scss', 'css', scssRenderer)
-hexo.extend.renderer.register('sass', 'css', scssRenderer)

+ 0 - 1
website/src/CNAME

@@ -1 +0,0 @@
-uppy.io

+ 0 - 60
website/src/_data/authors.yml

@@ -1,60 +0,0 @@
-arturi:
-  email: 'artur@transloadit.com'
-  name: 'Artur Paikin'
-  id: 'artur'
-  tagline: 'Developer'
-ife:
-  email: 'ifedapo@transloadit.com'
-  name: 'Ifedapo Olarewaju'
-  id: 'ife'
-  tagline: 'Software Developer'
-tyler:
-  email: 'tyler@transloadit.com'
-  name: 'Tyler McAllister'
-  id: tyler
-  tagline: 'Technical Writer'
-samuel:
-  email: 'samuel@transloadit.com'
-  name: 'Samuel Ogundipe'
-  id: samuel
-  tagline: 'Technical Writer'
-aj:
-  email: 'aj@transloadit.com'
-  name: 'A.J. van Loon'
-  id: aj
-  tagline: 'Writer & Editor' 
-kvz:
-  email: 'kevin@transloadit.com'
-  name: 'Kevin van Zonneveld'
-  id: kvz
-  tagline: 'Transloadit co-founder'
-renee:
-  email: 'github@kooi.me'
-  name: 'Renée Kooi'
-  id: 'renee'
-  tagline: 'Developer'
-hedgerh:
-  email: 'harry@transloadit.com'
-  name: 'Harry Hedger'
-  id: 'harry'
-  tagline: 'Frontend developer'
-aduh95:
-  email: 'antoine@transloadit.com'
-  name: 'Antoine du Hamel'
-  id: 'aduh95'
-  tagline: 'Developer'
-murderlon:
-  email: 'merlijn@transloadit.com'
-  name: 'Merlijn Vos'
-  id: 'merlijn'
-  tagline: 'Developer'
-mifi:
-  email: 'mikael@transloadit.com'
-  name: 'Mikael Finstad'
-  id: 'mikael'
-  tagline: 'Developer'
-andrew:
-  email: 'andrew@transloadit.com'
-  name: 'Andrew Kachnic'
-  id: 'andrew'
-  tagline: 'Developer'

+ 0 - 12
website/src/_data/design_goals.yml

@@ -1,12 +0,0 @@
- - "Lightweight / easy on dependencies"
- - "Small core, modular architecture. Everything is a plugin"
- - "ES6, with transpiled ES5 versions available"
- - "Usable as a bundle straight from a CDN, as well as a module to import"
- - "Resumable file uploads via the open tus standard"
- - "Robust: retries for all-the-things, avoid showing ‘weird errors’"
- - "Themable UI with a beautiful default"
- - "i18n support: Easily switch languages or supply your own copy"
- - "Compatible with React (Native) (work on React Native in progress)"
- - "Works great on mobile"
- - "Works great with Transloadit. Works great without"
- - "Offering sugared shortcuts for novice users (presets)"

+ 0 - 18
website/src/_data/features.yml

@@ -1,18 +0,0 @@
-- title      : Simple
-  icon       : simple
-  description: You can support complex workflows by refering to existing presets in just a few lines of code.
-- title      : Presets
-  icon       : powerful
-  description: Resumable file uploads. Is there any other way? Thanks to tus.io.
-- title      : Plugins
-  icon       : composable
-  description: Every feature in Puppy is available as a plugin. It's easy to use some, none, or roll your own.
-- title      : Compact
-  icon       : compact
-  description: '{{ size_minjsgz }} kb min+gzip, no dependencies.'
-- title      : Fast
-  icon       : fast
-  description: Parallel uploading and handling of files
-- title      : Package Ready
-  icon       : module
-  description: Install via NPM our include directly form our CDN!

+ 0 - 6
website/src/_data/plugins.yml

@@ -1,6 +0,0 @@
-dragdrop:
-  title      : Drag & Drop
-  official   : true
-  type       : acquirer
-  url        : https://github.com/transloadit/uppy/blob/master/src/plugins/DragDrop.js
-  description: The official Drag & Drop plugin for Uppy.

+ 0 - 16
website/src/_data/taglines.yml

@@ -1,16 +0,0 @@
- - won’t chew on your shoes
- - is fully housebroken
- - just wants to play with you
- - doesn’t hump your leg
- - also accepts cat pictures
- - loves you unconditionally
- - you don’t have to keep on a leash
- - won’t pee on your rug
- - loves to play fetch
- - doesn’t bite (hard)
- - won’t bark at the mailman
- - is great with the kids
- - can digest anything, even chocolate cake
- - is always happy to see you
- - isn’t afraid of fireworks
- - is allowed everywhere

+ 0 - 47
website/src/_posts/2016-06-uppy-begins.md

@@ -1,47 +0,0 @@
----
-title: "Uppy: let’s teach an old dog some new tricks"
-date: 2016-07-15
-author: arturi
----
-
-For the past six months, we have been working hard on uppy.io. We feel that it is high time we gave you a look behind the scenes: what are we working on, and why.
-
-<img src="/uppy/images/blog/uppy-begins/uppy-dashboard.jpg">
-
-The way uploading works has not changed in a meaningful way since the days of our trusty old 56 kbit/s modems. Of course, files have gotten bigger and speeds have increased, but that is more or less all there is to say. If it were up to us – and we hope it is – that is all about to change.
-
-We at [Transloadit](https://transloadit.com/) are on a mission to change the way the world does uploading. To accomplish this, our first step has been to develop an open protocol for resumable file uploads, called [‘tus’](http://tus.io/). Finally, that 2GB video upload from your smartphone doesn’t have to start over when your train passes through a tunnel! The protocol got [Hacker News excited](https://news.ycombinator.com/item?id=10591348) on several occasions and is being deployed by, among others, our friends at Vimeo. Now that a stable version 1.0 of ‘tus’ has been released, it is time to put it to the test. A protocol without real-world applications is nothing more than a meaningless document, after all.
-
-We are therefore excited to tell you about Uppy: the file uploader that will certainly fetch more than just your newspaper.
-
-<!-- more -->
-
-## Why the need for another file uploader?
-
-It is true, there are indeed already a good few file uploading solutions out there ([Dropzone](http://www.dropzonejs.com/), for instance, is quite good). And – for the most part – they do their job. Nevertheless, they are quite limited in their functionality:
-
-* You can drag and drop files from local disk, but uploaders that supports Instagram, Dropbox or Google Drive are scarce. The ones out there lock you in with vendors and are hard to customize for own use.
-
-* File uploaders are seldom mindful of the existence of encoding and processing backends, while the reality is that files often require some form of processing and that the end user would like to receive progress updates with regard to that.
-
-* None of the currently available file uploaders make use of the standardized resumability that ‘tus’ provides, which makes them less than ideal for handling larger files.
-
-* Lastly, we feel that the current solutions are sometimes dropping the ball when it comes to a polished user experience. We aim to fix that.
-
-All in all, we think there is definitely some ‘trouble at the old mill’ here and it’s time to let Uppy take care of that!
-
-## Our plans for Uppy
-
-Uppy will be a JavaScript file uploader that allows you to fetch files, not only from your local disk, but also from places like Dropbox, Instagram, Google Drive, webcams and remote URLs. It will have a modular, plugin-based design, making it lightweight and customizable.
-
-Cute on the outside, the core of Uppy is very robust – thanks to resumability through 'tus'. We are confident that Uppy will be able to send even the biggest of files over the smallest of tubes.
-
-Uppy will also offer first class support for accessing Transloadit’s uploading and encoding backend, making it incredibly versatile. Of course, these are all ultimately just plugins, and Uppy can just as easily be used with your own backend – meaning no need to pay any subscription fees.
-
-We are intent on making the user experience as smooth and satisfying as possible, in terms of both functionality and visual design. Uppy will have a beautiful, themeable UI and it will look – and work – great on mobile platforms as well. While we hope that advanced users will love the customizable nature of Uppy, an ample selection of presets will also be there to make sure that novice users are not going to be lost in the woods.
-
-Lastly, and this is a point of special significance to us, Uppy will be completely open source. When Uppy is finished, you will be free to use it for whatever you like. Until that time, we very much welcome your ideas and contributions. There are still a lot of decisions to be made and this is the perfect time to come and influence the end product.
-
-We are going to work hard on bringing you the best file uploader possible and we’ll keep you informed about the development process on [uppy.io](http://uppy.io/). We can’t wait for you to meet Uppy!
-
-> We were on the [Hacker News](https://news.ycombinator.com/item?id=12109410) and [Product Hunt](https://www.producthunt.com/posts/uppy) frontpages. Comments welcome there.

+ 0 - 83
website/src/_posts/2016-08-0.8.0.md

@@ -1,83 +0,0 @@
----
-title: "Uppy version 0.8 released: The Webcam Edition and Meta Data"
-date: 2016-08-17
-author: arturi
-published: true
----
-
-We have just released Uppy 0.8.0 and we can't wait to tell you more about it. Along with various under-the-hood improvements, this release also contains some very visible upgrades. You can read below for further details.
-
-## Including Meta Data
-
-While fetching your files, Uppy is now also able to supply some custom metadata to go along with them. So far, there are three components in place for that: Core API (`core:update-meta` event), `MetaData` plugin, and a new panel in Dashboard UI called File Card, which looks like this:
-
-<img alt="metadata dashboard UI, editing file name, future size and adding description" src="/uppy/images/blog/0.8/metadata-dashboard.jpg" class="border">
-
-<!-- more -->
-
-To summon this panel, all you have to do is click the edit button on the Dashboard:
-
-<img alt="metadata dashboard UI, editing file name, future size and adding description" src="/uppy/images/blog/0.8/uppy-dashboard-ui.jpg" class="border">
-
-By default, the only active metadata field is `Name`. However, if you want to add other fields you can utilize our new and easy to use `MetaData` plugin:
-
-```javascript
-const uppy = new Uppy()
-  .use(Dashboard)
-  .use(MetaData, {
-    fields: [
-      { id: 'resizeTo', name: 'Resize to', value: 1200, placeholder: 'specify future image size' },
-      { id: 'description', name: 'Description', value: '', placeholder: 'describe what the file is for' },
-    ],
-  })
-```
-
-And just like that, we have added two fields: `Resize` and `Description`. All metadata is sent along with both [tus](http://tus.io) and multipart uploads.
-
-## Webcam Support
-
-We have also added a basic `Webcam` plugin, which allows you to acquire images directly from your own webcam. This is still a work in progress and we will be improving it in the next release.
-
-## Mime Types and File Icons
-
-Uppy now includes a [mime-type](https://www.npmjs.com/package/mime-types) library that helps us figure out file types by extension.
-
-Having proper file types also means that we need the right corresponding file icons for the Dashboard UI. We have already added a few and we will soon supply more icons for audio, video, text, PDF and other common file types.
-
-## Previously on Uppy: File Previews, Remote File Handling, Accessibility and Acceptance Tests Stats
-
-We thought it might be worth taking a moment to list a few highlights from the previous versions as well:
-
-* If a file you selected is an image, its preview thumbnail data URL will be generated and added to `file.preview` in Uppy’s state. This URL can be used later to render a preview with any plugin. Currently, this is done by the mighty Dashboard.
-* It is now also possible to select remote files in Uppy. Simply double-click a file from, for instance, Google Drive, and Uppy will then show it in a preview area.
-* We have been doing some more work on accessibility: from now on, when you switch tabs in Modal, it will focus on the first input in that tab. We have also added proper labels and titles, and are doing more research in this area.
-* Everybody likes to see stats. That is why, on our website, you can now [view stats](http://uppy.io/stats) that show how acceptance tests are performing in various browsers. If a test is successful, that means Uppy will likely be able to load and upload files in that particular browser.
-* The Dashboard UI is now way better looking and easier to work with. It replaced the old `Modal` plugin and it can accept files via drag & drop, local disk and paste (experimental, WIP). It has become our main source of truth and the basic acquire plugin for local files. The DragDrop plugin is still available as a lighter alternative.
-
-## Release Notes
-
-Here is the full list of changes for version 0.8.0.
-
-- core: fix bug: no meta information from uppy-server files ([@hedgerh](https://github.com/hedgerh))
-- core: fix bug: uppy-server file is treated as local and directly uploaded ([@hedgerh](https://github.com/hedgerh))
-- uppy-server: hammering out websockets/oauth ([@hedgerh](https://github.com/hedgerh), [@acconut](https://github.com/acconut))
-- debugger: introduce MagicLog as a way to debug state changes in Uppy ([@arturi](https://github.com/arturi))
-- modifier: A MetaData plugin to supply meta data (like width, tag, filename, user_id) ([@arturi](https://github.com/arturi))
-- modifier: pass custom metadata with non-tus-upload. Maybe mimic meta behavior of tus here, too ([@arturi](https://github.com/arturi))
-- modifier: pass custom metadata with tus-upload with tus-js-client ([@arturi](https://github.com/arturi))
-- webcam: initial version: webcam light goes on ([@hedgerh](https://github.com/hedgerh))
-- progress: better icons, styles ([@arturi](https://github.com/arturi))
-- core: better mime/type detection (via mime + extension) ([@arturi](https://github.com/arturi))
-- core: add deep-freeze to getState so that we are sure we are not mutating state accidentally ([@arturi](https://github.com/arturi))
-- meta: release “Uppy Begins” post ([@arturi](https://github.com/arturi) [@kvz](https://github.com/kvz))
-- meta: better readme on GitHub and NPM ([@arturi](https://github.com/arturi))
-- test: add pre-commit & lint-staged ([@arturi](https://github.com/arturi))
-- test: add next-update <https://www.npmjs.com/package/next-update> to check if packages we use can be safely updated ([@arturi](https://github.com/arturi))
-- website: blog polish — add post authors and their gravatars ([@arturi](https://github.com/arturi))
-- dashboard: UI revamp, more prototypes, background image, make dashboard nicer ([@arturi](https://github.com/arturi))
-- dashboard: try a workflow where import from external service slides over and takes up the whole dashboard screen ([@arturi](https://github.com/arturi))
-- modal: merge modal and dashboard ([@arturi](https://github.com/arturi))
-
-We hope you will enjoy this latest release. Uppy is still improving every day and we hope to bring you more news about our progress soon!
-
-The Uppy Team

+ 0 - 74
website/src/_posts/2016-08-0.9.0.md

@@ -1,74 +0,0 @@
----
-title: "Uppy 0.9: Making Progress, then pause & resume. Remote file uploads, Informer."
-date: 2016-08-26
-author: hedgerh
-published: true
----
-
-We have just released Uppy 0.9.0. This release features some changes that we think you will be very excited about.  Let's see what's new!
-
-<!-- more -->
-
-## Ability to pause uploads, progress indicators & ETA
-The most visible feature that has been added is the ability to pause and resume file uploads.
-
-<img alt="dashboard UI with paused uploads" src="/uppy/images/blog/0.9/upload-pause.jpg" class="border">
-
-<img alt="dashboard UI with files uploading and a pause all button" src="/uppy/images/blog/0.9/upload-resume.jpg" class="border">
-
-The upload dashboard now contains more information about uploads, such as the time remaining until an upload is finished. We have also added circular progress indicators to give better visual feedback on an upload's progress.
-
-## Remote file uploads
-Remote file uploading is now working again.
-
-## Informer interface
-We have added a new `Informer` plugin (tested with `Dashboard`, should also work anywhere else) that listens to `informer` events, like so:
-``` javascript
-bus.emit('informer', message, type, duration)
-```
- and displays a message bubble for a certain amount of time. It will be useful to notify you when the internet connection is (a licky boom-boom) down (or back up):
-
-<img alt="info: no connection" src="/uppy/images/blog/0.9/info-no-connection.jpg" class="border">
-
-Or when Uppy has successfully uploaded your files:
-
-<img alt="info: upload successful" src="/uppy/images/blog/0.9/info-upload-success.jpg" class="border">
-
-
-## Webcam: Say Cheese!
-The Webcam plugin can now take snapshots and add them to the file dashboard in Uppy's modal.  We have also added Flash support for Safari/IE users.  The UI has also been cleaned up in the dashboard.  We have temporarily disabled video recording in order to focus on rolling out the snapshot feature.
-
-## Under the hood: UI refactors
-Under the hood, we have made some changes to how the UI is structured.  We are taking a more componentized approach.  For example, the rendering of Google Drive's UI has been separated into multiple smaller components that can be found in the `plugins/GoogleDrive` folder.
-
-## Release Notes
-
-Here is the full list of changes for version 0.9.0.:
-
-- dashboard: informer interface: message when all uploads are "done" ([@arturi](https://github.com/arturi))
-- dashboard: improve file paste — not really possible — no file names, weird API, Chrome-only <http://stackoverflow.com/a/22940020> ([@arturi](https://github.com/arturi))
-- meta: add google demo account [@kvz](https://github.com/kvz))
-- meta: Set up a Google testing account that people can use to try the demo ([@hedgerh](https://github.com/hedgerh))
-- meta: write 0.9 release blog post ([@hedgerh](https://github.com/hedgerh))
-- webcam: a barely working webcam snapshot & upload ([@hedgerh](https://github.com/hedgerh))
-- metadata: Uppy + tus empty metadata value issue in Safari <https://github.com/tus/tus-js-client/issues/41> --> tus issue — nailed down, passed to @account (@arturi, @account)
-- core: experiment with switching to `virtual-dom` in a separate branch; experiment with rollup again ([@arturi](https://github.com/arturi))
-- core: figure out race conditions (animations not completing because file div gets re-added to the dom each time) with `yo-yo`/`morphdom` <https://github.com/shama/bel/issues/26#issuecomment-238004130> ([@arturi](https://github.com/arturi))
-- core: switch to <https://github.com/sethvincent/namespace-emitter> — smaller, allows for `on('*')` ([@arturi](https://github.com/arturi))
-- dashboard: add aria-labels and titles everywhere to improve accessibility #114 ([@arturi](https://github.com/arturi))
-- dashboard: file name + extension should fit on two lines, truncate in the middle (maybe <https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/measureText>) ([@arturi](https://github.com/arturi))
-- dashboard: implement a circular progress indicator on top of the fileItem with play/pause ([@arturi](https://github.com/arturi))
-- dashboard: refactor to smaller components, as discussed in #110 ([@arturi](https://github.com/arturi))
-- google drive: refactor to smaller components, as discussed in #110 ([@hedgerh](https://github.com/hedgerh))
-- google drive: add demo account ([@hedgerh](https://github.com/hedgerh))
-- metadata: add labels to fields in fileCard ([@arturi](https://github.com/arturi))
-- metadata: the aftermath — better UI ([@arturi](https://github.com/arturi))
-- test: Get IE6 on Win XP to run Uppy and see it fall back to regular form upload #108 ([@arturi](https://github.com/arturi))
-- test: refactor tests, add DragDrop back ([@arturi](https://github.com/arturi))
-- tus: update uppy to `tus-js-client@1.2.1`, test on requirebin ([@arturi](https://github.com/arturi))
-- tus: add ability to pause/resume all uploads at once ([@arturi](https://github.com/arturi))
-- tus: add ability to pause/resume upload ([@arturi](https://github.com/arturi))
-
-We hope you will enjoy this latest release. Uppy is still improving every day and we hope to bring you more news about our progress soon!
-
-The Uppy Team

+ 0 - 99
website/src/_posts/2016-09-0.10.md

@@ -1,99 +0,0 @@
----
-title: "Uppy 0.10: Getting together, the future, Google Drive UI, exposed events"
-date: 2016-09-28
-author: arturi
-published: true
----
-
-Hi! Another month has passed and we have just released a new version of Uppy. Here’s what we’ve been up to.
-
-## Thinking about the future 🔮
-
-We have been spending quite a lot of time thinking about Uppy's future and the direction in which we would like to take this project.  Our primary concern is making Uppy as flexible as possible as well as compatible with popular libraries, such as React and React Native.  We also want to make it easy to port Uppy to any environments or ecosystems that are not officially supported.
-
-We have done a lot of research. We created [prototypes of Uppy React components](https://github.com/hedgerh/uppy-react) and  we also created a new module that we like to call "Uppy Base." [`uppy-base`](https://github.com/hedgerh/uppy-base) is a thin module containing reusable functionality from some of our plugins that can be used in any ecosystem or environment, without being opinionated about the UI.
-
-<!-- more -->
-
-Finally, we are also discussing using [Redux](https://github.com/reactjs/redux) as the internal state management store within Uppy.  You can see some drafts under the `src/experimental` folder (EDIT: this folder has since been removed).
-
-Have a look at the [Uppy Base repository here](https://github.com/hedgerh/uppy-base).
-
-Check out [our Uppy React wrapper and components](https://github.com/hedgerh/uppy-react), which are built on top of Uppy Base.
-
-Finally, we have played a bit with [CSS Modules](https://github.com/css-modules) and [CSJS](https://github.com/rtsao/csjs).  We have also tried generating preview thumbnails in Web Workers, as well as with [Pica library](https://github.com/nodeca/pica).
-
-We would love to hear feedback on all of this.  Please join our discussion at: <https://github.com/transloadit/uppy/issues/116>
-
-You are, of course, more than welcome to chime in on other issues or to open new ones!
-
-## Dashboard: refreshed look and new features
-
-In an attempt to be brave and keep things simple, we have removed the dashed border from inside the Dashboard, rewritten its layout with flexbox, and tried out a new [blend-in-with-the-background-and-blur](https://cloud.githubusercontent.com/assets/1199054/18763191/35d31ddc-80da-11e6-9a2c-c46388857135.png) mode.
-
-<img alt="Refreshed Dashboard UI" src="/uppy/images/blog/0.10/dashboard-sep-27-2016.jpg">
-
-Uppy now also has the option to render the Dashboard inline on the page, instead of the default full modal dialog. To try it out, set `inline: true` in options, like this: `uppy.use(Dashboard, {target: '.myContainer', inline: true})`.
-
-We have also added a circular progress bar that shows total upload progress, combined with a pause all / resume all button, and an info panel that shows speed, ETA and status for all uploads currently in progress. So you'll have something fun and useful to look at while you are waiting!
-
-<img alt="Dashboard UI with global pause/resume buttons and a status bar — progress speed & ETA" src="/uppy/images/blog/0.10/dashboard-pause-resume-sep-27-2016.jpg">
-
-Be sure not to miss out on the new Copy Link button that appears after a successful upload, right where the edit button usually is. We know, that’s pretty exciting! And it gets even better: when you click on it, the link is copied to your clipboard. Or, in less capable browsers, a window pops up with a text link, so you can copy it yourself. Bananas!
-
-## Google Drive UI improved
-
-The UI for Google Drive has received a fresh new redesign.  Check it out!
-
-<img alt="The redesigned file browser UI for Google Drive" src="/uppy/images/blog/0.10/google-drive-ui-sep-27-2016.jpg">
-
-## Listen to events
-
-We have finally begun to expose events on the `uppy` instance, so you can now subscribe to them and use them in your app. For example, in order to display an image in your UI after it has been successfully uploaded:
-
-``` javascript
-uppy.on('core:upload-success', (id, url) => {
-  const img = new Image()
-  img.width = 300
-  img.alt = id
-  img.src = url
-  document.body.appendChild(img)
-})
-```
-
-There is also `core:upload-progress` to track progress and `core:success` for when all uploads are complete. The [event documentation](https://github.com/transloadit/uppy/#api) is quite small right now, we’ll be adding more once we sort out the API.
-
-## But wait, there’s more!
-
-* i18n strings now extend default en_US dictionary: if a certain string is not available in a language, the English string will be displayed.
-* Updated readme: improved usage docs and CDN links. Check out [the new usage section](https://github.com/transloadit/uppy/#usage) for yourself. Import, require or script tag? In any case, we’ve got your back.
-* Capabilities: we have added `capabilities` to the state.  For example, if 'tus' resumable uploader is used, `capabilities.resumable === true` is added to the state, so it is easy to check what upload capabilities are available. More to come.
-
-## Release Notes
-
-Here is the full list of changes for version 0.10.0:
-
-- core: expose some events/APIs/callbacks to the user: `onFileUploaded`, `onFileSelected`, `onAllUploaded`, `addFile` (or `parseFile`), open modal... (@arturi, @hedgerh)
-- core: how would Uppy work without the UI, if one wants to Uppy to just add files and upload, while rendering preview and UI by themselves #116 — discussion Part 1 (@arturi, @hedgerh)
-- core: refactor towards react compatibility as discussed in <https://github.com/transloadit/uppy/issues/110> (@hedgerh)
-- core: CSS modules? allow bundling of CSS in JS for simple use in NPM? See <https://github.com/transloadit/uppy/issues/120#issuecomment-242455042>, try <https://github.com/rtsao/csjs> — verdict: not yet, try again later (@arturi, @hedgerh)
-- core: try Web Workers and FileReaderSync for image resizing again — still slow, probably message payload between webworker and regular thread is huge (@arturi)
-- core: i18n strings should extend default `en_US` dictionary — if a certain string in not available in German, English should be displayed (@arturi)
-- dashboard: refactor to smaller components, pass props down (@arturi)
-- dashboard: option to render Dashboard inline instead of a modal dialog (@arturi)
-- dashboard: global circular progress bar, try out different designs for total upload speed and ETA (@arturi)
-- dashboard: show total upload speed and ETA, for all files (@arturi)
-- dashboard: copy link to uploaded file button, cross-browser (@arturi) (<http://i.imgur.com/b1Io34n.png>) (@arturi)
-- dashobard: refreshed design and grand refactor (@arturi)
-- dashboard: improve file paste the best we can <http://stackoverflow.com/a/22940020> (@arturi)
-- provider: abstract google drive into provider plugin for reuse (@hedgerh)
-- google drive: improve UI (@hedgerh)
-- tus: add `resumable` capability flag (@arturi)
-- tus: start fixing pause/resume issues and race conditions (@arturi)
-- test: working Uppy example on Require Bin — latest version straight from NPM <http://requirebin.com/?gist=54e076cccc929cc567cb0aba38815105> (@arturi @account)
-- meta: update readme docs, add unpkg CDN links (<https://unpkg.com/uppy/dist/uppy.min.css>) (@arturi)
-- meta: write 0.10 release blog post (@arturi)
-
-We’ll see you in about a month!
-
-The Uppy Team

+ 0 - 74
website/src/_posts/2016-11-0.11.md

@@ -1,74 +0,0 @@
----
-title: "Uppy 0.11: StatusBar, research, https and API docs"
-date: 2016-11-15
-author: arturi
-published: true
----
-
-Hey everyone! It has been a while since we last shared some news about our progress and we can't wait to let you know what’s up(py)!
-
-In October, we have been working hard to get Uppy 0.11 ready for release. This entailed, among other things, doing a write-up of our general architecture, bringing in a friend to look at what we’ve been up to, experimenting with Redux, and updating the Dashboard UI and website example.
-
-Here's what we have been up to, in some more detail.
-
-<!-- more -->
-
-## More research and experiments
-
-- We wrote an [ARCHITECTURE.md](https://github.com/transloadit/uppy/blob/master/ARCHITECTURE.md) document, describing our architecture and APIs.
-- Author of [Choo](https://github.com/yoshuawuyts/choo), Yoshua Wuyts, was invited to take a look at the state of things in Uppy, and he came up with a proposal for some changes, which we’ll be considering in the coming releases.
-- We also conducted a few Redux experiments on Uppy, in the process of which, no animals were hurt. :dog:
-
-## Dashboard: example features, StatusBar and updated UI
-
-**Dashboard example** [on our website](/uppy/examples/dashboard/) now features several options:
-
-- switchting between “inline” and “modal dialog / popup” mode;
-- toggling the `autoProceed` option that starts uploads automatically, without waiting for a click on the “upload” button;
-- enabling/disabling acquire plugins, like Google Drive and Webcam.
-
-<img src="/uppy/images/blog/0.11/dashboard-example-options.png">
-
-**StatusBar** is a – you guessed it – bar that appears on the bottom of the Dashboard and unifies progress with pause/resume buttons.
-
-**Dashboard UI** has undergone minor improvements, such as: a new “drag files here” icon and tagline. Furthermore, the text before “acquire” icons on the top — Local Disk, Google Drive, Webcam — has been removed (it used to say “Import files from:”). We also added new “remove file” icons. You know, small things, big difference. :sunglasses:
-
-<img src="/uppy/images/blog/0.11/uppy-dashboard-oct-2016-1.jpg" alt="Dashboard UI, no files. Text: Drop files here, paste or import from one of the locations above">
-
-<img src="/uppy/images/blog/0.11/uppy-dashboard-oct-2016-2.jpg" alt="Dashboard UI, file upload in progress. StatusBar with pause/resume button and progress">
-
-## HTTPS
-
-We have upgraded both [uppy.io](http://uppy.io/) and [tus.io](http://tus.io/) to support HTTPS with Let’s Encrypt. This will ensure that webcam example now works, secure uploads work, and – hopefully – that all will be well.
-
-## And more
-
-- We have renamed FormTag plugin to FileInput and made it pretty by default, with an added option to just show the default browser “choose file”.
-- [Fixed a bug](https://github.com/transloadit/uppy/issues/126) with `autoProceed: true` duplicating uploads.
-- Refactored Dashboard to only keep active acquire panel in DOM.
-- Added PersistentState plugin that saves state to localStorage — which is useful for development.
-- [Grand refactor of Uppy Server](https://github.com/transloadit/uppy/pull/131) with dynamic controllers.
-- Webcam stream no longer flashes when state is updated.
-
-## Release Notes
-
-Here is the full list of changes for version 0.11:
-
-- core: log method should have an option to throw error in addition to just logging (@arturi)
-- experimental: PersistentState plugin that saves state to localStorage — useful for development (@arturi)
-- dashboard: implement new StatusBar with progress and pause/resume buttons <https://github.com/transloadit/uppy/issues/96#issuecomment-249401532> (@arturi)
-- dashboard: attempt to throttle StatusBar, so it doesn’t re-render too often (@arturi)
-- dashboard: refactor — only load one acquire panel at a time (activeAcquirer or empty), change focus behavior, utilize onload/onunload
-- experimental: create a Dashboard UI for Redux refactor (@hedgerh)
-- dashboard: make trigger optional — not needed when rendering inline (@arturi)
-- fileinput: pretty input element #93 (@arturi)
-- meta: document current Uppy architecture and question about the future (@arturi, @hedgerh)
-- test: see about adding tests for autoProceed: true (@arturi)
-- website: and ability to toggle options in Dashboard example: inline/modal, autoProceed, which plugins are enabled #89 (@arturi)
-- website: finish https upgrade for uppy.io, uppy-server and tus, set up pingdom notifications (@arturi, @kvz, @hedgerh)
-- website: update guide, API docs and main page example to match current actual API (@arturi)
-- uppy-server: Make uppy server have dynamic controllers (@hedgerh)
-
-We hope you'll enjoy this latest release. We have got a lot more in store for Uppy and we won't wait too long with throwing you a bone again!
-
-The Uppy Team

+ 0 - 64
website/src/_posts/2016-12-0.12.md

@@ -1,64 +0,0 @@
----
-title: "Uppy 0.12: Responsive. Cancel. Feedback. Refreshed ES6 server"
-date: 2016-12-07
-author: arturi
-published: true
----
-
-Hello! Here’s what’s new in Uppy 0.12.
-
-## Dashboard: local mode and multipart uploads support in UI
-
-Prior to this release, we’ve optimized the Dashboard for usage with multiple “acquire plugins”, say Webcam + Google Drive. But sometimes all you need is “local disk” with drag & drop support, nice file previews and progress. And now the Dashboard UI works great with that use case out of the box. When you don’t add (.use) any acquire plugins, it looks like this:
-
-<figure class="wide"><img src="/uppy/images/blog/0.12/uppy-dashboard-local.jpg"></figure>
-
-Also (prior to this release), we’ve built the Dashboard to work well with [tus resumable uploads](http://tus.io). That’s why you can pause and resume individual uploads, as well as all at once. But if you use an endpoint that is not yet ready for the future and upload resumability (here’s [how](https://github.com/tus/tus-node-server) to [fix that](https://github.com/tus/tusd), by the way), the Dashboard UI will show regular “cancel” buttons instead of pause/resume.
-
-Dashboard is gradually becoming more mobile friendly too, but we’ll be saving some of that stuff for the next release.
-
-## Server
-
-Uppy server has undergone a quite a few changes, including the build setup:
-
-- We are using ES2015, transpiling to ES5 with Babel.
-- Added linting, lint-staged, pre-commit all that good stuff.
-- Added `npm run release` command that publishes releases for us.
-- Google Drive is working again on the Uppy Server side.
-- Refactoring, error handling and more minor improvements.
-
-<!-- more -->
-
-## And
-
-- The website now features a video demo of Uppy in action, check it out: <http://uppy.io>.
-- Fixed a bug where the Webcam would continue to be active (green light on) even after the picture was taken — all good now.
-- Improved import/require support for ES2015 and CommonJS modules. Basically, we don’t recommend ES2015 spread imports as a default option just yet — no tree shaking in Browserify and Webpack 1. Both `import DragDrop from 'uppy/lib/plugin/DragDrop'` and `const DragDrop = require('uppy/lib/plugin/DragDrop')` are now supported. We’ve added `add-module-exports` babel plugin that replaces `export default` with `module.exports` for backwards compatibility.
-- Optimized dependencies a little: removed the ones we don’t use, upgraded some that we do.
-
-## Release Notes
-
-Here is the full list of changes for version 0.12:
-
-- meta: write 0.12 release blog post (@arturi)
-- core: figure out import/require for core and plugins — just don’t use spread for plugins (@arturi)
-- meta: create a demo GIF, showcasing Uppy Dashboard for the main page, like <https://zeit.co/blog/next> (@arturi)
-- meta: update Readme, update screenshot (@arturi)
-- server: add pre-commit and lint-staged (@arturi)
-- server: re-do build setup: building at `deploy` and `prepublish` when typing `npm run release:patch` 0.0.1 -> 0.0.2 (@ifedapoolarewaju)
-- server: re-do build setup: es6 `src` -> es5 `lib` (use plugin packs from Uppy)
-- server: re-do build setup: `eslint --fix ./src` via <http://standardjs.com> (@ifedapoolarewaju)
-- server: re-do build setup: `babel-node` or `babel-require` could do realtime transpiling for development (how does that hook in with e.g. `nodemon`?) (@ifedapoolarewaju)
-- server: refacor: remove/reduce file redundancy (@ifedapoolarewaju)
-- server: error handling: 404 and 401 error handler (@ifedapoolarewaju)
-- server: bug fix: failing google drive (@ifedapoolarewaju)
-- webcam: stop using the webcam (green light off) after the picture is taken / tab is hidden (@arturi)
-- core: allow usage without `new`, start renaming `Core()` to `Uppy()` in examples (@arturi)
-- core: api — consider [Yosh’s feedback and proposals](https://gist.github.com/yoshuawuyts/b5e5b3e7aacbee85a3e61b8a626709ab), come up with follow up questions (@arturi)
-- dashboard: local mode — no acquire plugins / external services, just DnD. ActionBrowseTagline component (@arturi)
-- dashboard: only show pause/resume when tus is used (@arturi)
-- dashboard: cancel uploads button for multipart (@arturi)
-- dashboard: responsive design — stage 1 (@arturi)
-- meta: write 0.11 release blog post (@arturi)
-
-The Uppy Team

+ 0 - 123
website/src/_posts/2017-02-0.14.md

@@ -1,123 +0,0 @@
----
-title: "Uppy 0.14: Responsive Dashboard, Standalone & Pluggable Server, Dropbox"
-date: 2017-02-13
-author: arturi
-published: true
----
-
-Hi! Hope y’all have had great holidays! 🎄 Which reminds us, we still have a gift for you — and we even wrapped it in a package (npm). Look inside and you’ll find that Uppy 0.14!
-
-“But wait”, you might ask, “where is the 0.13 release that we have been waiting for?”
-
-Well, let’s just say we are superstitious like that. You won’t see us coding under any ladders either! And we were also in the middle of the holiday season, so we decided to call 0.13 “The Release That Wasn’t” and skip it.
-
-Let’s take a look at what Uppy 0.14 has in store for you.
-
-<!-- more -->
-
-## Major Uppy Server Updates
-
-**Express.js**
-We’ve switched to Express from Koa. It’s more widely adopted and supported, has larger community and better maintained packages, so we went for it.
-
-**Pluggable or standalone**
-Uppy Server can now be plugged into your existing Express/Koa server app, but you can also still run it as a standalone server. [See here](https://github.com/transloadit/uppy-server#run-as-standalone-server) for further instructions.
-
-**Smooth authentication**
-It used to be the case that when you clicked that stylish “authenticate” \[with Google Drive] button, you were taken away from the page, and things tended to get lost. That has now all been made silky smooth: upon clicking the button, a fresh tab will open in your browser, which will take you to the authentication page – be it on Google Drive, Dropbox, or somewhere else. When you are done, this tab is automagically closed, and you are back where you were, authenticated, with all your remote files at hand.
-
-<img class="border" src="/uppy/images/blog/0.14/smooth-auth.png">
-
-**Dropbox plugin**
-Dropbox support made it into Uppy this release! 🎉 [Ife](https://github.com/ifedapoolarewaju) rocks like that. (A shoutout here as well to [Harry](https://github.com/hedgerh) for the initial work on Uppy Server and the Google Drive plugin!) Why don't you [give it a try](/uppy/examples/dashboard/)!
-
-<img class="border" src="/uppy/images/blog/0.14/uppy-dropbox.png">
-
-What’s more, the client-side code of Google Drive and Dropbox plugins is slowly being refactored into a generic provider view that can be shared among all services.
-
-## Dashboard
-
-**Responsive UI and more icons**
-The Dashboard now adapts itself to screen sizes big and small. That includes `inline` mode, where you can set `maxWidth` and `maxHeight` in options, like so:
-
-```js
-uppy.use(Dashboard, {
-  maxWidth: 300,
-  maxHeight: 350,
-  inline: true,
-  target: '#myUploadContainer',
-})
-```
-
-We are not using media queries here, but have instead added a `UppyDashboard--wide` CSS class, which allows for more flexibility — your file uploading widget can be tiny even if the screen is large.
-
-When there is little space available, the file grid view that you have become used to, will turn into a new compact list view.
-
-<figure class="wide"><img src="/uppy/images/blog/0.14/dashboard-grid-list.jpg"></figure>
-
-We are also adding more file type icons and trying to be smarter about detecting them. We have new icons for video, audio, text, and PDF for you to enjoy.
-
-**Total / uploaded sizes**
-Total and uploaded sizes have been added to the StatusBar, allowing you and your users to keep track of all those bits and bytes.
-
-<img src="/uppy/images/blog/0.14/statusbar-uploaded-total-size.png">
-
-You can play with all of these new features on [the Dashboard example page](/uppy/examples/dashboard/).
-
-<!-- more -->
-
-## Per plugin locale settings
-
-We have moved locale settings from global/core to plugins. By default, each UI plugin ships with an English locale, and you can override any string with your own, like so:
-
-```js
-uppy.use(DragDrop, {
-  target: '.drop',
-  locale: {
-    strings: {
-      chooseFile: 'Valitse tiedoston',
-      orDragDrop: 'tai siirtää tänne',
-    },
-  },
-})
-```
-
-<img src="/uppy/images/blog/0.14/dnd-fi.png">
-
-And just like that, your Drag&Drop plugin now speaks Finnish! *Hyvää huomenta!* This feature is a work in progress, we are trying to find the sweet spot between [bundling a whole bunch of strings in packs](https://github.com/transloadit/uppy/blob/8c6252933813af69c1b71ec4621a7fc14dfb3ab0/src/locales/pt_BR.js), which might be redundant (i.e. if you only use the Drag&Drop, you don’t need strings from the Dashboard), and making you choose or set language strings for each UI plugin. We’d love to [hear what you think](https://github.com/transloadit/uppy/issues/42).
-
-## Misc
-
-- [yo-yoify](https://www.npmjs.com/package/yo-yoify) has been added to our build setup in order to solve a [Function.caller / strict mode issue](https://github.com/shama/bel#note) and to make the app faster/smaller by transforming template strings into pure and fast document calls.
-- By the way, Uppy’s UI DOM is powered by [yo-yo](https://www.npmjs.com/package/yo-yo). We like yo-yo for its simplicity, speed and small size, but sometimes there are issues, one of them being the lack of wide adoption. We are looking at [Preact](https://preactjs.com/), but are also quite excited about [Nanocomponent](https://github.com/yoshuawuyts/nanocomponent).
-- Progress events that were not being properly sent from Uppy Server as now fixed. As it turns out, this occurred because server uploads were happening too fast, before the client was actually able to connect to the server. :scream: Guess that’s a good problem to have solved!
-- We have recently added Uppy to [Product Hunt](https://www.producthunt.com/posts/uppy) and we were very pleased with the warm welcome, we even made it to the front page a few days later. Let’s hope it will help get more people excited about the project.
-
-## Release Notes
-
-Here is the full list of changes for version 0.14:
-
-- dashboard: use `isWide` prop/class instead of media queries, so that compact/mobile version can be used in bigger screens too (@arturi)
-- dashboard: basic “list” view in addition to current “grid” view (@arturi)
-- dashboard: more icons for file types (@arturi)
-- dashboard: add totalSize and totalUploadedSize to StatusBar (@arturi)
-- dashboard: figure out where to place Informer, accounting for StatusBar — over the StatusBar for now (@arturi)
-- dashboard: add `<progress>` element for progress bar, like here <https://overcast.fm/+BtuxMygVg/>. Added hidden for now, for semantics/accessibility (@arturi)
-- dragdrop: show number of selected files, remove upload btn (@arturi)
-- build: exclude locales from build (@arturi)
-- core: i18n for each plugin in options — local instead of global (@arturi)
-- core: add default pluralization (can be overridden in plugin options) to Translator (@arturi)
-- core: use yo-yoify to solve [Function.caller / strict mode issue](https://github.com/shama/bel#note) and make our app faster/smaller by transforming template strings into pure and fast document calls (@arturi)
-- server: a pluggable uppy-server (express / koa for now) (@ifedapoolarewaju)
-- server: standalone uppy-server (@ifedapoolarewaju)
-- server: Integrate dropbox plugin (@ifedapoolarewaju)
-- server: smooth authentication: after auth you are back in your app where you left, no page reloads (@ifedapoolarewaju)
-- tus: fix upload progress from uppy-server (@arturi, @ifedapoolarewaju)
-- core: basic React component — DnD (@arturi)
-- core: fix support for both ES6 module import and CommonJS requires with `add-module-exports` babel plugin (@arturi)
-
-## Feedback
-
-We appreciate your feedback, feel free to [comment on GitHub](https://github.com/transloadit/uppy/issues/), send a PR, and hit us on [twitter](https://twitter.com/uppy_io).
-
-The Uppy Team

+ 0 - 80
website/src/_posts/2017-03-0.15.md

@@ -1,80 +0,0 @@
----
-title: "Uppy 0.15: Spring cleanup"
-date: 2017-03-15
-author: arturi
-published: true
----
-
-Spring is in the air and Uppy is feeling particularly full of life. In this post about Uppy 0.15, we have some exciting stories about `babel-plugin-yo-yoify`, progress event throttling, and new friends.
-
-<!-- more -->
-
-## Yo-yoify for NPM-installed Uppy
-
-In [`0.14`](/uppy/blog/2017/02/0.14/), we added `yo-yoify` transform to give Uppy some extra speed and eliminate `Function.caller` issues. As it turned out, we [forgot](https://github.com/transloadit/uppy/issues/158) about our Babel-transpiled `lib` version of Uppy that gets published to NPM 🙀. We then spent some time creating a standalone version of `yo-yoify` that would be able to parse `yo-yo` template strings before Babel-transpilation, only to discover that there already is a [`babel-plugin-yo-yoify`](https://www.npmjs.com/package/babel-plugin-yo-yoify) that not only does precisely that, but also frees us from jumping through a lot of unnecessary hoops. It did [have](https://github.com/goto-bus-stop/babel-plugin-yo-yoify/issues/9) [a few](https://github.com/goto-bus-stop/babel-plugin-yo-yoify/pull/8) [issues](https://github.com/goto-bus-stop/babel-plugin-yo-yoify/issues/11) at first, but luckily our friend [Renée](https://github.com/goto-bus-stop) was available to colaborate with us on this. Renée has also agreed to join Uppy for a while to help us with other pressing issues. So, silver linings — bugs can sometimes lead to new friends and wonderful beginnings. We are very excited about what this all means for Uppy in the months to come.
-
-Uppy from NPM is now good to go and the issue has been completely resolved. You can update at: <https://www.npmjs.com/package/uppy>. And yeah, if you use `yo-yo`, give [`babel-plugin-yo-yoify`](https://www.npmjs.com/package/babel-plugin-yo-yoify) a try.
-
-## Pause & Resume Remote Uploads
-
-Just like with “local” uploads, Uppy can now pause and resume remote uploads from Google Drive or Dropbox (handled on the backend by `uppy-server` + `tus`). 🎉
-
-## Progress Throttling
-
-While working on pausing remote uploads with `uppy-server`, Ife discovered a strange bug: uppy-client would hang during the upload, after which the progress would immediately jump to 100%. After some solid Sherlock Holmesing, we found what was causing it: uploads were happening too fast. This was leading to progress events being sent very, very often (like 300 / second), which trashed the interface rendering loop. We have solved this by [adding throttling in tus-js-client](https://github.com/tus/tus-js-client/commit/9940f27b2361fd7e10ba58b09b60d82422183bbb) (thanks Marius!) and [uppy-server](https://github.com/transloadit/uppy-server/commit/936ad48e92631c45d123664900b9aabcf7a190fa) (thanks Ife!). I would also very much like to take this opportunity to thank myself for [fixing](https://github.com/transloadit/uppy/commit/1d5f4404546420442deabc94df84bd3ec0677eec) [it](https://github.com/transloadit/uppy/commit/db32c6f4fd85420532f27f04920dbaf6d126ea9b) in uppy-client too! :innocent:
-
-To prevent “jumping” progress, numbers and text in StatusBar are now only updated once a second. Plus, we have switched to [`prettier-bytes`](https://www.npmjs.com/package/prettier-bytes), which adds some nice number rounding. Smooth as butter!
-
-TL;DR Uppy was simply too fast at uploading, so we had to shorten the leash a bit!
-
-## Informer coming at you in full-color mode
-
-Informer will now be able to change the way it looks depending on the `type` argument:
-
-```js
-// (`'informer'`, `text`, `type`, `duration`)
-uppy.emit('informer', 'Connected!', 'success', 3000)
-```
-
-<img src="/uppy/images/blog/0.15/informer.png">
-
-This supports the following `type`s: `info`, `warning`, `error`, `success`, all with their own colors!
-
-## Some other things
-
-- Multipart now treats all 2xx responses as successful and returns xhr object in `core:upload-success` event callback.
-- That progress circle that you can see on each file in Dashboard has been improved on the inside: precise `circleLength` and `stroke-dasharray/stroke-dashoffset` calculation.
-- Uppy-server returns uploaded file urls and sizes for remote uploads (from Google Drive & Dropbox).
-- Provider plugins now have a loading screen, error screen and logout link. Breadcrumbs are also working again.
-
-## Release Notes
-
-Here is the full list of changes for version 0.15:
-
-- build: update dependencies and eslint-plugin-standard, nodemon --> onchange, because simpler and better options (@arturi)
-- build: fix `Function.caller` issue in `lib` which gets published to NPM package, add babel-plugin-yo-yoify (@arturi #158 #163)
-- provider: show error view for things like not being able to connect to uppy server, should this be happening when uppy-server is unavailable <http://i.imgur.com/cYJakc9.png> (@arturi, @ifedapoolarewaju)
-- provider: loading indicator while files from GoogleDrive / Dropbox are loading (@arturi, @ifedapoolarewaju)
-- provider: logout link/button (@arturi, @ifedapoolarewaju)
-- provider: fix breadcrumbs (@ifedapoolarewaju)
-- server: refactor local/remote uploads in tus, allow for pause/resume with remote upload (@arturi, @ifedapoolarewaju)
-- server: throttle progress updates sent through websockets, sometimes it can be overwhelming when uploads are getting this fast (@ifedapoolarewaju)
-- server: pass file size from Google Drive / Dropbox (@ifedapoolarewaju)
-- server: return uploaded file urls (from Google Drive / Dropbox) (@ifedapoolarewaju)
-- server: research having less permissions, smaller auth expiration time for security (@ifedapoolarewaju)
-- dashboard: basic React component (@arturi)
-- core: experiment with `nanoraf` and `requestAnimationFrame` (@arturi)
-- core: add throttling of progress updates (@arturi)
-- dashobard: fix Missing `file.progress.bytesTotal` property  (@arturi #152)
-- dashboard: switch to prettier-bytes for more user-friendly progress updates (@arturi)
-- dashboard: fix `updateDashboardElWidth()` not firing in time, causing container width to be 0 (@arturi)
-- multipart: treat all 2xx responses as successful, return xhr object in `core:upload-success` (@arturi #156 #154)
-- dashboard: throttle StatusBar numbers, so they update only once a second (@arturi, @acconut)
-- dashboard: add titles to pause/resume/cancel in StatusBar (@arturi)
-- dashboard: precise `circleLength` and `stroke-dasharray/stroke-dashoffset` calculation for progress circles on FileItem (@arturi)
-- dashboard: don’t show per-file detailed progress by default — too much noise (@arturi)
-- website: blog post and images cleanup (@arturi)
-
-Enjoy!
-
-The Uppy Team

+ 0 - 83
website/src/_posts/2017-05-0.16.md

@@ -1,83 +0,0 @@
----
-title: "Uppy 0.16: Transloadit!"
-date: 2017-05-24
-author: ife
----
-
-Hello there! Missed us much? :) We're chomping at the bits, at least, to tell you about our latest release. This one has been in the works longer than usual, but then again, it's also way cooler than usual, so let's get right to it.
-
-<!-- more -->
-
-## Transloadit integration beta
-
-Yes, you read that right! We now have an easily integrable [Transloadit](https://transloadit.com) plugin. It was a big push indeed and we owe a big debt of thanks to [Renée](https://github.com/goto-bus-stop) for going fully beast mode on this. The plugin is still in beta, but it works - and it's awesome. That said, of course it is entirely optional: if you don't use Transloadit, you don't have to bundle the plugin.
-
-<video alt="Demo video showing the Transloadit upload plugin in action." muted autoplay loop>
-  <source src="/uppy/images/blog/0.16/transloadit.webm" type="video/webm">
-  <source src="/uppy/images/blog/0.16/transloadit.mp4" type="video/mp4">
-</video>
-
-The Transloadit plugin for Uppy handles creating an "Assembly" (a file conversion job) before uploading files, and can optionally wait for file conversions to complete before showing the uploads as successful, as shown above. Listen for the `core:success` event to respond to upload completion, just like you would without the Transloadit plugin.
-
-We'll be adding decent documentation to the Uppy website soon, but [here](https://gist.github.com/kvz/8ae07aa8c063c8e55abbc1580b50c8a4#file-uppy-demo-js-L117-L147) is a quick code sample of how a Transloadit plugin integration would look like already.
-
-## More work on high-level React components
-
-Since the last release, we've been exploring possibilities for an official set of React components. Initially, we'll be providing component wrappers for the existing Uppy UI plugins, such as the [Dashboard](/examples/dashboard) and [DragDrop](/examples/dragdrop) plugins. They aren't ready yet, but if you'd like to follow along with development, check out the work that has been done so far in pull request [#170](https://github.com/transloadit/uppy/pull/170)!
-
-## DOM element in `target:` option, `uppy.close()` for tearing down an Uppy instance
-
-While laying the groundwork for the React component integrations, Uppy has also become a bit friendlier towards being integrated with other frameworks and in single-page apps. The `target:` option in each plugin used to work only with CSS selectors, which was difficult to use if the plugin should be mounted on a dynamically generated element. In 0.16, either a query selector or an actual DOM element can be passed in.
-
-The new `.close()` method on the Uppy instance cleans up all of Uppy's event handlers and DOM elements. Useful when navigating away from a page with an Uppy uploader in a single-page app, or when unmounting a React component that contains an Uppy instance!
-
-## Server time!
-
-We got everything covered - front-to-back-end - so you can be sure we also got some things going on the server side.
-
-- parallelizing downloading/uploading remote files: start uploading chunks right away, while still downloading the file on disk. Even though the server may download files relatively faster, it is good to know that you don't have to wait out the download before the upload begins.
-- Image thumbnails are now also shown for remote files.
-- Automated tests have been added using the test library, [jest](https://facebook.github.io/jest/).
-- Remote files are now deleted from local disk immediately after a successful upload.
-
-## And
-
-Multiple necessary chores (the kind you don’t like to talk about at parties), such as:
-
-- Replacing `babel-preset-es2015-loose` by the standard es2015 preset with `loose` option
-- Merging the Tus10 plugin options with `tus-js-client` options
-- We reviewed the uppy-server README to be more elaborate when getting started.
-- The Service logo is now visible on the corresponding file in the Dashboard. For example if a file is being uploaded from Google Drive you would see a Google Drive logo easily identifying where the file is from. Take a look!
-
-<img src="/uppy/images/blog/0.16/service-logos.png">
-
-## Release Notes
-
-Here is the full list of changes for version 0.16:
-- uploaders: make sure uploads retry/resume if started when offline or disconnected, retry when back online / failed <https://github.com/transloadit/uppy/pull/135> (@arturi, @ifedapoolarewaju)
-- transloadit: add basic (beta) version of Transloadit plugin (@goto-bus-stop, @kvz, @tim-kos / #28)
-- transloadit: emit an upload event w/ tl data when a file upload is complete (#191 @goto-bus-stop)
-- webcam: implement reading audio+video from webcam (@goto-bus-stop / #175)
-- webcam: Make the webcam video fill the available space as much as possible (@goto-bus-stop / #190)
-- tus: Merge tus-js-client options with uppy-tus. Hence, enable custom headers support (@goto-bus-stop)
-- multipart/tus: Remove Promise.all() calls with unused results (@goto-bus-stop / #121)
-- dashboard: fix Dashboard modal close button position (@goto-bus-stop / #171)
-- core: pass through errors (@goto-bus-stop / #185)
-- core: accept a DOM element in `target:` option (@goto-bus-stop / #169)
-- core: Remove the last few potentially buggy uses of `document.querySelector` (@goto-bus-stop)
-- dashboard: Fix dashboard width when multiple instances exist (@goto-bus-stop / #184)
-- dashboard: add service logo / name to the selected file in file list (@arturi)
-- server: begin adding automated tests, maybe try <https://facebook.github.io/jest> (@ifedapoolarewaju)
-- server: add image preview / thumbnail for remote files, if its in the API of services (@ifedapoolarewaju)
-- server: research parallelizing downloading/uploading remote files: start uploading chunks right away, while still storing the file on disk (@ifedapoolarewaju)
-- server: delete file from local disk after upload is successful (@ifedapoolarewaju)
-- website: try on a Github ribbon <http://tholman.com/github-corners/> (@arturi / #150)
-- website: different meta description for pages and post (@arturi)
-- server: well-documented README (@ifedapoolarewaju)
-- react: \[WIP] High-level React Components (@goto-bus-stop / #170)
-- core: add `uppy.close()` for tearing down an Uppy instance (@goto-bus-stop / #182)
-- core: replace `babel-preset-es2015-loose` by standard es2015 preset with `loose` option (@goto-bus-stop / #174)
-
-Enjoy!
-
-The Uppy Team

+ 0 - 151
website/src/_posts/2017-05-0.17.md

@@ -1,151 +0,0 @@
----
-title: "Uppy 0.17: Restrictions"
-date: 2017-07-11
-author: arturi
-published: true
----
-
-Hi! We are back with yet another Uppy release that contains some often requested features such as file restrictions and better file type detection, alongside a brand new Instagram plugin, UI improvements and more!
-
-<!-- more -->
-
-## ⚠️ File Restrictions
-
-Something that a few of our biggest fans were asking for, is finally here! Here's the gist of it:
-
-```js
-Uppy({
-  debug: true,
-  autoProceed: false,
-  restrictions: {
-    maxFileSize: 300000,
-    maxNumberOfFiles: 5,
-    minNumberOfFiles: 2,
-    allowedFileTypes: ['image/*', 'video/*'],
-  },
-  onBeforeFileAdded: (currentFile, files) => {
-    if (currentFile.name === 'my-file.jpg') {
-      return Promise.resolve()
-    }
-    return Promise.reject('This is not the file I was looking for')
-  },
-  onBeforeUpload: (files) => {
-    if (Object.keys(files).length < 2) {
-      return Promise.reject('Too few files :(')
-    }
-    return Promise.resolve()
-  },
-})
-```
-
-Basically, there are two ways to set restrictions:
-
-1\. Using the `restrictions` object in Uppy's core settings:
-
-```js
-restrictions: {
-  maxFileSize: 300000,
-  maxNumberOfFiles: 5,
-  minNumberOfFiles: 2,
-  allowedFileTypes: ['image/*', 'video/*']
-}
-```
-
-Translation: allow only images and videos of any type, a minimum of 2 and maximum of 5 files must be selected, 300kb or less.
-
-`allowedFileTypes` must be an array of strings with supported file mime-types. Anything from [this list](https://www.iana.org/assignments/media-types/media-types.xhtml) should work, as long as Uppy is able to detect it (and Uppy promises to try real hard, see below for details). Both wildcards `video/*` and specicifc types `image/jpeg` are supported!
-
-2\. Using the more advanced callbacks: `onBeforeFileAdded(currentFile, files)`, which fires before a file is added and allows you to run whatever checks you wish against either the single file that is about to be added or all files currently selected / uploaded, and `onBeforeUpload(files)`, where you are able to check stuff before proceeding with the upload.
-
-Basically, use the first option for the simple stuff such as limiting uploads to images or a maximum of three files. Use the second option for things like “we need users to upload 5 photos and an audio file, so we can make a short clip out of it”. Let us know if this suits your needs, we are all 👂ears👂!
-
-Also, a new `note` option has been added to the Dashboard, as a quick and easy way to inform users about the restrictions you choose to set up:
-
-```js
-uppy.use(Dashboard, {
-  note: 'Images and video only, 300kb or less',
-})
-```
-
-<img class="border" src="/uppy/images/blog/0.17/restrictions-note.jpg">
-
-## 📸 Instagram plugin and UI overhaul
-
-Yes, Instagram is now supported in Uppy, so you can easily import all of your cat, dog and food pictures!
-
-<figure class="wide">
-  <img class="border" src="/uppy/images/blog/0.17/instagram-ui.jpg">
-</figure>
-
-You can try it live in the [Dashboard example](/uppy/examples/dashboard/).
-
-The UI for all “provider” plugins, which is the way we call Google Drive, Dropbox and other external services, have been revamped to make better use of the space.
-
-Files are now selected, or added, on click/tap, rather than double click, which is easier and also works on mobile. 🙀
-
-<img class="border" src="/uppy/images/blog/0.17/provider-search.jpg">
-
-## StatusBar
-
-The Dashboard’s StatusBar has been improved. First of all, even though it still comes bundled with the Dashboard like before, it is now a separate plugin that can be used anywhere, like with the Drag and Drop plugin or your own custom thing. Furthermore, it now shows fatal upload errors in addition to the upload / processing / transcoding progress. 💪
-
-In the Dashboard, you can now disable the StatusBar and/or Informer if you don’t need them or want something custom, by setting `disableStatusBar: true` and `disableInformer: true`.
-
-Details: [#217](https://github.com/transloadit/uppy/pull/217)
-
-## Better file type detection
-
-We’ve added a [`file-type`](https://github.com/sindresorhus/file-type) module that helps with figuring out the file type by reading the first magic bytes of the file. If that doesn’t work, we try to use the mime-type provided by the system/browser, and if that is still a dead end, we attempt to figure it out by extension. All in all, this leads to a more robust file type detecting experience. Personally, I’m just happy my Sex and the City 🍸 `.avi` files are now recognized as `video` on a Mac!
-
-Further details can be found here: [#219](https://github.com/transloadit/uppy/pull/219)
-
-## Extracting metadata from `<form>` inputs
-
-If a plugin’s `target` is a `form` element, we are going to try to extract all the data from that form’s inputs and add it as `meta` to Uppy’s state. That `meta` is then merged with file’s meta when it is being added.
-
-Uppy’s core options have received a new `meta` property, where you can define some metadata from the start, as well as a new `setMeta` method that can be called at any time.
-
-See here for more details: [#238](https://github.com/transloadit/uppy/pull/238)
-
-## More
-
-- Added a `reset()` method that stops uploads, clears files and totalProgress, and restores things to the way they were on initialization, before user interactions [#226](https://github.com/transloadit/uppy/pull/226)
-- Support for headers in Multipart plugin [#224](https://github.com/transloadit/uppy/pull/224)
-- Set bytesUploaded/bytesTotal as soon as the file is added, fixes a `NaN` issue [#232](https://github.com/transloadit/uppy/pull/232)
-
-## Release Notes
-
-Here is the full list of changes for version 0.17:
-
-- core: added restrictions — by file type, size, number of files (@arturi)
-- provider: improved UI: improve overall look, breadcrumbs, more responsive (@arturi)
-- core: css-in-js demos, try template-css (@arturi @goto-bus-stop #239)
-- core: added `uppy.reset()` as discussed in #179 (@arturi)
-- core: added nanoraf <https://github.com/yoshuawuyts/choo/pull/135/files?diff=unified> (@goto-bus-stop, @arturi)
-- core: file type detection: archives, markdown (possible modules: file-type, identify-filetype) example: <http://requirebin.com/?gist=f9bea9602030f1320a227cf7f140c45f>, <http://stackoverflow.com/a/29672957> (@arturi)
-- dashboard: made file icons prettier: </uppy/uppy/images/blog/0.16/service-logos.png> (@arturi, @nqst / #215)
-- fileinput: allow retrieving fields/options from form (@arturi #153)
-- server: configurable server port (@ifedapoolarewaju)
-- server: added support for custom providers (@ifedapoolarewaju)
-- statusbar: also show major errors, add “error” state (@goto-bus-stop)
-- statusbar: pre/postprocessing status updates in the StatusBar (@goto-bus-stop, #202)
-- statusbar: show status “Upload started...” when the remote upload has begun, but no progress events received yet (@arturi)
-- statusbar: work towards extracting StatusBar to a separate plugin, still bundle it with Dashboard (@goto-bus-stop, @arturi)
-- tus/uppy-server: support metadata in remote tus uploads (@ifedapoolarewaju, @goto-bus-stop / #210)
-- uploaders: added direct-to-s3 upload plugin and test it with the flow to then upload to transloadit, stage 1, WIP (@goto-bus-stop)
-- uppy/uppy-server: Made a barely working Instagram Plugin (@ifedapoolarewaju / #21)
-- uppy/uppy-server: allow google drive/dropbox non-tus (i.e multipart) remote uploads (@arturi, @ifedapoolarewaju / #205)
-- uppy/uppy-server: do not show files that cannot be downloaded from Google Drive (@ifedapoolarewaju)
-- uppy: fixed Google Drive uploads on mobile (double click issue) (@arturi)
-- core: updated prettier-bytes to fix the IE support issue <https://github.com/Flet/prettier-bytes/issues/3> (@arturi)
-- core: use URL.createObjectURL instead of resizing thumbnails (@arturi, @goto-bus-stop / #199)
-- dashboard: fixed ETA when multiple files are being uploaded (@goto-bus-stop, #197)
-- transloadit: fixed receiving assembly results that are not related to an input file (@arturi, @goto-bus-stop / #201)
-- transloadit: use the `tus_upload_url` to reliably link assembly results with their input files (@goto-bus-stop / #207)
-- transloadit: moved user-facing strings into locale option (@goto-bus-stop / <https://github.com/transloadit/uppy/commit/87a22e7ee37b6fa3754fa34868516a6700306b60>)
-- webcam: mute audio in realtime playback (@goto-bus-stop / #196)
-- temporarily downgrade yo-yoify, until shama/yo-yoify#45 is resolved (@arturi / <https://github.com/transloadit/uppy/commit/6292b96>)
-
-Enjoy!
-
-The Uppy Team

+ 0 - 102
website/src/_posts/2017-07-golden-retriever.md

@@ -1,102 +0,0 @@
----
-title: "The Golden Retriever: Making uploads survive browser crashes"
-date: 2017-07-31
-author: arturi
-image: "http://uppy.io/uppy/images/blog/golden-retriever/uppy-team-kong.jpg"
-published: true
----
-
-**TL;DR:** We're on a mission to improve file uploading on the web. We released [tus](https://tus.io): the open protocol for resumable file uploads, as well as Uppy: the next open source file uploader for web browsers. Uppy uses tus, which makes it resilient to poor network conditions and crashing servers. Today we’re launching an Uppy feature that also makes it resilient to browser crashes, which we believe is an industry first. We’re sharing a quick [demo](/blog/2017/07/golden-retriever/#demo) video, a bit of [background](/blog/2017/07/golden-retriever/#uppy), [how](/blog/2017/07/golden-retriever/#how) exactly we achieved this, and how you can [try](/blog/2017/07/golden-retriever/#try) it yourself.
-
-\***
-
-Don’t you just hate it when you’re about to share the perfect photos from your trip to Iceland, and halfway through, your cat jumps on the keyboard and trashes your browser? Or the battery in your laptop dies? Or you accidentally close the tab or navigate away? We hate that too!
-
-If action games have had checkpoints since 1687 — why can’t file uploaders? Well, as it turns out, they can! We found a way to get those Iceland pics into the hands of your loved ones with near-zero levels of frustration, even after a dreaded Blue Screen of Death! (if that is still a thing ;)
-
-<!-- more -->
-
-<a name="demo"></a>
-
-## Demo
-
-First off, let’s show you a demo 📹 of Uppy surviving a browser crash and picking up right where we left it:
-
-<figure class="wide"><video alt="Demo video showing the Golden Retriever file restoring plugin in action" controls><source src="/uppy/images/blog/golden-retriever/uppy-golden-retriever-crash-demo-2.mp4" type="video/mp4">Your browser does not support the video tag, you can <a href="/uppy/images/blog/golden-retriever/uppy-golden-retriever-crash-demo-2.mp4">download the video</a> to watch it.</video></figure>
-
-<a name="uppy"></a>
-
-## Uppy?
-
-For those of you who are new here, Uppy is the next-gen open source file uploader for the web. It is made by Transloadit and thus it works great with their uploading & encoding platform — but it also works great without! Simply add Uppy JavaScript to your website, deploy your own tusd/Node.js/Apache/Nginx server, and be on your way. Add [uppy-server](https://github.com/transloadit/uppy-server), and your users will be able to pick files from remote sources like Dropbox and Instagram. Uppy’s focus is on the modern web, and we go through extreme lengths to achieve the smoothest of user experiences, and the most durable of reliabilities. 🙃
-
-## Hacking trip
-
-Our core team is spread across three continents and five cities, and most of us have never met in person, with the majority of communication happening in GitHub and Slack. Just last week, we got together in Berlin for a crazy week of pink limo rides, Indian food and Mario Kart 64. More on that on the [Transloadit blog](https://transloadit.com/blog/2017/08/team-meetup-2017/).
-
-<figure class="wide"><img src="/uppy/images/blog/golden-retriever/uppy-team-kong.jpg"></figure>
-
-While enjoying some world-famous-in-Germany “Flammkuchen”, we were thinking about even more ways to make file uploading better (yes, we really can’t stop thinking about that). We then sat together in one room for a few days of hacking and came up with something neat. 
-
-## The Golden Retriever
-
-Uppy has a new friend to play with. Meet the Golden Retriever, our file recovery plugin:
-
-<center><img src="/uppy/images/blog/golden-retriever/catch-fail-2.gif" alt="Golden Retriever failing to catch something" title="Good try, girl!"></center>
-
-As you can see, we’re not yet fully done with training her, but we’re getting there! 😄
-
-But wait, we can hear you think, didn't [tus.io](https://tus.io) already make resumable uploads possible? Yes indeed, and it does an awesome job at recovering from poor network conditions. However, if your browser suddenly decided to crash, Uppy would have no idea about what it was doing before, and you would have to re-select and edit your files all over. 
-
-<center><img src="/uppy/images/blog/golden-retriever/no-idea-dog-3.gif" alt="Dog has no idea what he is doing" title="Keep trying, buddy!"></center>
-
-For those cases, our Golden Retriever now comes to the rescue! It saves Uppy’s memory (state) in browser cache with every move you make. This means that when Uppy suddenly crashes for whatever reason, our plugin will be able to retrieve this memory upon restart, and offer to resume where you left off. Sounds simple enough right? So why hasn't anybody attempted this before?
-
-As it turns out, it’s tricky. For one thing, no other competing file uploader uses tus, and resuming uploads without standardized and scrutinized components is really leaving you with more problems than you’re trying to solve in the first place. But with tus, we are standing on the shoulders of a giant and need not worry about the resumability aspect of the transmission.
-
-So then it becomes all about remembering what was going on with file selection and uploading right before the crash. One of the big issues here is that because of security reasons, Uppy is no longer allowed to access the selected files on your disk after a crash. Reasonable of course, but this meant that we had to deploy a number of workarounds that — while it may cause our inner purist some upset - combined, now amount to a pretty sweet user experience for the majority of cases. And in the end, that is what Uppy is all about: pleasing and delighting its users.
-
-<a name="how"></a>
-
-## 👻 How it works
-
-If you really want to know...
-
-Because we cannot access the files that we were uploading from disk, we cache them inside the browser.
-
-It all started with [a prototype](https://github.com/transloadit/uppy/issues/237) by [Richard Willars](https://github.com/richardwillars), which used a Service Worker to store files and states. Service Workers are great for when you close a tab, but when the browser dies, so does the Service Worker (in most cases). Also: iOS does not support it yet. So, we looked at Local Storage, which is almost universally available and _can_ survive a browser crash, but can't be used to store blobs. We also considered IndexedDB, which _can_ store blobs, but is less available and has severe limits on how much you can or should store in it.
-
-Since all of these technologies came with specific drawbacks, which one should we pick?
-
-Why, all of them, of course! By combining the three, they cover each other’s disadvantages with their own advantages. Here's what goes where: 
-
-- Local Storage stores all files state, without blobs (the actual data of the file), and restores this meta information on boot.
-- Service Worker stores references to all file blobs in memory. This should persist when navigating away from a page or closing the browser tab, but will likely get destroyed after a browser crash / quit.
-- IndexedDB stores all files that can reasonably be stored there, up to 10 MB per file and 300 MB in total (we are still debating reasonable limits). This persists until either the browser or Uppy decides to do a cleanup.
-
-Now when Uppy starts, we restore all meta information from Local Storage to get an idea of what was going on. For the blobs, we try to recover data from both the Service Worker and IndexedDB. This goes a long way into supporting many disastrous scenarios out there. 
-
-In some cases (very large files or a complete browser crash), we won’t be able to recover the file, but we do have valuable information about it, such as the name and a preview.
-
-Our current idea is that we could present the user with “ghost files” for these edge cases, and ask them to re-add such files. Here’s an early mockup, but we would love more feedback on this:
-
-<img src="/uppy/images/blog/golden-retriever/desktop-ghost.png" alt="Design mockup with ghosts" title="Design mockup with ghosts">
-
-For the remaining cases, if an upload was already in progress before the crash/refresh, and especially if it was resumable (via [tus](https://tus.io), for example), Golden Retriever just picks up from where it all went south. Our Golden Retriever will also clean up after herself: when files are successfully uploaded, or you decide to delete them, they will be removed from all “permanent” storages.
-
-<a name="try"></a>
-
-## 🚦 Give it a try in alpha
-
-Golden Retriever already works — tail awagging — and feels like magic :sparkles:, but it is also unstable, and hasn’t been tested on all the different devices yet. We encourage you to try it out though:
-
-```sh
-git clone https://github.com/transloadit/uppy.git
-git checkout feature/restore-files
-npm install
-npm run dev
-```
-
-A new browser tab with Uppy + Golden Retriever should open in a moment after the last command from above. The app entry point is in `examples/bundled-example/main.js`, it rebuilds on change. Enjoy! And please give your feedback in the [#268](https://github.com/transloadit/uppy/pull/268) PR 🎉
-
-The Uppy Team

+ 0 - 111
website/src/_posts/2017-08-0.18.md

@@ -1,111 +0,0 @@
----
-title: "Uppy 0.18: Dogumentation and The GoldenRetriever"
-image: "http://uppy.io/uppy/images/blog/0.18/golden-retriever.jpg"
-date: 2017-09-15
-author: arturi
-published: true
----
-
-Hi! Another month — a new Uppy release 🎉
-
-*Note: current latest release is actually `0.19`, but this post got delayed, so we are publishing it first. `0.19` post is coming next.*
-
-## New documentation
-
-Documentation for Uppy has been re-written, and now features chapters on Uppy’s settings and API, using various plugins, and running Uppy Server. Check it out: </uppy/docs/>. More chapters to come!
-
-## The GoldenRetriever
-
-The GoldenRetriever has been released as a public beta. For details, please refer to the previous post, [The GoldenRetriever: Making uploads survive browser crashes](/uppy/blog/2017/07/golden-retriever/), but the gist is: when enabled, this plugin will save uppy-state to localStorage on every change, and then if your browser crashes, or you accidentaly navigate away from a tab,later when you return, your uploads will resume like nothing happened. Spoiler: it uses Service Workers and IndexedDB.
-
-<img class="border" src="/uppy/images/blog/0.18/golden-retriever.jpg">
-
-<!-- more -->
-
-## Multipart uploader is now XHRUpload
-
-`Multipart` has been replaced by a more flexible `XHRUpload`, so that other plugins, like `AwsS3`, can depend on it.
-
-## AwsS3
-
-The `AwsS3` plugin can be used to upload files directly to an S3 bucket.
-
-As of now, the AwsS3 plugin “decorates” the `XHRUpload` plugin. To upload files directly to S3, both the `XHRUpload` and `AwsS3` plugins must be used:
-
-```js
-// No options have to be provided to the XHRUpload plugin,
-// the S3 plugin will configure it.
-uppy.use(XHRUpload)
-uppy.use(AwsS3, {
-  // Options for S3
-})
-```
-
-Please find [more info and examples](/uppy/docs/aws-s3/) in the docs.
-
-## Transloadit `getAssemblyOptions`
-
-We’ve added a `getAssemblyOptions` function option to the `Transloadit` plugin. This option can return an object or a Promise for an object to configure the Transloadit assembly. The returned object can contain params, a signature, and fields.
-
-`getAssemblyOptions` is called on each file, so each file can return a different set of options. Files that returned the same options are bundled together and run through a single assembly. Files that return different options will be run through different assemblies.
-
-This means that it is now possible to make assembly parameters depend on user input from eg. the `MetaData` plugin, and have different parameters for different files. It’s now also possible to generate very short-lived signatures on the server when an upload starts, by calling fetch inside the `getAssemblyOptions` hook.
-
-## Webcam: 1, 2, 3 smile!
-
-Webcam plugin now has a new exciting feature — ⏱ `countdown`. If you set it to 3 seconds, for example, then after pressing the capture button, Uppy will count to 3 before actually taking your selfie, so you’ll have the time to fix your hair:
-
-```js
-uppy.use(Webcam, { countdown: 3 })
-```
-
-## Tons of Uppy Server improvements
-
-- Uppy Server uses Informer to display errors;
-- Pictures from Instagram carousels show up inline;
-- Uppy server now returns an `i-am` containing its instance url;
-- Disable socket channel from restarting an already completed file download;
-- Uppy client whitelisting has been made optional, you may use wildcard instead;
-- Added feature to set master oauth redirect uri for multiple uppy-server instances;
-- Added options to support for redis session storage on the standalone server;
-- Uppy-server can be started as a binary `uppy-server`;
-- Downloaded files are stored based on uuids;
-- Upload state is stored on redis (useful for Goldern Retriever plugin).
-
-## Release Notes
-
-Here is the full list of changes for version `0.18`:
-
-- goldenretriver: use Service Woker first, then IndexedDB, add file limits for IndexedDB, figure out what restores from where, add throttling for localStorage state sync (@goto-bus-stop @arturi)
-- dashboard: flag to hide the upload button, for cases when you want to manually stat the upload (@arturi)
-- dashboard: place close btn inside the Dashboard, don’t close on click outside, place source icon near the file size (@arturi)
-- core: informer becomes a core API, `uppy.info('Smile! 📸', 'warning', 5000)` so its more concise with `uppy.log('my msg')` and supports different UI implementations (@arturi, #271)
-- docs: first stage — on using plugins, all options, list of plugins, i18n, uppy-server (@arturi, @goto-bus-stop, @ifedapoolarewaju)
-- provider: file size sorting (@ifedapoolarewaju)
-- provider: show loading screen when checking auth too (@arturi)
-- uploaders: add direct-to-s3 upload plugin (@goto-bus-stop)
-- core: ability to re-upload all files, even `uploadComplete` ones, reset progress (@arturi)
-- goldenretriver: recover selected or in progress files after a browser crash or closed tab: alpha-version, add LocalStorage, Service Worker and IndexedDB (@arturi @goto-bus-stop @nqst #268)
-- xhrupload: add XHRUpload a more flexible successor to Multipart, so that S3 plugin can depend on it (@goto-bus-stop #242)
-- core: add getFile method (@goto-bus-stop, #263)
-- provider: use informer to display errors (@ifedapoolarewaju)
-- provider: flatten instagram carousels #234 (@ifedapoolarewaju)
-- server: add uppy-server url as `i-am` header (@ifedapoolarewaju)
-- server: disable socket channel from restarting an already completed file download (@ifedapoolarewaju)
-- server: make uppy client whitelisting optional. You may use wildcard instead (@ifedapoolarewaju)
-- server: master oauth redirect uri for multiple uppy-server instances
-- server: options support for redis session storage on standalone server (@ifedapoolarewaju)
-- server: start uppy-server as binary `uppy-server` (@ifedapoolarewaju)
-- server: store downloaded files based on uuids (@ifedapoolarewaju)
-- server: store upload state on redis (@ifedapoolarewaju)
-- server: use uppy informer for server errors (@ifedapoolarewaju, #272)
-- server: whitelist multiple uppy clients (@ifedapoolarewaju)
-- transloadit: emit an event when an assembly is created (@goto-bus-stop / #244)
-- transloadit: function option for file-dependent `params` (@goto-bus-stop / #250)
-- tus: Save upload URL early on (@goto-bus-stop #261)
-- tus: return immediately if no files are selected (@goto-bus-stop #245)
-- uppy-server: add uppy-server metrics to Librato (@ifedapoolarewaju @kiloreux)
-- webcam: add 1, 2, 3, smile! to webcam, onBeforeSnapshothook (@arturi, #187, #248)
-- website: live example on the homepage, “try me” button, improve /examples (@arturi)
-
-The Uppy Team

+ 0 - 98
website/src/_posts/2017-09-0.19.md

@@ -1,98 +0,0 @@
----
-title: "Uppy 0.19: Tests, Informer details and better APIs"
-image: "/uppy/uppy/images/blog/0.19/informer-details.jpg"
-date: 2017-09-21
-author: arturi
-published: true
----
-
-Hello! The `0.19` release is about internal fixes, optimizations and refactoring, as well as some work on PRs that we’ll hopefully tell you about soon!
-
-## Jest tests
-
-Thanks to our contributer, [@richardwillars](https://github.com/richardwillars), and following the example set by Uppy Server, we’ve [switched to Jest](https://github.com/transloadit/uppy/pull/310) for Uppy’s unit tests, and added a bunch of new tests as well. And even more are being [added](https://github.com/transloadit/uppy/pull/346) as we speak!
-
-We're also happy to report that [more tests](https://github.com/transloadit/uppy-server/compare/3341a9592d0723fd9b58ec77d8c762f20b434704...d3c6f5b409d08f588d1704b77181e5c0342ca322) have been added for Uppy Server.
-
-## Dashboard APIs
-
-We’ve exposed `show/hide/isOpen` APIs for the Dashboard UI plugin. Now you can open and close the modal dialog programmatically:
-
-```js
-const modal = uppy.getPlugin('Dashboard')
-modal.show()
-
-// ...
-
-button.addEventListener('click', () => {
-  if (modal.isOpen()) {
-    modal.hide()
-  } else {
-    modal.show()
-  }
-})
-```
-
-Check out [the docs](/uppy/docs/dashboard/#Methods).
-
-<!--more-->
-
-## Transloadit
-
-- Possibility to upload to S3, then import into an assembly;
-- New `alwaysRunAssembly` option has beed added to run assemblies when no files are uploaded.
-
-## Informer details
-
-Informer supports “explanations”, a questionmark (?) button that shows more info on hover / click.
-
-<img class="border" src="/uppy/images/blog/0.19/informer-details.jpg">
-
-## Misc good stuff
-
-- Uppy instance ID, useful for GoldenRetriver, check out [example using multiple Uppy instances](https://github.com/transloadit/uppy/tree/master/examples/multiple-instances);
-- Custom error messages from upload endpoints are now supported (#305);
-- Fixed `calculateTotalProgress` and `restrictions`; improved `generateFileID` and `isOnline`;
-- Removed some unused css styles from the bundle;
-- Allow multiple `trigger` elements for the Dashboard, via using the same `class` attribute;
-- Image previews are now resized gradually for better performance and quality;
-- Metadata edits in the Dashboard are now saved when pressing enter key;
-
-## Full Changelog
-
-Here is the full list of changes for version `0.19` (and patch `0.18.1`):
-
-- core: gradually resize image previews (#275 / @goto-bus-stop)
-- informer: support “explanations”, a (?) button that shows more info on hover / click (#292 / @arturi)
-- fix webcam video recording (@goto-bus-stop)
-- bundle: add missing plugins (s3, statusbar, restorefiles) to unpkg bundle (#301 / @goto-bus-stop)
-- xhrupload: Use error messages from the endpoint (#305 / @goto-bus-stop)
-- dashboard: prevent submitting outer form when pressing enter key while editing metadata (#306 / @goto-bus-stop)
-- dashboard: save metadata edits when pressing enter key (#308 / @arturi)
-- transloadit: upload to S3, then import into :tl: assembly using `/add_file?s3url=${url}` (#280 / @goto-bus-stop)
-- transloadit: add `alwaysRunAssembly` option to run assemblies when no files are uploaded (#290 / @goto-bus-stop)
-- core: use `iteratePlugins` inside `updateAll` (#312 / @richardwillars)
-- core: improve error when plugin does not have ID (#309 / @richardwillars)
-- tus: Clear stored `uploadUrl` on `uppy.resetProgress()` call (#314 / @goto-bus-stop)
-- website: simplify examples and code samples, prevent sidebar subheading links anywhere but in docs (@arturi)
-- website: group plugin docs together in the sidebar (@arturi)
-- goldenretriever: allow passing options to `IndexedDbStore` (#339 / sunil-shrestha)
-- core: add Uppy instance ID option, namespace serviceWorker action types, add example using multiple Uppy instances with GoldenRetriever (#333 / @goto-bus-stop)
-- core: fix `calculateTotalProgress` - NaN (#342 / @arturi)
-- core: fix and refactor `restrictions` (#345 / @arturi)
-- core: Better `generateFileID` (#330 / @arturi)
-- core: improve `isOnline()` (#319 / @richardwillars)
-- core: remove unused bootstrap styles (#329 / @arturi)
-- core: experiment with yo-yo --> preact and picodom (#297 / @arturi)
-- dashboard: fix FileItem source icon position and copy (@arturi)
-- dashboard: expose and document the `show/hide/isOpen` API (@arturi)
-- dashboard: allow multiple `trigger` of the same class `.open-uppy` (#328 / @arturi)
-- plugins: add `aria-hidden` to all SVG icons for accessibility (#4e808ca3d26f06499c58bb77abbf1c3c2b510b4d / @arturi)
-- core: Handle sync returns and throws in possibly-async function options (#315 / @goto-bus-stop)
-- core: switch to Jest tests, add more tests for Core and Utils (#310 / @richardwillars)
-- website: Minify bundle for `disc` (#332 / @goto-bus-stop)
-- transloadit: remove `this.state` getter (#331 / @goto-bus-stop)
-- server: option to define valid upload urls (@ifedapoolarewaju)
-- server: more automated tests (@ifedapoolarewaju)
-
-The Uppy Team

+ 0 - 180
website/src/_posts/2017-10-0.20.md

@@ -1,180 +0,0 @@
----
-title: "Uppy 0.20: React, Retry & Time Travel"
-image: "/uppy/uppy/images/blog/0.20/dnd-gray.jpg"
-date: 2017-10-05
-author: renee
-published: true
----
-
-We are proud to present Uppy `0.20`. This one focuses on React and Redux support, adding storage expirations to `GoldenRetriever` and upload retries. Enjoy!
-
-## Uppy React components
-
-Uppy now ships with React components! We’ve been exploring different approaches to React components for several months, so we’re excited to finally have them in ✨ There are components for each of Uppy’s UI elements, like the Dashboard and the StatusBar.
-
-```js
-const uppy = Uppy()
-uppy.use(Tus10, { endpoint: '/upload' })
-
-const Dashboard = require('uppy/lib/react/Dashboard')
-
-const Uploader = () => (
-  <Dashboard
-    uppy={uppy}
-    note="Hey! It's a React component!"
-  />
-)
-
-ReactDOM.render(<Uploader />, document.querySelector('#uploader'))
-```
-
-<!-- more -->
-
-[Check out the docs for more!](/docs/react/)
-
-## Redux
-
-[@richardwillars](https://github.com/richardwillars) contributed a plugin that will sync Uppy’s internal state with an existing Redux store.
-To use it, define a Redux action and reducer:
-
-```js
-// The action creator receives 3 parameters:
-// - The previous state
-// - The new state
-// - The change set
-const uppyStateUpdate = (previous, next, patch) => ({
-  type: 'UPPY_STATE_UPDATE',
-  previous,
-  next,
-  patch,
-})
-
-function reduce (state = {}, action) {
-  if (action.type === 'UPPY_STATE_UPDATE') {
-    return {
-      ...state,
-      // Merge in the changes.
-      ...action.patch,
-    }
-  }
-}
-```
-
-Then pass your Redux store's `dispatch` function and the action creator to the Redux plugin:
-
-```js
-const ReduxStore = require('uppy/lib/Redux')
-
-uppy.use(ReduxStore, {
-  dispatch: store.dispatch,
-  action: uppyStateUpdate,
-})
-```
-
-[See the docs](/docs/redux/)
-
-## Redux DevTools
-
-Even if you're not using Redux in your application, there's some Redux-related news! Uppy now has a new plugin, `ReduxDevTools`, which adds debug support for Redux DevTools and allows you to time travel while debugging Uppy:
-
-<figure class="wide"><video alt="Demo video showing Uppy with Redux Dev Tools and time traveling" controls autoplay><source src="/uppy/images/blog/0.20/uppy-reduxdevtools.mp4" type="video/mp4">Your browser does not support the video tag, you can <a href="/uppy/images/blog/0.20/uppy-reduxdevtools.mp4">download the video</a> to watch it.</video></figure>
-
-To try it, add the plugin:
-
-```js
-const ReduxDevTools = require('uppy/lib/plugins/ReduxDevTools')
-
-uppy.use(ReduxDevTools)
-```
-
-And then [activate the browser extension](https://github.com/zalmoxisus/redux-devtools-extension).
-
-See [#373](https://github.com/transloadit/uppy/pull/373) for details and discussion.
-
-## Retries
-
-We’ve added a retry UI to the `Dashboard`. If some of your uploads fail—maybe the network is down or the endpoint is unresponsive—you’ll see this:
-
-<img alt="Uppy Dashboard retry UI with individual retry buttons and “retry all”" src="/uppy/images/blog/0.20/retry.jpg">
-
-From here it’s easy to retry individual uploads or all at once. This feature currenty works best with `Tus10` plugin, and has basic `XHRUpload` support, but we’ll improve on the latter in the future releases.
-
-## Re-designed Drag and Drop plugin
-
-The old trustly `DragDrop` plugin has been re-designed by [@arturi](https://github.com/arturi) and [@nqst](http://zaytsev.io):
-
-- Fresh simple design, arrow icon, white background;
-- New sizing options: `width` and `height` (both `100%` by default to fill the entire container space);
-- A `note` option, like in the `Dashboard`, to add info about restrictions or anything else you would like your users to know.
-
-<img class="border" src="/uppy/images/blog/0.20/dnd-gray.jpg">
-
-**[Check it out](/examples/dragdrop/)**
-
-```js
-uppy.use(DragDrop, {
-  target: 'body',
-  width: '600px',
-  height: '300px',
-  note: 'Videos only, up to 100 MB',
-})
-```
-
-## The Golden Retriever cleans up after itself
-
-We recently released the `GoldenRetriever` plugin, which stores selected files on the client so that it can recover them after a browser crash. Previously, these stored files would stay around forever, and clog up the user's disk space. As of 0.20.0, files will be removed from client-side storage when they have been uploaded. Files that have had nothing happen to them for longer than 24 hours will be cleaned up automatically. This timeframe can be configured using the new `expires` option:
-
-```js
-const ms = require('ms')
-
-uppy.use(GoldenRetriever, {
-  expires: ms('4 hours'),
-})
-```
-
-(The [`ms`](https://npmjs.com/package/ms) module is great for converting text durations to milliseconds!)
-
-This will clean up files when Uppy runs, but perhaps not every page of your app uses Uppy. If a user selected some files, but then never came back to that same page, files could still hang around for a long time. To aid this, there's a new module that you can call to clean up Uppy's cache without needing an Uppy instance:
-
-```js
-const cleanup = require('uppy/lib/plugins/GoldenRetriever/cleanup')
-
-cleanup()
-```
-
-We'll hopefully make that require path easier to remember in the future :)
-
-## Misc good stuff
-
-- The GoldenRetriever now detects a serviceWorker registration automatically—it's no longer necessary to emit an `core:sw-file-ready` event.
-- Request headers are now configurable in the AWS S3 plugin.
-- A new `setPluginState` allows plugins to set state scoped to the plugin.
-- Some unused code was removed 🎉
-- More tests were added! Thanks [@gavboulton](https://github.com/gavboulton) and [@richardwillars](https://github.com/richardwillars) 🎉
-- Documentation for the [StatusBar](/docs/statusbar), [XHRUpload](/docs/xhrupload) and [Tus](/docs/tus) plugins.
-
-## Full Changelog
-
-Here is the full list of changes for version `0.20.0` (and patch `0.19.1`):
-
-- core: retry/error when upload can’t start or fails (offline, connection lost, wrong endpoint); add error in file progress state, UI, question mark button (#307 / @arturi)
-- core: support for retry in Tus plugin (#307 / @arturi)
-- core: support for retry in XHRUpload plugin (#307 / @arturi)
-- core: Add support for Redux DevTools via a plugin (#373 / @arturi)
-- core: improve and merge the React PR (#170 / @goto-bus-stop, @arturi)
-- core: improve core.log method, add timestamps (#372 / @arturi)
-- dragdrop: redesign, add note, width/height options, arrow icon (#374 / @arturi)
-- uploaders: upload resolution changes, followup to #323 (#347 / @goto-bus-stop)
-- uploaders: issue warning when no uploading plugins are used (#372 / @arturi)
-- core: fix `replaceTargetContent` and add tests for `Plugin` (#354 / @gavboulton)
-- goldenretriever: Omit completed uploads from saved file state—previously, when an upload was finished and the user refreshed the page, all the finished files would still be there because we saved the entire list of files. Changed this to only store files that are part of an in-progress upload, or that have yet to be uploaded (#358, #324 / @goto-bus-stop)
-- goldenretriever: Remove files from cache when upload finished—this uses the deleteBlobs function when core:success fires (#358, #324 / @goto-bus-stop)
-- goldenretriever: add a timestamp to cached blobs, and to delete old blobs on boot (#358, #324 / @goto-bus-stop)
-- s3: have some way to configure content-disposition for uploads, see #243 (@goto-bus-stop)
-- core: move `setPluginState` and add `getPluginState` to `Plugin` class (#363 / @goto-bus-stop)
-- goldenretriever: fix restorefiles with id (#351 / @arturi)
-- goldenretriever: Clean up blobs that are not related to a file in state (#349 / @goto-bus-stop)
-- core: set the newState before emiting `core:state-update` (#341 / @sunil-shrestha, @arturi)
-- docs: Document StatusBar plugin (#350 / @goto-bus-stop)
-
-The Uppy Team

+ 0 - 136
website/src/_posts/2017-10-0.21.md

@@ -1,136 +0,0 @@
----
-title: "Uppy 0.21: End to End Tests, Accessibility, Additional Security for Uppy Server"
-date: 2017-11-24
-author: arturi
-published: true
----
-
-Hi all! We’ve been busy with Halloween, but also another release, so here is Uppy `0.21`! This one improves accessibility, features new end-to-end tests and improved security in Uppy Server.
-
-<!-- more -->
-
-## Accessibility
-
-One of the goals we’ve set out to achieve with Uppy was to make an accessibe file upload widget, and in this release we’ve achieved some more progress in this area:
-
-* Dashboard modal dialog now handles focus better (it’s trapped inside the modal while open);
-* First button is in focus right after the modal dialog is open;
-* More (aria-)labels have been added;
-* Files from remote providers are now selectable with a keyboard.
-
-We plan to continue gradually improving in the accessibility area.
-
-See [#414 PR](https://github.com/transloadit/uppy/pull/414) for details.
-
-## Returning `{ successful, failed }` from `uppy.upload()`
-
-**⚠️ Breaking change**
-
-`uppy.upload()` promise now resolves to a `result` object with two arrays of files: `{ successful, failed }`. This lets you handle succesful and failed uploads in one go:  
-
-```js
-uppy.upload().then((result) => {
-  console.info('Successful uploads:', result.successful)
-  if (result.failed.length > 0) {
-    console.error('Errors:')
-    result.failed.forEach((file) => {
-      console.error(file.error)
-    })
-  }
-})
-
-// or
-
-uppy.on('core:complete', ({ successful, failed }) => {
-  if (failed.length === 0) {
-    console.log('UPLOAD SUCCESSFUL!!!')
-  } else {
-    console.warn('UPLOAD FAILED!!!')
-  }
-  console.log('successful files:', successful)
-  console.log('failed files:', failed)
-})
-```
-
-See [`uppy.upload()`](/uppy/docs/uppy/#uppy-upload) and [`core:complete`](/uppy/docs/uppy/#core-complete) in docs, as well as [#404 PR](https://github.com/transloadit/uppy/pull/404) for more details.
-
-## End to end tests
-
-We’ve refactored end to end tests to use [Webdriver.io](http://webdriver.io), and for the occasion added tests for Edge, Safari, Android and iOS. Now tests on Travis and Sauce Labs (thanks for the open source tier!) run smoothly and it’s easier to alter them or write new ones.
-
-## More secure Uppy Server
-
-We made sure access tokens from third-party providers, such as Google Drive or Instagram, are not stored on the server with Uppy Server, and kept in your browser instead. Then, when you want to pick a file from your Instagram, the token is used to make a request to Uppy Server, which is in turn used by Uppy Server to communicate with Instagram.
-
-Data validation is also now done during intiation of an upload, to prevent corrupt data from triggering funny behaviours on the server. :)
-
-And, while we were at this, we also made sure all sensitive data is masked in request logs.
-
-## Migration to Dropbox v2 API
-
-Since the [deprecation of Dropbox v1 API](https://blogs.dropbox.com/developers/2017/09/api-v1-shutdown-details/), uppy/uppy-server have now been updated to use the v2 API. It is implemented to work closely as its previous implementation so there should be no worries.
-
-## Custom plugin id
-
-Up until now you could only use a plugin once with an Uppy instance. Now you can pass custom `id` for any plugin (though this has to be manually implemented in any new plugin). This allows using, for example, two `StatusBar`s, one inside the `Dashboard`, and one somewhere on the page, visible even when `Dashboard` is closed.
-
-Can be used like this:
-
-```js
-// one StatusBar comes included in the Dashboard, another will be mounted on the page
-.use(Dashboard {...})
-.use(StatusBar, { id: 'PageStatusBar', target: 'body' }
-```
-
-See [#418 PR](https://github.com/transloadit/uppy/pull/418) for details.
-
-## Misc good stuff
-
-- Migrated Dropbox in Uppy Server to use v2 API.
-- Fixed generating thumbnails for images with transparent background.
-- We are now using [`tinyify`](https://github.com/goto-bus-stop/tinyify)(by our own [@goto-bus-stop](https://github.com/goto-bus-stop)) for the Uppy bundle to make it smaller and more efficient.
-- Instead of restarting only the file upload itself, start an entirely new upload for retries. Fixes retrying uploads with processing plugins.
-- The S3 plugin now includes XHRUpload. **⚠️ Breaking change: you should remove `.use(XHRUpload)` when using S3.**
-- XHRUpload now includes a timeout `opts.timeout = 30000`, after which it errors and offers a retry (retry UI supported in Dashboard), see [#378](https://github.com/transloadit/uppy/pull/378) for more.
-- Renamed `RestoreFiles` → `GoldenRetriever`, and `Tus10` → `Tus`. **⚠️ Breaking change: please make sure to use the new names when setting up plugins**.
-- The Webcam plugin has been refactored. There’s no flash fallback now, it works in modern browsers only, and the Webcam tab won’t appear in the Dashboard if a camera is not supported on the device.
-
-## Full Changelog
-
-Here is the full list of changes for version `0.21.0` (and patches `0.20.1`, `0.20.2`, `0.20.3`):
-
-- accessibility: add tabindex="0" to buttons and tabs, aria-labels, focus (#414 / @arturi)
-- core: allow setting custom `id` for plugins to allow a plugin to be used multiple times (#418 / @arturi)
-- core: do not check isPreviewSupported for unknown filetypes (#417 / @sadovnychyi)
-- core: refactor `uppy-base` (#382 / @goto-bus-stop)
-- core: remove functions from state object (#408 / @goto-bus-stop)
-- core: return `{ successful, failed }` from `uppy.upload()` (#404 / @goto-bus-stop)
-- core: update state with error messages rather than error objects (#406 / @richardwillars)
-- core: use `tinyify` for the unpkg bundle. (#371 / @goto-bus-stop)
-- dashboard: Fix pasting files, default `image` file name, add type to meta, file type refactor (#395 / @arturi)
-- dragdrop: Fix of the .uppy-DragDrop-inner spacing on small screens (#405 / @nqst)
-- react: fix `uppy` PropType, closes (#416 / @goto-bus-stop)
-- s3: automatically wrap XHRUpload. Users should remove `.use(XHRUpload)` when using S3. (#408 / @goto-bus-stop)
-- test: refactored end-to-end tests to not use website, switched to Webdriver.io, added tests for Edge, Safari, Android and iOS (#410 / @arturi)
-- tus: Rename Tus10 → Tus (#285 / @goto-bus-stop)
-- uppy-serer: mask sensitive data from request logs (@ifedapoolarewaju)
-- uppy-server: add request body validators (@ifedapoolarewaju)
-- uppy-server: migrate dropbox to use v2 API (#386 / @ifedapoolarewaju)
-- uppy-server: store tokens in user’s browser only (@ifedapoolarewaju)
-- webcam: only show the webcam tab when browser support is available (media recorder API) (#421 / @arturi, @goto-bus-stop)
-- webcam: simplify and refactor webcam plugin (modern browser APIs only) (#382 / @goto-bus-stop)
-- xhrupload: set a timeout in the onprogress event handler to detect stale network (#378 / @goto-bus-stop)
-- uppy-server: allow flexible whitelist endpoint protocols (@ifedapoolarewaju)
-- core: Start a completely new upload when retrying. (#390 / @goto-bus-stop)
-- dashboard: Show errors that occurred during processing on the file items. (#391 / @goto-bus-stop)
-- transloadit: Mark files as having errored if their assembly fails. (#392 / @goto-bus-stop)
-- core: Clear file upload progress when an upload starts. (#393 / @goto-bus-stop)
-- tus: Clean up `tus.Upload` instance and events when an upload starts, finishes, or fails. (#390 / @goto-bus-stop)
-- docs: fix `getMetaFromForm` documentation (@arturi)
-- core: fix generating thumbnails for images with transparent background (#380 / @goto-bus-stop)
-- transloadit: use Translator class for localised strings (#383 / @goto-bus-stop)
-- goldenretriever: don't crash when required server-side (#384 / @goto-bus-stop)
-- redux: add plugin for syncing uppy state with a Redux store (#376 / @richardwillars)
-
-
-The Uppy Team

+ 0 - 178
website/src/_posts/2017-12-0.22.md

@@ -1,178 +0,0 @@
----
-title: "Uppy 0.22: Preact, Form, Improved Dashboard, Custom Stores"
-date: 2017-12-23
-author: arturi
-image: "/uppy/uppy/images/blog/0.22/uppy-dashboard-updated.jpg"
-published: true
----
-
-**Uppy is [featured on Product Hunt](https://www.producthunt.com/posts/uppy-io)! To our fellow hunters: welcome! Quick intro: Uppy is the next open source file uploader for web browsers. We're very close to launching 1.0 and would love to get your feedback in, leave your thoughts on Product Hunt or start a discussion below.**
-
-Hi all! It’s New Year and Christmas time, and this year Santa is brining you Uppy `0.22` 🎁 This release packs a lot of neat stuff, but it also breaks things in quite a few places, so please read on.
-
-And, if you are celebrating, happy holidays from the Uppy Team! 🎄
-
-<!--more-->
-
-## Preact and JSX
-
-We’ve been happy using `yo-yo` and `hyperx` template strings in our views for quite a while, but decided to try something more stable. Preact has most of the great ideas of React, plus smaller file size as well as a few good ideas of its own.
-
-All views have been refactored to utilize JSX. We actually liked hyperx a lot, but JSX has better tooling and syntax highlighting support. It also seems to be the standard in the React community.
-
-See [#451 PR](https://github.com/transloadit/uppy/pull/451) for details on why we switched and discussion around the process.
-
-## Core and plugins refactor
-
-- **⚠️ Breaking** We’ve renamed the `core` object to `uppy` in plugins. So instead of `this.core.state` we now use `this.uppy.state`.
-- **⚠️ Breaking** Events have been renamed to remove the `core:` prefix. So `core:success` becomes just `success`, and this also results in now having `error`, `upload-started` and so on. Prefixed event names are used for plugin-specific event sometimes, like `dashboard:file-card`.
-- **⚠️ Breaking** CSS class names have been altered to use the `uppy-` namespace, so `.UppyDashboard-files` becomes `.uppy-Dashboard-files` and so on.
-- **⚠️ Breaking** `getMetaFromForm` was removed in favor of the new `Form` plugin (see below).
-- **⚠️ Breaking** `MetaData` plugin was removed in favor of the `metaFields` option in Dashboard, [see docs](/uppy/docs/dashboard/#metaFields) for more details.
-- Plugins now use `this.el` to refer to their UI element instead of `this.target`.
-- `setPluginState` and `getPluginState` are now used in Providers.
-
-## Refreshed Dashboard UI
-
-![Uppy Dashboard UI with 3 files selected](/uppy/images/blog/0.22/uppy-dashboard-updated.jpg)
-
-- File cards are simpler, we’ve removed the excess white backgrounds, improved the remove icon, reduced paddings, added slight shadows.
-- Cicular upload button in the Dashboard has been moved to the StatusBar. It’s also not circular anymore, and there’s no cloud icon. Plain and simple.
-- Redesigned “retry” and “add +1 file” buttons.
-- Added `metaFields` option: an array of settings for UI field objects, which previousely lived in a separate `MetaData` plugin: `{ id: 'caption', name: 'Caption', placeholder: 'describe what the image is about' }`, [see docs](/uppy/docs/dashboard/#metaFields) for more details.
-
-See [#434 PR](https://github.com/transloadit/uppy/pull/451) for more screenshots and details.
-
-## Select multiple files in providers
-
-Thanks to [@sadovnychyi](https://github.com/sadovnychyi), you can now select multiple files from remote providers like Google Drive and Instagram. You can also select folders, and even range of files by holding `shift` key when clicking on first and last item in range.
-
-![Uppy Dashboard UI with 3 files selected](/uppy/images/blog/0.22/uppy-dashboard-provider-select.jpg)
-
-[Check it out →](/uppy/examples/dashboard/)
-
-## Stores
-
-As you know, internally Uppy uses its own simple state management system with `getState` and `setState` methods. In previous releases we’ve added support for Redux via a plugin called `Redux`, which mirrors all Uppy state to your Redux application’s state, and a plugin called `ReduxDevTools` that connects to Redux DevTools and enables all the cool time traveling stuff.
-
-We are excited to tell you that this release makes state management even more flexible by bringing support for external stores! Here’s a quote from the docs:
-
-> By default, Uppy stores its internal state in an object.
-> 
-> If your app uses a state management library such as Redux, it can be useful to have Uppy store its state there instead—that way, you could write custom uploader UI components in the same way as the other components in the application.
-
-Here’s how that works:
-
-```js
-const { createStore } = require('redux')
-const ReduxStore = require('uppy/lib/store/ReduxStore')
-
-const reducer = combineReducers({
-  ...reducers,
-  uppy: ReduxStore.reducer
-})
-const store = createStore(reducer)
-
-const uppy = Uppy({
-  store: ReduxStore({
-    store: store // That's a lot of stores!
-  })
-})
-...
-```
-
-Now Uppy will use your app’s Redux store instead of its own, so you have a “single source of truth” 🔮
-
-Read [more on stores](/uppy/docs/stores/) in docs.
-
-## Form
-
-`Form` is a new plugin that can be used in conjunction with any other. Here’s what it does: 
-
-1. Acquires metadata from a `<form>` element of your choosing before the upload starts in Uppy.
-2. Injects result array of succesful and failed files back into the form.
-
-**⚠️ Breaking** With this plugin we’ve deprecated `getMetaFromForm` option that used to be in all acquire plugins like Dashboard and DragDrop. Now you can just use `Form`.
-
-```js
-uppy.use(Form, {
-  target: '#my-form',
-})
-```
-
-Read [more about the Form plugin](/uppy/docs/form/) in docs.
-
-## Encoding support in GoldenRetriever
-
-Our browser crash / page refresh restore plugin `GoldenRetriever` (read [more about it](/uppy/docs/golden-retriever/)) now supports correctly restoring [Transloadit](https://transloadit.com) assemblies!
-
-Also, we’ve fixed restoring from paused state. Now uploads will remain paused and not get out of sync.
-
-## Type-safe Server
-
-Uppy Server now uses TypeScript to do some type checking at compile time. This helps spot some otherwise easy to miss runtime bugs. While the project’s source is still written in JavaScript, the use of [JSDoc specifications is leveraged by TypeScript](https://github.com/Microsoft/TypeScript/wiki/Type-Checking-JavaScript-Files) to detect data types and mistakes with that, within the project.
-
-Thanks to this approach a number of hidden bugs have already been identified and fixed, and it also makes Uppy Server very well documented. :)
-
-## And there’s more
-
-- New `setFileState` method as a nice shorthand to update file-specific state.
-- Added more extensions for mimetype detection.
-- More plugin documentation 👍
-- Misc bugs fixes and improvements in Webcam, Dashboard, Provider, so things should be more stable all around.
-- Added an option to limit simultaneous uploads in XHRUpload.
-- Fixed remote server error handler for uppy-server.
-- Added [Snyk](https://snyk.io/) to uppy-server to aid vulnerability detection.
-
-## Full Changelog
-
-<a id="changelog-toggle" href="javascript:document.getElementById('changelog').style.display = 'block'; document.getElementById('changelog-toggle').style.display = 'none'; false;">&raquo; show</a>
-
-<div id="changelog" style="display: none;" markdown="1">
-Here is the full list of changes for version `0.22.0` (and patch `0.21.1`):
- 
-- **⚠️ Breaking** core: rendering engine switched from `Yo-Yo` to `Preact`, and all views from `html` hyperx template strings to `JSX` (#451 / @arturi)
-- **⚠️ Breaking** core: large refactor of Core and Plugins: `setFileState`, merge `MetaData` plugin into `Dashboard`, prefix "private" core methods with underscores (@arturi / #438) 
-- **⚠️ Breaking** core: renamed `core` to `uppy` in plugins and what not. So instead of `this.core.state` we now use `this.uppy.state` (#438 / @arturi) 
-- **⚠️ Breaking** core: renamed events to remove `core:` prefix, as been suggested already. So: `success`, `error`, `upload-started` and so on, and prefixed event names for plugins sometimes, like `dashboard:file-card` (#438 / @arturi) 
-- **⚠️ Breaking** core: CSS class names have been altered to use `uppy-` namespace, so `.UppyDashboard-files` --> `.uppy-Dashboard-files` and so on
-- **⚠️ Breaking** dashboard: added `metaFields` option, pass an array of settings for UI field objects `{ id: 'caption', name: 'Caption', placeholder: 'describe what the image is about' }` (#438 / @arturi, @goto-bus-stop)
-- **⚠️ Breaking** core: deprecate `getMetaFromForm` in favor of new `Form` plugin (#407 / @arturi)
-- form: added `Form`, a new plugin that is used in conjunction with any acquirer, responsible for: 1. acquiring the metadata from `<form>` when upload starts in Uppy; 2. injecting result array of succesful and failed files back into the form (#407 / @arturi)
-- core: add more extensions for mimetype detection (#452 / @ifedapoolarewaju)
-- docs: more docs for plugins (#456 / @goto-bus-stop)
-- core: misc bugs fixes and improvements in Webcam, Dashboard, Provider and others (#451 / @arturi)
-- dashboard: improved Dashboard UI (@arturi)
-- uppy-server: remove pause/resume socket listeners when upload is done (@ifedapoolarewaju)
-- uppy/uppy-server: remote server error handler (#446 / @ifedapoolarewaju)
-- provider: fix dropbox thumbnail view (@ifedapoolarewaju)
-- uppy-server: link uppy-server with https://snyk.io/ to aid vulnerability spotting (@ifedapoolarewaju)
-- **⚠️ Breaking** core: Set `this.el` in `Plugin` class (#425 / @arturi)
-- StatusBar, Dashboard and Provider UI improvements place upload button into StatusBar, use Alex’s suggestions for retry button; other UI tweaks (#434 / @arturi)
-- XHRUpload: fix fields in XHR remote uploader (#424 / @sadovnychyi)
-- XHRUpload: option to limit simultaneous uploads #360 (#427 / goto-bus-stop)
-- core: Add `isSupported()` API for providers (#421 / @goto-bus-stop, @arturi)
-- core: Add stores. Improve on Redux PR #216 to allow using Redux (or any other solution) for all Uppy state management, instead of proxy-only (#426 / @goto-bus-stop)
-- core: add ability to disable thumbnail generation (#432 / @richardwillars)
-- core: allow to select multiple files at once from remote providers (#419 / @sadovnychyi)
-- core: use `setPluginState` and `getPluginState` in Providers (#436 / @arturi)
-- docs: uppy-server docs for s3 `getKey` option (#444 / @goto-bus-stop)
-- goldenretriever: Fix IndexedDB store initialisation when not cleaning up (#430 / @goto-bus-stop)
-- provider: folder deselection did not remove all files (#439 / @ifedapoolarewaju)
-- s3: Use Translator for localised strings (420 / @goto-bus-stop )
-- transloadit: Port old tests from tape (#428 / @goto-bus-stop)
-- tus: Restore correctly from paused state (#443 / @goto-bus-stop)
-- uppy-server: use typescript to compile code for a type safe servers (@ifedapoolarewaju)
-
-</div>
-
-We expect our 1.0 release early next year. Want to impact it? Comment below, in [GitHub issues](https://github.com/transloadit/uppy/issues), or on [Product Hunt](https://www.producthunt.com/posts/uppy-io).
-
-Happy Holidays,
-
-The Uppy Team
-
-<center>
-  <iframe src="https://ghbtns.com/github-btn.html?user=transloadit&repo=uppy&type=watch&count=true"
-  allowtransparency="true" frameborder="0" scrolling="0" width="100" height="20"></iframe>
-</center>

+ 0 - 191
website/src/_posts/2018-02-0.23.md

@@ -1,191 +0,0 @@
----
-title: "Uppy 0.23: Import from Url, refactored thumbnail generation, XHR bundle"
-date: 2018-02-12
-author: arturi
-published: true
----
-
-Hi all! We are back from holidays with a shiny new `0.23.0` release for you! It’s packed with a new `Url` plugin (imports files from urls), refactored `ThumbnailGenerator`, `Webcam` improvements and more.
-
-## Import from Url
-
-Meet our new “Provider” plugin, `Url`. It’s simple, yet powerful: paste a link to any file on the web, and Uppy with Uppy Server will upload it wherever you need.
-
-```js
-uppy.use(Url, { target: Dashboard, host: YOUR_UPPY_SERVER_URL })
-```
-
-<figure class="wide"><video alt="Demo video showing Uppy with Url plugin that imports files from urls" controls autoplay><source src="/uppy/images/blog/0.23/uppy-url-demo.mp4" type="video/mp4">Your browser does not support the video tag, you can <a href="/uppy/images/blog/0.23/uppy-url-demo.mp4">download the video</a> to watch it.</video></figure>
-
-<!--more-->
-
-## ThumbnailGenerator
-
-Thumbnail generation has been refactored to a separate `ThumbnailGenerator` plugin, thanks to the PR from [@richardwillars](https://github.com/richardwillars). So Uppy Core is now more lightweight, if you don’t need previews.
-
-`ThumbnailGenerator` is still bundled with our most feature complete `Dashboard` plugin though, so you don’t have to change anything if you were using that.
-
-We’ve also fixed previews in Safari and tweaked the code slightly after reading the excellent [Image resize in browsers is broken](https://blog.uploadcare.com/image-resize-in-browsers-is-broken-e38eed08df01) post by Uploadcare 👌.
-
-## Processing results
-
-Processing results from encoding plugins like [`Transloadit`](/uppy/docs/transloadit/), are now added to `complete` event:
-
-```js
-uppy.on('complete', (result) => {
-  console.log(result)
-  // result: {
-  //   failed: [...],
-  //   successful: [...],
-  //   transloadit: [...],
-  //   uploadID: "cjdnzj2zy0000c___iewu9m5y"
-  // }
-})
-```
-
-And to `uppy.upload()` promise result too:
-
-```js
-uppy.upload().then((result) => {
-  console.log(result)
-})
-```
-
-You can still use events like [`transloadit:result`](/uppy/docs/transloadit/#transloadit-result), its just easier when things are in the same place. Plugins can use the new `uppy.addResultData()` API to add data to the `result`, like so:
-
-```js
-uppy.addResultData(uploadID, { transloadit: assemblies })
-```
-
-## Webcam
-
-The Webcam plugin now mirrors image previews by default, so when you are making a selfie and wave with your right hand, you see that right hand in the Webcam preview, just like in the mirror. This option can be disabled via `uppy.use(Webcam, { mirror: false }`. Note that the resulting image will not be mirrored, so your hand will actually be waving on the left. This mimics the behaviour of smarphone selfie cameras.
-
-We’ve also added an option to select which camera will be used to capture pictures or video: [facingMode](/uppy/docs/webcam/#facingMode-39-user-39), set to `user` (front camera) by default.
-
-## Server
-
-- You can now specify a config path when starting the standalone Uppy Server like so `uppy-server --config /path/to/uppyconf.json`. The config file is expected to be a JSON file with the same schema as the [Uppy Server options](/uppy/docs/server/#Options).
-- A periodic cleanup job has been added to Uppy Server, to delete stale upload files from the specified `filePath`. Even though we'd rarely expect uploaded files to go undeleted immediately, there could be cases where an error occurs during an upload, and so Uppy Server leaves the file undeleted to give room for upload retries. With the cleanup job in place, we can ensure that this file would eventually be deleted after the file upload is done.
-- Responses from Multipart uploads are now relayed to Uppy Client as they are received from the target server. With this in place, you can now handle responses from local and remote XHRUpload in nearly the same way.
-
-## Other Improvements and Additions
-
-- Added new option to hide ProgressBar and StatusBar after upload finish (#485 / @wilkoklak)
-- Chaining API has been improved, you can now use `.on` and `.off` anywhere: `uppy.use(Dashboard).use(Tus).on('complete', handleComplete).run()`
-- The Transloadit plugin now has a new `transloadit:assembly-executing` event and passes Assembly results to the `complete` callback (#547, #527 / @goto-bus-stop)
-- We’ve added a `bundle` option to the `XHRUpload` plugin to send multiple files in one request (#442 / @goto-bus-stop)
-- Uppy releases are now hosted on Edgly CDN by Transloadit
-- A Third-party extension for integrating the Ngrx Angular state management library with Uppy has been released, [uppy-store-ngrx](https://github.com/rimlin/uppy-store-ngrx/) by @rimlin
-
-## Other Fixes
-
-- Fixed blank preview thumbnails for images in Safari; use slightly different step scaling (#458, #584 / @arturi)
-- We now log in console and show an Informer message, not error in console, when file cannot be added due to restrictions (#604, #492 / @goto-bus-stop).
-- Unused files have been removed from published package, saving many many precious megabytes :) (#586 / @goto-bus-stop)
-- Use empty input value so same file can be selected multiple times (@arturi / #534)
-- Fix modal and page scroll (#564 / @arturi)
-- Refactor provider views (#554 / @arturi)
-- Lots of documentation fixes, thanks to all our contributors!
-
-## Press
-
-Uppy has made some appearances on the internet recently.
-
-1\. **[Better File Uploads with Shrine: Direct Uploads](https://janko.io/better-file-uploads-with-shrine-direct-uploads/)**:
-
-On how to set up Uppy with [Shrine](http://shrinerb.com/), a file attachment toolkit for Ruby applications. It starts off with an example of a plain `<form>` upload and builds up to a more advanced experience:
-
-> - When the user submits the form with selected files, there is no indicator telling them when the upload will finish.
-> - When the user is uploading multiple files at once and the request happens to get aborted, it’s not possible to keep the files that were uploaded so far, because all files are sent in a single request. In other words, multiple uploads are all-or-nothing.
-> - Files are validated only after they have been uploaded, which means the user needs to wait until the upload finishes before they can know whether their file was even valid.
->
-> We can improve that by asynchronously starting to upload files on the client side as soon as they’re selected. This also gives users the ability to continue filling in other fields while files are being uploaded, because the UI isn’t blocked during the upload.
->
-> There are many popular JavaScript file upload libraries out there – jQuery-File-Upload, Dropzone.js, FineUploader etc. – but the one you should use with Shrine is definitely Uppy 🐶. Uppy is a modular library that knows how to upload files to a custom endpoint on your app, to Amazon S3, or even to a resumable endpoint, providing progress bars, drag & drop functionality, image previews, file validations etc, all while making as few assumptions as possible.
-
-2\. **Featured [in Javascript Daily](https://twitter.com/JavaScriptDaily/status/950348390268919809)**:
-
-> Uppy: A Powerful, Modular JavaScript File Uploader
-
-<cite>— JavaScript Daily</cite>
-
-3\. **[#1 Trending on GitHub](https://twitter.com/uppy_io/status/946485101541683201) accross all languages**:
-
-> Today our open source efforts are outpacing those of MSFT GOOG FB combined :D
-
-<cite>— kvz, transloadit</cite>
-
-4\. **[#2 Product of the Week](https://www.producthunt.com/posts/uppy-io) on ProductHunt**:
-
-> You literally solved my biggest problem, thank you for developing such a great project.
-
-<cite>— Chetan Menaria</cite>
-
-> Writing file upload functionality is always a pain in the arse. I’ll be checking this out today and integrating into SongBox if it’s good.
-
-<cite>— Mick</cite>
-
-5\. **[#2 New Tool of The Year](https://stackshare.io/posts/top-developer-tools-2017) on Stackshare**:
-> Uppy closed out the year as the #1 trending GitHub JavaScript project, so we think it’s only getting started.
-
-## Full Changelog
-
-Here is the full list of changes for version `0.23.0` (and patches `0.22.1`—`0.22.5`):
-
-- core: Allow plugins to add data to result object. Return `processing` results among with `upload` results in `complete` event and `upload()` promise (#527 / @goto-bus-stop)
-- core: Move limiting to different point, to fix StatusBar and other UI issues #468 (#524, #526 / @goto-bus-stop)
-- core: Add uploadID to complete event (#569 / @richardwillars)
-- core: Allow chanining after .on() and .off() to improve ergonomics (#597 / @arturi)
-- core: Allow user to override sass variables (#555 / @chao)
-- core: Move preview generation to separate plugin, add queuing (#431 / @richardwillars)
-- core: Third-party extension, uppy-store-ngrx <https://github.com/rimlin/uppy-store-ngrx/> (#532 / @rimlin)
-- core: Warn, not error, when file cannot be added due to restrictions? (#604, #492 / @goto-bus-stop)
-- dashboard: Add more i18n strings (#565 / @arturi)
-- dashboard: Fix modal and page scroll (#564 / @arturi)
-- dashboard: Refactor provider views (#554 / @arturi)
-- dashboard: Restore focus after modal has been closed (#536 / @arturi)
-- dashboard: Use empty input value so same file can be selected multiple times (@arturi / #534)
-- dashboard: Use more accessible tip lib microtip (#536 / @arturi)
-- docs: Add PHP snippets to XHRUpload docs (#567 / @goto-bus-stop)
-- meta: Added instruction to fork the repo first (#512 / muhammadInam)
-- meta: Automatically host releases on edgly and use that as our main CDN (#558 / @kvz)
-- meta: Dependency version updates (#523 / @goto-bus-stop)
-- meta: Remove unused files from published package (#586 / @goto-bus-stop)
-- s3: Respect `limit` option for upload parameter requests too; fix isXml() check when no content-type is available (#545, #544, #528 / @goto-bus-stop)
-- statusbar: Fix status text still showing when statusbar is hidden (#525 / @goto-bus-stop)
-- test: Alter jest testPathPattern to current dir, add chai (#583 / @arturi)
-- thumbnail: Add thumbnail generation plugin (#461 / @richardwillars)
-- thumbnail: Fix blank preview thumbnails for images in Safari; use slightly different stap scaling (#458, #584 / @arturi)
-- transloadit: Add `transloadit:assembly-executing` event (#547 / @goto-bus-stop)
-- transloadit: Add assembly results to to the `complete` callback (#527 / @goto-bus-stop)
-- transloadit: Easily pass form fields (#593 / @goto-bus-stop)
-- tus: `resume: false` — don’t store url (@arturi / #507)
-- uppy-server: Detect file upload size from the server (@ifedapoolarewaju)
-- uppy-server: Fix circular json stringify error (@ifedapoolarewaju)
-- uppy-server: Load standalone server options via config path (@ifedapoolarewaju)
-- uppy-server: Pass response from uppy-server upload’s endpoint (#591 / @ifedapoolarewaju)
-- uppy-server: Schedule job to delete stale upload files (@ifedapoolarewaju)
-- uppy-server: Security audit, ask @acconut
-- uppy-server: Support localhost urls as endpoints (@ifedapoolarewaju)
-- url: New plugin that imports files from urls (#588 / @arturi, @ifedapoolarewaju)
-- webcam: Font styling for Webcam option (#509 / @muhammadInam)
-- webcam: Mirror image preview, add option to select which camera is used to capture, try filling the whole Dashboard with webcam preview image, remove URL.createObjectURL() (#574 / @arturi, @nqst)
-- website: Add Transloadit example to website (#603 / @arturi)
-- website: Doc fixes (#563 / @arturi)
-- website: Improve the Contributing guide (#578 / @arturi)
-- xhrupload: Add bundle option to send multiple files in one request (#442 / @goto-bus-stop)
-- xhrupload: Prevent files from being uploaded multiple times in separate uploads (#552 / @richardwillars)
-- xhrupload: Refactor response and error handling (#591 / @goto-bus-stop, @arturi, @ifedapoolarewaju)
-- core: Fix remote uploads (#474 / @arturi)
-- statusbar, progressbar: Add option to hide progress bar after upload finish (#485 / @wilkoklak)
-- s3: Allow passing on XHRUpload options, such as "limit" to AwsS3 Plugin (#471 / @ogtfaber)
-- XHRUpload: Fix progress with `limit`ed XHRUploads (#505 / @goto-bus-stop)
-- core: fix error when `file.type === null`, shouldn’t pass that to match (@arturi)
-- dashboard: input hidden="true" should not be focusable too (@arturi)
-- webcam: Font styling for Webcam option (#509 / @muhammadInam)
-- docs: fix reference to incorrect width/height options (#475 / @xhocquet)
-- docs: Documentation fixes and improvements (#463 / @janko-m)
-- docs: Fixed several typos in docs/server and docs/uppy (#484 / @martiuslim)
-
-The Uppy Team

+ 0 - 144
website/src/_posts/2018-04-0.24.md

@@ -1,144 +0,0 @@
----
-title: "Uppy 0.24: Refreshed Dashboard, StatusBar and Provider UI, revamped XHR Response Handling"
-date: 2018-04-17
-author: arturi
-image: "/uppy/uppy/images/blog/0.24/uppy-screenshot.jpg"
-published: true
----
-
-Uppy 0.24.2 brings a refreshed UI in the Dashboard and StatusBar plugins, a synchronous `addFile()` method, a cancel button, style protections, documentation on writing your own Uppy plugin, revamped XHR response handling and tons of bugfixes.
-
-<!--more-->
-
-## Refreshed Dashboard and Providers
-
-As always, we are trying to simplify and improve the UI of Uppy plugins. In this release, Dashboard’s design has been refreshed, check this out:
-
-<img class="border" src="/uppy/images/blog/0.24/dashboard-main.jpg">
-
-<img class="border" src="/uppy/images/blog/0.24/uppy-screenshot.jpg">
-
-Meta editing screen:
-
-<img class="border" src="/uppy/images/blog/0.24/dashboard-meta-edit.jpg">
-
-Camera screen:
-
-<img class="border" src="/uppy/images/blog/0.24/import-from-camera.jpg">
-
-Import from URL (Link):
-
-<img class="border" src="/uppy/images/blog/0.24/import-from-url.jpg">
-
-And more, check out the [Dashboard example page](/uppy/examples/dashboard/).
-
-## A Cleaner StatusBar
-
-The StatusBar plugin used to show a lot of progress details. This has been simplified so that by default it will only show a percentage:
-
-<img src="/uppy/images/blog/0.24/statusbar-2.jpg">
-
-But there’s an option `showProgressDetails: true` for both the StatusBar and Dashboard (which passes it to StatusBar included in the Dashboard) to bring back this detailed information, spread over two lines:
-
-<img src="/uppy/images/blog/0.24/statusbar-1.jpg">
-
-```js
-uppy.use(StatusBar, { ..., showProgressDetails: true })
-
-// or
-
-uppy.use(Dashboard, { ..., showProgressDetails: true })
-```
-
-We’ve also added a handy “cancel” button, which will cancel everything in progress regardless of the type of the upload (wether uppy-server or local powered, and wether tus-resumable or old school XHR/form uploads).
-
-## XHR Response Handling
-
-When the upload completes (regardless of whether it succeeded), a `response` key gets added to the file. `file.response` contains a `status` and `data` properties. `data` is the result of the `getResponseData()` option. The `getResponseData()` function's signature is now:
-
-```js
-getResponseData (responseText, response) { }
-```
-
-This is what the default JSON parsing implementation looks like in the `XHRUpload` plugin, but you can override it with your own:
-
-```js
-getResponseData (responseText, response) {
-  let parsedResponse = {}
-  try {
-    parsedResponse = JSON.parse(responseText)
-  } catch (err) {
-    console.log(err)
-  }
-
-  return parsedResponse
-}
-```
-
-The `responseText` is the XHR endpoint response as a string. For uploads from the user's device, `response` is the [XMLHttpRequest](https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest) object.
-
-When uploading files from remote providers such as Dropbox or Instagram, Uppy Server sends upload response data to the client. This is made available in the `getResponseData()` option as well. The `response` object from Uppy Server contains some properties named after their [XMLHttpRequest](https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest) counterparts:
-
- - `response.responseText` - the XHR endpoint response as a string;
- - `response.status` - the HTTP status code;
- - `response.statusText` - the HTTP status text;
- - `response.headers` - an object mapping lowercase header names to their values.
-
-## Powered by Uppy
-
-Uppy is provided free for the world forever. In return, we ask that you consider keeping a tiny tasteful Uppy logo at the bottom of the Dashboard, so that more people can discover and enjoy Uppy. This _really helps_ to grow our community which will result in more issues reported, more contributors, more features requested, more PRs merged, and a better Uppy for you to use tomorrow, for free, forever.
-
-If you don't want to do this indefinitely, consider doing this initially, just to help us reach critical mass and get our _perpetuum mobile_ going.
-
-But, Uppy is also free as in freedom. And so if you can't help our cause, set `proudlyDisplayPoweredByUppy` to `false` to hide te Uppy logo.
-
-<img src="/uppy/images/blog/0.24/powered-by-1.jpg">
-
-## Server News
-
-We occasionally get questions about the required servers for Uppy. Uppy does not require special servers. You can use Uppy for free in the browser and let it upload to your existing Apache/Nginx server. Sprinkle a few lines of HTML/JS and that's it. 
-
-**If you want integration with Instagram** Dropbox and friends, you'll need to run an 'Uppy Server' in the datacenter to help with OAuth secrecy and fetching large files and uploading those, bypassing the client. No fun to have several gigabytes pass through your mobile tubes - best let the datacenters sort this out among themselves. That's what Uppy Server is for.
-
-**If you want resumable uploads**, you'll need a <https://tus.io/> speaking server. 
-
-You can run these optional servers yourself, or use the hosted variants provided by our company [Transloadit](https://transloadit.com/) for 💸. Transloadit also adds a wide range of encoding/processing features.
-
-Now that that's sorted out, let's see what we improved on the Uppy Server side! We tackled a number of security issues:
-
-- Fixed security vulnerability in transient dependency [#70](https://github.com/transloadit/uppy-server/issues/70)
-- Auto-generate tmp download file name to avoid Path traversal
-- Namespace redis key storage/lookup to avoid collisions
-- Validate callback redirect url after completing OAuth
-- Reduce the permission level required by Google Drive
-
-Other non-security improvements are:
-
-- Auto-generate Server secret if none is provided on startup
-- We implemented a more standard logger for Uppy Server
-- Added an example project to run Uppy Server on Serverless, [see](https://github.com/transloadit/uppy-server/tree/master/examples/serverless).
-
-## Docs
-
-- Uppy Server docs now point to a detailed write-up on how to run Uppy Server on Kubernetes (#706 / @kiloreux)
-- An Uppy Server custom provider example has been added, so now it’s easier create your own custom providers.
-- Added more useful events, i18n strings, fixed typos, and other polish.
-
-## Other Fixes & Improvements
-
-- ⚠️ **breaking** `addFile()`, `onBeforeFileAdded()` and `onBeforeUpload()` are now synchronous and have to return nothing or file objects to proceed, or false to abort; please check out the update docs for details: [onBeforeFileAdded()](/uppy/docs/uppy/#onBeforeFileAdded) and [onBeforeUpload()](/uppy/docs/uppy/#onBeforeUpload).
-- ⚠️ **breaking** Most events now emit the whole `file` object instead of a `fileId`. So you can access `file.name` right away, for example, so you no longer have to fish for the file using its id.
-- ⚠️ **breaking** We’ve added `postcss-safe-important` to our style build step, so now 90% of rules got `!important` declaration added to them. This is done to prevent page styles (especially global ones like from Bootstrap) from leaking into the Uppy widget. There are other solutions we are looking into, like iFrames and WebComponents, this is an experiment. Keep in mind that to override Uppy styles, you now have to also use `!important`.
-- dashboard: ⚠️ **breaking** `maxWidth`, `maxHeight` options have been converted to `width` and `height`, because this makes more sense, `maxWidth` and `maxHeight` are actually `100%`.
-- There is now an option `showLinkToFileUploadResult: false` to disable linking to the upload result in Dashboard UI.
-- We are now using the image time and date as a file name in Instagram, instead of a generic file id.
-- The URL plugin now checks for HTTP(S) protocol, and adds HTTP by default if no protocol is present.
-- It’s now possible to override `<DashboardModal />` React component’s target prop.
-- Provider views now have `showFilter` and `showBreadcrumbs` options, those are `false` for the Instagram plugin, for example.
-- Uppy Server to Client communication has been refactored into `Provider` and `Request` modules. `Request` can be used when a simple request needs to be made to Uppy Server, like in the URL plugin. `Provider` is used for more complex implementations shared between Google Drive and Instagram, for example.
-
-Finally, we’ve added a Transloadit example to the website, [check it out](/uppy/examples/transloadit/).
-
-Have fun,
-
-The Uppy Team

+ 0 - 103
website/src/_posts/2018-06-0.25.md

@@ -1,103 +0,0 @@
----
-title: "Uppy 0.25: Drag & Drop Links Urls & Images, Improved File Selecting in Providers, Interactive Components In i18n"
-date: 2018-06-07
-author: arturi
-image: "/uppy/uppy/images/blog/0.25/new-select-provider.jpg"
-published: true
----
-
-Uppy 0.25 comes with a couple of new features, like drag-and-dropping URLs and images with the Url plugin, Dashboard modal animation and interactive components in i18n strings, as well as a ton of under the hood fixes and improvements.
-
-<!--more-->
-
-## Select In Providers
-
-<img src="/uppy/images/blog/0.25/new-select-provider.jpg">
-
-Selecting files doesn’t add files to Uppy immediately anymore. Instead a “Select” button appears (with a counter), and pressing that adds all the files with checked checkboxes and closes the Instagram or Google Drive overlay. Cancel discards the selection and also closes the overlay.
-
-This addresses an undesirable case where `autoProceed: true` would begin uploading files the moment you ticked a checkbox, and you couldn’t see what was going on because the provider overlay was still open.
-
-## Drag & Drop or Paste Links And Images with the Url Plugin
-
-If you use the [Url plugin](/docs/url/) with the [Dashboard](/docs/dashboard), you can now drop or paste URLs into the main Dashboard area. They will automatically be imported by the Url plugin:
-
-<figure class="wide"><video alt="Demo video showing Uppy with Url plugin that accepts drag and dropped urls" autoplay loop muted playsinline><source src="/uppy/images/blog/0.25/link-drop-demo.mp4" type="video/mp4">Your browser does not support the video tag, you can <a href="/uppy/images/blog/0.25/link-drop-demo.mp4">download the video</a> to watch it.</video></figure>
-
-## i18n Strings with Interactive Components
-
-⚠️ **breaking**
-
-We’ve changed how i18n strings work with interactive components. We now use a placeholder for e.g. buttons, so it works nicely in languages that have different word order than English. Example:
-
-```js
-dropPasteImport: 'Drop files here, paste, import from one of the locations above or %{browse}'
-browse: 'browse'
-```
-
-`%{browse}` will be replaced with a button/link. Previously, these two strings were concatenated in the view layer, so the `browse` text would always be last.
-
-Here’s a list of strings that were changed in this release, please update those in your locales:
-
-- core: `failedToUpload` needs to contain `%{file}`, substituted by the name of the file that failed
-- dashboard: `dropPaste` and `dropPasteImport` need to contain `%{browse}`, substituted by the "browse" text button
-- dashboard: `editing` needs to contain `%{file}`, substituted by the name of the file being edited
-- dashboard: `fileSource` and `importFrom` need to contain `%{name}`, substituted by the name of the provider
-- dragdrop: `dropHereOr` needs to contain `%{browse}`, substituted by the "browse" text button
-
-The full list of available locale strings for each plugin is now documented in the [Uppy Docs](/docs/).
-
-## React Documentation
-
-React docs have been improved: we now have a [separate page](/docs/react/) for each Uppy React wrapper component that we offer.
-
-Other improvements in docs:
-
-- The `id` option is now listed on each plugin's documentation page.
-- The `replaceTargetContent` option is listed on UI plugin documentation pages.
-- The `locale` option is described on each plugin documentation page, and includes a short description for each string.
-
-## Typescript Definitions
-
-[@taoqf](https://github.com/taoqf) went ahead and added a lot of type definitions to Uppy in [#834](https://github.com/transloadit/uppy/pull/834). So if you are using TypeScript (and even if not, your code editor / linting tool likely supports type definitions), you are in for a treat!
-
-## No need to `.run()`
-
-⚠️**breaking**
-
-We removed the need to type `uppy.run()` in [#793](https://github.com/transloadit/uppy/pull/793). You now only have to call `.use()` for the plugins that you need (as usual), and everything is then run automatically. It comes with a few tradeoffs but we were getting a big amount of support tickets where people forgot to conclude with `.run()`, and we saw a chance to reduce boilerplate, so we decided to go ahead and pave the cowpath.
-
-## Authorisation tokens in Local Storage
-
-⚠️**breaking**
-
-Authorisation tokens from Uppy Server are now stored in local storage as opposed to cookies. Two primary reasons for this decision are:
-
-1. It avoids CSRF issues which are present when using cookies.
-2. It allows for less stringent [CORS policies enforced by browsers](https://github.com/transloadit/uppy/issues/803#issuecomment-386257515), since we are no longer sending cookie credentials via Ajax requests.
-
-This is a breaking change because it requires that the Uppy Server version should also be updated to **0.13.x** otherwise there could be unexpected behaviour.
-
-What’s more about the Authorisation tokens is that they are now encrypted on the server before being sent down to the client. Subsequent requests from the client will then send the token to the server via headers (not via cookies anymore).
-
-## Other Cool Changes
-
-- Fix: Debounce render calls again, fixes #669 (#796)
-- Fix: XHRUpload canceled uploads progress events (#864)
-- Improvement: Dashboard open/close animation (#852)
-- Improvement: You can now hide action buttons in Dashboard and StatusBar (#821)
-- Improvement: Pass `allowedFileTypes` and `maxNumberOfFiles` to `input[type=file]` to add restrictions to the system file picking dialog too (#814)
-- Improvement: merge meta data when add file (#810)
-- Fix: More robust failure handling for Transloadit, closes #708 (#805)
-- Feature: display username/email in provider view
-- Feature: show message for empty provider files
-- Server: Allow custom headers to be set for remote multipart uploads
-- Server: Add type to metadata as `filetype`
-
-⚠️**heads up**
-
-In the next release we are planning a [Lerna conversion](https://github.com/transloadit/uppy/pull/906), meaning that each Uppy plugin / module will get its own NPM package. Pretty excited about that one! (but also please refrain from sending us big PRs in the meantime :)
-
-See you in the next one!
-
-The Uppy Team

+ 0 - 77
website/src/_posts/2018-07-0.26.md

@@ -1,77 +0,0 @@
----
-title: "Uppy 0.26: Lerna"
-date: 2018-07-12
-author: renee
-image: "/uppy/uppy/images/blog/0.26/uppy-multiple-packages.png"
-published: true
----
-
-Uppy 0.26 replaces the monolithic Uppy package with a separate npm package for every plugin.
-
-<img width="448" src="/uppy/images/blog/0.26/uppy-multiple-packages.png">
-
-<!--more-->
-
-## Lerna
-
-⚠️ **breaking**
-
-All Uppy plugins have moved into their own npm packages. This means you need to install the plugins you use separately in the future, and you have to update all your Uppy `require()` calls or `import` paths.
-
-The packages are published under the `@uppy` scope on npm:
-
-```bash
-npm install @uppy/core @uppy/dashboard @uppy/tus
-```
-
-This has some benefits, like:
-
- - No need to know the file path of a plugin—use `@uppy/dashboard` instead of `uppy/lib/plugins/Dashboard`. This also allows us to move our file structure around internally without breaking everyone.
- - Only have the code you actually use in `node_modules`—large plugin dependencies are not installed if you don't use the plugin.
- - Separate versioning allows making breaking changes in plugins, without requiring users of other unrelated plugins to upgrade.
-
-You can still use the `uppy` package for now to simplify upgrading, although it may be deprecated in the future. It installs all the `@uppy/` packages and re-exports them:
-
-```js
-const { Core, Dashboard, Tus } = require('uppy')
-```
-
-It's very important to set up tree shaking when using Uppy in this way; otherwise you may include dozens of KBs of unused plugins. Using the `@uppy/` packages instead is strongly recommended, as those do not include unused code in the first place.
-
-```js
-const Uppy = require('@uppy/core')
-const Dashboard = require('@uppy/dashboard')
-const Tus = require('@uppy/tus')
-```
-
-The CSS required for plugins is included in each package at `dist/style.css`. Each plugin contains _all_ the CSS it needs, eg. the Dashboard includes Status Bar CSS. If you use both plugins, only include the Dashboard CSS file. Even better is to use a CSS minifier so any duplicate styles are removed for you :) Caveats like this are documented on the plugin pages, and hopefully we can smooth it out over time!
-
-## Typings
-
-[@taoqf](https://github.com/taoqf) contributed TypeScript typings to 0.25—0.26 moves those into each package and adds a few missing ones.
-
-We're not TypeScript experts ourselves, so feedback, bug reports & PRs are very much appreciated :sparkles:
-
-## Documentation Updates
-
-The documentation sidebar now lists plugins in several sections. This should make it easier to navigate. Of course, each plugin page now lists the `npm install` instruction needed to install it, too!
-
-## Renaming the `host` Option in Remote Providers
-
-⚠️ **breaking**
-
-The `host` name in remote provider plugins was not great—for one, it could be a URL to an Uppy Server running in a subdirectory, not a hostname. As of 0.26, `serverUrl` should be used instead.
-
-## Other Cool Changes
-
-- providers: Add `serverPattern` option for third party authentication validation on dynamic Uppy Server hostnames (@ifedapoolarewaju)
-- thumbnailgenerator: Polyfill Math.log2 since IE11 doesn't support this method (#892 / @DJWassink)
-- dashboard: added browser back button listening (#575 / @zcallan)
-- providers: Better provider errors (#895 / @arturi)
-- xhr-upload: Add withCredentials option (#874 / @tuoxiansp)
-
-See [full changelog (0.26 and 0.25.x patches) for more](https://github.com/transloadit/uppy/blob/master/CHANGELOG.md#0260)
-
-See you in the next release!
-
-The Uppy Team

+ 0 - 105
website/src/_posts/2018-08-0.27.md

@@ -1,105 +0,0 @@
----
-title: "Uppy 0.27: First Swing at React Native Support"
-date: 2018-08-23
-author: ife
-image: "/uppy/uppy/images/blog/0.27/uppy-add-initial.jpg"
----
-
-<img src="/uppy/images/blog/0.27/uppy-add-initial.jpg">
-
-In `0.27`, we have some more iterations on the Dashboard UI for you in store again. We are getting rid of the permanent tab bar and made tons of other improvements!
-
-<!--more-->
-
-## Dashboard UI without tabs
-
-Uppy used to always display the tab bar (the one you use to select between importing files from Instagram, Webcam, local disk, etc.). This ended up not working well with the growing list of supported sources, especially on mobile.
-
-<img src="/uppy/images/blog/0.27/uppy-with-tabs.jpg">
-
-So in `0.27`, we are iterating on the UI again:
-
-<img src="/uppy/images/blog/0.27/uppy-add-initial.jpg">
-
-The providers are now visible as a list of icons on the initial screen (plus, we’ve added colors!), but when you complete the inital selection, it is hidden behind the “plus” button:
-
-<img src="/uppy/images/blog/0.27/uppy-files-selected.jpg">
-
-You can always add more:
-
-<img src="/uppy/images/blog/0.27/uppy-add-more.jpg">
-
-The StatusBar that shows progress has been “lightened”:
-
-<img src="/uppy/images/blog/0.27/uppy-upload-in-progress.jpg">
-
-<img src="/uppy/images/blog/0.27/uppy-upload-complete.jpg">
-
-We have decided to drop multiple-color support, so Informer messages will now always appear in a gray, round bubble. Apart from that, we have made tons of small fixes, such as better animations, colors, font sizes, and more. [Check out the PR #942](https://github.com/transloadit/uppy/pull/942) for details.
-
-We are aiming to make the UI less heavy, so that Uppy can easier fit within your existing site or app design.
-
-The mobile version is now much more refined as well:
-
-<img src="/uppy/images/blog/0.27/uppy-mobile.jpg">
-
-As always, feel free to [try Uppy live on the Dashboard example](/uppy/examples/dashboard/).
-
-## `autoProceed: false` by default
-
-⚠️ **breaking**
-
-By default, Uppy used to begin uploading right after you selected a file. If you wanted to let users edit some file metadata or pick and choose from multiple sources first, you had to set `autoProceed: false`:
-
-```js
-// this line could be seen in many of the Uppy examples
-const uppy = Uppy({ autoProceed: false })
-```
-
-Since in most cases we actually wanted `autoProceed: false`, this is now the new default. While it makes Uppy's UI less magical and harder to make irreversible mistakes with, right out of the box, we feel this is the way to go. Make sure you change this in your project if needed. If you weren't setting an `autoProceed` option at all, you will now have to add `autoProceed: true`.
-
-## Progress on React Native
-
-We’ve begun working on supporting React Native in Uppy. Since `0.27`, it should run in a React Native environment — meaning you can use Uppy API (`uppy.addFile()`, `uppy.upload()`) for adding files and uploading, without the UI. `@uppy/xhr-upload` uploader is already supported, and we are working on making `@uppy/tus` (and `tus-js-client` itself) run in React Native as well.
-
-We plan to make sure all non-UI Uppy plugins work in RN, and then provide a few useful components for adding Uppy to your RN apps.
-
-Please head to the [React Native PR #988](https://github.com/transloadit/uppy/pull/988) for details. We'd love to hear what you think and your suggestions for improving the Uppy React Native experience.
-
-Built-in React Native support has been a 1.0 goal from the start. We have had many requests about Angular.js and Vue support. There are already community-built solutions for these platforms that seem to work well, but unfortunately we won't be officially supporting them before our 1.0 milestone. Depending on community input, we might add that later.
-
-## Package sizes
-
-We now have a cool table showing mingzipped bundle sizes for each individual Uppy package, [check it out](/uppy/docs/stats/#bundle-sizes):
-
-<img width="400" src="/uppy/images/blog/0.27/uppy-sizes.png">
-
-## "Uppy Server" is now "Companion"
-
-```bash
-npm install @uppy/companion
-```
-
-Uppy Server is an optional service that Uppy can use to import files from sources like Instagram or Dropbox. However, simply naming it "Server" was quite unclear and has caused some confusion. Many people thought you could upload files to Uppy Server as well, but that is not the case. We recommend uploading to a [tus.io](https://tus.io) server, or — if that's too much for your simple usecase — using your existing webserver to handle the upload. 
-
-So, to hopefully end this confusion once and for all, we are renaming Uppy Server to Companion: an optional tool in the datacenter, which you can use to add more functionality to your Uppy.js client. If nothing else, maybe it will net us some points for having yet another dog-themed name!
-
-Simultaneously, we moved Companion into the main [transloadit/uppy](https://github.com/transloadit/uppy) [monorepo](https://github.com/babel/babel/blob/master/doc/design/monorepo.md). This centralizes Uppy issue reporting and makes it easier to do updates and simultaneous releases of the client and Companion parts.
-
-The first release of `@uppy/companion` is 0.14, and the last `uppy-server` release is 0.13.4. `uppy-server` will be deprecated on npm soon.
-
-Note that despite the rename, configuration for standalone Companion still uses `UPPYSERVER_` environment variables. This should ease the transition, since you will only have to update the package name for now. Once we add `COMPANION_` variable support, we will continue to support `UPPYSERVER_` environment variables to smoothen the transition. And of course, we will notify you here when that time comes!
-
-## Other Cool Changes
-
-- @uppy/core: allow editing plugin titles (names) so that, for instance, “Camera” can be translated into different languages, fixes #920 (#942 / @arturi)
-- @uppy/dashboard: fix animation — wait for closing animation to finish before opening modal (#942 / @arturi)
-- @uppy/url: fix Url plugin reacting to wrong drop/paste events, add ignoreEvent (#942 / @arturi)
-- build: build: Split integration tests and add one using create-react-app (#952 / @goto-bus-stop)
-- @uppy/companion: google Drive — move to v3 API (#977 / @pauln)
-
-See [full changelog (0.27 and 0.26.x patches) for more](https://github.com/transloadit/uppy/blob/master/CHANGELOG.md#0270)
-
-See you in the next release!
-
-The Uppy Team

+ 0 - 104
website/src/_posts/2018-10-0.28.md

@@ -1,104 +0,0 @@
----
-title: "Uppy 0.28: A look behind the scenes"
-date: 2018-11-05
-author: renee
-image: "/uppy/uppy/images/blog/0.28/dashboard-uploading.jpg"
-published: true
----
-
-<img class="border" src="/uppy/images/blog/0.28/dashboard-uploading.jpg">
-
-In `0.28`, we are introducing a new “Single Upload” mode, improving on the Status Bar plugin with a spinner and different pause/resume/cancel buttons. We'll also share some progress on bringing back unified locale packs and a Transloadit Preset 🍁
-
-<!--more-->
-
-## Single Uploads
-
-Uppy has been flexible about uploading lots of things from the start. You can add files at any time, even after uploads have already started. This is neat, but not always the desired behaviour: sometimes, you just want to upload a few files together with a form. In that case, it's useful to allow users to only upload a set of files _once_. 0.28.0 adds some options to help with that!
-
-An upload in Uppy terminology can be more than one file. Users can add a bunch of files and when they press "Upload", all those files are bunched up into an upload. They can then add more files and press the "Upload" button again: the _new_ files are bunched into a second upload.
-
-The new [`allowMultipleUploads`](/uppy/docs/uppy/#allowMultipleUploads-true) option in Uppy Core can be set to `false` to only allow a single one of those uploads. Once an upload is started, the Dashboard and Status Bar no longer show "add files" and "upload" buttons. You can listen for a 'complete' event and then safely continue your app's form flow.
-
-The Dashboard also has a new option: [`closeAfterFinish`](/uppy/docs/dashboard/#closeAfterFinish-false). When `true`, the modal Dashboard will automatically hide once an upload has completed. You should only use this option in conjunction with `allowMultipleUploads`, otherwise it might close the Dashboard when the user isn't done yet! It can only be used with the modal Dashboard, when [`inline`](/uppy/docs/dashboard/#inline-false) is set to `false`. "Closing" an inline Dashboard makes no sense :smile: You will see a warning in the console in both cases, so you don't have to remember all that.
-
-Speaking of the Dashboard, it now also shows more statuses in the title bar: “Upload complete”, “Upload paused”, “Processing 5 files” and “Uploading 5 files”.
-
-## Status Bar improvements
-
-- ⚠️ **breaking** We’ve added separate options for hiding pause/resume and cancel buttons. So now there are several options for buttons: `hideUploadButton`, `hideRetryButton`, `hidePauseResumeButton` and `hideCancelButton`. These options can be passed from the Dashboard, if you are not using Status Bar separately (most common case). See the docs for more info: </uppy/docs/status-bar/>.
-- The Status Bar now features a spinner animation when upload is in progress.
-- Encoding (with the Transloadit plugin, for example) and uploading progress now get different colors, so it’s easier to tell what’s happening, visually.
-
-<img class="border" style="border-top: 0;" src="/uppy/images/blog/0.28/status-bar-uploading.png">
-
-<img class="border" style="border-top: 0;"  src="/uppy/images/blog/0.28/status-bar-paused.png">
-
-<img class="border" style="border-top: 0;" src="/uppy/images/blog/0.28/status-bar-encoding.png">
-
-<img class="border" style="border-top: 0;" src="/uppy/images/blog/0.28/status-bar-complete.png">
-
-## Locale packs
-
-In the beginning, we used to have unified locale packs for text strings in Uppy — English, Russian, German, Polish, etc. Then we made a switch to per-plugin locales, and the ability to load one file with locale strings in any language (locale pack) was lost for a while. This release is the first step in bringing this functionality back.
-
-With this change, you can load a locale pack like so: `const uppy = Uppy({locale: german})`, then still override specific strings in a certain plugin, if needed:
-
-```js
-const uppy = Uppy({ locale: german })
-uppy.use(Dashboard, {
-  trigger: '#pick-files',
-  locale: {
-    strings: {
-      dropPasteImport: 'Something else here, %{browse} or this',
-    },
-  },
-})
-```
-
-The benefit to this is that there will be a central point of configuration for languages, so there could be language packs with strings for, e.g., Czech at @uppy/lang-cz (or @uppy/langs/cz) that would be very easy to contribute to (or use).
-
-After Uppy 0.28.0, this functionality is technically possible, but we still need to update and publish locale packs for multiple languages.
-
-## Hosted Companion with Transloadit
-
-When using remote providers such as Google Drive and Dropbox, so that your users can pick files from these sources, you can host [Companion](/uppy/docs/companion/) yourself, or use the one provided by Transloadit. And to simplify the latter, you can now use `Transloadit.COMPANION` and `Transloadit.COMPANION_PATTERN` constants in remote provider options:
-
-```js
-const Dropbox = require('@uppy/dropbox')
-const Transloadit = require('@uppy/transloadit')
-
-uppy.use(Dropbox, {
-  serverUrl: Transloadit.COMPANION
-  serverPattern: Transloadit.COMPANION_PATTERN
-})
-```
-
-Please see [Transloadit plugin documentation](/uppy/docs/transloadit/) for more details.
-
-## Transloadit Preset
-
-Lately, we've been working on a wrapper package around Uppy and the [Transloadit plugin](/uppy/docs/transloadit/) that will make common Transloadit-based workflows much simpler to implement. It's not ready just yet, but it should land in the next month!
-
-This "preset" will provide three or so simple methods:
-
- - `transloadit.form()`, to enhance a form with existing file `<input>`s with Transloadit encoding capabilities, powered by Uppy's resilient uploading plugins
- - `transloadit.modal()`, to show a one-off modal Dashboard that uploads to Transloadit's encoding backend
- - `transloadit.upload()`, to instruct Uppy to upload files, using your own UI instead
-
-Stay tuned!
-
-## Other Cool Changes
-
-- @uppy/core: ⚠️ **breaking** remove `upload-cancel` event, `file-removed` should be enough, see [#1069](https://github.com/transloadit/uppy/pull/1069) for details
-- @uppy/companion: ⚠️ **breaking** Migrated provider adapter to Companion: saves 5KB on the frontend, all heavy lifting moved to the server side
-- @uppy/companion: Removed an erroneous TypeScript dependency that added 40MB to the install size
-- @uppy/thumbnail-generator: You can now constrain thumbnail height, thanks to @richartkeil, see [#1096](https://github.com/transloadit/uppy/pull/1096) for documentation (we are planning to add real Thumbnail Generator documentation soon, too!)
-- @uppy/webcam: Fix getting data from Webcam recording if mime type includes codec metadata ([#1094](https://github.com/transloadit/uppy/pull/1094) / @goto-bus-stop)
-- meta: Added integration tests (in real browsers, thanks to Sauce Labs) for @uppy/url, @uppy/transloadit and @uppy/thumbnail-generator 🚀
-
-See [full changelog (0.28 and 0.27.x patches) for more](https://github.com/transloadit/uppy/blob/master/CHANGELOG.md#0280)
-
-See you in the next release!
-
-The Uppy Team

+ 0 - 91
website/src/_posts/2018-12-0.29.md

@@ -1,91 +0,0 @@
----
-title: "Uppy 0.29: separate Core and Plugin styles, React Native in tus-js-client"
-date: 2018-12-11
-author: arturi
-image: "/uppy/uppy/images/blog/0.29/uppy-core-plugins-separate-styles.jpg"
-published: true
----
-
-<img src="/uppy/images/blog/0.29/uppy-core-plugins-separate-styles.jpg">
-
-`0.29` brings bug fixes and improvements, while we are busy working on Uppy React Native support (which first had to [land in the js client for our resumable file upload protocol: tus.io](https://github.com/tus/tus-js-client#react-native-support)) and a Preset (still debating the name) which will make it easier to leverage Transloadit's encoding platform, and offer a smooth migration path for users not yet on Uppy. The highlights of this release are: separating Core and Plugin styles, more accurate progress reporting by factoring in sizes across files, adding a `responseType` option for XHR Upload, and fixing visual Webcam bugs.
-
-<!--more-->
-
-## Separate Core and Plugin styles
-
-**⚠️ breaking**
-
-When installing `uppy` and Plugins from npm, you had to include their styles. Prior to this release, you only had to include the Plugin’s CSS, say, for `@uppy/webcam`:
-
-```js
-import Uppy from '@uppy/core'
-import Webcam from '@uppy/webcam'
-import '@uppy/webcam/dist/style.css'
-```
-
-Each plugin's file contained the Core styles. If you added multiple plugins, the core styles ended up being duplicated. This bloated file sizes and could even break styles entirely because of CSS's precedence rules.
-
-Now, you have to include “general” styles from `@uppy/core` as well:
-
-```js
-import Uppy from '@uppy/core'
-import Webcam from '@uppy/webcam'
-import '@uppy/core/dist/style.css' // <-- add this separately and one time only
-import '@uppy/webcam/dist/style.css'
-```
-
-Thus, the Core styles are only included once. `@uppy/core` styles must be included before Plugin styles.
-
-Please see the [documentation](/uppy/docs/plugins/) for the Plugin you are using to find out whether it requires a CSS file to work. Generally speaking, UI plugins, such as the Dashboard, Webcam and Status Bar, need a CSS file, while utility plugins, such as Tus or XHR Upload, don’t.
-
-⚠️ Important things to remember:
-
-1. Dashboard is a universal UI that comes with the Status Bar and Informer Plugins built in, and as such, Dashboard styles already come with the Informer and Status Bar styles.
-2. Dashboard also ships with “Remote Provider” styles — you don’t need to include anything besides `@uppy/dashboard/dist/style.css` for Google Drive, Instagram and Dropbox to work. However, the Url and Webcam plugins still have to be included manually. Here’s an example:
-
-```js
-import Uppy from '@uppy/core'
-import Dashboard from '@uppy/webcam'
-import GoogleDrive from '@uppy/google-drive'
-import Webcam from '@uppy/webcam'
-import Url from '@uppy/url'
-
-// Core and Dashboard styles, then Webcam and Url, but not for GoogleDrive —
-// those come with Dashboard
-import '@uppy/core/dist/style.css'
-import '@uppy/dashboard/dist/style.css'
-import '@uppy/webcam/dist/style.css'
-import '@uppy/url/dist/style.css'
-```
-
-## Using File Sizes For Progress Calculation
-
-When possible, file sizes are now used for calculating the total progress. Before, we’ve used uploaded percentage for each file. Meaning that if you were uploading four files — and three small were already uploaded, while one very large file was still in progress — Uppy might still display progress as being 90%. Long story short, Uppy now has a more accurate progress bar 🚀
-
-Some internal details, if you are interested:
-
-1. If there are files without sizes, the average size of all other files is assumed for the unsized files.
-2. If there are no files with sizes, the percentage is just based on the percentages of the unsized files.
-
-<img src="/uppy/images/blog/0.29/progress-size-calculation.jpg">
-
-## `responseType` For XHR Upload
-
-When using XHR Upload, you can now configure the XMLHttpRequest `.responseType` value. This allows the S3 Plugin to tell Firefox not to log XML errors when getting empty responses, so it finally fixes the spurious warnings that were caused by this, see [#518](https://github.com/transloadit/uppy/issues/518).
-
-Because AwsS3 now sets `responseType`: `'text'`, we can no longer use the `responseXML` property. We already did text based parsing for successful responses, and will now do the same for error responses.
-
-## Misc Changes
-
-- @uppy/core: Don't pass removed file IDs to next upload step, fixes (#1148 / @goto-bus-stop)
-- @uppy/core: Fixed getFileType() when passed a file with an uppercase extension (#1169 / @jderrough)
-- @uppy/companion: Use `createCipheriv` instead of deprecated `createCipher` (#1149 / @goto-bus-stop)
-- @uppy/companion: Store Provider instances on `this.provider` instead of `this[this.id]` (@goto-bus-stop / #1174)
-- @uppy/companion: Pin grant to known stable version (@ifedapoolarewaju / #1165)
-- @uppy/companion: Fix — socket does not handle server.path option (#1142 / @tranvansang)
-- @uppy/webcam: Fix a bug with Webcam video overflowing its container (68730f8a1bf731898d46883e00fed937d3ab54ab / @arturi)
-- docs: Add `triggerUploadOnSubmit` to Form docs, add docs about options of hiding upload/pause/resume/cancel buttons; talk about bundler-less polyfill use (@goto-bus-stop, @arturi)
-- @uppy/react: Allow Dashboard props width and height to accept a string for 100% (#1129 / craigcbrunner)
-
-See the [full changelog (0.29)](https://github.com/transloadit/uppy/blob/master/CHANGELOG.md#0290) for more details.

+ 0 - 108
website/src/_posts/2019-03-0.30.md

@@ -1,108 +0,0 @@
----
-title: "Uppy 0.30: Introducing Robodog"
-date: 2019-03-06
-author: renee
-image: "/uppy/uppy/images/blog/0.30/robodog-assemble.jpg"
-published: true
----
-
-In `0.30`, we are introducing a new friend for Uppy — the Robodog.
-
-<img src="/uppy/images/blog/0.30/robodog-assemble.jpg">
-<small>Robodog: easy to assemble</small>
-
-<!--more-->
-
-## Robodog
-
-Uppy is developed by [Transloadit](https://transloadit.com). Transloadit is the Swiss Army Knife for your files: importing, resizing, cropping and watermarking images, making GIFs, transcoding videos, extracting thumbnails, generating audio waveforms, and so much more — all in a single service. Uppy has a similarly large feature set in dozens of plugins, but because of that it can be complicated to wire everything up for the best experience.
-
-[Robodog](/uppy/docs/robodog/) is a new Uppy-based library that has been trained to work with Transloadit. It includes three components:
-
-1. [File picker](/uppy/docs/robodog/picker/), using the Dashboard plugin you know and love for the modal UI, with support for imports from third-party services.
-2. [Form](/uppy/docs/robodog/form/): integration with your existing HTML forms. Files will be uploaded to Transloadit, and the form will submit JSON information about the files and encoding results.
-3. [Upload](/uppy/docs/robodog/upload/): one-line programmatic uploads — call `transloadit.upload(files, opts)` and get an array of results back.
-
-<center><img src="https://media.giphy.com/media/Eq7T3GwDAlggE/giphy.gif"></center>
-
-Here’s a demo:
-<figure class="wide">
-  <p class="codepen" data-height="600" data-theme-id="light"  data-border-color="#EB2177" data-default-tab="js,result" data-user="uppy" data-slug-hash="gEgPav" style="height: 600px; box-sizing: border-box; display: flex; align-items: center; justify-content: center; border: 2px solid black; margin: 1em 0; padding: 1em;" data-pen-title="Robodog: resizing and optimizing your avatar">
-    <span>See the Pen <a href="https://codepen.io/uppy/pen/gEgPav/">
-    Robodog: resizing and optimizing your avatar</a> by Uppy File Uploader (<a href="https://codepen.io/uppy">@uppy</a>)
-    on <a href="https://codepen.io">CodePen</a>.</span>
-  </p>
-  <script async src="https://static.codepen.io/assets/embed/ei.js"></script>
-</figure>
-
-You can install Robodog from NPM:
-
-```sh
-npm install @uppy/robodog --save
-```
-
-Or import it by using an HTML script tag:
-
-```html
-<link rel="stylesheet" href="https://releases.transloadit.com/uppy/v0.30.3/robodog.min.css">
-<script src="https://releases.transloadit.com/uppy/v0.30.3/robodog.min.js"></script>
-```
-
-<center><img src="https://media.giphy.com/media/MqGA1Za9ar6lG/giphy.gif"></center>
-
-## Dashboard Improvements
-
-As usual, we are making constant iterations and improvements to the Dashboard plugin. Accessibility has been improved, we’ve updated and fixed some icons, breadcrumbs in remote providers, and the issue with `browserBackButton` and multiple modals.
-
-## Progress or no progress
-
-We’ve improved how the StatusBar behaves when no progress reporting is available (which is [the case for MS Edge](https://github.com/transloadit/uppy/pull/1184)):
-
-<img src="/uppy/images/blog/0.30/unknown-progress.gif">
-
-## Upload Success
-
-⚠️ Breaking
-
-We’ve changed [`upload-success`](/uppy/docs/uppy/#upload-success) and [`upload-error`](/uppy/docs/uppy/#upload-error) signatures.
-
-```js
-uppy.on('upload-success', (file, responseObject) => {
-  // (depending on the uploader plugin used, it might contain
-  // less info, the example is for @uppy/xhr-upload)
-  // responseObject = {
-  //   status, // HTTP status code (0, 200, 300)
-  //   body, // response body
-  //   uploadURL // the file url, if it was returned
-  // }
-})
-```
-
-```js
-uppy.on('upload-error', (file, responseObject) => {
-  // responseObject = {
-  //   status, // HTTP status code (0, 200, 300)
-  //   body // response body
-  // }
-})
-```
-
-[See the docs](/uppy/docs/uppy/) and [PR #1138](https://github.com/transloadit/uppy/pull/1138) for more details.
-
-## Changelog
-
-- @uppy/robodog: 📣⚠️ Add Robodog — Transloadit browser SDK (#1135 / @goto-bus-stop)
-- @uppy/dashboard: fixed issue with `browserBackButton` history and multiple modals (#1258 / @goto-bus-stop, @arturi)
-- @uppy/core: Set response in Core rather than in upload plugins (#1138 / @arturi)
-- @uppy/core: Don’t emit a complete event if an upload has been canceled (#1271 / @arturi)
-- @uppy/companion: Support Redis option (auth_pass, etc...) (#1215 / @tranvansang)
-- @uppy/companion: Sanitize text before adding to html (f77a102 / @ifedapoolarewaju)
-- @uppy/dashboard: Update pause-resume-cancel icons (#1241 / @arturi, @nqst)
-- @uppy/dashboard: Fix issues with multiple modals (#1258 / @goto-bus-stop, @arturi)
-- @uppy/dashboard: Dashboard ui fixes: fix icon animation jiggling, inherit font, allow overriding outline, fix breadcrumbs, bug with x button being stuck, fix an issue with long note margin on mobile (#1279 / @arturi)
-- @uppy/provider-views: update instagram nextPagePath after every fetch  (25e31e5 / @ifedapoolarewaju)
-- @uppy/react: Allow changing instance in `uppy` prop (#1247 / @goto-bus-stop)
-- @uppy/react: Typescript: Make DashboardModal.target prop optional (#1254 / @mattes3)
-- @uppy/aws-s3: Use user-provided filename / type for uploaded object, fixes #1238 (#1257 / @goto-bus-stop)
-- @uppy/tus: Update to `tus-js-client@1.6.0` with React Native support (#1250 / @arturi)
-- build: Improve dev npm script: use Parcel for bundled example, re-build lib automatically, don’t open browser and no ghosts mode, start companion when developing (but there’s optional npm run dev:no-companion) (#1280 / @arturi)

+ 0 - 41
website/src/_posts/2019-03-liftoff-01.md

@@ -1,41 +0,0 @@
----
-title: "Day 1"
-author: [kvz, aj]
-date: 2019-03-26
-image: "/uppy/uppy/images/blog/30daystoliftoff/day1.jpg"
-series: 30 Days to Liftoff
-seriesSuffix: 'of 30'
-alias: '/blog/2019/03/26-30daystoliftoff-day1/'
----
-
-When we [started working on Uppy](/blog/2016/07/uppy-begins/) back in early 2016, all we had was an idea and the shared desire to launch file uploading into a new age. We had already been laying the groundwork with the development of [tus.io](https://tus.io/) and felt that its robust back-end deserved a front-end just as robust, modern and user-friendly.
-
-<!--more-->
-
-But what about open? We initially thought about building a proprietary uploader that would work exclusively with Transloadit's commercial service, but we quickly turned around on it. We knew this could have a real impact. So, just like we did with Tus, we decided to make our new project open source. Three years, [16.000 stargazers](https://github.com/transloadit/uppy/stargazers) and a thriving community later — and we could not be happier. Well, apart from one thing: **getting Uppy 1.0 out the door** has proven harder than expected. Issues keep piling up, which led us down countless sidetracks and hurt our capacity to hammer out those final design goals.
-
-But now it's time for all that to change. That's why, starting today, we are allocating all of Transloadit's resources into making a big final push and getting Uppy ready for liftoff. Our goal is to launch on **April 25**, exactly thirty days from now.
-
-<center><img width="400" src="https://media.giphy.com/media/kvw01ozJ06TxS/giphy.gif"><br /><br /></center>
-
-We'll need all the help we can get, so for the next thirty days, everyone here at Transloadit is going to be working exclusively on tasks related to Uppy 1.0. That means the Uppy core team (obviously) and tus core team, our SDK teams, as well as our infra & API engineers, designers, content writers, and the founders themselves — we'll all be chipping in and doing our part to ensure liftoff in thirty days. We're even adding someone new to the Uppy team in April. A warm welcome to [Evgenia Karunus](https://github.com/lakesare) :)
-
-## A new post every day
-
-We have added all tasks to a project board and thought it might be a fun idea to keep you updated on our day-to-day progress. So, we set ourselves an additional challenge: apart from getting Uppy ready for 1.0, we're also going to **write a blog post about it every day**, for thirty days. Starting with this one.
-
-A post each day may prove hard to do, but we think it's worth a try. It really fits with the open way in which we have been developing Uppy for the past few years, and gives you a look behind the scenes as we're getting ready for the home stretch. And hopefully, we also succeed in spreading the word even further, reaching people that don't yet know about Uppy, but would be happy to!
-
-## What's Uppy with you?
-
-We'd love to hear what you think. Whether it is about Uppy in general, or specific issues you feel cannot be forgotten before 1.0, or maybe even about this blog post challenge itself — leave a comment here, use our [forum](https://community.transloadit.com/c/uppy) directly (it also hosts the comments), or let us know on Twitter via [@uppy_io](http://twitter.com/uppy_io/) or [@transloadit](http://twitter.com/transloadit/).
-
-<!-- <center><img width="400"  class="dropshadow" src="https://media.giphy.com/media/RnX4q6yYDoYCI/giphy.gif"></center> -->
-<center><img width="400"  class="dropshadow" src="https://media.giphy.com/media/SjInxhAJTzU7S/giphy.gif"><br /><br /></center>
-
-
-We can use your help! As we've said, we're looking to spread the word so any retweet, blog post, star, you name it, is gonna be double extra appreciated. Also, [issue busting](https://github.com/transloadit/uppy/issues) is going to slow down as we're about to head deep into the remaining design goals (e.g. React Native). So, if you want to lend a hand with that, we'd owe you big time!
-
-See you tomorrow for the first progress update on [Day 2](/blog/2019/03/liftoff-02/) of our 30 Days to Liftoff!
-
-PS If you don't want to miss an update, consider [good ol' RSS](/uppy/atom.xml) :)

+ 0 - 37
website/src/_posts/2019-03-liftoff-02.md

@@ -1,37 +0,0 @@
----
-title: "Day 2"
-date: 2019-03-27
-author: samuel
-image: "/uppy/uppy/images/blog/30daystoliftoff/day2.jpg"
-series: 30 Days to Liftoff
-seriesSuffix: 'of 30'
-alias: /blog/2019/03/27-30daystoliftoff-day2/
----
-
-Yesterday, marked the beginning of our thirty-day blog post challenge to keep you updated on our preparations for **releasing Uppy 1.0 on April 25**. So here we are again already!
-
-<!--more-->
-
-Our big coding speedrun towards for 1.0 starts April 1, so we are mostly busy with tying up loose ends, busting issues, and planning our work ahead.
-
-<center><img width="400" src="/uppy/images/blog/30daystoliftoff/day2.jpg"><br /></center>
-
-## Our roadmap for 1.0
-
-With so much still to do before Uppy 1.0 is ready go, it's important that we keep track of all the various tasks. We are doing this with help of an Uppy 1.0 project dashboard that we created in [Asana](https://asana.com). This lets us see in an instant what everyone is working on and what the current status is on specific tasks.
-
-We currently have our tasks divided into five sections, which are: *Nice To Have*, *To Do*, *In Progress* and *Done*. The tasks in the *To Do* and *In Progress* lanes (and of course those that are *Done*) are planned to make the 1.0 release. And if we have time on our side before the launch date, we'll also try to get as many of the *Nice To Have* tasks checked off as well.
-
-We've discussed our [Changelog](https://github.com/transloadit/uppy/blob/master/CHANGELOG.md#10-goals)'s 1.0 goals and tried to re-prioritize and assign work.
-
-We didn't manage to fit all of those *To Do*s in the picture, but here is a screenshot of what our board looks like at the moment:
-
-<center><img src="/uppy/images/blog/30daystoliftoff/2019-03-27-board02.png"></center>
-
-Aside from planning, we've also been busy onboarding [Evgenia](https://github.com/lakesare) so she can hit the ground running April 1st.
-
-And tomorrow, we'll look at the *To Do*s in more detail, so we can get a clearer idea of subtasks and who will do what, exactly.
-
-That's all the updates I have for you today. See you tomorrow for [Day 3](/blog/2019/03/liftoff-03/) of our 30 Days to Liftoff!
-
-PS If you don't want to miss an update, consider [good ol' RSS](/uppy/atom.xml) :)

+ 0 - 51
website/src/_posts/2019-03-liftoff-03.md

@@ -1,51 +0,0 @@
----
-title: "Day 3"
-date: 2019-03-28
-author: samuel
-image: "/uppy/uppy/images/blog/30daystoliftoff/day3.jpg"
-series: 30 Days to Liftoff
-seriesSuffix: 'of 30'
----
-
-Two days ago, we announced the **upcoming launch of Uppy 1.0 on April 25**, kicking off our thirty-day blog post challenge to keep you updated on everything that is going on. Here's day three for you!
- 
-<!--more-->
-
-We're still mostly busy tying up any remaining loose ends before April 1, when we'll really start our coding speedrun towards 1.0:
-
-<center><img width="400" src="/uppy/images/blog/30daystoliftoff/day3.jpg"><br /></center>
-
-## Done
-
-[Artur](https://github.com/arturi) merged two pull requests from [Renée](https://github.com/goto-bus-stop). The [first](https://github.com/transloadit/uppy/pull/1375) one aims to use Transloadit Templates and demo keys for the `transloadit-textarea` example, and the [second](https://github.com/transloadit/uppy/pull/1374) one makes error reporting across different locales more flexible.
-
-Artur also added a [GitHub-comment-inspired demo](/examples/markdown-snippets/). Add a file attachment to your markdown, and it will be uploaded and converted to a thumbnail that's displayed inside your post, no matter the media type (audio turns into artwork, images are resized, videos thumbnailed, etc.). 
-
-[Ife](https://github.com/ifedapoolarewaju) reviewed and merged this [pull request](https://github.com/transloadit/uppy/pull/1366), which updates the callback URIs to reflect their correct location in Companion. Thanks to [HughbertD](https://github.com/HughbertD) for that one!
-
-We also celebrated Evgenia submitting her first two PRs: [one](https://github.com/transloadit/uppy/pull/1382) to make sure that tooltips can no longer overflow inside the Uppy container, and [another](https://github.com/transloadit/uppy/pull/1383) that removes the jumpiness when Uppy loads.
-
-## In Progress
-
-Renée is working hard to fix outdated warnings in our examples. Other than that, the team has been dealing with a Companion issue that invalid access tokens are given out when you select a provider to receive your file from. The aim is to return 401 for invalid access tokens, so that the `/authorized` endpoint can be deprecated. You can track the progress of this issue in its [pull request](https://github.com/transloadit/uppy/pull/1298).
-
-<center><img src="/uppy/images/blog/30daystoliftoff/2019-03-27-board02.png"></center>
-
-## To Do
-
-The biggest update that will be part of Uppy 1.0 is support for React Native. Yesterday, Renée, Artur, Ife, [Evgenia](https://github.com/lakesare) and [Kevin](https://github.com/kvz) had a call and talked extensively about what would be needed to have a minimum viable product. They settled on the following six subtasks, which I'm copying directly from their notes: :)
-
-```markdown
-MVP for React Native support should:
-
-- [ ] get a link provider example to work, including showing Companion progress and resumability
-- [ ] get its own UI, (re)written for RN
-- [ ] make websocket progress from Companion work (see: https://facebook.github.io/react-native/docs/network#websocket-support)
-- [ ] have an example with buttons for resumability & a progress bar
-- [ ] have resumability support within 20 min (easily tested by disabling WiFi on your workstation while uploading to master.tus.io)
-- [ ] have an example with basic file previews (Uppy RN itself likely does not offer previews)
-```
-
-That's all the updates I have for you today. See you tomorrow for [Day 4](/blog/2019/03/liftoff-04/) of our 30 Days to Liftoff!
-
-P.S. If you don't want to miss an update, consider [good ol' RSS](/uppy/atom.xml) :)

+ 0 - 32
website/src/_posts/2019-03-liftoff-04.md

@@ -1,32 +0,0 @@
----
-title: "Day 4"
-date: 2019-03-29
-author: tyler
-image: "/uppy/uppy/images/blog/30daystoliftoff/day4.jpg"
-series: 30 Days to Liftoff
-seriesSuffix: 'of 30'
-alias: /blog/2019/03/27-30daystoliftoff-day4/
----
-
-Today marks the fourth day of our ongoing thirty-day blog post challenge, giving you an overview of all the progress building up to our **Uppy 1.0 release on April 25!**
-
-<!--more-->
-
-<center><br /><img width="400" src="/uppy/images/blog/30daystoliftoff/day4.jpg"><br /></center>
-
-## Done
-
-We haven't even hit April 1 yet and the 'Done' section of the project dashboard is already getting plenty of love! Today, [Alex](https://github.com/nqst) finished designing a specialized header for visitors of Uppy.io and [Tus.io](https://tus.io) to inform them about the discount on [Transloadit](https://transloadit.com/) services they can receive :wink:
-
-[Adbel](https://github.com/Kiloreux) started a dialogue with the team regarding [Docker secrets](https://github.com/transloadit/uppy/pull/138), seeing as [an issue](https://github.com/transloadit/uppy/issues/1295) about this was reported. He decided that the best course of action was to follow the Kubernetes [best practices](https://kubernetes.io/docs/concepts/configuration/secret/#best-practices) and add a `Secret` resource to contain the environment variables.
-
-
-## In Progress
-
-One of the more exciting updates of this day was also contributed by Alex, with his impressive pre-alpha sketch of a new homepage for Uppy. Despite only being a work in progress, the entire team has been overjoyed with how it's turning out! Take a look for yourself (click to see the full page):
-
-<center><a rel="noreferrer noopener" target="_blank" href="/uppy/images/blog/30daystoliftoff/2019-03-liftoff-04b.png"><img width="400" src="/uppy/images/blog/30daystoliftoff/2019-03-liftoff-04a.png"></a></center>
-
-[Ife](https://github.com/ifedapoolarewaju) has been focused on [fixing hanging Instagram files uploaded through Companion](https://github.com/transloadit/uppy/pull/1274/files) and our content team's own [Samuel](https://github.com/samuelayo) added examples for [handling uploads in Node.js, and in Python (using the Flask microframework)](https://github.com/transloadit/uppy/pull/1389). 
-
-And that's Day 4 complete! Catch up with us [tomorrow](/blog/2019/03/liftoff-05/), as we take this thing into our first weekend of the 30 Days to Liftoff! And of course, if you want to keep yourself constantly updated, feel free to subscribe to our [RSS feed](/uppy/atom.xml) :smile:

+ 0 - 16
website/src/_posts/2019-03-liftoff-05.md

@@ -1,16 +0,0 @@
----
-title: "Day 5"
-date: 2019-03-30
-author: kvz
-image: "/uppy/uppy/images/blog/30daystoliftoff/15.jpg"
-series: 30 Days to Liftoff
-seriesSuffix: 'of 30'
----
-
-Work hard, play hard! It's Saturday, so it's time for us to wind down and take some time for ourself. Seeing as we won't have much to share over the weekend in terms of progress updates, we thought we'd try to distract you a bit. Sit back, relax, and enjoy this nice GIF, handpicked by our crew:
-
-<!--more-->
-
-<center><img width="400" src="https://media.giphy.com/media/TL4d81cXH4THa/giphy.gif"><br/><br/></center>
-
-Just the thing we need to recharge those :battery::battery: to :100:, so we can start making a dent on [Monday](/blog/2019/04/liftoff-07/) again. Hope you'll have a good one! :kissing_heart: 

+ 0 - 17
website/src/_posts/2019-03-liftoff-06.md

@@ -1,17 +0,0 @@
----
-title: "Day 6"
-date: 2019-03-31
-author: aj
-image: "/uppy/uppy/images/blog/30daystoliftoff/day3.jpg"
-series: 30 Days to Liftoff
-seriesSuffix: 'of 30'
----
-
-Shh, it's Sunday, Uppy is sleeping in today :sleeping: We'll be taking the day off as well, as we gear up to go full throttle again in the morning. There's still a lot to do before the **Uppy 1.0 launch on April 25**! In the meantime, why don't you join us in letting sleeping dogs lie.
-
-<!--more-->
-
-<center><img width="400"  src="https://media.giphy.com/media/26n6UOQke3xCpsbWo/giphy.gif"><br/><br/></center>
-
-We hope this drowsy puppy inspires you to have a great and relaxing remainder of your weekend. We'll have a lot more to share with you tomorrow, so see you on [Day 7](/blog/2019/04/liftoff-07/) of our 30 Days to Liftoff!
-

+ 0 - 132
website/src/_posts/2019-04-1.0.md

@@ -1,132 +0,0 @@
----
-title: "Uppy 1.0: Your best friend in file uploading"
-date: 2019-04-25
-author: arturi
-image: "/uppy/uppy/images/blog/1.0/uppy-dashboard-1.png"
-published: true
----
-
-Today, after three years of development, we are launching version 1.0 of Uppy, our file uploader for web browsers.
-
-<img src="/uppy/images/blog/1.0/uppy-dashboard-1.png">
-
-## A little history
-
-Three years ago, Transloadit was ready to replace their jQuery-based file uploading & processing plugin for browsers with something more modern. They posted a [job ad](https://transloadit.com/jobs/2015-10-front-end-developer/) in search for people to build it:
-
-> In general, we’re looking for polished, well tested, carefully crafted products that are delightful to work with and use. So for this job it’s not only important that you know JavaScript, but also how to make things look stunning and work well for end users.
->
-> At your disposal are time, focus, and the core team ready to provide feedback, guidance, and anything else you need.
-
-Shortly after, I saw a retweet of this vacancy come across my time line and I decided to apply. That, in a nutshell, is how I got involved with Uppy in the earliest stages of the project.
-
-Initially, the idea was to build a proprietary uploader that would work exclusively with Transloadit’s commercial service, but we quickly turned around on it. We felt our version of a file uploader could have a real impact if we made it more widely available. So, just like Transloadit had done before with [Tus](https://tus.io/), we decided to make Uppy an open source solution — free for anyone to use and hack on. Transloadit support became an optional plugin.
-
-Three years, [16.000 stargazers](https://github.com/transloadit/uppy/stargazers), getting featured on [Smashing Magazine](https://www.smashingmagazine.com/the-smashing-newsletter/smashing-newsletter-issue-197/), [JavaScript Daily](https://twitter.com/JavaScriptDaily/status/950348390268919809), [Product Hunt](https://www.producthunt.com/posts/uppy-io), and [SurviveJS](https://survivejs.com/blog/uppy-interview/), and a thriving community later — and we could not be happier to finally launch Uppy 1.0!
-
-<!--more-->
-
-## Why build Uppy in the first place?
-
-We occasionally get asked why we would even need anything beyond `<input type="file">`. Why bring JS into this at all? The truth is, for many cases, `<input type="file">` is fine.
-
-Sometimes, however, you might like to add a drag-and-drop surface with file previews or upload progress reporting that works well across browsers. Webcam support could be useful. Other than that, picking files directly from your Instagram and Dropbox — without first passing through your mobile phone — can save a lot of bandwidth and battery life (uploads with Uppy and Companion happen server-to-server). In all those cases, you’ll need something more than a simple `<input type="file">` tag.
-
-<center><iframe style="border: none;" src="https://cards.producthunt.com/cards/posts/152565?v=1" width="598" height="405" frameborder="0" scrolling="no" allowfullscreen></iframe></center>
-
-Then there’s also the issue of large files, where resumability is essential. It’s basically unacceptable in this day and age to still have to restart your upload from scratch, just because your WiFi had a hiccup. That’s why Uppy uses Tus, the open protocol for resumable file uploading.
-
-All these things significantly improve the user experience to the point where more files actually make it to your platform, and less users rage-quit and close the tab. These things become important when uploading is a central aspect of your website or app. Uppy can also be deployed with nothing but a JS tag, using an existing `<form>` for fallback (to support IE6! :smile:), and your Apache/Nginx server.
-
-## Building a team to create Uppy
-
-The Uppy team first consisted of [myself](https://github.com/arturi) and [Harry](https://github.com/hedgerh). Since I moved to New York for a while, with most of the team based in Europe, we got used to having some very early (or late) calls with significant time differences.
-
-I was mostly working on the frontend and building what is known today as the [Dashboard](/examples/dashboard/) — the fully-featured and most commonly used Uppy plugin. Harry took on the first version of what was then called Uppy Server (now Companion) — responsible for picking files from Google Drive, Instagram, remote Urls, etc.
-
-In 2016, the Transloadit team had a meetup in Amsterdam, where I ended up being [present](https://mobile.twitter.com/arturi/status/701394760796229632) in a most unusual way (in the center):
-
-<img src="/uppy/images/blog/1.0/amsterdam-team-meetup.jpg">
-
-Later that year, [Ife](https://github.com/ifedapoolarewaju) joined the Uppy team as well and took over all Companion work.
-
-Building all of the intended Uppy features properly took a lot of time. So, two years after landing the project at Transloadit, I was [writing a job ad post myself](https://transloadit.com/jobs/2017-02-open-source-frontend-dev/) as Uppy was starting to take on serious proportions. That’s where [Renée](https://github.com/goto-bus-stop) joined the team (funny story — we met through collaborating on GitHub on Choo and Yo-Yo libraries) to help us with Uppy React components, Redux integration, the Golden Retriever plugin and many more cool features.
-
-Around that time, [Alex](https://zaytsev.io/) also joined in to advise us on the UI design, completing the Uppy team as it still stands today.
-
-In the summer of 2017, the Transloadit team had another meeting. This time in Berlin, where we worked on the [Golden Retriever](/docs/golden-retriever/) plugin that helps recover files after browser crashes. We also played Mario Kart (I lost, despite all the practice!) and dressed up as characters from the game:
-
-<img src="/uppy/images/blog/1.0/uppy-team-kong.jpg">
-
-Read more [about Golden Retriever and that team meetup](/uppy/blog/2017/07/golden-retriever/). Golden Retriever got good press on Reddit and Hacker News because it goes above and beyond to make things absurdly reliable. In the demo video, you see us `kill -9` our browser, restart, and the upload just picks right up where it left off. A first!
-
-## Challenge accepted: only 30 days to liftoff
-
-We had been postponing the 1.0 release for quite some time. There’s always just one more feature you’d like to add or another bug you want to fix, before calling something ready for a 1.0 release. Truth be told, Uppy has been [used in production](https://github.com/transloadit/uppy#used-by) for a while already, and even though we iterate and change things frequently, the API had mostly stabilized.
-
-So, about a month ago, we decided to pull the trigger and [announced an Uppy Month](/uppy/blog/2019/03/liftoff-01/) within Transloadit. This meant that all team members, including those not working primarily on Uppy — the Tus core team, our SDK teams, as well as our infra and API engineers, designers, content writers, and the founders themselves — all chipped in and did their part to ensure liftoff in thirty days. We also asked [Evgenia](http://github.com/lakesare) to join us for the month to lend a hand with frontend work. Every week, we had a call where we looked at the Uppy 1.0 project board and talked about our progress:
-
-<img src="/uppy/images/blog/30daystoliftoff/15-dashboard.png">
-
-Here are some highlights of what we’ve managed to deliver during one month of Everything Uppy:
-
-- A new Uppy website design.
-- [Localization support and language packs](https://github.com/transloadit/uppy/pull/1443) for Russian, German, Dutch and French (with more coming from the community). [Kevin](https://github.com/kvz) and I wrote a script that loops through all Uppy plugins in the repo and generates one canonical `en_US` that can be used as a basis for other translations. The script even checks for missing strings accross all translations, so you know which ones to update.
-- [Drag and Drop in the Dashboard](https://github.com/transloadit/uppy/pull/1440), being an important part of Uppy, has been significantly improved with support for pasting files and links from both the browser and the device. So you can now, say, drag a link or an image from a different tab to Uppy!
-- [Basic React Native support (Beta)](https://github.com/transloadit/uppy/pull/988): Uppy runs in a React Native environment, we have an example with resumable uploads via tus, and `@uppy/react-native` Expo-component support for picking images, videos, documents, and files from remote URLs with the help of Companion.
-- [Design facelift](https://github.com/transloadit/uppy/pull/1442): the Dashboard UI has been significantly improved in the past days: new icons have been added, as well as typography polishing, better color organization, enlarged clickable areas, and more.
-- Many accessibility issues uncovered.
-- [Robodog gained support for an inline Dashboard](https://github.com/transloadit/uppy/pull/1450).
-- [The documentation structure has been reworked](https://github.com/transloadit/uppy/pull/1405).
-- [Transloadit Assemblies can now be properly canceled](https://github.com/transloadit/uppy/pull/1431).
-- [Upload progress is reported more accurately with XHR-upload and Companion](https://github.com/transloadit/uppy/pull/1454).
-- [Upload progress is improved in general](https://github.com/transloadit/uppy/pull/1376).
-- [npm scripts have been refactored](https://github.com/transloadit/uppy/pull/1392) — yes, that’s important!
-- And craziest of all: our content team has been on a roll and [released a post *every day*](/uppy/blog/2019/03/liftoff-01/) for the past thirty days to keep you updated on our day-to-day progress.
-
-## Which features made it into 1.0? And which didn’t (yet)?
-
-Uppy 1.0 feature list:
-
-- Sleek user interface
-- Lightweight and easy on dependencies
-- A small core with modular architecture: everything is a plugin
-- Uses modern JavaScript with transpiled ES5 versions available in `lib`, and minified versions for direct use by browsers in `dist`
-- Usable as a bundle straight from a CDN, as well as a module to import
-- Resumable file uploads via the open Tus standard
-- Direct uploads to S3
-- Webcam support
-- Picking files from Dropbox, Google Drive and Instagram, while letting servers do the heavy lifting via Companion
-- Robust: retries for all-the-things
-- Built with accessibility in mind (not perfect yet, but we constantly improve)
-- File recovery (after a browser crash or accidental navigation) via Golden Retriever
-- Locale support: easily switch languages or supply your own copy
-- Compatible with React (React Native in beta)
-- Works great on mobile
-- Works great with Transloadit, works great without
-
-We also left two features “behind”:
-
-> Offering sugared shortcuts for novice users (presets)
-
-We felt that Uppy is straightforward enough to use, and presets could end up making this less clear. Robodog does offer less “boilerplatey” integrations, but this was done as a wrapper instead of a preset.
-
-> Themable UI with a beautiful default
-
-Instead of going for `{ theme: 'dark' }`, we only offer theming via CSS. For instance, it’s feasible to utilize the `prefers-color-scheme` media query for that.
-
-Lastly, our “picking files from remote sources” feature isn’t quite as full fledged as we maybe would have liked, since support for Google Photos, Box or Facebook is currently not included. We hope these are things that the community can help with.
-
-## What’s next for Uppy?
-
-Does this mean Uppy is perfect? Nope!
-
-There are still quite a lot of [issues](https://github.com/transloadit/uppy/issues) and items in our backlog, and we are already [planning Uppy 1.1](https://github.com/transloadit/uppy/blob/master/CHANGELOG.md#11). We also want to maybe release a WordPress plugin, add image cropping, and much more, but we are releasing 1.0 today because it contains virtually all of the features that we set out to implement. These features have all been documented and we don’t expect their APIs to change. If, at some point, they do need to change, we will have to handle that with care. For instance, by shipping a 2.0 version and making all the noise that comes with it.
-
-Uppy has already seen serious usage by a seriously large community and by various serious enterprises. So, with 1.0, we’re now also signaling to you: Hey, we take this seriously and we won’t be swapping things out from under your app, just like that. Also, if you don’t yet have Uppy powering your file uploads, now is the best time to give it a shot!
-
-We hope your users will be as delighted by Uppy 1.0 as we have been designing and building it. Seeing your support and contributions while doing so, made all the difference. Thank you so much! And if you could leave a comment on [ProductHunt](https://www.producthunt.com/posts/uppy-1-0), [Hacker News](https://news.ycombinator.com/item?id=19756159) or [Reddit](https://www.reddit.com/r/javascript/comments/bhkx5k/uppy_10_your_best_friend_in_file_uploading/) and give us your brutal opinion, that would mean the world to us!
-
-<!-- <center>
-<a href="https://www.producthunt.com/posts/uppy-1-0?utm_source=badge-featured&utm_medium=badge&utm_souce=badge-uppy-1-0" target="_blank"><img src="https://api.producthunt.com/widgets/embed-image/v1/featured.svg?post_id=152565&theme=dark" alt="Uppy 1.0 - Your best friend in file uploading | Product Hunt Embed" style="width: 250px; height: 54px;" width="250px" height="54px" /></a>
-</center> -->

+ 0 - 42
website/src/_posts/2019-04-liftoff-07.md

@@ -1,42 +0,0 @@
----
-title: "Day 7"
-date: 2019-04-01
-author: kvz
-image: "/uppy/uppy/images/blog/30daystoliftoff/day07.png"
-series: 30 Days to Liftoff
-seriesSuffix: 'of 30'
----
-
-Welcome to Day 7 of our ongoing thirty-day blog post challenge toward the **Uppy 1.0 release on April 25**! With the weekend behind us and all batteries fully recharged, we're ready to start hacking away again at the forest of To Do's that lies in front of us.
-
-We still have some updates from the end of last week to share with you, and our team is already working hard today on fixing issues and making improvements. So let's jump into it!
-
-<!--more-->
-
-<center><br /><img width="400" src="/uppy/images/blog/30daystoliftoff/day07.png"><br /></center>
-
-## Done
-
-- [Artur](https://transloadit.com/about/#artur) and [Kevin](https://transloadit.com/about/#kvz) [fixed CI builds](https://github.com/transloadit/uppy/commit/130b79076c4cee54f1d6045f7ff359d1f46a9c72) with [new](https://github.com/transloadit/uppy/commit/5f4f1cf17e23c195d4a3907d7bb94599ec882ae6) [npm](https://github.com/transloadit/uppy/commit/f0ca917a1e238e672540fd1a605c2dee8a81b195) scripts (that now explicitly opt into running Companion via `npm run dev:with-companion`) and by switching to a newer Chrome version for Windows 7 on Saucelabs. Kevin also cut down website deploy times by leveraging cache.
-- [Ife](https://transloadit.com/about/#ife) [fixed](https://github.com/transloadit/uppy/commit/c1abfea33d0c3e80809814c1048b156028c8fcf9) a [bug](https://github.com/transloadit/uppy/issues/1390) in XHR Companion uploads.
-- Then Ife, Artur, and Kevin teamed up for the entire afternoon to deal with resumable uploads in RN, and got it to work inside an upload session. You can now hit Pause & Resume! :tada: It does not yet recover after a crash, but more on that under the `In Progress` section. One of the bigger hurdles addressed during this call was fixing websocket communication between Companion RN, so remote uploads done through Companion now report progress to the mobile app.
-- [Renée](https://transloadit.com/about/#renee) fixed [a TypeScript issue](https://github.com/transloadit/uppy/pull/1396) for people who do `allowSyntheticDefaultImports: false`.
-- [Evgenia](https://github.com/lakesare) has [removed the jumpiness](https://github.com/transloadit/uppy/pull/1383) that occurred when Uppy was loading.
-- [Alex](https://transloadit.com/about/#alex) improved the design of the statusbar for cases where the upload fails. <br />
-Before:<br />
-<center><img width="400" src="/uppy/images/blog/30daystoliftoff/2019-04-liftoff-07a.png"></center>
-After:<br />
-<center><img width="400" src="/uppy/images/blog/30daystoliftoff/2019-04-liftoff-07b.png"></center>
-
-## In Progress
-
-- As mentioned, resumability in RN doesn't work yet after a crash. To fix this, Ife is trying to implement [Tus](https://tus.io) fingerprint storing in RN (as LocalStorage isn't available there). He'll first finish [support for Node.js](https://github.com/tus/tus-js-client/pull/73/files) and then add [React Native support for tus-js-client](https://github.com/tus/tus-js-client#react-native-support).
-- Artur is working on making our RN example better to look at, showcasing a real progress bar, nice buttons for Pause & Resume, as well as a first iteration on file previews. He'll also be pushing out a release with recent fixes, and give Evgenia's early work a smooth landing.
-- Renée is writing tests to accomodate the change for [better progress reporting](https://github.com/transloadit/uppy/pull/1376) and has started on Transloadit Assembly Cancellation.
-- We're looking at a potentially [big problem](https://github.com/tus/tus-js-client/issues/146) when using tus-js-client inside React Native for large files, stay tuned!
-- Evgenia is working on the dashboard, improving how file previews are justified and testing browser compatibility.
-- [Alex Kolodko](https://github.com/alexkolodko) (yes, that is indeed a different [Alex](https://github.com/nqst) :smile:) has been drafting up some sketches for an iteration on our logo:
-
-<center><img width="400" src="/uppy/images/blog/30daystoliftoff/2019-04-liftoff-07c.png"></center>
-
-And that's all the news we have for you today! Catch up with us [tomorrow](/blog/2019/04/liftoff-08/) for more progress on our 30 Days to Liftoff! And of course, if you want to make sure you're not missing out on anything, feel free to subscribe to our [RSS feed](/uppy/atom.xml) :rocket:

+ 0 - 55
website/src/_posts/2019-04-liftoff-08.md

@@ -1,55 +0,0 @@
----
-title: "Day 8"
-date: 2019-04-02
-author: samuel
-image: "/uppy/uppy/images/blog/30daystoliftoff/day08.jpg"
-series: 30 Days to Liftoff
-seriesSuffix: 'of 30'
----
-
-Welcome to Day 8 of our ongoing thirty-day blog post challenge toward the **Uppy 1.0 release on April 25**! Yesterday was the 1st of April, but we had no time for fooling around! The entire team was present for our weekly call, which was again fully dedicated to discussing Uppy progress.
-
-<center><img width="400" src="/uppy/images/blog/30daystoliftoff/day08.jpg"><br /><br /></center>
-
-During the call, a lot of cards were moved from the *To Do* lane into the *In Progress* lane — and some are even already *Done*. We also added a few *New* tasks mostly related to language packs for Uppy, where we'll be asking our own team members to update a locale of their own language. We hope other languages will be picked up by the community! 
-
-<!--more-->
-
-This is what our board currently looks like:
-
-<center><img src="/uppy/images/blog/30daystoliftoff/2019-04-board.png"><br /><br /></center>
-
-
-Let's take a look at the updates we can share with you today.
-
-## Done
-
-- [Artur](https://transloadit.com/about/#artur) merged this [PR](https://github.com/transloadit/uppy/pull/1393) which removed the use of `window.location` from Companion's client, courtesy of [Ife](https://transloadit.com/about/#ife).
-- [Alex](https://transloadit.com/about/#alex) improved the design of the drag-to-upload stage. <br />
-
-Before:<br />
-<center><img width="400" src="/uppy/images/blog/30daystoliftoff/2019-04-02-before.png"></center>
-After:<br />
-<center><img width="400" src="/uppy/images/blog/30daystoliftoff/2019-04-02-after.png"></center>
-
-- [Evgenia](https://github.com/lakesare) made sure that [file previews now form an even spread](https://github.com/transloadit/uppy/pull/1398) across the width of the dashboard.
-
-## In Progress
-
-- We are currently investigating an [issue](https://github.com/tus/tus-js-client/issues/146) with `tus-js-client`, which affects uploads where the file size is larger than 500MB. Artur is now trying to execute a 600MB upload and then see if it crashes. After that, he will set chunkSize, test the upload again, and report back his findings so we can evaluate our next steps.
-
-- We are also doing more research on `tus-js-client` fingerprints. Since these are identical for each file on React Native, the team is figuring out how to properly identify files on that platform, because [the standard file properties that tus-js-client relies on](https://github.com/tus/tus-js-client/blob/master/lib/node/fingerprint.js) are not available.
-
-- We have our first WIP screenshot for the React Native implementation:
-
-<center><img width="400" src="/uppy/images/blog/30daystoliftoff/2019-04-02-wip-react-native.png"></center>
-
-- [Abdel](https://transloadit.com/about/#abdel) is busy fixing the serverless examples where WebSockets are terminated when Uppy is deployed to Lambda
-
-- Evgenia is working on applying for [Browserstack](https://www.browserstack.com/open-source?ref=pricing)'s open source program, so we can hopefully test Uppy even more and make sure that 1.0 is without any issues.
-
-- Ife is writing tests for the implementation of the `tus-js-client` URL storage.
-
-That's all the updates I have for you today. See you tomorrow for [Day 9](/blog/2019/04/liftoff-09/) of our 30 Days to Liftoff!
-
-P.S. If you don't want to miss an update, you might like to subscribe to our [RSS feed](/uppy/atom.xml) :)

+ 0 - 51
website/src/_posts/2019-04-liftoff-09.md

@@ -1,51 +0,0 @@
----
-title: "Day 9"
-date: 2019-04-03
-author: tyler
-image: "/uppy/uppy/images/blog/30daystoliftoff/day09.jpg"
-series: 30 Days to Liftoff
-seriesSuffix: 'of 30'
----
-
-<!--lint disable no-undefined-references-->
-
-The entire team is starting to get into its groove as the Uppy channel in our Slack workspace is looking livelier than ever. Let's dive straight into Day 9 of our 30 Days to Liftoff!
-
-<center><img width="400" src="/uppy/images/blog/30daystoliftoff/day09.jpg"><br /><br /></center>
-
-Everyone is moving at a comfortable pace, working on the various *In Progress* cards sitting neatly on our Uppy board, so here's a quick update on the progress towards **Uppy 1.0, coming April 25**!
-
-<!--more-->
-
-## Done
-
-Tasks completed by the team since yesterday's update include:
-
-- Our React Native team (that's [Artur](https://github.com/arturi), [Ife](https://github.com/ifedapoolarewaju), and [Kevin](https://github.com/kvz)) has been working together most of the day and gave an update on the current completed features for implementing Uppy support. Here's a list of completed tasks directly from the team:
-    - [x] Make the 'Import from URL' example work in RN
-    - [x] Give it its own UI, (re)written for RN
-    - [x] Make websocket progress from Companion work (see: <https://facebook.github.io/react-native/docs/network#websocket-support>)
-    - [x] Have an example with buttons for resumability and a progress bar
-    - [x] Have 20 min resumability support, proof that fingerprinting works for different local file uploads, fix it if not
-
-- A [feature](https://github.com/transloadit/uppy/pull/1367) was submitted by [Andrew Shini](https://github.com/superandrew213) that involving checking for existing uploads before uploading anything, which has been necessary for his custom dashboard. Artur and [Renée](https://github.com/goto-bus-stop) will be reviewing it. A big thank you to the open source community for making contributions!
-
-## In Progress
-
-Meanwhile, on the progress side of things:
-
-- [Abdel](https://github.com/Kiloreux) has started working on a [Glitch](https://glitch.com/) demo involving Companion, so users can have an even easier time utilizing our services. He's also working on fixing up the Serverless example (running Companion on AWS Lambda) which was once contributed by the community but hasn't been workin for a long time :scream:
-
-- Renée is going to spend the day on getting Transloadit Assemblies to actually cancel when the Cancel button in the UI is pressed. As it stands, the upload cancels, but the Assembly keeps running until it eventually times out by itself.
-
-- [Tim](https://github.com/tim-kos) has started working on fixing an API problem that caused one of our end-to-end tests to intermittently fail and eventually turn off entirely.
-
-- Finally, the React Native team has already completed an impressive amount of tasks, but they aren't slowing down anytime soon. Development marches on as the team begins tackling the following tasks:
-    - [ ] Add basic file preview to react native example. Can use `file.uri` for images, can use icons for `file.type===video/audio/document` (Artur Paikin)
-    - [ ] Release Uppy (add inline customFingerPrint & AsyncStorage for now, we'll remove customFingerPrint later, once tus-js-client is in good shape) (Artur Paikin)
-    - [ ] Test fingerprinting for Audio, Document (Artur Paikin)
-    - [ ] Add customFingerPrint & hashCode into Ife's tus-js-client branch, add tests, get it into shape for Marius to review (Ifedapo Olarewaju)
-
-Come Thursday, they'll be having another call to discuss their completed work so far and map out the remaining RN tasks from there. I'm looking forward to sharing more details on that call soon!
-
-The first third of our thirty-day challenge ends tomorrow with [Day 10](/blog/2019/04/liftoff-10/). Look forward to more updates (and pictures of dogs in space) tomorrow and, as usual, don't forget about our [RSS feed](/uppy/atom.xml) :dog:

+ 0 - 40
website/src/_posts/2019-04-liftoff-10.md

@@ -1,40 +0,0 @@
----
-title: "Day 10"
-date: 2019-04-04
-author: tyler
-image: "/uppy/uppy/images/blog/30daystoliftoff/day10.jpg"
-series: 30 Days to Liftoff
-seriesSuffix: 'of 30'
----
-
-Today marks the tenth day in our 30 Days to Liftoff! **April 25** is still in our sights as we work towards the **Uppy 1.0** release. The end of the working week is almost upon us, but there's no sign of slowing down yet.  
-
-<center><img width="400" src="/uppy/images/blog/30daystoliftoff/day10.jpg"><br /></center>
-
-Things are looking up(py) on our project board as the team has been working on tasks at a steady pace. A quick status update will give us a little insight into how things are going concerning all things Uppy.
-
-<!--more-->
-
-## In Progress
-
-- [Alex](https://github.com/nqst), [Evgenia](https://github.com/lakesare) and [Artur](https://github.com/arturi) are debugging the [flickering on Drag & Drop](https://github.com/transloadit/uppy/pull/1400) that Chrome and Safari users suffer from. Fingers crossed for a solution!
-
-- Artur, working on the React Native side of things, has impressively added [file previews and tested hashes with different file types](https://github.com/transloadit/uppy/pull/988). After some more testing is complete, he'll move on to releasing a new version of Uppy. In addition, the React Native team has reschedulded their pair programming session to Friday, so expect some pretty significant updates tomorrow!
-
-- [Kevin](https://github.com/kvz) started working on the [new documentation menu structure](https://github.com/transloadit/uppy/pull/1405) for the site and we can already show a [live example](https://5ca5233bfd8bcc00085152a8--uppy.netlify.com/docs/)of it. Take a look at the main differences below:
-
-<center><img width=400 src="/uppy/images/blog/30daystoliftoff/2019-04-04-docs.png"><br /><br /></center>
-
-## Done
-
-- If you've been keeping up with our posts, you might notice the navigator at the top of the page looks a little different than usual. That is because Alex has been on a roll and [updated the navigator](https://github.com/transloadit/uppy/pull/1403) for our blogposts.
-
-- [Ife](https://github.com/ifedapoolarewaju)'s fix for [hanging instagram uploads](https://github.com/transloadit/uppy/pull/1274) was merged into Uppy's master branch. One more bug squashed!
-
-- One small chore was done by [Renée](https://github.com/goto-bus-stop), involving [adding git to the Companion dockerfile](https://github.com/transloadit/uppy/pull/1404), which was needed to install tus-js-client and ensure Companion could be deployed successfully on our continuous integration server.
-
-While not strictly related to our Uppy 1.0 release, we have managed to reach over 6000 commits to our master branch and 99 contributors in the [Uppy repo](https://github.com/transloadit/uppy). We would like to give a huge thank you to everyone offering their support!
-
-<center><img src="/uppy/images/blog/30daystoliftoff/2019-04-04.png"><br /></center>
- 
-On that note, Day 10 of our thirty-day challenge comes to an end. Friday looks like it will be another exciting day, so don't hesitate to keep checking up on us via [Twitter](https://twitter.com/uppy_io) or [RSS](/uppy/atom.xml)!

+ 0 - 48
website/src/_posts/2019-04-liftoff-11.md

@@ -1,48 +0,0 @@
----
-title: Day 11
-date: 2019-04-05
-author: samuel
-image: /uppy/uppy/images/blog/30daystoliftoff/day11.jpg
-series: 30 Days to Liftoff
-seriesSuffix: of 30
----
-
-And another week bites the dust! With the weekend right around the corner, we're busy getting as much as possible done before heading off for some well-deserved rest & relaxation. Here is what we've been up to!   
-
-<center><img width="400" src="/uppy/images/blog/30daystoliftoff/day11.jpg"><br /></center>
-
-<!--more-->
-
-## New
-
-- [Alex](https://github.com/nqst) is test driving Uppy('s accessibility) in many different browsers and already uncovered [many issues](https://github.com/transloadit/uppy/issues/created_by/nqst) in some naughty browsers. Hope we'll manage to fix all of them before April 25!
-
-## In Progress
-
-- [Artur](https://github.com/arturi) is working on preparing the changelog for Uppy v. 0.30.4 and releasing it as soon as possible. More news about the 0.30.4 release can be found in the _Done_ section.
-
-- Our React Native team (that's [Artur](https://github.com/arturi), [Ife](https://github.com/ifedapoolarewaju), and [Kevin](https://github.com/kvz)) have been pairing again and determined there are only a few things left to do:
-
-    - Add customFingerPrint & hashCode into Ife's tus-js-client branch, add tests, and get it into shape for [Marius](https://github.com/acconut) to review
-    - UI tweaks (close button for Import, reporting errors)
-    - File preview icon for non-image files
-
-- They also discussed a few non-React Native things:
-
-  - Large file support
-  - Companion XHR Uploads should report download progress towards client-side-reported upload progress
-  - When you upload to api2.transloadit.com with XHR, it seems the API does not block and responds with 200 before the upload is really done (MAYBE :o). This results in a bad Uppy state without a progress bar.
-
-## Done
-
-- We released a new version of Uppy. While it isn’t 1.0 just quite yet, this is another step in the right direction. Uppy `0.30.4` features fixes for `allowSyntheticImports`, Typescript typings, issues when using Companion Client for remote AWS-S3 uploads, and using websockets and console.dir in React Native.
-
-- Artur and [Renée](https://github.com/goto-bus-stop) reviewed and merged a [PR](https://github.com/transloadit/uppy/pull/1360) that allows a user to customize the status of an upload in Uppy. Thanks to Mactavish for contributing!
-
-- [Abdel](https://github.com/kiloreux) [fixed the Serverless example](https://github.com/transloadit/uppy/pull/1408) for running Companion on AWS Lambda.
-
-- [Kevin](https://github.com/kvz) finished up his work on the [new documentation menu structure](https://github.com/transloadit/uppy/pull/1405) that we talked about [yesterday](/blog/2019/04/liftoff-10/). 
-
-
-That’s it. All the updates I have for you today. Have a great [weekend](/blog/2019/04/liftoff-12/) everyone! And if you don’t want to miss a post, keep tabs on our [Twitter](https://twitter.com/uppy_io) or [RSS](/uppy/atom.xml) feed.
-

+ 0 - 16
website/src/_posts/2019-04-liftoff-12.md

@@ -1,16 +0,0 @@
----
-title: "Day 12"
-date: 2019-04-06
-author: aj
-image: "/uppy/uppy/images/blog/30daystoliftoff/discodog.jpg"
-series: 30 Days to Liftoff
-seriesSuffix: 'of 30'
----
-
-Hey guys! How is your Saturday treating you so far? We are focusing today on meeting friends and having fun, and taking our minds off all Uppy-related things for just a few days. To give you an idea of what we're up to tonight, check out this groovy GIF:
-
-<!--more-->
-
-<center><img width="400" src="https://media.giphy.com/media/k2Da0Uzaxo9xe/giphy.gif"><br/><br/></center>
-
-We won't have much in terms of real news to share over the weekend, but we'll be back in full force on [Monday](/blog/2019/04/liftoff-14/)! In the meantime, we hope you have a great day! And see you tomorrow for another weekend update in our 30 Days to Liftoff!

+ 0 - 17
website/src/_posts/2019-04-liftoff-13.md

@@ -1,17 +0,0 @@
----
-title: "Day 13"
-date: 2019-04-07
-author: aj
-image: "/uppy/uppy/images/blog/30daystoliftoff/discodog.jpg"
-series: 30 Days to Liftoff
-seriesSuffix: 'of 30'
----
-
-Shh, it's Sunday, Uppy is sleeping in today :sleeping: We'll be taking the day off as well, as we gear up to go full throttle again in the morning. There's still a lot to do before the **Uppy 1.0 launch on April 25**. In the meantime, why don't you join us in letting sleeping dogs lie.
-
-<!--more-->
-
-<center><img width="400"  src="https://media.giphy.com/media/26n6UOQke3xCpsbWo/giphy.gif"><br/><br/></center>
-
-We hope this drowsy puppy inspires you to have a great and relaxing remainder of your weekend. We'll have a lot more to share with you tomorrow, so see you on [Day 14](/blog/2019/04/liftoff-14/) of our 30 Days to Liftoff!
-

+ 0 - 42
website/src/_posts/2019-04-liftoff-14.md

@@ -1,42 +0,0 @@
----
-title: "Day 14"
-date: 2019-04-08
-author: kvz
-image: "/uppy/uppy/images/blog/30daystoliftoff/day14.jpg"
-series: 30 Days to Liftoff
-seriesSuffix: 'of 30'
----
-
-Today marks the fourteenth day in our '30 Days to Liftoff' blog post challenge, working our way towards **launching Uppy 1.0 on April 25**. It's the beginning of a new week and there is much to be done. The Uppy team is already firing on all cylinders and we also have some developments to share from before the weekend.
-
-<!--more-->
-
-Let's jump right in!
-
-<center><br /><img width="400" src="/uppy/images/blog/30daystoliftoff/day14.jpg"><br /></center>
-
-## Done
-
-- [Renée](https://github.com/goto-bus-stop) finished work on [canceling Transloadit Assemblies](https://github.com/transloadit/uppy/pull/1431) when you abort uploads.
-
-- [Artur](https://github.com/arturi) published the [CHANGELOG for 0.30.4](https://github.com/transloadit/uppy/commit/845369f0e56b49ab51d4d01909dfdac6f60b1748), which was a bit more work to figure out now that the whole Transloadit team is piling commits onto `master` :scream: We also completed a few smaller tasks, such as fixing an issue with our build scripts and updating the Companion docs.
-
-## Done for React Native
-
-This is a pretty big one! [Ife](https://github.com/ifedapoolarewaju) and Artur delivered on the bare essentials for React Native. In our local tests, this means we can now successfully pick different files, have their uploads resume where they left off, select a remote file via Companion (for now, only picking from URL is supported) and see the progress reported by it. 
-
-There is a basic UI, most of which is encapsulated in the example that we'll publish on our website. We're refraining from building too much UI in our React Native module, as we assume that developers will want to have full control and style everything close to their app. We figured they would care most about seeing a good example and having access to core functionality, such as making mobile uploads more reliable and less draining on batteries and data plans. 
-
-While there are still things to be implemented, such as picking files from Instagram, we now know that we have all the Lego bricks required and that they are doing what they're supposed to. Now, it's just a matter of fleshing out those integrations, but we'll have to see whether we can get to that before 1.0. We're already happy about having a fixed idea about the API and a basic working example as our deliverables!
-
-## In Progress
-
-- [Alex](https://github.com/nqst) is working on improving the Uppy design (in the code) in his `design-facelift` branch
-
-- [Evgenia](https://github.com/lakesare) is working on improving accessibility together with Alex, who found many issues that we still need to fix in this area.
-
-- Now that the bare essentials of React Native work, Ife is making sure our local work finds a proper place in the tus-js-client (such as React-Native-compatible fingerprinting) while Artur hopes to find the time to tick off a few design goals to make for a better experience testdriving our example. Things like icons for files that are not images and a _Close_ button for the select file screen.
-
-- The whole team will again do a call this afternoon to reassess our roadmap and see where all we stand. Some new tasks were added on [Friday](/blog/2019/04/liftoff-11/), so we'll also have to see about getting those into gear.
-
-That's it for Day 14. Tomorrow, it will be Samuel's turn again to update you on our board and progress. Subscribe via [Twitter](https://twitter.com/uppy_io) or [RSS](/uppy/atom.xml) and don't miss out on [Day 15](/blog/2019/04/liftoff-15/)! :dog:

+ 0 - 45
website/src/_posts/2019-04-liftoff-15.md

@@ -1,45 +0,0 @@
----
-title: "Day 15"
-date: 2019-04-09
-author: samuel
-image: "/uppy/uppy/images/blog/30daystoliftoff/rockdog.jpg"
-series: 30 Days to Liftoff
-seriesSuffix: 'of 30'
----
-
-:musical_note: Woah, we're halfway there! Take our paw, we'll make it we swear! :notes: That's fifteen down and fifteen more to go. Great to have you along for the ride as we move ever closer towards **launching Uppy 1.0 on April 25**. 
-
-Let's see what is Uppy today!
-
-<center><br /><img width="400" src="/uppy/images/blog/30daystoliftoff/rockdog.jpg"><br /></center>
-
-<!--more-->
-
-## Weekly project board update
-
-We had our weekly call yesterday, during which we re-evaluated the Uppy 1.0 project board. We were able to move a few tasks to the _Done_ lane and got some new tasks _In Progress_. One of the features we're ready to start working on - which I am particularly interested in - is language pack support. Uppy 1.0 might be coming out in your local language! While we only have the capacity within our team to take care of a select few languages (English, French, Russian, Ukrainian, German, and Dutch) we will support as many as possible and hope that the community will add many more. 
-
-Here is a view of what our Asana board looks like this week:
-
-<center><br /><img src="/uppy/images/blog/30daystoliftoff/2019-04-09-asana-board.png"><br /></center>
-
-
-## Done
-
-- [Evgenia](https://github.com/lakesare) investigated an [issue](https://github.com/transloadit/uppy/pull/1400#issuecomment-481039845) concerning a bug in Webkit browsers that resulted in the window blinking frequently.
-
-- [Samuel](https://github.com/samuelayo) added another [example](https://github.com/transloadit/uppy/pull/1389) for using Uppy with XHR uploads to a PHP backend.
-
-
-## In Progress
-
-- [Renée](https://github.com/goto-bus-stop) is working on the Robodog Dashboard, so that it can also be depicted right inside the webpage, instead of showing as a modal popup window.
-
-- Evgenia is focused on improving accessibility together with [Alex](https://github.com/nqst), who found many issues that we still need to fix in this area.
-
-- [Artur](https://github.com/arturi) is currently working on a React Native example UI. We will update you once it is ready! 
-
-- Alex is also still actively working on making design improvements for Uppy. You can follow his progress [here](https://github.com/nqst/uppy/commits/design-facelift).
-
-
-And that's Day 15! Tyler will be here again [tomorrow](/blog/2019/04/liftoff-16/) to give you more updates on our launch preparations. Subscribe via [Twitter](https://twitter.com/uppy_io) or [RSS](/uppy/atom.xml), so you'll never miss out!

+ 0 - 39
website/src/_posts/2019-04-liftoff-16.md

@@ -1,39 +0,0 @@
----
-title: "Day 16"
-date: 2019-04-10
-author: tyler
-image: "/uppy/uppy/images/blog/30daystoliftoff/day16.gif"
-series: 30 Days to Liftoff
-seriesSuffix: 'of 30'
----
-
-Two weeks left in our '30 Days to Liftoff'! We're starting to home in on **Uppy 1.0's release on April 25**. Being in the middle of the week gives us a great opportunity to see how hard the team is working. Let's take a look at the new features, bug fixes and milestones that have been completed! :dog:
-
-<center><br /><img width="400" src="/uppy/images/blog/30daystoliftoff/day16.gif"><br /><br /></center>
-
-Reminder: you can keep up with our [CHANGELOG](https://github.com/transloadit/uppy/blob/master/CHANGELOG.md) to see everything else we intend to complete for the official Uppy 1.0 release.
-
-<!--more-->
-
-## Done
-
-- [Evgenia](https://github.com/lakesare) continues working on the [peculiar flickering issue](https://github.com/transloadit/uppy/pull/1400#issuecomment-481039845) in our Dashboard example. While it was tricky at first, a (temporary) hotfix has now been applied. A more in-depth update is coming after 1.0 :smile:
-
-- The [first contribution](https://github.com/transloadit/uppy/pull/1436) in our sprint coming from outside the Uppy team was added by [Zeqiu](https://github.com/allenfantasy). It concerns events being fired when an uploaded file fails a restriction check. With this feature, it will be a lot easier to know which file has been restricted from upload and why. 
-
-- And the [second outside contribution](https://github.com/transloadit/uppy/pull/1429) comes from [Andreas](https://github.com/ap--), who fixed an issue involving the use of both tus and the limit parameter to set a maximum number of parallel uploads. 
-
-Big shout out to both!
-
-## In Progress
-
-- The React Native team has their pairing session at 14:00 today, during which they will work on [React Native support](https://github.com/transloadit/uppy/pull/988) for Uppy, [tus-js-client](https://github.com/tus/tus-js-client) and [Companion](https://github.com/transloadit/uppy/tree/master/packages/@uppy/companion).
-    - [Artur](https://github.com/arturi) will be working on tweaking the React Native UI and dealing with file preview icons for non-image files. He has also been working on refactoring some of the code to make things much tidier.
-    - [Ife](https://github.com/ifedapoolarewaju) will be integrating fingerprinting and hash code support [into tus-js-client](https://github.com/tus/tus-js-client/pull/73).
-    - If the team has the time, they will also look into large file support, upload and download reporting for Companion XHR uploads, and an issue concerning XHR uploads with the [Transloadit API](https://transloadit.com/docs/api/).
-
-- [Alex](https://github.com/nqst) continues improving Uppy's UI and has recently been refactoring CSS code, while Evgenia keeps charging at the [many accessibility issues](https://github.com/transloadit/uppy/issues/created_by/nqst) that are still open.
-
-In addition to getting Uppy 1.0 out of the dog house, I mentioned that the team is already talking about features and fixes to tackle after 1.0. If you look at our [CHANGELOG](https://github.com/transloadit/uppy/blob/master/CHANGELOG.md), you'll notice some 1.1 todos in there. There's always room for improvement, so now you have something to look forward to after Uppy 1.0 hits the web! :wink:
-
-That's all from me today. Stay in the loop with us on [Twitter](https://twitter.com/uppy_io) or [RSS](/uppy/atom.xml) for more Uppy updates. [Day 17](/blog/2019/04/liftoff-17/)  is coming up next!

+ 0 - 43
website/src/_posts/2019-04-liftoff-17.md

@@ -1,43 +0,0 @@
----
-title: "Day 17"
-date: 2019-04-11
-author: samuel
-image: "/uppy/uppy/images/blog/30daystoliftoff/day17.jpg"
-series: 30 Days to Liftoff
-seriesSuffix: 'of 30'
----
-
-It's day 17 already of our '30 Days to Liftoff' blog post challenge and the **launch of Uppy 1.0 on April 25** is coming closer by the day. The Uppy team is dealing with the big tasks now, so the updates might seem a little scant!
-
-<center><br /><img width="400" src="/uppy/images/blog/30daystoliftoff/day17.jpg"><br /><br /></center>
-
-<!--more-->
-
-## Done
-
-- [Artur](https://github.com/arturi) updated the [React Native](https://github.com/transloadit/uppy/pull/988) UI example. This is what the new UI looks like:
-
-<center><img width="400" src="/uppy/images/blog/30daystoliftoff/2019-04-11-react-native-ui-1.png"></center>
-<center><img width="400" src="/uppy/images/blog/30daystoliftoff/2019-04-11-react-native-ui-2.png"></center>
-<center><img width="400" src="/uppy/images/blog/30daystoliftoff/2019-04-11-react-native-ui-3.png"></center>
-
-- [Alex](https://github.com/nqst) updated the focus styles on the Uppy Dashboard, making it look quite a bit sleeker than it did before. Here's a before and after view of the Dashboard focus styles:
-
-Before:<br />
-<center><img width="400" src="/uppy/images/blog/30daystoliftoff/2019-04-11-before-focus.gif"></center>
-After:<br />
-<center><img width="400" src="/uppy/images/blog/30daystoliftoff/2019-04-11-after-focus.gif"></center>
-
-
-## In Progress
-
-- Artur is reviewing PRs, reporting errors and testing Uppy in response to the team’s feedback. 
-
-- Alex continues improving Uppy's UI and has recently been refactoring CSS code, while [Evgenia](https://github.com/lakesare) keeps charging at the [many accessibility issues](https://github.com/transloadit/uppy/issues/created_by/nqst) that are still open.
-
-- Evgenia is also working on the new drag/drop implementation, which will include a new _Drop Here_ placeholder and not experience any flickering. And as if that weren't enough, she is having a go at `drop folder` support for cross-browser compatibility as well, so that it won’t be relying on DOM manipulation in our Preact components.
-
-- [Ife](https://github.com/ifedapoolarewaju) is updating this [PR](https://github.com/tus/tus-js-client/pull/73), which deals with supporting resumability for Node.js environments.
-
-
-That's all from us today. As I mentioned, we are now focusing on the big tasks and as a result, our daily list of updates might sometimes be a little shorter than usual. Remember to keep tabs on our [Twitter](https://twitter.com/uppy_io) or [RSS](/uppy/atom.xml) for more Uppy updates. [Day 18](/blog/2019/04/liftoff-18/) is coming up next!

+ 0 - 28
website/src/_posts/2019-04-liftoff-18.md

@@ -1,28 +0,0 @@
----
-title: "Day 18"
-date: 2019-04-12
-author: kvz
-image: "/uppy/uppy/images/blog/30daystoliftoff/day18.jpg"
-series: 30 Days to Liftoff
-seriesSuffix: 'of 30'
----
-
-Hi! You're reading our '30 Days to Liftoff' blog post challenge about the **launch of Uppy 1.0 on April 25**. Here's what we've been up to since yesterday's progress update.  
-
-<center><br /><img width="400" src="/uppy/images/blog/30daystoliftoff/day18.jpg"><br /><br /></center>
-
-<!--more-->
-
-- [Ife](https://github.com/ifedapoolarewaju) addressed all of [Marius'](https://github.com/Acconut) feedback towards [having React-Native-compatible fingerprinting](https://github.com/tus/tus-js-client/pull/73) in tus-js-client.
-
-- [Artur](https://github.com/arturi) and [Alex](https://github.com/nqst) had a call where they discussed Alex’s design improvements, and Alex's [Design Facelift PR](https://github.com/transloadit/uppy/pull/1442) is now ready to be reviewed and merged :tada:
-
-- Artur iterated on [Samuel's](https://github.com/samuelayo) [XHR backend examples](https://github.com/transloadit/uppy/pull/1389).
-
-- Ife, Artur, Alex and Marius are chasing down an issue where appending form fields is [causing 423 responses from tusd](https://github.com/tus/tusd/issues/259). Marius already pushed out a number of fixes as a result and released a new version of tus-js-client (1.7.1).
-
-- Artur and [Kevin](https://github.com/tim-kos) paired up to create a new structure for [Locale Packs](https://github.com/transloadit/uppy/pull/1443). The `en_US` locale is now generated from whatever strings where used in Uppy's plugins, so other languages can use it as a reference. There will also be reporting on unused strings.
-
-- [Evgenia](https://github.com/lakesare) continues to charge at fixing Drag & Drop issues, and [Renée](https://github.com/goto-bus-stop) is working on making the Robodog Dashboard work inline (as well as a popup).
-
-Hope you'll have a great weekend and see you on [Monday](/blog/2019/04/liftoff-21/) for another real update on the 1.0 launch preparations! We'll of course also have a few more light-hearted posts in the meantime for you, so be sure to check those out as well :slightly_smiling_face: Keep tabs on [@uppy_io](https://twitter.com/uppy_io) or [RSS](/uppy/atom.xml) for more Uppy updates!

+ 0 - 16
website/src/_posts/2019-04-liftoff-19.md

@@ -1,16 +0,0 @@
----
-title: "Day 19"
-date: 2019-04-13
-author: aj
-image: "/uppy/uppy/images/blog/30daystoliftoff/dogdj.jpg"
-series: 30 Days to Liftoff
-seriesSuffix: 'of 30'
----
-
-Hey DJ, turn the music Uppy! We're taking a few well-deserved days off from chasing tasks and issues (and cats, of course) to get our feet up on the dance floor and enjoy a drink or two. We hope you are doing the same! Here's a record-breaking Wiener to get you in the mood:
-
-<!--more-->
-
-<center><img width="400" src="https://media.giphy.com/media/rdAeOA3mfXomQ/giphy.gif"><br/><br/></center>
-
-That means no news today or tomorrow, but you can expect us to be back at the 1.0 grindstone on [Monday](/blog/2019/04/liftoff-21/)! Have an awesome Saturday! And see you tomorrow for another little tidbit in our 30 Days to Liftoff!

+ 0 - 17
website/src/_posts/2019-04-liftoff-20.md

@@ -1,17 +0,0 @@
----
-title: "Day 20"
-date: 2019-04-14
-author: aj
-image: "/uppy/uppy/images/blog/30daystoliftoff/coffeedog.jpg"
-series: 30 Days to Liftoff
-seriesSuffix: 'of 30'
----
-
-And on the seventh day, Uppy rested :angel: We, too, will be spending this day in quiet contemplation (and most certainly not by sleeping off yesterday's escapades). So if there isn't anything else you need us for, we'll be grabbing our blankets and heading back to bed:
-
-<!--more-->
-
-<center><img width="400"  src="https://media.giphy.com/media/xC5LOq3LMQmqs/giphy.gif"><br/><br/></center>
-
-Feel free to hit that snooze button a few more times yourself, before enjoying the remainder of your weekend. We'll see you back tomorrow on [Day 21](/blog/2019/04/liftoff-21/), when we'll have some more real news to share as we head into the final stretch of our 30 Days to Liftoff!
-

+ 0 - 34
website/src/_posts/2019-04-liftoff-21.md

@@ -1,34 +0,0 @@
----
-title: "Day 21"
-date: 2019-04-15
-author: tyler
-image: "/uppy/uppy/images/blog/30daystoliftoff/day21.jpg"
-series: 30 Days to Liftoff
-seriesSuffix: 'of 30'
----
-
-We're reaching the final stretch of our '30 Days to Liftoff' blog post challenge. After a refreshing weekend, the entire team is ready to give it their all over the next ten days to ensure that **Uppy 1.0 reaches its April 25** release date.
-
-<center><br /><img width="400" src="/uppy/images/blog/30daystoliftoff/day21.jpg"><br /><br /></center>
-
-Since we're starting the week strong and prepared, let's take a quick glance at how our Uppy dashboard is looking.
-
-<!--more-->
-
-<center><img width="" src="/uppy/images/blog/30daystoliftoff/15-dashboard.png"><br/><br/></center>
-
-There are still a few unique, and possibly daunting, tasks left for the remainder of the development cycle, but the team is taking each issue in stride and adding features with ease.
-
-- [Ife](https://github.com/ifedapoolarewaju) [fixed a bug](https://github.com/transloadit/uppy/commit/9f02d749b9aa4095e5871713ea2f25a716a21539) on the React Native side of things to get rid of an error that was present on one of our Android examples. Additionally, he made some name changes in a number of files — changing `serverUrl` to `companionUrl` and `serverPattern` to `companionAllowedHosts`.
-
-- [Artur](https://github.com/arturi) and [Kevin](https://github.com/kvz) will continue pairing on [language packs](https://github.com/transloadit/uppy/pull/1443) throughout today.
-
-- Ife is also still tackling the [large file size upload issue](https://github.com/tus/tus-js-client/issues/146) we're having with React Native. He managed to find the source of the issue, but Both Ife and [Marius](https://github.com/Acconut) will be investigating how best to move on from here.
-
-- [Renée](https://github.com/goto-bus-stop) continues working on making Robodog work with an inline dashboard. They plan to have a demo and documentation up and running sometime today.
-
-- The [drag and drop improvements](https://github.com/transloadit/uppy/pull/1440) being made by [Evgenia](https://github.com/lakesare) will also continue today, with some of her current improvements being the removal of the flickering issue and a nicer background design while using the feature.
-
-- [Alex](https://github.com/nqst) [discovered an issue](https://github.com/transloadit/uppy/issues/1447) with the filter field when using Google Drive on the Dashboard.
-
-Our goal is in sight, so we're starting to get pretty excited! Keep us in your thoughts by giving us a follow on [Twitter](https://twitter.com/uppy_io) or subscribing to regular updates on [RSS](/uppy/atom.xml). [Day 22](/blog/2019/04/liftoff-22/) is up next, so you can look forward to another lovely post from Kevin!

+ 0 - 41
website/src/_posts/2019-04-liftoff-22.md

@@ -1,41 +0,0 @@
----
-title: "Day 22"
-date: 2019-04-16
-author: kvz
-image: "/uppy/uppy/images/blog/30daystoliftoff/day22.png"
-series: 30 Days to Liftoff
-seriesSuffix: 'of 30'
----
-
-We will launch **Uppy 1.0 on April 25** and this is our '30 Days to Liftoff' blog post challenge where we share updates on our progress each day! Let's see what happened on Day 22.
-
-<center><br /><img width="400" src="/uppy/images/blog/30daystoliftoff/day22.png"><br /><br /></center>
-
-<!--more-->
-
-- [Artur](https://github.com/arturi) and [Kevin](https://github.com/kvz) have been pairing on [language packs](https://github.com/transloadit/uppy/pull/1443) and are nearly done with it. Très bien, magnifique!
-
-<center><img src="/uppy/images/blog/30daystoliftoff/localetodos.png"><br/><br/></center>
-
-After this, it will be just as easy to maintain language/locale packs as it will be to switch Uppy to your favorite language. Fun fact: we experimented a bit with Google Sheets and Google Translate to automatically create a first swing for a few of the languages we want to launch with.
-
-<center><a rel="noreferrer noopener" target="_blank" href="/uppy/images/blog/30daystoliftoff/sheetstranslate.png"><img src="/uppy/images/blog/30daystoliftoff/sheetstranslate.png"></a></center>
-
-It kinda worked! Google automatically translates to target languages in each column we add, for each change we make in the original! In the end, though, we decided this was not the way to go, as it really didn't save us any time. As it turns out, starting from a good English version of the text is _way_ easier than making sense of a broken Google translation. It was a fun experiment nonetheless and it's cool to see where this is all heading!
-
-Artur will also be reviewing the many PRs that have been submitted by both Transloadians and outside contributors.
-
-- [Alex](https://github.com/nqst) finished his redesign for the new website:
-
-<center><a rel="noreferrer noopener" target="_blank" href="/uppy/images/blog/30daystoliftoff/webdesign2.png"><img src="/uppy/images/blog/30daystoliftoff/webdesign2.png"></a></center>
-
-..and will start implementing it today! He also worked on more [design improvements for Uppy itself](https://github.com/transloadit/uppy/pull/1452).
-
-- [Ife](https://github.com/ifedapoolarewaju) is investigating incorrect progress reporting / uploads with XHR and Companion.
-
-- [Renée](https://github.com/goto-bus-stop) finished work on making Robodog work with an [inline dashboard](https://github.com/transloadit/uppy/pull/1450), as well as fix a bug in how we log to the console. Up next, Renée will work on error reporting for the Transloadit Plugin.
-
-- [Evgenia](https://github.com/lakesare) finished her work on [drag and drop improvements](https://github.com/transloadit/uppy/pull/1440) and will continue working on accessibility improvements.
-
-
-Stay current by following us on [Twitter](https://twitter.com/uppy_io) or subscribing to regular updates on [RSS](/uppy/atom.xml). See you tomorrow for [Day 23](/blog/2019/04/liftoff-23/)!

+ 0 - 50
website/src/_posts/2019-04-liftoff-23.md

@@ -1,50 +0,0 @@
----
-title: "Day 23"
-date: 2019-04-17
-author: samuel
-image: "/uppy/uppy/images/blog/30daystoliftoff/day23.png"
-series: 30 Days to Liftoff
-seriesSuffix: 'of 30'
----
-
-Hello and welcome to Day 23 of our '30 Days to Liftoff' blog post challenge. The launch date for **Uppy 1.0** is still set for **April the 25th** and a lot of work is ongoing to make it happen. Let's take a look at the updates for today!
-
-<center><br /><img width="400" src="/uppy/images/blog/30daystoliftoff/day23.png"><br /><br /></center>
-
-<!--more-->
-
-- [Artur](https://github.com/arturi) and [Kevin](https://github.com/kvz) **finished** the implementation of [language packs](https://github.com/transloadit/uppy/pull/1443) so that you can now display Uppy in your (user's) local Language. Here is a quick example on how it is intended for use:
-
-```js
-// npm install @uppy/locales --save
-const russianLocale = require('@uppy/locales/lib/ru_RU')
-
-const uppy = Uppy({
-  locale: russianLocale,
-})
-```
-
-and if you'd use the CDN version of Uppy (instead of bundling and hosting yourself:
-
-
-```html
-<script src="https://releases.transloadit.com/uppy/v0.30.5/uppy.min.js"></script>
-<script src="https://releases.transloadit.com/uppy/v0.30.5/locales/ru_RU.min.js"></script>
-<script>
-var uppy = Uppy.Core({ 
-  locale: Uppy.locales.ru_RU
-})
-<script>
-```
-
-While the new locale packs weren't finished, we had to reject updates to the old locales, and quickly became outdated for which we are very sorry. To all language contributors, we hope you can forgive us, and that you're willing to translate the [updated en_US locale](https://github.com/transloadit/uppy/blob/master/packages/%40uppy/locales/src/en_US.js) to your own language! This time we promise your contributions will make it to 1.0!
-
-- [Alex](https://github.com/nqst) continues to work on a [new design for the uppy.io website](https://github.com/transloadit/uppy/pull/1452).
-
-- [Ife](https://github.com/ifedapoolarewaju) finished updating Companion to report [better progress](https://github.com/transloadit/uppy/pull/1454) when it's downloading something that it needs to upload to an XHR target.
-
-- [Renée](https://github.com/goto-bus-stop) is working on error reporting for the Transloadit plugin as mentioned yesterday, which notifies us of connectivity problems when they occur.
-
-- [Evgenia](https://github.com/lakesare) continues her work on browser compatibility for dropping or pasting URLs.
-
-On that note, Day 23 of our thirty-day challenge comes to an end. Tomorrow looks like it will be another exciting day, so don't hesitate to keep checking up on us via [Twitter](https://twitter.com/uppy_io) or [RSS](/uppy/atom.xml)!

+ 0 - 35
website/src/_posts/2019-04-liftoff-24.md

@@ -1,35 +0,0 @@
----
-title: "Day 24"
-date: 2019-04-18
-author: tyler
-published: true
-image: "/uppy/uppy/images/blog/30daystoliftoff/day24-1.jpg"
-series: 30 Days to Liftoff
-seriesSuffix: 'of 30'
----
-
-Only six days remain in our '30 Days to Liftoff' blog post challenge toward **releasing Uppy 1.0 on April 25**. Technically, it's even less than that, seeing as Easter is coming up and we won't be doing much work during the holidays. So, with just three working days left, we are starting to feel the heat. :fire: 
-
-Luckily, we're also very close to reaching all of our release goals. Let's take a look at where we are now!
-
-<center><br /><img width="400" src="/uppy/images/blog/30daystoliftoff/day24.gif"><br /><br /></center>
-
-<!--more-->
-
-- [Evgenia](https://github.com/lakesare) has made some great progress on improving the [drag to upload state](https://github.com/transloadit/uppy/pull/1440) for the Uppy Dashboard in a variety of browsers. We are also considering adding more MIME types later, to report types correctly even when browser fail at it and give file previews their own unique icons.
-
-- [Alex's](https://github.com/nqst) [design facelift](https://github.com/transloadit/uppy/pull/1452) was completed after some testing by [Artur](https://github.com/arturi). Take a look at some of the improvements below:
-
-<center><br /><img src="/uppy/images/blog/30daystoliftoff/2019-04-18-design.png"><br /></center>
-
-- [Tim](https://github.com/tim-kos) will be spending today thoroughly testing Uppy in preparation for the upcoming release. We think just about everything is working, so now it's time for someone to try and break it all! :hammer: Slight warning: we're in the process of making some big behind-the-scenes changes, so there may be some issues that crop up on our webpage. 
-
-- Uppy 0.30.5 will be released by [Artur](https://github.com/arturi) today. One of the main changes here is our name change from the `serverUrl` property to `companionUrl`. A simple check is being added and we will notify users that it has been depreceated, so they have ample time to apply the change to their own code.
-
-- An alpha version of [React Native support](https://github.com/transloadit/uppy/pull/988) was merged into our Uppy master branch on Github. We're confident that our initial release will be useful for those who need a basic implementation. Of course, our React Native development will continue as we go forth, so stay tuned for that. 
-
-- [Ife](https://github.com/ifedapoolarewaju) and [Marius](https://github.com/Acconut) continue their work on large-file issues related to React Native and tus-js-client. They are considering to add a tus option to allow React Native developers to pass their own custom file picker module. This would add some flexibility for developers and prevent us from bloating tus-js-client.
-
-- Error reporting for the Transloadit plugin will be worked on by [Renée](https://github.com/goto-bus-stop). This will ensure users are notified of various issues while utilizing the API, such as connection issues.
-
-Thus ends Day 24. We're all taking an early break for Good Friday tomorrow and we hope you'll have a Good one as well! Check us out on [Twitter](https://twitter.com/uppy_io) and on [RSS](/uppy/atom.xml) as we edge closer to **Uppy 1.0** :dog:

+ 0 - 18
website/src/_posts/2019-04-liftoff-25.md

@@ -1,18 +0,0 @@
----
-title: "Day 25"
-date: 2019-04-19
-author: aj
-image: "/uppy/uppy/images/blog/30daystoliftoff/gooddog.jpg"
-series: 30 Days to Liftoff
-seriesSuffix: 'of 30'
----
-
-Why have a Good Friday when you can have a Great Friday instead!? Today is the beginning of an extra-long weekend, which most of the Uppy crew will spend by staying away from computers and catching up on some naptime:
-
-<center><img width="400"  src="https://media.giphy.com/media/aeu60CPZd8zw4/giphy.gif"><br/><br/></center>
-
-<!--more-->
-
-Even though there's still quite a bit to do before the **Uppy 1.0 launch next week**, we're taking these few days for ourselves to fully recharge the batteries before breaking into our final sprint on [Tuesday](/blog/2019/04/liftoff-29/). :running: Be sure to check in with us during the weekend, though, for some fun little updates in our 30 Days to Liftoff!
-
-Have a Great Friday everyone!

+ 0 - 18
website/src/_posts/2019-04-liftoff-26.md

@@ -1,18 +0,0 @@
----
-title: "Day 26"
-date: 2019-04-20
-author: aj
-image: "/uppy/uppy/images/blog/30daystoliftoff/sleepingdog.jpg"
-series: 30 Days to Liftoff
-seriesSuffix: 'of 30'
----
-
-'Twas the night before Easter, when all through the house. Not a creature was stirring, not even a... pup? 
-
-<center><img width="400" src="https://media.giphy.com/media/hKBwl3S9hQaas/giphy.gif"><br/><br/></center>
-
-<!--more-->
-
-That's right! It's another day of leisurly fun and relaxation for the Uppy team. We're kind of in the calm before the storm right now, though. First, we'll have a few days of Easter ahead — filled to the brim with chocholate, eggs and bunnies — and then it's off to the races for real. 
-
-When we return on Tuesday, we'll only have two working days left before the **Uppy 1.0 launch on April 25** and a few big tasks still remain uncompleted. So, while we wait for crunch time to begin, enjoy some nice holiday updates from us over the coming days!

+ 0 - 17
website/src/_posts/2019-04-liftoff-27.md

@@ -1,17 +0,0 @@
----
-title: "Day 27"
-date: 2019-04-21
-author: aj
-image: "/uppy/uppy/images/blog/30daystoliftoff/easterdog1.jpg"
-series: 30 Days to Liftoff
-seriesSuffix: 'of 30'
----
-
-Happy Easter everyone! :egg::rabbit: It's like a regular Sunday, but with a cherry on top! Spring is also in the air, so we wish you all some nice weather to enjoy with friends and family. Since we are also spending today egg hunting rather than bug chasing, we'll keep it short. So, once more, from us — and this lovely Roomba-riding pup: 
-
-<center><img width="400"  src="https://media.giphy.com/media/OdL7yHj11i3Xa/giphy.gif"><br/><br/></center>
-
-<!--more-->
-
-We'll be back tomorrow on [Day 28](/blog/2019/04/liftoff-28/) with another small easter egg from the Uppy team!
-

+ 0 - 22
website/src/_posts/2019-04-liftoff-28.md

@@ -1,22 +0,0 @@
----
-title: "Day 28"
-date: 2019-04-22
-author: aj
-image: "/uppy/uppy/images/blog/30daystoliftoff/easterdog2.jpg"
-series: 30 Days to Liftoff
-seriesSuffix: 'of 30'
----
-
-Happy second day of Easter! Just three days left before we launch Uppy 1.0 on the 25th! :scream: It's gonna be a few busy days for us, so we want to spend today getting rested up and ready to go. 
-
-Here's an 80's-style montage of GIFs to give you an idea of what we're doing to get all pumped up and ready for the final sprint!
-
-<!--more-->
-
-<center><img width="400"  src="https://media.giphy.com/media/12TOAdbCuQe2wE/giphy.gif"><br/><br/></center>
-<center><img width="400"  src="https://media.giphy.com/media/yBjUwriEYpFyE/giphy.gif"><br/><br/></center>
-<center><img width="400"  src="https://media.giphy.com/media/KXKSxnXsjw9Ne/giphy.gif"><br/><br/></center>
-<center><img width="400"  src="https://media.giphy.com/media/cLcxtL1z8t8oo/giphy.gif"><br/><br/></center>
-<center><img width="400"  src="https://media.giphy.com/media/ngzhAbaGP1ovS/giphy.gif"><br/><br/></center>
-
-See you back tomorrow on [Day 29](/blog/2019/04/liftoff-29/) of our 30 Days to Liftoff! We'll have a lot more to share as we prepare for Uppy's Big Day. Give us a follow on [Twitter](https://twitter.com/uppy_io) or on [RSS](/uppy/atom.xml) to stay up to date with everything.

+ 0 - 35
website/src/_posts/2019-04-liftoff-29.md

@@ -1,35 +0,0 @@
----
-title: "Day 29"
-date: 2019-04-23
-author: tyler
-published: true
-image: "/uppy/uppy/images/blog/30daystoliftoff/day-29.jpg"
-series: 30 Days to Liftoff
-seriesSuffix: 'of 30'
----
-
-With Easter behind us, only two days remain before the **Uppy 1.0 release!**. We hope you're anticipating the launch as much as we are looking forward to being out from under the pressure of geting everything done in time!
-
-In terms of progress and completed features, things are looking good. We don't have the entire team present today due to personal holidays and other commitments, but there's no slowing down as we approach our deadline! This afternoon, we're having our final Uppy 1.0 call where we'll make final decisions on what we will — and won't — get done before Thursday.
-
-<center><br /><img width="400" src="/uppy/images/blog/30daystoliftoff/day-29.jpg"><br /><br /></center>
-
-<!--more-->
-
-- The [Russian language pack](https://github.com/transloadit/uppy/pull/1467) for Uppy was added by [Artur](https://github.com/arturi). [Alex](https://github.com/nqst) and Evgenia have been weighing in with some feedback of their own to help get it completed. Feel free to contibute if you know Russian!
-
-- The [Dutch languge pack](https://github.com/transloadit/uppy/pull/1462) for Uppy was also added, this time not by one of us, but by an enterprising member of the Uppy community! Duizend maal dank, [Geert](https://github.com/geertclerx)!
-
-- [Ife](https://github.com/ifedapoolarewaju) fixed an issue involving the Transloadit API responding successfully before the upload is complete. This occurred when using XHR for uploading. Now, when using Companion, there will be a check for any mismatch in bytes from an uploaded file to ensure this does not happen any more.
-
-- Ife's [fix](https://github.com/transloadit/uppy/pull/1454) for issues with illusive progress for multipart uploads, was also tested and approved by Artur.
-
-- [Artur's](https://github.com/arturi) contributions didn't end there! He also updated our [React Native example](https://github.com/transloadit/uppy/pull/1469) to use Uppy 0.30.5.
-
-- We had a bit of an issue after releasing Uppy 0.30.5, which involved [404 errors being thrown](https://github.com/transloadit/uppy/issues/1466) for certain 0.30.5-specific CSS and JS files. This was an issue regarding one of our CDN scripts, which was aptly fixed by [Kevin](https://github.com/kvz).
-
-- [Abdel](https://github.com/kiloreux) is creating the French language pack for Uppy, and is considering working on an Arabic one for post-1.0 updates as well.
-
-- [Evgenia](https://github.com/lakesare) has continued her work on [accessibility issues with Uppy's provider views](https://github.com/transloadit/uppy/issues/created_by/nqst) and is planning on adding her improvements in the coming days.
-
-Don't forget that today is Day 29 of our '30 Days to Liftoff' challenge. With **Uppy 1.0** on its way and our blog post challenge coming to an end, we hope you won't miss these quick updates too much! If you can't stand to miss our grand finale [tomorrow](/blog/2019/04/liftoff-30/), make sure to follow us on [Twitter](https://twitter.com/uppy_io) and have a look at our [RSS feed](/uppy/atom.xml).

+ 0 - 39
website/src/_posts/2019-04-liftoff-30.md

@@ -1,39 +0,0 @@
----
-title: "Day 30"
-date: 2019-04-24
-author: kvz
-image: "/uppy/uppy/images/blog/30daystoliftoff/day30.jpg"
-series: 30 Days to Liftoff
-seriesSuffix: 'of 30'
----
-
-And then there were none! Zero days left in our thirty-day blog post challenge. I can't believe this is already the final day of our push to get Uppy to 1.0. There's still a bunch of things that we'd like to finish before shipping, so let's dive right in.
-
-<center><br /><img width="400" src="/uppy/images/blog/30daystoliftoff/day30.jpg"><br /><br /></center>
-
-<!--more-->
-
-- [Tim](https://github.com/tim-kos) added additional information to the [migration guide](/uppy/docs/robodog/form/#Migrating-From-the-jQuery-SDK), so Transloadit customers looking to move from the jQuery SDK to Uppy Robodog will have an easier time doing so. He also implemented support for a jQuery SDK parameter that didn't work in Robodog.form yet, and smashed out the [German Locale Pack](https://github.com/transloadit/uppy/pull/1475)!
-
-- [Abdel](https://github.com/kiloreux) [translated](https://github.com/transloadit/uppy/pull/1481) Uppy to French. <img src="https://avatars1.githubusercontent.com/u/20061212?s=460&v=4" width="16" align="absmiddle">
-
-- [Artur](https://github.com/arturi) [documented](https://github.com/transloadit/uppy/pull/1468) the Thumbnail Generator plugin and made a few more hardcoded English strings translatable via Locale Packs. For instance, we can even translate "[Powered By](https://github.com/transloadit/uppy/commit/6d36309b72b62e215caa172a6300a0f0c7083ce8)" now 
-
-We also had a team call where we discussed which _To Do's_ we can leave behind for the launch, and which ones we'd really like to get in. To save time for actually working on these tasks, instead of typing, let me share a screenshot of what we agreed upon:
-
-<center><a rel="noreferrer noopener" target="_blank" href="/uppy/images/blog/30daystoliftoff/2019-04-day30-board.png"><img src="/uppy/images/blog/30daystoliftoff/2019-04-day30-board.png"></a><br /><br /></center>
-
-It's gonna be a close call. [Ife](https://github.com/ifedapoolarewaju), especially, has a lot on his plate with that "[600MB issue](https://github.com/tus/tus-js-client/issues/146)" still untackled, but we did get [Marius](https://github.com/Acconut) on board with the way we want to solve it, so now it's full steam ahead.
-
-Before I'm going back to the team and help out where I can, I'd like to thank you for reading along with us for these past thirty days. To be honest, at times, we regretted making this commitment.
-
-<center><br /><img src="/uppy/images/blog/30daystoliftoff/2019-04-day30-posts.png"><br /><br /></center>
-
-A post a day can steal focus, but we learned a lot. It quickly became clear that in order to set ourselves up for success, we needed to plan ahead and establish some basic rules. Strict deadlines, for instance, helped out a lot: the first iteration needed to be in before lunch, with a second one done shortly after lunch. Otherwise, folks would end up working overtime or even on the next day, when it was already time for the next post. 
-
-Luckily, we had our content team to take ownership of the whole process and keep these distractions away from the Uppy core team as much as possible. In the end, we really enjoyed sharing our development process with the world and giving interested developers a better understanding of what we're trying to accomplish, and how.
-
-We hope to see you tomorrow again for our 1.0 launch, which will be accompanied by a meaty release post! Make sure to follow us on [Twitter](https://twitter.com/uppy_io) or via our [RSS feed](/uppy/atom.xml) if you don't want to miss it!
-
-
-<!-- <center><img width="400" src="https://media.giphy.com/media/11syU6ZZ6PsGRO/giphy.gif"><br/><br/></center> -->

+ 0 - 151
website/src/_posts/2019-08-1.3.md

@@ -1,151 +0,0 @@
----
-title: "Uppy 1.3: Accessibility and performance, new languages"
-date: 2019-08-05
-author: arturi
-published: true
----
-
-Hi there! We are back after a period of silence following the [Uppy 1.0 release](/uppy/blog/2019/04/1.0/) in the end of April. It was pretty well received by the commnunity and press: we hit the front pages of Hacker News, [Product Hunt](https://www.producthunt.com/posts/uppy-1-0/) and [Reddit](https://www.reddit.com/r/javascript/comments/bhkx5k/uppy_10_your_best_friend_in_file_uploading/). We then started trending and gained over 20,000 stargazers on GitHub, got mentioned by [Smashing Magazine](https://mobile.twitter.com/smashingmag/status/1097870169043546112), [JavaScript Daily](https://twitter.com/JavaScriptDaily/status/1122935583603556352) and [JavaScript Weekly](https://javascriptweekly.com/issues/434). It’s been a crazy ride! We’d like to thank all our contributors and users for their continued support.
-
-It was not all self reflection and celebrations, though, in Uppy Remote Headquaters™ following the `1.0` launch. After some vacation time, we quickly got back to work, releasing Uppy `1.1`, `1.2` and `1.3`. These updates address a lot of issues raised by the community and the team.
-
-This post highlights the most important and exciting changes from those releases: accessibility and performance, thumbnails rotatation, new logger, progress and uploader improvements, Robodog and Companion updates, new languages and more.
-
-<!--more-->
-
-## Accessibility
-
-Our new team member, Evgenia, has been on a roll and together with Artur and Alex, she has been working hard on improving accessiblity in Uppy. Evgenia has come up with something called “superfocus”, which makes sure focus stays on the most relevant button or field in the current view. The `@uppy/provider-views` layouts have been refactored so that checkboxes and labels are accessible. Focus styles have also been improved.
-
-<video alt="Demo video showing Uppy focus management in action" muted autoplay loop>
-  <source src="/uppy/images/blog/1.3/uppy-focus-demo.webm" type="video/webm">
-  <source src="/uppy/images/blog/1.3/uppy-focus-demo.mp4" type="video/mp4">
-</video>
-
-Other notable accessiblity fixes and improvements:
-
-* An “Add more” caption near the + button has been added to the desktop version of Uppy
-* “Copy link” & “Edit” links have been replaced with icons
-* All SVGs are now not focusable in IE11
-* Pasting works while we’re focused on buttons
-* Focus is not lost when state is updated in filter in provider-views or when editing file meta
-* Selected checkboxes now persist when moving between folders
-
-⚠️ `@uppy/provider-views` translation strings have been moved from Dashboard to Core. This eliminates a dependency of provider-views upon Dashboard [#1712](https://github.com/transloadit/uppy/pull/1712).
-
-See [#1507](https://github.com/transloadit/uppy/pull/1507), [#1574](https://github.com/transloadit/uppy/pull/1574) and [#1656](https://github.com/transloadit/uppy/pull/1656) for more details.
-
-## Dashboard performance improvements
-
-Renée attacked performance problems in the Dashboard when adding many hundreds of files. Previously, we naively rerendered the entire file list when _any_ file had a change. Now, only the changed file rerenders:
-
-Before:
-
-![slow](https://user-images.githubusercontent.com/1006268/59605307-ce67f580-910e-11e9-992a-6e0c3c2a7570.gif)
-
-After:
-
-![fast](https://user-images.githubusercontent.com/1006268/59605354-e3dd1f80-910e-11e9-9cb3-1b7339650959.gif)
-
-See [#1671](https://github.com/transloadit/uppy/pull/1671) for more details. As you can see, there are still some laggy interactions — expect more improvements in future releases!
-
-## Logger
-
-We’ve added an option to supply a `logger` object with `debug`, `warn` and `error` methods, so you can use a custom logging solution with Uppy. Check out [the docs](/uppy/docs/uppy/#logger) for more information.
-
-In the future, past 2.0, the `logger: Uppy.debugLogger` option is going to replace `debug: true`. The latter will be kept for backwards compatibility for now.
-
-⚠️ Since `@uppy/core@1.2`, the default logger has switched to `console.debug` from `console.log` by default. You might need to change settings in your browser’s devtools to see Uppy logs!
-
-Versions of each Uppy plugin and Core are now also logged for easier debugging.
-
-See [#1661](https://github.com/transloadit/uppy/pull/1661) and [#1640](https://github.com/transloadit/uppy/pull/1640) for more details.
-
-## Thumbnails rotated correctly
-
-Before this change, when you added a file to Uppy from a mobile device, you would sometimes see the preview image sideways. This was because we didn’t account for EXIF rotation metadata when generating thumbnails with `@uppy/thumbnail-generator`. But now, thanks to [@Botz](https://github.com/Botz), we do! See [#1532](https://github.com/transloadit/uppy/pull/1661).
-
-## Progress improvements
-
-* The Status Bar now shows the correct total size of the upload when some files have already finished, instead of jumping down [#1685](https://github.com/transloadit/uppy/pull/1685).
-* Fixed an issue where progress could jump to bizarrely high values (like 1038%) while uploading files that don’t have a known size (e.g., pictures from Instagram) [#1610](https://github.com/transloadit/uppy/pull/1610).
-* We’ve moved from the `prettier-bytes` package into `@uppy/utils`, and divide by `1024` instead of `1000` to justify `KB` vs `kB` [#1732](https://github.com/transloadit/uppy/pull/1732).
-
-## Drag and drop
-
-* Drag and drop has been refactored internally in both the Dashboard and DragDrop plugins. This means a more robust and cross-browser implementation, with a fancy “drop files here” screen when you drag over the Dashboard.
-* The `@uppy/drag-drop` plugin now renders an entirely clickable DnD area.
-
-![](/uppy/images/blog/1.3/drag-drop-focus.png)
-
-See [#1440](https://github.com/transloadit/uppy/pull/1440), [#1565](https://github.com/transloadit/uppy/pull/1565) and [#1633](https://github.com/transloadit/uppy/pull/1633) for more details.
-
-## Uploaders
-
-* xhr-upload: we now send along global metadata when `bundle: true` option is set [#1677](https://github.com/transloadit/uppy/pull/1677).
-* xhr-upload: type and name are set from file.meta [#1616](https://github.com/transloadit/uppy/pull/1616).
-* aws-s3-multipart: added metadata support for S3 MultiPart [#1698](https://github.com/transloadit/uppy/pull/1698).
-* aws-s3: allows overriding of getResponseData() [#1647](https://github.com/transloadit/uppy/pull/1647).
-* aws-s3: prevents unnecessary delete multiparts request for completed files [#1650](https://github.com/transloadit/uppy/pull/1650).
-* aws-s3: do not extract keys from empty `fields` [#1569](https://github.com/transloadit/uppy/pull/1569).
-* tus: `metaFields` option has been added to the tus plugin [#1644](https://github.com/transloadit/uppy/pull/1644).
-
-## Localization
-
-Thanks to our amazing contributors, Uppy now speaks: Arabic, Chinese, Dutch, English, Finnish, French, German, Hungarian, Italian, Japanese, Persian, Portuguese, Russian, Serbian, Spanish an Turkish!
-
-New translations are rolling in every month, but there are plenty more languages out there that Uppy would love to learn. Please consider [contributing your language](http://uppy.io/docs/locales/#Contributing-a-new-language) as well!
-
-We’ve also added docs for locales — how to use from NPM and CDN, auto-generated list of languages that are supported already and an invitation to add more [#1553](https://github.com/transloadit/uppy/pull/1553).
-
-Finally, we’ve fixed an issue that could occur when adding files with names in non-Latin alphabets. When adding a file to Uppy, it gets an ID based on several characteristics, such as its size and file name. Previously, our ID generation would ignore any non-alphanumeric characters in the file name, which could cause the IDs for different files to clash. Now, those characters are worked into the ID, so that multiple similar files with different non-alphanumeric names can be added. See [#1722](https://github.com/transloadit/uppy/pull/1722).
-
-## Robodog
-
-Robodog is an Uppy-based library that helps you talk to the Transloadit API. Since 1.0, most of the updates have been bugfixes:
-
-* `Robodog.dashboard()` and `Robodog.form()` now pass their options to the `@uppy/dashboard` plugin as advertised.
-* `Robodog.form()` now supports the [`triggerUploadOnSubmit`](/docs/robodog/form/#Separating-Uploads-from-Form-Submission) option from `@uppy/form`.
-* `Robodog.form()` now supports localization of the “Choose files” button it adds in the default configuration.
-
-## Build
-
-* Renée split our test runs into multiple jobs on Travis CI, so unit tests, end-to-end tests and other jobs all run in parallel. This lets us identify issues with failing builds quicker and also slashes total build times by half! 🚀 [#1709](https://github.com/transloadit/uppy/pull/1709).
-* Webdriverio, which we use for end-to-end testing, has been updated to v5. This improves a bunch of things and adds a lot of `await`s to our tests [#1675](https://github.com/transloadit/uppy/pull/1675).
-* Build dependencies have been upgraded: Babel to v7, Eslint to v5, Jest to v24, Typescript to v3, Postcss to v7 [#1549](https://github.com/transloadit/uppy/pull/1686).
-* Fixed tags for docker build [#1579](https://github.com/transloadit/uppy/pull/1579).
-* New `uploadcdn` and sync version scripts [#1586](https://github.com/transloadit/uppy/pull/1586) [#1600](https://github.com/transloadit/uppy/pull/1600).
-
-## Website and docs
-
-* Added Community projects — a page with Uppy plugins and integrations developed by the community [#1620](https://github.com/transloadit/uppy/pull/1620). [Add yours](https://github.com/transloadit/uppy/blob/master/website/src/docs/community-projects.md)!
-* Custom plugin [example](http://uppy.io/docs/writing-plugins/#Example-of-a-custom-plugin) — now you have a reference to look at when writing your own plugin for Uppy [#1623](https://github.com/transloadit/uppy/pull/1623).
-* Added signature authentication to Transloadit example [#1705](https://github.com/transloadit/uppy/pull/1705).
-* Documented Companion’s Auth and Token mechanism [#1540](https://github.com/transloadit/uppy/pull/1540).
-* Updated AWS S3 Multipart documentation wrt CORS settings [#1539](https://github.com/transloadit/uppy/pull/1539).
-
-## Companion
-
-Of course, we didn’t forget `@uppy/companion`. It’s getting more robust with every release:
-
-* ⚠️ We are now sending an `uppy-versions` header to Companion. Please see [how to avoid errors if you are using Companion but NOT as standalone](https://github.com/transloadit/uppy/pull/1612#issuecomment-515117137) [#1612](https://github.com/transloadit/uppy/pull/1686).
-* Companion now returns mimetypes for Dropbox files [#1599](https://github.com/transloadit/uppy/pull/1599).
-* Added colors to logs [#1648](https://github.com/transloadit/uppy/pull/1648).
-* Changed oauth access token transport method [#1668](https://github.com/transloadit/uppy/pull/1668).
-* Companion now displays truer error during oauth failure [#1702](https://github.com/transloadit/uppy/pull/1702).
-* Not logging uppyAuthToken and not sending the error stack to client [#1663](https://github.com/transloadit/uppy/pull/1663).
-* Properly loading Instagram user name, removed deprecated dropbox field [#1651](https://github.com/transloadit/uppy/pull/1663) [#1692](https://github.com/transloadit/uppy/pull/1692).
-* Return nextPagePath for Drive/Dropbox [#1652](https://github.com/transloadit/uppy/pull/1652).
-* Added ability to load secret keys from files [#1632](https://github.com/transloadit/uppy/pull/1632).
-* Set upload filename from metadata during uploads [#1587](https://github.com/transloadit/uppy/pull/1587).
-
-## Misc
-
-* ⚠️ form: now excludes own metadata when creating a new upload. There’s also a new option to append results to the input instead of overwriting [#1686](https://github.com/transloadit/uppy/pull/1686).
-* core: `relativePath` is added to local files when a directory has been dropped/selected. It is `null` for non-foldered files [#1602](https://github.com/transloadit/uppy/pull/1602).
-* core: using `uploadStarted: null` instead of false [#1628](https://github.com/transloadit/uppy/pull/1628).
-* status-bar: hide seconds if ETA is more than 1 hour [#1501](https://github.com/transloadit/uppy/pull/1501).
-* react: dashboard react component prop typings updated [#1598](https://github.com/transloadit/uppy/pull/1598).
-* webcam: Allow definition of MediaRecorder `mimeType` [#1708](https://github.com/transloadit/uppy/pull/1708).
-
-As always, you can find the full list of changes and package versions, as well as future plans, in our [changelog](https://github.com/transloadit/uppy/blob/master/CHANGELOG.md).

+ 0 - 169
website/src/_posts/2019-10-1.5.md

@@ -1,169 +0,0 @@
----
-title: "Uppy 1.5: Facebook and OneDrive (beta) support, upload cancellation"
-date: 2019-10-11
-author: renee
-published: true
----
-
-In the past two months, we have halved our open issue count and worked on a much more robust approach to upload cancellation. Members of the community also contributed a bunch of new localizations: Czech, Danish, Greek, Indonesian, and Swedish!
-
-We are also releasing beta versions of new remote providers for Facebook and OneDrive. Please try them out!
-
-<!--more-->
-
-## Issue busting
-
-Our issue tracker was getting pretty full over the past year, topping out at about 120 open issues. Some had been open for months without any reply! Issues were being opened at such a rate that it was almost too much for our small team to handle. So, we sat down to go through everything together and started setting up a process to make sure our issue list doesn't get out of hand again in the future.
-
-When opening a new issue, we now ask you to mark it as a bug or a feature request. The issue will also get a “Triage” label, indicating that an Uppy team member needs to sort it. If there are many “Triage” issues open at any point, we will discuss them in our weekly team call. New issues will also be assigned to a specific team member as soon as possible, so each of us has a much smaller and more manageable list of issues to keep track of.
-
-To keep the issue tracker focused on Uppy features and bugs, detailed support questions should go to Transloadit's [community forum](https://community.transloadit.com/).
-
-## Duplicate files
-
-Up until now, if you added a file that had been already added to Uppy some time before — i.e., a file with the same `name`/`type`/`modifiedDate` etc. — the old file would be silently replaced with a new one. This changes with v1.5:
-
-1. Uppy now throws a warning if a file with the same `file.id` already exist. The new file will not be added and the old file will not be replaced.
-2. We are adding the `file.meta.relativePath` to `file.id`. `relativePath` exists on files that have been dropped together with a folder. This means that if you drop a folder with `folder/a.jpg` and `folder/subfolder/a.jpg`, both `a.jpg`s will be added, since they come from different folders and this kind of duplication might be intended.
-
-See PR [#1767](https://github.com/transloadit/uppy/pull/1767) for details.
-
-## Dashboard
-
-Files in the Dashboard no longer have an icon indicating where they came from (local device, GDrive, etc.). We think it's nice for developers to see, but not that useful for most end users. If you want to re-enable it, you can add the following CSS to your app:
-```css
-.uppy-DashboardItem-sourceIcon { display: inline-block; }
-```
-
-The difference is very small. The icons used to be next to the file size, as seen here in Uppy v1.3:
-![Uppy Dashboard v1.3, with file source icon](/uppy/images/blog/1.5/with-source-icon.png)
-
-Now, in v1.5, they’re gone:
-![Uppy Dashboard v1.5, without file source icon](/uppy/images/blog/1.5/without-source-icon.png)
-
-Additionally:
-* Editing a file now fires `dashboard:file-edit-start` and `dashboard:file-edit-complete` events ([#1776](https://github.com/transloadit/uppy/pull/1776))
-* Excessive debug logging is reduced ([#1747](https://github.com/transloadit/uppy/pull/1747))
-* Fixes to the TypeScript typings were submitted by @mrbatista and @MatthiasKunnen
-
-## Cancellation
-
-Our old approach to limiting the amount of simultaneous uploads had some problems. Uploads were queued by chaining Promises, but they did not respect cancellation. So, if you cancelled an upload while some files were still waiting to start, those files would actually start uploading even though they had already been removed. Obviously, that's pretty bad!
-
-PR [#1736](https://github.com/transloadit/uppy/pull/1736) addresses this by ripping out the old limiting code and replacing it with a new, cancellation-aware upload queue. We’ve also added a browser test to make sure that this thing stays resilient:
-
-<video alt="Demo video showing an automated Chaos Monkey session with Uppy" muted autoplay loop>
-  <source src="/uppy/images/blog/1.5/chaos-monkey.webm" type="video/webm">
-  <source src="/uppy/images/blog/1.5/chaos-monkey.mp4" type="video/mp4">
-</video>
-
-## Lerna lerna lerna
-
-In August, we bit the bullet and used Lerna’s `lerna link convert` feature. Now, all the packages in our monorepo depend on each other, using `file:../packagename/` paths instead of version numbers. The entire repository is one big dependency tree in npm's view. Npm can install the entire thing on its own, without `lerna bootstrap`’s help! Since npm manages the entire tree, the `package-lock.json` file in the repository root contains everything we need. We can now use the faster `npm ci` install command on CI, saving more than sixty seconds on every run :tada:
-
-As part of this effort, we also added all our examples to the lerna-managed tree, so you no longer have to do `npm install` in example folders to use them.
-
-This change makes working on the repository much easier, since dependencies are handled in the same way as in any other repository, simply by doing:
-```bash
-npm install
-```
-
-## Localization
-
-Thanks to multiple contributors, Uppy now knows Czech, Danish, Greek, Indonesian, and Swedish, on top of the nineteen languages that were already supported! The Serbian locale is now available in both the Cyrillic and Latin scripts. Big thanks to @achmiral, @arggh, @czj, @jukakoski, @marcusforberg, @nndevstudio, @Pzoco, @Tashows, and @tvaliasek for their efforts ✨
-
-New translations are rolling in every month, but there are plenty more languages out there that Uppy would love to learn. Please consider [contributing your language](/docs/locales/#Contributing-a-new-language) as well!
-
-## Facebook and OneDrive
-
-This release adds two experimental new remote providers: Facebook and OneDrive. For now, they are not available through the `uppy` package. To use them, install `@uppy/facebook` or `@uppy/onedrive`:
-```bash
-npm install @uppy/facebook
-npm install @uppy/onedrive
-```
-
-Configure Companion to access the Facebook and OneDrive APIs, using environment variables or the JS API:
-```bash
-export COMPANION_FACEBOOK_KEY="***"
-export COMPANION_FACEBOOK_SECRET="***"
-export COMPANION_ONEDRIVE_KEY="***"
-export COMPANION_ONEDRIVE_SECRET="***"
-```
-```js
-providerOptions: {
-  facebook: {
-    key: '',
-    secret: ''
-  },
-  // For OneDrive’s key & secret pair, please use `microsoft` option key
-  microsoft: {
-    key: '',
-    secret: ''
-  }
-}
-```
-
-Then use them like the existing providers:
-```js
-const Facebook = require('@uppy/facebook')
-const OneDrive = require('@uppy/onedrive')
-
-uppy.use(Facebook, { companionUrl: YOUR_COMPANION_URL })
-uppy.use(OneDrive, { companionUrl: YOUR_COMPANION_URL })
-```
-
-We’re still waiting for our developer keys to be approved, so we don't have working examples on the website yet! We’ll let you know on [Twitter](https://twitter.com/uppy_io) when they’re live.
-
-Once these new providers have been tested for a while, we will release them as 1.0 and include them in the main Uppy and Robodog bundles.
-
-## Revoke Companion’s Provider access on logout
-
-Up until now, when users clicked “logout” after using a remote Provider, such as Google Drive or Dropbox, Uppy would destroy the access token. But on the Provider’s side, Uppy was still allowed access. Should the user click “Connect to Google Drive” again, no extra confirmation was required.
-
-After a discussion in [#1563](https://github.com/transloadit/uppy/issues/1563), we are expanding the logout process. Now, when users log out of remote Providers through Uppy, Companion will destroy the token as before, but also attempt to revoke the access from the corresponding Provider. In the event that the Provider doesn’t support access revoke via it’s API, Uppy will display a helpful message informing users how they can revoke the permissions manually.
-
-See [#1843](https://github.com/transloadit/uppy/pull/1843) for details.
-
-## Misc
-
-- @uppy/aws-s3-multipart: fix queueing behaviors, especially interaction with cancellation (@goto-bus-stop, #1855)
-- @uppy/aws-s3: replace browser-only resolve-url by isomorphic url-parse (@goto-bus-stop, #1854)
-- @uppy/companion-client: rename serverHeaders to companionHeaders (@goto-bus-stop, #1861)
-- @uppy/companion: Fix S3 uploads for URL plugins (#1784 / @@ifedapoolarewaju)
-- @uppy/companion: bump lodash.merge to 4.6.2 to fix audit warning (#1796 / @rettgerst)
-- @uppy/companion: set allowed HTTP methods internally (#1754 / @ifedapoolarewaju)
-- @uppy/companion: whenever an error is returned from Companion: the auth screen will be displayed if the user was never authenticated; if the user is authenticated, the last screen on display before the error will be displayed (#1743 / @ifedapoolarewaju)
-- @uppy/core: Made sure we can upload new files if we cancel last file (allowMultipleUploads: false) (#1764 / @lakesare)
-- @uppy/core: fix "Cannot read property 'log' of undefined" (#1785 / @theJoeBiz)
-- @uppy/core: use setFileState inside retryUpload (#1759 / @goto-bus-stop)
-- @uppy/dashboard, @uppy/drag-drop: getDroppedFiles.js: handle exceptions better (#1797 / @lakesare)
-- @uppy/form: try/catch parsing, set updatedResult to an empty array when not an array (#1800 / @arturi)
-- @uppy/locales: Finnish semantics improved and fixed some typos (#1744 / @jukakoski)
-- @uppy/locales: Update sr_RS_Latin.js (#1749 / @nndevstudio)
-- @uppy/locales: correct some fr_FR localization strings (#1807 / @czj)
-- @uppy/locales: fix typo in Persian locale (@uxitten, #1865)
-- @uppy/locales: improve Swedish translation (@marcusforberg, #1859)
-- @uppy/thumbnail-generator: add waitForThumbnailsBeforeUpload option, false by default (@arturi, #1803)
-- @uppy/transloadit: add limit option, warn about using limit when it’s set to 0. In Uppy 2.0 we’ll set the limit to something sensible (like 10 files) by default. (#1789 / @arturi)
-- @uppy/transloadit: pin socket.io version to ES5 compatible one (@goto-bus-stop, <https://github.com/transloadit/uppy/commit/5839b655f093edaa778d49b719f7dda063ef79cb>)
-- @uppy/xhr-upload: Throw an error when trying to upload a remote file with `bundle: true` (#1769 / @arturi)
-- build: Fix statefulset update: statefulsets image only should be updated. (#1821 / @kiloreux)
-- build: Update eslint to v6 (#1777 / @goto-bus-stop)
-- build: ci: tweak job run order (#1740 / @goto-bus-stop)
-- core: Made addFile return the file id (#1739 / @eliOcs)
-- docs: Link to Transloadit plugin from Robodog Form page (#1810 / @janko)
-- docs: Talk about using a custom-file input, instead of the file-input plugin (#1765 / @arturi)
-- docs: add “force metafield” to docs and changelog (ab053e7ab266d3a4838069ed23675bb9211e4d1a / @arturi)
-- docs: explicitly document supported tus-js-client options (#1755 / @goto-bus-stop)
-- docs: fix typo (@leftdevel, #1852)
-- docs: redux - mentioned that we can't persist Uppy state (#1793 / @lakesare)
-- docs: remove pre-1.0 notice from changelog (@mskelton, #1858)
-- docs: talk about marking some files as “already uploaded” (c345cbd58992f7bea9525629c28d38420c6b36a3 / @arturi)
-- test: add end-to-end test with retries (@ifedapoolarewaju, #1766)
-- tests: e2e: reintroduce e2e test for providers locally (#1706 / @ifedapoolarewaju)
-- website: /examples/dragdrop - added more obvious 'file was uploaded' indicator (#1750 / @lakesare)
-- website: /examples/xhrupload - more obvious UI, added a list of uploaded files (#1768 / @lakesare)
-- website: add new version of hexo-filter-github-emojis (#1783 / @lakesare)
-- website: fix docs/locales code escaping and css overflow (5a0055c15d04d97e8a0feb784daa7abe8da1d72d / @arturi)
-
-As always, you can find the full list of changes and package versions, as well as future plans, in our [changelog](https://github.com/transloadit/uppy/blob/master/CHANGELOG.md).

+ 0 - 70
website/src/_posts/2019-11-1.6.md

@@ -1,70 +0,0 @@
----
-title: "Uppy 1.6: setOptions(), Icelandic and Thai"
-date: 2019-11-13
-author: arturi
-published: true
----
-
-This release adds a long-awaited `uppy.setOptions()` API, allowing you to update options of Uppy and its plugins on the fly. It also includes locales for the Icelandic and Thai languages!
-
-<!--more-->
-
-## uppy.setOptions()
-
-`.setOptions()` for Uppy and its plugins supports most options that can be easily changed on the fly: `restrictions`, `locale`, Dashboard’s `note` and `metaFields`, `disableThumbnailGenerator`, `showProgressDetails`, etc.
-
-⚠️ Note that some options like `target`, `limit` and `id` cannot be changed on the fly, as internal statefull things depend on them.
-
-Here’s how the magic works:
-
-```js
-const uppy = Uppy({
-  restrictions: {
-    maxNumberOfFiles: 3,
-  },
-})
-uppy.use(Dashboard, {
-  note: 'You can upload up to 3 files',
-})
-```
-
-Now, based on some condition in our app, we want to allow more files:
-
-```js
-// Updating Uppy options
-uppy.setOptions({
-  restrictions: {
-    maxNumberOfFiles: 5,
-  },
-})
-// Updating Dashboard options
-uppy.getPlugin('Dashboard').setOptions({ note: 'You can upload up to 5 files' })
-```
-
-Say, later on, the user changed their locale and we would like to reflect that in Uppy:
-
-```js
-const fi_FI = require('@uppy/locales/lib/fi_FI')
-
-uppy.setOptions({
-  locale: fi_FI,
-})
-```
-
-Now, Uppy will bark in Finnish! Hau, hau, hau!
-
-Please see [`uppy.setOptions()` docs](/uppy/docs/uppy/#uppy-setOptions-opts) for details.
-
-## Misc
-
-- @uppy/facebook: In the new Facebook plugin (beta), we now use grid view with big image previews for albums (@ifedapoolarewaju, #1886)
-- @uppy/companion: The thumbnail size has been increased for Dropbox (@ifedapoolarewaju, #1917)
-- @uppy/dashboard: The retry icons have been fixed on individual files (@goto-bus-stop, #1888)
-- @uppy/companion: Support `COMPANION_AWS_ENDPOINT` in aws-companion example so it can be used with other S3-compatible services (@goto-bus-stop, [1ab63aa](https://github.com/transloadit/uppy/commit/1ab63aa395859815871c4e1e62dda6e9ca66595f))
-- @uppy/companion: Add S3 useAccelerateEndpoint option (@steverob, #1884)
-- @uppy/companion: only set `Access-Control-Allow-Credentials` header when origin is whitelisted (@ifedapoolarewaju, #1901)
-- @uppy/transloadit: We now send `Transloadit-Client` header with HTTP API requests (@goto-bus-stop, #1919)
-- @uppy/tus: Uploads are now being terminated when cancelling, instead of just pausing and letting them expire (@ifedapoolarewaju, #1909)
-- build: Updated Lerna, ESlint, and Jest (@goto-bus-stop)
-
-As always, you can find the full list of changes and package versions, as well as future plans, in our [changelog](https://github.com/transloadit/uppy/blob/master/CHANGELOG.md).

+ 0 - 68
website/src/_posts/2019-12-1.7.md

@@ -1,68 +0,0 @@
----
-title: "Uppy 1.7: A Small One"
-date: 2020-01-10
-author: renee
-published: true
-image: "/uppy/uppy/images/blog/1.7/cat-video-screen.jpg"
----
-
-Uppy 1.7 was released last December! This release added Hebrew translations, a recording length timer for the `@uppy/webcam` plugin, and a collection of improvements to Companion.
-
-<!--more-->
-
-## showRecordingLength: true
-
-When recording audio or video using the `@uppy/webcam` plugin, this new option contributed by [@dominiceden](https://github.com/dominiceden) shows a timer in the bottom right, so your users can see how long they’ve been recording for.
-
-<video alt="Demo video showing Uppy Webcam video recording timer" muted autoplay loop>
-  <source src="/uppy/images/blog/1.7/cat-video-timer.webm" type="video/webm">
-  <source src="/uppy/images/blog/1.7/cat-video-timer.mp4" type="video/mp4">
-</video>
-
-## Companion
-
-The past months we’ve made some incremental improvements to Companion. We patched an issue where Companion could sometimes output remote provider authentication tokens into logs.
-
-We now run Companion tests on Node.js 6 on each commit, in addition to Node.js 10, to make sure that we don’t break compatibility in a minor release. Node.js 6 support will be dropped in a future major release, and we recommend you upgrade soon if you are still using it.
-
-Uploading files from remote providers with the `@uppy/aws-s3-multipart` plugin now uses the correct file name in your S3 bucket by default, instead of the temporary filename that Companion uses internally.
-
-The `getKey()` option for S3 now has a [`metadata`](/uppy/docs/companion/#s3-getKey-req-filename-metadata) parameter, so you can use file metadata from the client to determine the name of files in S3.
-
-## Locales
-
-The new Hebrew locale is available as:
-```js
-require('@uppy/locales/lib/he_IL')
-```
-
-Thanks to [@YehudaKremer](https://github.com/YehudaKremer) for the contribution!
-
-In 1.7, we also fixed the naming of the Galician locale. The locale names follow a `country_LANGUAGE` format. Previously, we used `es_GL` for Galician, which was intended to mean “Galician in Spain”, but which _actually_ means “Spanish in Greenland”! The correct way to refer to Galician is as `gl_ES`:
-```js
-require('@uppy/locales/lib/gl_ES')
-```
-The old `es_GL` name is now an alias for `gl_ES`. It will be removed in a future major release, so we recommend updating your code if you were using the old name. If you do it now, the migration will be easier once 2.0 comes around :smile:
-
-## Misc
-
-- @uppy/aws-s3: add some tests (@bambii7, #1934)
-- @uppy/companion: add onedrive domain validation for the demo deployment (@ifedapoolarewaju, #1959)
-- @uppy/companion: change demo deployment type to stable API (@kiloreux, #1938)
-- @uppy/companion: rename uppy occurrences to companion (@ifedapoolarewaju, #1926)
-- @uppy/companion: upgrade `helmet` (@goto-bus-stop, [6b006ac](https://github.com/transloadit/uppy/commit/6b006ac42c20062c37bdcaf6a77e07b304da7957))
-- @uppy/core: make `uppy.on()` work better with IntelliSense (@bambii7, #1923)
-- @uppy/dashboard: hide top bar cancel button when `hideCancelButton: true` (@goto-bus-stop, #1955)
-- @uppy/thumbnail-generator: add webp to the list of supported types (@arturi, #1961)
-- @uppy/thumbnail-generator: vendor exif-js source in Uppy (@mskelton, #1940)
-- docs: FB and OneDrive are not yet in the CDN bundle (@goto-bus-stop, [61b54b9](https://github.com/transloadit/uppy/commit/61b54b914dd437d2e60362c4ece1429943b32555))
-- docs: add `companionHeaders` to s3-multipart docs (@goto-bus-stop, [a6e44a9](https://github.com/transloadit/uppy/commit/a6e44a953114e385466dcce884d37e433f030549))
-- docs: add reset-progress event to docs (@bambii7, #1922)
-- docs: make Robodog naming more consistent (@goto-bus-stop, #1935)
-- docs: make react sample code more standalone (@uxitten, #1864)
-- examples: remove `UPPYSERVER_` references (@goto-bus-stop, [e74690e](https://github.com/transloadit/uppy/commit/e74690e20cc0a1afd9156ce03b1ca6a5358cc7d9))
-- website: add facebook to dashboard example (@ifedapoolarewaju, #1930)
-- website: add plugin versions (@arturi, #1952)
-- website: enable onedrive on the website example (@ifedapoolarewaju, #1975)
-
-As always, you can find the full list of changes and package versions, as well as future plans, in our [changelog](https://github.com/transloadit/uppy/blob/master/CHANGELOG.md).

+ 0 - 112
website/src/_posts/2020-03-1.9.md

@@ -1,112 +0,0 @@
----
-title: "Uppy 1.8 and 1.9: security, error handling and better types"
-date: 2020-03-09
-author: arturi
-published: true
----
-
-Uppy 1.8, 1.9 and a few important security patches are out! Here are the highlights:
-
-<!--more-->
-
-## Companion: security patches and new Instagram API
-
-* We released a patch to an SSRF vulnerability affecting `@uppy/companion` and the `@uppy/url` plugin. Many thanks to the parties involved in [reporting and disclosing](https://hackerone.com/reports/786956) this vulnerability to the Uppy team. The patch is available in [@uppy/companion version 1.9.5](https://github.com/transloadit/uppy/blob/master/CHANGELOG.md#194).
-* As the Instagram Legacy API will soon no longer be available, we have now added support for the new Instagram Graph API. As far as using this on `@uppy/companion` goes, not much has changed. The only difference is that you will now be retrieving your Instagram credentials from the [Facebook Developer Platform](https://developers.facebook.com/), and no longer from the [Instagram Developer Platform](https://www.instagram.com/developer/).
-
-## Error handling
-
-* We’ve significantly improved error handling and retries in `@uppy/core`, `@uppy/transloadit` and `@uppy/dashboard`. The retry button on the Status Bar, which was broken in some edge cases, now works as expected.
-* Errors from Transloadit assemblies now include Assembly ID, as well as the full assembly object, for easier debugging.
-* You can now click on the question mark (?) icon on the Informer or Dashboard error message, and get a browser alert with error details — much easier for the users to copy-paste the text this way. The Informer now also conveniently stays on screen, as long as you hover over the question mark.
-
-## Dashboard
-
-The Dashboard plugin has gained new file type icons: for images — useful before the preview is generated, or when there’s no preview at all, like with images from the Url plugin — and for archives.
-
-![](/uppy/images/blog/1.9/file-type-icons.png)
-
-## Types
-
-Our typings got a significant upgrade: plugin options can now be type-checked! In the past, we did have typings for plugin options, but the `uppy.use()` function had a fallback that would accept _any_ object as options. If your plugin options were wrong, typescript would just use the fallback and not tell you about it!
-
-Stricter typings normally mean that old code may no longer type-check. So, although this is a bugfix, you have to opt into the new types. In 2.0, the old way will be removed and only the strict types will be available.
-
-You can opt in by specifying the `StrictTypes` type parameter to the `Uppy` type:
-
-```typescript
-import Uppy = require('@uppy/core')
-const uppy = Uppy<Uppy.StrictTypes>({
-  // options here
-})
-```
-
-This type parameter must also be specified if you are storing the `uppy` instance anywhere. For example, inside a class:
-
-```typescript
-class UppyProvider extends React.Component {
-  private uppy: Uppy<Uppy.StrictTypes>
-  constructor (props) {
-    super(props)
-    this.uppy = Uppy<Uppy.StrictTypes>({
-      // etc
-    })
-  }
-}
-```
-
-If you do not specify the `StrictTypes` parameter, the old fallback for the `uppy.use()` method remains available.
-
-The typings for `@uppy/react` component props are now derived from plugin options types, so they will no longer get out of sync, as they occasionally did in the past. For example, in version 1.7, the `@uppy/drag-drop` plugin supported a `note` option to add some text to the drop area. The React typings didn't include that option, so you couldn't use it from typescript! That is now permanently fixed:
-
-```typescript
-import components = require('@uppy/react')
-const { DragDrop } = components
-
-// assuming some `uppy` variable already exists
-declare var uppy: Uppy<Uppy.StrictTypes>
-
-function MyComponent () {
-  return (
-    <DragDrop
-      uppy={uppy}
-      note='This prop is now supported!'
-    />
-  )
-}
-```
-
-Finally, the `locale` options and React props now have full typings. Your editor should now be able to provide autocompletion for language keys!
-
-![Screenshot showing VS Code autocompletion for a language key.](/uppy/images/blog/1.9/locale-type.png)
-
-We now also use `tsd`, so our typings are actually tested.
-
-See [PR #1918](https://github.com/transloadit/uppy/pull/1918) for all the details.
-
-## Downloadable ZIP archives of Uppy releases
-
-Uppy is now available as a downloadable ZIP archive from the Transloadit CDN! NPM down? Don’t like build tools? Looking for a quick way to play around with Uppy? We’ve got you covered:
-
-```
-https://releases.transloadit.com/uppy/v1.9.3/uppy-v1.9.3.zip
-```
-
-## Locales
-
-* Uppy now speaks Korean and Vietnamese.
-* The French, German and Chinese (zh_TW) translations have been improved.
-
-## Misc
-
-- @uppy/core: core: setState(modifiedFiles) in onBeforeUpload (#2028 / @arturi)
-- @uppy/core: always log errors (#2029 / @arturi)
-- @uppy/core: fix mime type checking bug (#2004 / @shahimclt)
-- @uppy/core: add .tsv and .tab: text/tab-separated-values (#2056 / @arturi)
-- @uppy/onedrive: make encryption shorter + enable onedrive on website (#2034 / @ifedapoolarewaju)
-- @uppy/react: use `componentDidUpdate` instead of `componentWillReceiveProps` (@cryptic022, #1999)
-- @uppy/xhr-upload: free item from rate limit queue when upload times out (@rtaieb, #2018)
-- @uppy/aws-s3-multipart: add optional headers for signed url (@ardeois, #1985)
-- @uppy/aws-s3: fix crash when S3 response does not have a Content-Type header (@roenschg, #2012)
-
-As always, you can find the full list of changes and package versions, as well as future plans, in our [changelog](https://github.com/transloadit/uppy/blob/master/CHANGELOG.md).

+ 0 - 563
website/src/_posts/2020-03-custom-providers.md

@@ -1,563 +0,0 @@
----
-title: "Adding Custom Providers: Step by Step Tutorial to add Custom Providers"
-date: 2020-06-08
-author: ife
-published: false
----
-
-In this post we will be going through a step by step tutorial on how to develop, and add custom [providers](/uppy/docs/providers/) to Uppy and Companion. For the purpose of this tutorial we will be building a custom provider for [Unsplash](https://unsplash.com/).
-
-<!--more-->
-
-## What are Provider Plugins?
-
-> Provider Plugins help you connect to your accounts with remote file storage providers such as Dropbox, Google Drive, Instagram and remote URLs.
->
-> They work tightly with [Companion](https://www.npmjs.com/package/@uppy/companion) — Uppy's server-to-server communication handler between your server and file storage providers.
-
-Read more on [Provider Plugins](/uppy/docs/providers/).
-
-
-Creating a custom provider composes of two parts; **Custom Companion Provider** and **Custom Uppy Plugin**
-
-## Creating a Custom Companion Provider
-
-On the Companion side, we need to create a Provider that receives the provider related requests that would come from Uppy.
-
-### Setting up Companion
-
-We'll start off by setting up a minimal express server.
-
-1. Create a folder named "custom-provider" and navigate into it
-
-```sh
-mkdir custom-provider
-cd custom-provider
-```
-2. Run `npm init` to setup your `package.json` file
-3. install express, express-session, body-parser, request, uppy and @uppy/companion
-
-```sh
-npm i -S express express-session body-parser request @uppy/companion uppy
-```
-
-with all that done, my package.json file looks something like this:
-
-```json
-{
-  "name": "custom-provider",
-  "dependencies": {
-    "body-parser": "^1.18.2",
-    "express": "^4.16.2",
-    "express-session": "^1.15.6",
-    "request": "^2.88.0",
-    "uppy": "^1.16.1",
-    "@uppy/companion": "^2.0.0"
-  },
-  "private": true,
-  "scripts": {}
-}
-```
-
-4. Create a `server/index.js` file within the project and add initiate your express server
-
-```js
-const express = require('express')
-const companion = require('@uppy/companion')
-const bodyParser = require('body-parser')
-const session = require('express-session')
-
-const app = express()
-
-app.use(bodyParser.json())
-app.use(session({
-  secret: 'some-secret',
-  resave: true,
-  saveUninitialized: true,
-}))
-
-app.use((req, res, next) => {
-  res.setHeader('Access-Control-Allow-Origin', req.headers.origin || '*')
-  res.setHeader(
-    'Access-Control-Allow-Methods',
-    'GET, POST, OPTIONS, PUT, PATCH, DELETE'
-  )
-  res.setHeader(
-    'Access-Control-Allow-Headers',
-    'Authorization, Origin, Content-Type, Accept'
-  )
-  next()
-})
-
-// initialize uppy
-const companionOptions = {
-  providerOptions: {
-    dropbox: {
-      key: 'your Dropbox key',
-      secret: 'your Dropbox secret',
-    },
-  },
-  server: {
-    host: 'localhost:3020',
-    protocol: 'http',
-  },
-  filePath: './output',
-  secret: 'some-secret',
-  debug: true,
-}
-
-app.use(companion.app(companionOptions))
-
-// handle 404
-app.use((req, res, next) => {
-  return res.status(404).json({ message: 'Not Found' })
-})
-
-companion.socket(app.listen(3020))
-
-console.log('Welcome to Companion!')
-console.log(`Listening on http://0.0.0.0:3020`)
-```
-
-The code snippet above sets up an express server and plugs Companion into it. However, the Companion setup doesn't include a custom provider yet. It only includes the Dropbox provider.
-
-To be sure everything is working correctly so far, you can start the server by running:
-
-`node server/index.js`
-
-It should log the following message in the console:
-
-```sh
-Welcome to Companion!
-Listening on http://0.0.0.0:3020
-```
-
-Now we need to proceed to add our custom provider.
-
-### Setting up Unsplash API
-
-Head to Unsplash's [developer platform](https://unsplash.com/oauth/applications) (you'd need to create an account if you don't already have one).
-
-Click "New Application" to create a new application. For the sake of this tutorial, I am naming my application "companion-provider". Once it is created, your page should look something like this:
-
-![](/uppy/images/blog/custom-providers/unsplash-api-dashboard.png)
-
-### Writing the custom provider
-
-Back to our project directory, we are going to create a `server/customprovider.js` file. This will contain the code that implements the Unsplash provider.
-
-According to [the docs](/uppy/docs/companion/#Adding-custom-providers), we need to create a class that implements the methods `list`, `download`, and `size`.
-
-The constructor of our class will look something like this:
-
-```js
-class MyCustomProvider {
-  constructor (options) {
-    this.authProvider = 'myunsplash' // the name of our provider (lowercased)
-  }
-  // ...
-}
-```
-
-Our `list` method would look something like this
-
-```js
-list ({ token, directory }, done) {
-  const path = directory ? `/${directory}/photos` : ''
-  const options = {
-    url: `${BASE_URL}/collections${path}`,
-    method: 'GET',
-    json: true,
-    headers: {
-      Authorization: `Bearer ${token}`
-    }
-  }
-
-  request(options, (err, resp, body) => {
-    if (err) {
-      console.log(err)
-      done(err)
-      return
-    }
-
-    done(null, this._adaptData(body))
-  })
-}
-
-_adaptData (res) {
-  const data = {
-    username: null,
-    items: [],
-    nextPagePath: null
-  }
-
-  const items = res
-  items.forEach((item) => {
-    const isFolder = !!item.published_at
-    data.items.push({
-      isFolder: isFolder,
-      icon: isFolder ? item.cover_photo.urls.thumb : item.urls.thumb,
-      name: item.title || item.description,
-      mimeType: isFolder ? null : 'image/jpeg',
-      id: item.id,
-      thumbnail: isFolder ? item.cover_photo.urls.thumb : item.urls.thumb,
-      requestPath: item.id,
-      modifiedDate: item.updated_at,
-      size: null
-    })
-  })
-
-  return data
-}
-```
-
-the method makes an http request to the unsplash API based on the documentation to [list collections](https://unsplash.com/documentation#list-collections) and [list collection's photos](https://unsplash.com/documentation#get-a-collections-photos). The `_adaptData` method exists to help us conform to [the list data](/uppy/docs/companion/#list-data)
-
-Our `size` method will look something like this:
-
-```js
-size ({ id, token }, done) {
-  const options = {
-    url: `${BASE_URL}/photos/${id}`,
-    method: 'GET',
-    json: true,
-    headers: {
-      Authorization: `Bearer ${token}`
-    }
-  }
-
-  request(options, (err, resp, body) => {
-    if (err) {
-      console.log(err)
-      done(err)
-      return
-    }
-
-    done(null, body.width * body.height)
-  })
-}
-```
-
-Unsplash's API doesn't provide the file size, so we are estimating it by multiplying the width and height of the image.
-
-The `download` method will look like this:
-
-```js
-download ({ id, token }, onData) {
-  const options = {
-    url: `${BASE_URL}/photos/${id}`,
-    method: 'GET',
-    json: true,
-    headers: {
-      Authorization: `Bearer ${token}`
-    }
-  }
-
-  request(options, (err, resp, body) => {
-    if (err) {
-      console.log(err)
-      return
-    }
-
-    const url = body.links.download
-    request.get(url)
-      .on('data', (chunk) => onData(null, chunk))
-      .on('end', () => onData(null, null))
-      .on('error', (err) => console.log(err))
-  })
-}
-```
-With all of this put together the entire file would look something like this:
-
-```js
-const request = require('request')
-
-const BASE_URL = 'https://api.unsplash.com'
-
-class MyCustomProvider {
-  constructor (options) {
-    this.authProvider = 'myunsplash'
-  }
-
-  list ({ token, directory }, done) {
-    const path = directory ? `/${directory}/photos` : ''
-    const options = {
-      url: `${BASE_URL}/collections${path}`,
-      method: 'GET',
-      json: true,
-      headers: {
-        Authorization: `Bearer ${token}`,
-      },
-    }
-
-    request(options, (err, resp, body) => {
-      if (err) {
-        console.log(err)
-        done(err)
-        return
-      }
-
-      done(null, this._adaptData(body))
-    })
-  }
-
-  download ({ id, token }, onData) {
-    const options = {
-      url: `${BASE_URL}/photos/${id}`,
-      method: 'GET',
-      json: true,
-      headers: {
-        Authorization: `Bearer ${token}`,
-      },
-    }
-
-    request(options, (err, resp, body) => {
-      if (err) {
-        console.log(err)
-        return
-      }
-
-      const url = body.links.download
-      request.get(url)
-        .on('data', (chunk) => onData(null, chunk))
-        .on('end', () => onData(null, null))
-        .on('error', (err) => console.log(err))
-    })
-  }
-
-  size ({ id, token }, done) {
-    const options = {
-      url: `${BASE_URL}/photos/${id}`,
-      method: 'GET',
-      json: true,
-      headers: {
-        Authorization: `Bearer ${token}`,
-      },
-    }
-
-    request(options, (err, resp, body) => {
-      if (err) {
-        console.log(err)
-        done(err)
-        return
-      }
-
-      done(null, body.width * body.height)
-    })
-  }
-
-  _adaptData (res) {
-    const data = {
-      username: null,
-      items: [],
-      nextPagePath: null,
-    }
-
-    const items = res
-    items.forEach((item) => {
-      const isFolder = !!item.published_at
-      data.items.push({
-        isFolder,
-        icon: isFolder ? item.cover_photo.urls.thumb : item.urls.thumb,
-        name: item.title || item.description,
-        mimeType: isFolder ? null : 'image/jpeg',
-        id: item.id,
-        thumbnail: isFolder ? item.cover_photo.urls.thumb : item.urls.thumb,
-        requestPath: item.id,
-        modifiedDate: item.updated_at,
-        size: null,
-      })
-    })
-
-    return data
-  }
-}
-
-module.exports = MyCustomProvider
-```
-
-Now we can go back to `server/index.js` to enable our custom provider:
-
-```js
-// initialize uppy
-const uppyOptions = {
-  providerOptions: {
-    dropbox: {
-      key: 'your Dropbox key',
-      secret: 'your Dropbox secret',
-    },
-  },
-  customProviders: {
-    myunsplash: {
-      config: {
-        // source https://unsplash.com/documentation#user-authentication
-        authorize_url: 'https://unsplash.com/oauth/authorize',
-        access_url: 'https://unsplash.com/oauth/token',
-        oauth: 2,
-        key: 'YOUR UNSPLASH API KEY',
-        secret: 'YOUR UNSPLASH API SECRET',
-      },
-      // you provider module
-      module: require('./customprovider'),
-    },
-  },
-  server: {
-    host: 'localhost:3020',
-    protocol: 'http',
-  },
-  filePath: './output',
-  secret: 'some-secret',
-  debug: true,
-}
-```
-
-You can find your unsplash API key on your Unsplash [app dashboard](https://unsplash.com/oauth/applications)
-
-## Creating a Custom Uppy Plugin
-
-Now we need to implement the client part of this. To do this we need to implement an Uppy Plugin.
-
-First, we'll create a `client/MyCustomProvider.js` file. Following the instructions [here](/uppy/docs/writing-plugins/), our Uppy Plugin (aka `client/MyCustomProvider.js` file) could look something like this:
-
-```js
-const { UIPlugin } = require('@uppy/core')
-const { Provider } = require('@uppy/companion-client')
-const { ProviderViews } = require('@uppy/provider-views')
-const { h } = require('preact')
-
-module.exports = class MyCustomProvider extends UIPlugin {
-  constructor (uppy, opts) {
-    super(uppy, opts)
-    this.type = 'acquirer'
-    this.id = this.opts.id || 'MyCustomProvider'
-    Provider.initPlugin(this, opts)
-
-    this.title = 'MyUnsplash'
-    this.icon = () => (
-      <svg width="32" height="32" xmlns="http://www.w3.org/2000/svg">
-        <path d="M10 9V0h12v9H10zm12 5h10v18H0V14h10v9h12v-9z" fill="#000000" fill-rule="nonzero" />
-      </svg>
-    )
-
-    this.provider = new Provider(uppy, {
-      companionUrl: this.opts.companionUrl,
-      companionHeaders: this.opts.companionHeaders,
-      provider: 'myunsplash',
-      pluginId: this.id,
-    })
-
-    this.files = []
-    this.onFirstRender = this.onFirstRender.bind(this)
-    this.render = this.render.bind(this)
-
-    // merge default options with the ones set by user
-    this.opts = { ...opts }
-  }
-
-  install () {
-    this.view = new ProviderViews(this, {
-      provider: this.provider,
-    })
-
-    const { target } = this.opts
-    if (target) {
-      this.mount(target, this)
-    }
-  }
-
-  uninstall () {
-    this.view.tearDown()
-    this.unmount()
-  }
-
-  onFirstRender () {
-    return this.view.getFolder()
-  }
-
-  render (state) {
-    return this.view.render(state)
-  }
-}
-```
-
-Asides from implementing the methods required by the Uppy Plugin, we are also implmeneting the method `onFirstRender`. This is because we are using the [@uppy/provider-views](https://www.npmjs.com/package/@uppy/provider-views) package to reuse its UI componenets. The [@uppy/provider-views](https://www.npmjs.com/package/@uppy/provider-views) package requires that our plugin implements an `onFirstRender` method.
-
-We are also pre-setting a default plugin with a default object structure which is used by the `@uppy/provider-views` package.
-
-With that done, we can now use our new plugin with Uppy. Create a file `client/main.js` and initiate Uppy in there like so:
-
-```js
-const Uppy = require('@uppy/core')
-const Dropbox = require('@uppy/dropbox')
-const Tus = require('@uppy/tus')
-const Dashboard = require('@uppy/dashboard')
-const MyCustomProvider = require('./MyCustomProvider')
-
-const uppy = Uppy({
-  debug: true,
-})
-
-uppy.use(Dropbox, {
-  companionUrl: 'http://localhost:3020',
-})
-
-uppy.use(MyCustomProvider, {
-  companionUrl: 'http://localhost:3020',
-})
-
-uppy.use(Dashboard, {
-  inline: true,
-  target: 'body',
-  plugins: ['Dropbox', 'MyCustomProvider'],
-})
-
-uppy.use(Tus, { endpoint: 'https://master.tus.io/files/' })
-```
-
-Now we need to bundle the file so it can be loaded on the browser. To do this, we'd install [budo](https://www.npmjs.com/package/budo):
-
-1. In the root project directory, run `npm install budo -g`.
-2. Create a `babel.config.js` file looking like so:
-
-```js
-module.exports = (api) => {
-  api.env('test')
-  return {
-    presets: [
-      ['@babel/preset-env', {
-        modules: false,
-        loose: true,
-      }],
-    ],
-    plugins: [
-      ['@babel/plugin-transform-react-jsx', { pragma: 'h' }],
-    ].filter(Boolean),
-  }
-}
-```
-3. Add an `index.html` file (in the root of the project) that uses a bundle file like so:
-
-```html
-<!DOCTYPE html>
-<html>
-  <head>
-    <meta charset="utf-8">
-    <meta name="viewport" content="width=device-width, initial-scale=1">
-    <title>Uppy Custom provider Example</title>
-    <link href="https://releases.transloadit.com/uppy/v1.15.0/uppy.min.css" rel="stylesheet">
-  </head>
-  <body>
-    <script src="bundle.js"></script>
-  </body>
-</html>
-```
-
-4. Create the bundle file by running `budo client/main.js:bundle.js -- -t babelify`. This will bundle your `client` side work and have it running on a local server. Please check the console log to see on what port the server is running. As at the time of this writing, it defaults to `9966` (URL will be http://localhost:9966/).
-
-You can now load the URL of your client on your browser to see it running. When I run mine, it looks something like this:
-
-![](/uppy/images/blog/custom-providers/dashboard-preview.png)
-
-In order to use this with our Companion implementation, we need to also start our Companion server by running `node server/index.js`.
-
-Congrats! 🎉We have completed our custom plugin at this point. For an example source code on this tutorial, please see the [custom provider example](https://github.com/transloadit/uppy/tree/master/examples/custom-provider).

+ 0 - 54
website/src/_posts/2020-04-1.10.md

@@ -1,54 +0,0 @@
----
-title: "Uppy 1.10.1: Facebook and OneDrive"
-date: 2020-04-03
-author: ife
-published: true
----
-
-Uppy `1.10.1` adds long-awaited support for [Facebook](/docs/facebook/) and [OneDrive](/docs/onedrive/) 🎉
-
-![Screenshot showing Uppy file uploader with Facebook and OneDrive options](/uppy/images/blog/1.10/uppy-facebook-onedrive.png)
-
-```js
-const uppy = Uppy()
-uppy.use(Dashboard)
-uppy.use(Facebook, { target: Dashboard, companionUrl: 'https://companion.uppy.io/' })
-uppy.use(OneDrive, { target: Dashboard, companionUrl: 'https://companion.uppy.io/' })
-```
-
-Try the live demos on [Transloadit.com](https://transloadit.com): import your files from Facebook or OneDrive, and then:
-
-- [Apply a watermark to an image](https://transloadit.com/demos/image-manipulation/text-watermarking/)
-- [Convert an image to WebP](https://transloadit.com/demos/image-manipulation/convert-to-webp/)
-- [Encode a video, extract 8 thumbnails and store everything in an S3 bucket](https://transloadit.com/demos/file-exporting/store-encoding-and-thumbnails-on-s3/)
-- [Encode video for iPhone](https://transloadit.com/demos/video-encoding/encode-for-apple-iphone-11-pro-max/)
-- [Create a single Zip file containing all uploaded files](https://transloadit.com/demos/file-compressing/create-one-zip-file-containing-all-uploaded-files/)
-
-(Uppy demos are below the description and steps, under “Live Demo. See for yourself” ;-)
-
-You can also play with an interactive demo, enabling different Uppy options and providers on the fly: </uppy/examples/dashboard>
-
-OneDrive:
-
-![Screenshot showing Uppy file uploader with OneDrive file list](/uppy/images/blog/1.10/uppy-onedrive.png)
-
-Facebook:
-
-![Screenshot showing Uppy file uploader with Facebook file list](/uppy/images/blog/1.10/uppy-facebook.png)
-
-<!--more-->
-
-As with Dropbox and Instagram, using the Facebook and OneDrive integrations requires the client Plugins (see [here for Facebook](/docs/facebook/) and see [here for OneDrive](/docs/onedrive/)), and also your [Companion](/docs/companion/#Options) integration.
-
-This is an exciting release for us, and we can't wait to get some feedback (GitHub issues and PRs) on this! :)
-
-## Misc
-
-- @uppy/companion: pass `endpoint` and `region` to AWS SDK constructor (#2113 / @goto-bus-stop)
-- @uppy/companion: Allow S3 ACL to be specified in Companion Standalone (#2111 / @jasonbosco)
-- @uppy/companion: return 401 early if token is not set (#2118 / @ifedapoolarewaju)
-- @uppy/companion: allow providing any S3 option, closes #1388 (#2030 / @goto-bus-stop)
-- @uppy/companion:: don’t log redundant errors in production (#2112 / @ifedapoolarewaju)
-- docs: Add S3 ACL option to companion docs (#2109 / @jasonbosco)
-
-As always, you can find the full list of changes and package versions, as well as future plans, in our [changelog](https://github.com/transloadit/uppy/blob/master/CHANGELOG.md).

+ 0 - 105
website/src/_posts/2020-04-1.13.md

@@ -1,105 +0,0 @@
----
-title: "Uppy 1.11 — 1.13: Dark Mode, custom meta fields and Google Docs in Companion"
-date: 2020-04-20
-author: arturi
-image: "/uppy/uppy/images/blog/1.13/uppy-dashboard-dark-mar-2020.png"
-published: true
----
-
-Releases 1.11 through 1.13 introduced a bunch of major new features and bugfixes. Let's go through the main ones!
-
-## Dark mode
-
-A little while ago we’ve [announced work in progress](https://mobile.twitter.com/uppy_io/status/1221070643543838721) on Dark Mode for the Dashboard. We're happy to tell you it’s live now! You can try it out on [the Dashboard example page](/examples/dashboard/).
-
-<video alt="Demo video showing Uppy Dark Mode" muted autoplay loop>
-  <source src="/uppy/images/blog/1.13/dark-mode-auto.webm" type="video/webm">
-  <source src="/uppy/images/blog/1.13/dark-mode-auto.mp4" type="video/mp4">
-</video>
-
-There are three options available:
-
-- `light` — the default
-- `dark`
-- `auto` — will respect the user’s system settings and switch automatically
-
-```js
-uppy.use(Dashboard, {
-  theme: 'dark',
-})
-```
-
-![](/uppy/images/blog/1.13/uppy-dashboard-dark-mar-2020.png)
-
-<!--more-->
-
-## Custom meta fields
-
-This is big one! Thanks to @galli-leo, you can now add custom fields to the Dashboard meta editor, such as `<input type="tel">`, `<select>` or `<input type="checkbox">`, like this:
-
-```js
-uppy.use(Dashboard, {
-  trigger: '#pick-files',
-  metaFields: [
-    { id: 'caption', name: 'Caption', placeholder: 'describe what the image is about' },
-    {
-      id: 'public',
-      name: 'Public',
-      render: ({ value, onChange }, h) => {
-        return h('input', {
-          type: 'checkbox',
-          onChange: (ev) => onChange(ev.target.checked ? 'on' : 'off'),
-          defaultChecked: value === 'on',
-        })
-      },
-    },
-  ],
-})
-```
-
-See [the docs](/docs/dashboard/#metaFields) and [PR #2147](https://github.com/transloadit/uppy/pull/2147) for details.
-
-## Google Docs support in Companion
-
-In the past, Uppy could already import files from Google Drive using Companion. However, files from Google Docs are not _really_ files, and could not be imported. That was confusing for users: some of their files simply didn't appear!
-
-Companion now automagically converts GSuite documents, such as docs, spreadsheets and presentations, to `.docx`, `.xlsx` and `.ppt` files that can be opened in various applications. The current list of conversions is hardcoded to:
-
-```json
-{
-  "application/vnd.google-apps.document": ".docx",
-  "application/vnd.google-apps.drawing": ".png",
-  "application/vnd.google-apps.script": ".json",
-  "application/vnd.google-apps.spreadsheet": ".xlsx",
-  "application/vnd.google-apps.presentation": ".ppt"
-}
-```
-
-This may be configurable in a future release.
-
-Note that only documents under 10MB are converted. This is a limitation set by the Google Drive API.
-
-## AWS S3
-
-The Aws S3 plugin now handles uploads internally, instead of deferring to XHR Upload. This change fixes many bugs with Aws S3. See [PR #2060](https://github.com/transloadit/uppy/pull/2147) for details.
-
-## Locales
-
-Polish, Croatian and Romanian language packs have been added by @alfatv, @dkisic and @akizor :tada:
-
-## Exifr in Thumbnail Generator
-
-[@MikeKovarik](https://github.com/MikeKovarik) created an awesome library called [Exifr](https://github.com/MikeKovarik/exifr), useful for extracting EXIF image data. He was kind enough to submit a PR that replaces Uppy’s internal fork of `exif-js` with `exifr`. Our thumbnail generation is now faster and more robust! See [PR 2140](https://github.com/transloadit/uppy/pull/2140) for details.
-
-## Misc
-
-- @uppy/tus, @uppy/xhr-upload: emit error when companion returns error during upload creation (#2166 / @ifedapoolarewaju)
-- @uppy/transloadit: fix progress with very different Assembly runtimes (#2143 / @agreene-coursera)
-- @uppy/core: Only `_startIfAutoProceed` if some files were actually added (#2146 / @arturi)
-- @uppy/companion: emit error to client if download fails (#2139 / @ifedapoolarewaju)
-- @uppy/companion: validate all client provided upload data. (#2160 / @ifedapoolarewaju)
-- @uppy/dashboard: Log warning instead of an error when trigger is not found (#2144 / @arturi)
-- @uppy/robodog: Pass `hideUploadButton` to Dashboard in Robodog too (#2169 / @arturi)
-- @uppy/aws-s3-multipart: emit `upload-error` when companion returns error during upload instantiation (#2168 / @ifedapoolarewaju)
-
-As always, you can find the full list of changes and package versions, as well as future plans, in our [changelog](https://github.com/transloadit/uppy/blob/master/CHANGELOG.md).

+ 0 - 47
website/src/_posts/2020-07-1.18-image-editor.md

@@ -1,47 +0,0 @@
----
-title: "Image Editor 🌈"
-date: 2020-07-21
-author: arturi
-image: "/uppy/uppy/images/blog/1.18-image-editor/image-editor-dashboard.jpg"
-published: true
----
-
-One of the most-requested Uppy features, the [Image Editor](/docs/image-editor/), has landed (as beta) in 1.18.
-
-<video alt="Demo video showing Uppy with Image Editor plugin — cropping, rotating and resizing images" poster="/uppy/uppy/images/blog/1.18-image-editor/image-editor-dashboard.jpg" muted autoplay loop>
-  <source src="/uppy/images/blog/1.18-image-editor/image-editor-demo.mp4" type="video/mp4">
-  Your browser does not support the video tag: /uppy/uppy/images/blog/1.18-image-editor/image-editor-demo.mp4
-</video>
-
-<!--more-->
-
-The editor currently supports cropping, resizing, rotating, flipping and zooming your images in and out. You can try it out on [the Dashboard example page](/examples/dashboard/).
-
-Under the hood we are using the excellent open source (just like Uppy itself) [Cropper.js](https://fengyuanchen.github.io/cropperjs/) library.
-
-```sh
-npm install @uppy/image-editor
-```
-
-```js
-const Uppy = require('@uppy/core')
-const Dashboard = require('@uppy/dashboard')
-const ImageEditor = require('@uppy/image-editor')
-
-const uppy = new Uppy()
-uppy.use(Dashboard)
-uppy.use(ImageEditor, {
-  target: Dashboard,
-  quality: 0.8, // for the resulting image, 0.8 is a sensible default
-})
-```
-
-![Uppy with Image Editor plugin screenshot — cropping, rotating and resizing images](/uppy/uppy/images/blog/1.18-image-editor/image-editor-dashboard.jpg)
-
-The Image Editor plugin is meant to be used with the Dashboard UI, but in theory it can work without it, rendered somewhere else. This has not been tested, try at your own risk ;-)
-
-You can [override the options from Cropper.js](/uppy/docs/image-editor/#cropperOptions), too. Check out [the docs for up to date options and events](/uppy/docs/image-editor).
-
-Please leave your feedback [on Twitter](https://mobile.twitter.com/uppy_io/status/1285532376249110528).
-
-<blockquote class="twitter-tweet"><p lang="en" dir="ltr">🖼 One of the most-requested Uppy features, the Image Editor, for cropping, resizing, rotating, flipping and zooming your images is live now! <br><br>Check it out: <a href="https://t.co/dDXRoW0HGj">https://t.co/dDXRoW0HGj</a> <a href="https://t.co/IhYo0gwtvP">pic.twitter.com/IhYo0gwtvP</a></p>&mdash; Uppy (@uppy_io) <a href="https://twitter.com/uppy_io/status/1285532376249110528?ref_src=twsrc%5Etfw">July 21, 2020</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script> 

+ 0 - 36
website/src/_posts/2020-09-companion-2.0.md

@@ -1,36 +0,0 @@
----
-title: "Companion 2.0 is here"
-date: 2020-09-09
-author: ife
-published: true
----
-
-We are happy to announce version 2.0 of Companion! 🎉 After maintaining and improving the 1.x series for over a year, we're now releasing a major version bump on the Companion package. The drive on this release is mainly towards fixing some terminology inconsistencies and aligning with Node.js LTS to ease the maintenance burden.
-
-<!--more-->
-
-So what are the changes you can expect with Companion 2.0?
-
-## Node >= v10
-
-Node.js 8.x has reached end-of-life. Consequently, Companion 2.0 has dropped support for Node.js 6.x and Node.js 8.x, and now requires that you run at least Node.js 10.20.1.
-
-## Renamed provider options
-
-Pre 2.0, there were inconsistencies in relation to the provider names. In some places, the Google Drive provider was referred to as *google* (e.g., in `providerOptions`) while in some other places, it was referred to as *drive* (e.g., the server endpoints `/drive/list`). Companion 2.0 now consistently uses the name *drive* everywhere. Similarly, the OneDrive provider was made to have the consistent name *onedrive*.
-
-## Changed Redirect URIs
-
-On the topic of consistent naming, we have also made some changes to the redirect URIs supplied during the OAuth process. For example, in the case of Google Drive, the form of the old redirect URI was `https://mycompanionwebsite.tld/connect/google/callback`. In Companion 2.0, this is now changed to `https://mycompanionwebsite.tld/drive/redirect`. This is a Breaking Change: you will need to make the corresponding changes to your redirect URIs on your Providers' API Dashboards.
-
-## Compatibility with Uppy 1.x client
-
-Companion 2.0 is compatible with any Uppy 1.x version, so you don't have to worry about upgrading your Uppy client installations when you upgrade Companion on your server.
-
-## Will Companion v1 still receive updates?
-
-Companion 1.x will continue to receive security patches until March 1, 2021.
-
-## Migrating from Companion 1.x to 2.x
-
-Given the breaking changes, we've created a [migration tutorial for upgrading from Companion v1 to v2](/uppy/docs/companion/#Migrating-v1-to-v2).

+ 0 - 54
website/src/_posts/2020-10-1.22.md

@@ -1,54 +0,0 @@
----
-title: "🎃 Uppy 1.22: Webcam camera source, Unsplash and maxTotalFileSize"
-date: 2020-10-30
-author: arturi
-image: "/uppy/uppy/images/blog/1.22/unsplash.jpg"
-published: true
----
-
-Uppy 1.22 (the spooky Halloween edition) adds a new Unsplash provider, Webcam camera selector dropdown and a `maxTotalFileSize` restriction.
-
-<!--more-->
-
-## Webcam Camera Source
-
-If your device has multiple cameras, you can now choose which one you want to use (if you allow the [showVideoSourceDropdown](/uppy/docs/webcam/#showVideoSourceDropdown-false) option).
-
-![](/uppy/images/blog/1.22/webcam-dropdown-full.png)
-
-![](/uppy/images/blog/1.22/webcam-dropdown-short.png)
-
-## maxTotalFileSize
-
-New `maxTotalFileSize` restriction makes sure the total size of all the files selected isn’t over a certain threshold:
-
-```js
-const uppy = new Uppy({
-  restrictions: {
-    maxTotalFileSize: 104857600,
-  },
-})
-```
-
-## Unsplash
-
-[Unsplash](https://unsplash.com/) is a popular website dedicated to sharing free stock photography. With a new Uppy plugin you can search for “trains”, “New York” or “Harry Potter” images and upload them where needed:
-
-![](/uppy/images/blog/1.22/unsplash.jpg)
-
-The plugin launches in beta, but you can already try it out by installing `@uppy/unsplash` and upgrading `@uppy/companion` to the latest version (2.1.0).
-
-## Misc
-
-- @uppy/companion: add option to hide welcome and metrics (#2521 / @szh)
-- @uppy/companion: add more test cases to companion tests (#2585 / @ifedapoolarewaju)
-- @uppy/companion: upgrade prometheus (fixes memory leak) (#2600 / @ifedapoolarewaju)
-- @uppy/locales: update th_TH.js (#2571 / @dogrocker)
-- @uppy/locales: add missing camera translations to de_DE (#2574 / @ferdiusa)
-- @uppy/locales: update el_GR.js with more proper wording for Drag'n'Drop (#2578 / @aalepis)
-- @uppy/core: add postprocess progress when upload success (#2535 / @mejiaej)
-- @uppy/react: Webpack5: Fix react imports (#2589 / @olemoign)
-- @uppy/thumbnail-generator: Add support for png thumbnails (#2603 / @SxDx)
-- website: mobile issues fixes + compact Companion migration table (#2593 / @nqst)
-
-As always, you can find the full list of changes and package versions, as well as future plans, in our [changelog](https://github.com/transloadit/uppy/blob/master/CHANGELOG.md).

+ 0 - 105
website/src/_posts/2020-11-1.23.md

@@ -1,105 +0,0 @@
----
-title: "Uppy 1.23: Vue.js, Box, Done button and cloud file restrictions"
-date: 2020-11-30
-author: arturi
-image: "/uppy/uppy/images/blog/1.23/vue-code-cover.png"
-published: true
----
-
-Uppy 1.23 brings Vue.js components 💥, Box file service support, a “Done” button for the Status Bar + Dashboard, and a better cloud file restrictions UI.
-
-![Vue.js Uppy code sample](/uppy/images/blog/1.23/vue-code-cover.png)
-
-<!--more-->
-
-## Vue.js
-
-We’ve had [Uppy React components](/uppy/docs/react/) available for quite some time now. With the increasing popularity of Vue.js library, we’re proud to announce it’s now much easier to use [Uppy with Vue](/uppy/docs/vue/), thanks to the amazing work by [Andrew Kachnic](https://mobile.twitter.com/su_andrewk):
-
-```sh
-npm install @uppy/vue
-```
-
-```html
-<template>
-  <div id="app">
-    <dashboard :uppy="uppy" :plugins="['Webcam']"/>
-  </div>
-</template>
-
-<script>
-import { Dashboard } from '@uppy/vue'
-
-import '@uppy/core/dist/style.css'
-import '@uppy/dashboard/dist/style.css'
-
-import Uppy from '@uppy/core'
-import Webcam from '@uppy/webcam'
-
-export default {
-  name: 'App',
-  components: {
-    Dashboard
-  },
-  computed: {
-    uppy: () => new Uppy().use(Webcam)
-  },
-  beforeDestroy () {
-    this.uppy.close()
-  }
-}
-</script>
-```
-
-`@uppy/vue` package provides components for all of the most popular Uppy UI plugins:
-
-- `<dashboard />` - renders an inline `@uppy/dashboard`
-- `<dashboard-modal />` - renders a `@uppy/dashboard` modal
-- `<drag-drop />` - renders a `@uppy/drag-drop` area
-- `<progress-bar />` - renders a `@uppy/progress-bar`
-- `<status-bar />` - renders a `@uppy/status-bar`
-
-Check out the [Vue documentation](/uppy/docs/vue/) for details.
-
-Angular and Svelte support is on our list next.
-
-## Cloud File Restrictions
-
-Dropbox, Instagram, Google Drive and other cloud providers now immediately gray out files that won’t pass Uppy restrictions set by the developer:
-
-![Google Drive restrictions example](/uppy/images/blog/1.23/restrictions-1.jpg)
-
-![Instagram restrictions example](/uppy/images/blog/1.23/restrictions-2.jpg)
-
-## Done Button
-
-If [`doneButtonHandler`](/uppy/docs/dashboard/#doneButtonHandler) option is passed to the Status Bar plugin, it will render a “Done” button in place of Pause/Resume/Cancel buttons, once the upload/encoding is done. The behaviour of the “Done” button is defined by the handler function — can be used to close file picker modals or clear the upload state.
-
-<img class="border" alt="Status Bar Done button UI" src="/uppy/images/blog/1.23/status-bar-done.jpg">
-
-By default the Done button will close the Dashboard modal window and reset Uppy state.
-
-## Box File Provider
-
-Thanks to [@cartfisk](https://github.com/cartfisk) Uppy gains support for Box file service. You can add try it out by doing `npm install @uppy/box` and upgrading `@uppy/companion` to the latest version.
-
-Bragging moment, here’s what [@cartfish had to say about Uppy](https://github.com/transloadit/uppy/pull/2549#issue-491527196):
-
-> Hope this is useful! Hats off to the awesome React integration, easy contribution workflow, helpful docs, and readable, clean code. 10/10.
-
-## Image Editor Optional Buttons
-
-`@uppy/image-editor` plugin got support for optional buttons — you can choose to hide or show just the ones you need — crop, rotate, square, landscape, etc. Thanks, [@lamartire](https://github.com/lamartire)!
-
-See new [`actions`](/uppy/docs/image-editor/#Options) property in the Image Editor’s options.
-
-## Misc
-
-- @uppy/robodog: Update addTransloaditPlugin.js to include missing configurable Transloadit plugin options (#2612 / @ethanwillis)
-- @uppy/core: add `uppy.opts.infoTimeout` (#2619 / @arturi)
-- @uppy/onedrive: fix OneDrive for Business (#2536 / @szh)
-- @uppy/image-editor: show “edit” icon even when metaFields are not specified (#2614 / @arturi)
-- test: added test DeepFrozenStore with deepFreeze to try and assert that state in not mutated anywhere by accident (#2607 / @arturi)
-- build: switched from Travis to GitHub Actions (@goto-bus-stop)
-
-As always, you can find the full list of changes and package versions, as well as future plans, in our [changelog](https://github.com/transloadit/uppy/blob/master/CHANGELOG.md).

+ 0 - 98
website/src/_posts/2020-12-1.24.md

@@ -1,98 +0,0 @@
----
-title: "Uppy 1.24: 🎅 Happy Holidays — Svelte, React hook, Auto Open Image Editor"
-date: 2020-12-24
-author: renee
-image: "/uppy/uppy/images/blog/1.24/uppy-svelte.png"
-published: true
----
-
-Uppy 1.24 adds an experimental Svelte integration, additional React components, `autoOpenFileEditor` option for Dashboard, and a Norwegian (bokmål) translation!
-
-![](/uppy/images/blog/1.24/uppy-svelte.png)
-
-<!--more-->
-
-## Svelte
-
-Last month we introduced the first release of official Vue.js components for Uppy. This month, we're releasing `@uppy/svelte`: a set of components for the Svelte framework. Credit, once again, goes to [Andrew Kachnic](https://github.com/ajkachnic) (and special thanks to [Adam Medford](https://github.com/adammedford))!
-
-```sh
-npm install @uppy/svelte
-```
-
-```html
-<main>
-  <Dashboard
-    uppy={uppy}
-    plugins={['Webcam']}
-  />
-</main>
-
-<script>
-import { Dashboard } from '@uppy/svelte'
-
-import Uppy from '@uppy/core'
-import Webcam from '@uppy/webcam'
-
-let uppy = new Uppy().use(Webcam)
-</script>
-```
-
-Please see [the Uppy Svelte documentation](/uppy/docs/svelte/) for all the components.
-
-## React
-
-The `@uppy/react` package now contains `<FileInput />`, a wrapper for the `@uppy/file-input` plugin. It can render simple HTML file input or button, for situations where a flashy user interface is not desired.
-
-Additionally, `useUppy()` is our first React Hook, made to manage the lifecycle of Uppy instances. Without this, it's easy to accidentally create many garbage Uppy instances in modern React code.
-
-```js
-import { FileInput, useUppy } from '@uppy/react'
-import Uppy from '@uppy/core'
-import Tus from '@uppy/tus'
-
-function MyUploader () {
-  const uppy = useUppy(() => {
-    return new Uppy()
-      .use(Tus, { endpoint: 'https://tusd.tusdemo.net' })
-  })
-
-  // useUppy() will automatically `.close()` the Uppy instance for us when
-  // MyUploader unmounts.
-
-  return (
-    <FileInput uppy={uppy} />
-  )
-}
-```
-
-This does not solve all our problems yet: dynamic configuration is still difficult to do right, due to the mismatch between React's declarative and Uppy's imperative style. We hope to add more documentation and tools to bridge the gap in the new year.
-
-## Locales
-
-[@elkebab](https://github.com/elkebab) contributed a Norwegian translation!
-
-## Auto Open Image Editor
-
-If you are using Image Editor plugin with the Dashboard, there’s a new option [`autoOpenFileEditor`](/uppy/docs/dashboard/#autoOpenFileEditor-false), which will open Image Editor automatically for the first image that was added to Uppy.
-
-```js
-const uppy = new Uppy()
-  .use(Dashboard, {
-    autoOpenFileEditor: true,
-  })
-```
-
-<img class="border" src="/uppy/images/blog/1.24/image-editor-alone.jpg" alt="Uppy Image Editor in Dashboard">
-
-## Misc
-
-- @uppy/core: new event `files-added` with all files added in one batch (#2681 / @arturi)
-- @uppy/utils: Add archive mime types (#2703 / @ahmedkandel)
-- @uppy/companion: fix crash when Dropbox API returns an error (#2687 / @ifedapoolarewaju)
-
-See [changelog](https://github.com/transloadit/uppy/blob/master/CHANGELOG.md#1240) for details.
-
-## Happy Holidays!
-
-Many thanks to all our contributors and users over the past year! Uppy has gained quite a few new features and important improvements in 2020 (despite everything going on offline!). We hope to see you again soon in our first release of 2021 :)

+ 0 - 53
website/src/_posts/2021-01-1.25.md

@@ -1,53 +0,0 @@
----
-title: "Uppy 1.25: right-to-left scripts, Ukrainian translation, Companion improvements"
-date: 2021-01-29
-author: arturi
-image: "/uppy/uppy/images/blog/1.25/right-to-left.jpg"
-published: true
----
-
-Uppy 1.25 adds support for right-to-left scripts, Ukrainian translation and various improvements for Companion.
-
-Just see how cool this looks, and read further for a video demo and some behind the scenes implementation sorcery:
-
-![Uppy Dashboard UI flipped for right-to-left Arabic language](/uppy/images/blog/1.25/right-to-left.jpg)
-
-<!--more-->
-
-## Right-to-left scripts
-
-Renée have improved support for right-to-left scripts (such as Arabic, Farsi, Hebrew). This means that Uppy UI can now be mirrored, like how you might see on sites like [Wikipedia](https://ar.wikipedia.org/wiki/%D8%A7%D9%84%D8%B5%D9%81%D8%AD%D8%A9_%D8%A7%D9%84%D8%B1%D8%A6%D9%8A%D8%B3%D9%8A%D8%A9).
-
-<video alt="Demo video showing Uppy with right-to-left mirrored UI" poster="/uppy/images/blog/1.25/right-to-left.jpg" muted autoplay loop>
-  <source src="/uppy/images/blog/1.25/right-to-left.mp4" type="video/mp4">
-  Your browser does not support the video tag: /uppy/uppy/images/blog/uppy/images/blog/1.25/right-to-left.mp4
-</video>
-
-HTML `dir` attribute can be used to set the direction — any parent element of the Dashboard may have it. It’s good practice for sites to add a dir attribute on `<html>` element, but for backwards compatibility the Dashboard will default to left-to-right rendering.
-
-The text direction can also be set in code using the new `direction` option for the Dashboard plugin. This is useful for the modal dashboard, which would typically be mounted in the `<body>` element, so there is no other parent element that you could set the `dir` attribute on (aside from `<body>` and `<html>`, which sites _should_ do, but may not).
-
-> Head over to the [#2705 PR description and code](https://github.com/transloadit/uppy/pull/2705), if you are interested in how this is implemented, using new CSS properties like `inline-start` and `inline-end` with `postcss-logical` and `postcss-dir-pseudo-class` for the fallback.
-
-## Locales
-
-[@DenysNosov](https://github.com/elkebab) contributed a Ukrainian translation and fixes for Russian grammar!
-
-## Integration Guide
-
-Andrew, who’s been on fire recently adding Vue and Svelte integrations for Uppy, has taken the time to share his experience and has written an “[Adding a new integration](/docs/contributing.html#Adding-a-new-integration)” guide, in case you’d like to help befriend Uppy with your favorite framework or library.
-
-## Companion
-
-- Added support for setting 3rd party credentials in runtime
-- Metadata is now passed to S3
-- Support for `opts.companionCookiesRule` rule
-- Delete tus error’s `originalRequest` field before propagating error
-- Companion now uses multi-stage docker build
-
-## Misc
-
-- @uppy/dashboard: emit fileId on both file-edit-start and file-edit-complete events
-- @uppy/box: added Box to Uppy CDN
-
-See [changelog](https://github.com/transloadit/uppy/blob/master/CHANGELOG.md#1250) for details.

+ 0 - 82
website/src/_posts/2021-02-1.26.md

@@ -1,82 +0,0 @@
----
-title: "Uppy 1.26: Dashboard “disabled”, per-file headers"
-date: 2021-02-26
-author: arturi
-image: "/uppy/uppy/images/blog/1.26/dashboard-disabled.jpg"
-published: true
----
-
-Uppy 1.26 brings a new `disabled` option for the Dashboad, ability to set headers per file with XHR Upload, and fixes for the Transloadit plugin.
-
-![Uppy Dashboard UI with disabled state](/uppy/images/blog/1.26/dashboard-disabled.jpg)
-
-<!--more-->
-
-## Dashboard “Disabled”
-
-You can now specify a `disabled` option for the Dashboard, in order to make it non-interactive and grayed out. Users won’t be able to click on buttons or drop files.
-
-This is useful when you need to confitionally enable/disable file uploading or manipulation, based on a condition in your app.
-
-<video alt="Demo video showing Uppy with Dashboard disabled vs enabled state" poster="/uppy/images/blog/1.26/dashboard-disabled.jpg" muted autoplay loop>
-  <source src="/uppy/images/blog/1.26/dashboard-disabled-vs-enabled.mp4" type="video/mp4">
-  Your browser does not support the video tag: /uppy/uppy/images/blog/uppy/images/blog/1.26/dashboard-disabled-vs-enabled.mp4
-</video>
-
-This option can be set on init:
-
-```js
-uppy.use(Dashboard, {
-  disabled: true,
-})
-```
-
-and via API:
-
-```js
-const dashboard = uppy.getPlugin('Dashboard')
-dashboard.setOptions({ disabled: true })
-
-userNameInput.addEventListener('change', () => {
-  dashboard.setOptions({ disabled: false })
-})
-```
-
-[See the docs](/uppy/docs/dashboard/#disabled-false).
-
-## XHR Upload Per File headers
-
-`@uppy/xhr-upload` now accept a `headers: (file) => {}` function, so you can do:
-
-```js
-uppy.use(XHRUpload, {
-  headers: file => ({
-    'authorization': `bearer ${global.userToken}`,
-    'header-name': file.meta.someMetaValue,
-  }),
-})
-```
-
-to determine file-specific headers.
-
-The function syntax for `headers` is only available if the `bundle` option is `false` (the default). `bundle` uploads share only one set of headers.
-
-## Build System Improvements
-
-- build: set legacy-peer-deps for npm 7. We have some peerDependency mismatches in our install tree. In npm 6 this was OK (maybe reason for a warning) but in npm 7 they hard fail the install
-- build: added npm version check (33e656cad32b865f960dbd88abf4d3839c8377f0 / @goto-bus-stop)
-
-## Transloadit Plugin
-
-- Fixed a case where the plugin used stale file data.
-- Fixed polling fallback bugs.
-- Url concatenation is now more robust.
-
-## Misc
-
-- @uppy/companion: Docker tag release (#2771 / @kiloreux)
-- @uppy/companion: Companion should respect previously set value for Accesss-Control-Allow-Methods (#2726 / @tim-kos, @mifi, @so-steve)
-- @uppy/transloadit: fix polling fallback bugs (#2759 / @goto-bus-stop)
-- @uppy/utils: added mp4 file type support — Safari 14.0 on Mac records audio using audio/mp4 MIME type which isn't currently recognised by Uppy (#2753 / @dominiceden)
-
-See [changelog](https://github.com/transloadit/uppy/blob/master/CHANGELOG.md#1260) for details.

+ 0 - 96
website/src/_posts/2021-04-1.27.md

@@ -1,96 +0,0 @@
----
-title: "Uppy 1.27: Drop Target plugin, Vue 3 support, Dashboard dynamic meta fields, “Shared with me” in Google Drive"
-date: 2021-04-05
-author: arturi
-image: "/uppy/uppy/images/blog/1.27/drop-target.jpg"
-published: true
----
-
-In Uppy 1.27 we’ve added a new `@uppy/drop-target` plugin, enabled support for Vue 3, introduced dynamic `metaFields` option for Dashboard, Google Drive now lists documents that have been shared with you.
-
-<video alt="Demo video showing Uppy with Drop Target plugin which allows accepting drag and drop anywhere on a page" poster="/uppy/images/blog/1.26/dashboard-disabled.jpg" muted autoplay loop>
-  <source src="/uppy/images/blog/1.27/drop-target.mp4" type="video/mp4">
-  Your browser does not support the video tag: /uppy/uppy/images/blog/1.27/drop-target.mp4
-</video>
-
-<!--more-->
-
-## Drop Target
-
-With `@uppy/drop-target` it is now possible to turn your whole app / page (or any other element, like `<textarea>`, for instance) into a drag-and-drop area:
-
-![Uppy Dashboard UI with drop target plugin](/uppy/images/blog/1.27/drop-target.jpg)
-
-```js
-uppy.use(DropTarget, {
-  target: document.body,
-})
-```
-
-## Google Drive “Shared with me”
-
-If you connect Uppy to Google Drive, you’ll now see a new virtual folder called “Shared with me” — there you’ll find (hard to guess, I know), documents that have been shared with you.
-
-![Google Drive “Shared with me” folder](/uppy/images/blog/1.27/shared-with-me.jpg)
-
-[PR #2758](https://github.com/transloadit/uppy/pull/2758).
-
-## Dashboard Dynamic `metaFields`
-
-Sometimes you may want to show specific meta fields for certain type of files. For instance, you may want to show location and alt attribute for images. Now, instead of setting a fixed array of fields, you can pass a function that will be called for each file, returning an array of fields from it:  
-
-```js
-.use(Dashboard, {
-  trigger: '#pick-files',
-  metaFields: (file) => {
-    const fields = [{ id: 'name', name: 'File name' }]
-    if (file.type.startsWith('image/')) {
-      fields.push({ id: 'location', name: 'Photo Location' })
-      fields.push({ id: 'alt', name: 'Alt text' })
-    }
-    return fields
-  },
-})
-```
-
-See [Dashboard `metaFields`](/uppy/docs/dashboard/#metaFields) docs for details.
-
-## Vue 3
-
-`@uppy/vue` integration now supports Vue 3! This is done by checking the arguments of the `render` function and determining whether it is using Vue 2 or 3, and then returning the appropriate rendering method.
-
-[PR #2755](https://github.com/transloadit/uppy/pull/2755).
-
-## Companion CORS and Better Testing
-
-In Companion, we’ve improved unit testing DX ([#2827](https://github.com/transloadit/uppy/pull/2827)) and switched to using the `cors` module instead of custom cors logic ([#2823](https://github.com/transloadit/uppy/pull/2823)).
-
-@coreprocess submited a fix that allows Companion to serve on a subpath ([#2797](https://github.com/transloadit/uppy/pull/2797)), and added Redis pubsub scope setting ([#2804](https://github.com/transloadit/uppy/pull/2804))!
-
-## npm 7
-
-We’ve finally upgraded our monorepo to npm 7 and [Workspaces](https://docs.npmjs.com/cli/v7/using-npm/workspaces). If you are a contributor, please upgrade `npm install npm -g`, as npm 7 is now required for the Uppy repo.
-
-[PR #2835](https://github.com/transloadit/uppy/pull/2835)
-
-## New Linter Rules
-
-Quite a few new rules have been added to our eslint-config, which is now mostly `eslint-config-transloadit` with some custom uppy-specific overrides.
-
-[PR #2796](https://github.com/transloadit/uppy/pull/2796)
-
-## Misc
-
-- @uppy/xhr-upload: Set headers just before the upload in case options changed (#2781 / @rart)
-- @uppy/aws-s3-multipart: Aws-s3-multipart sends outdated file info to upload-success event (#2828 / @goto-bus-stop)
-- @uppy/aws-s3: removeUploader triggered on uninstall (#2824 / @slawexxx44)
-- @uppy/webcam: Fix issue where the modes: `['audio-only']` option was ignored when getting tracks from the media stream (#2810 / @dominiceden)
-- website: Website improvements (#2803 / @nqst)
-
-See [changelog](https://github.com/transloadit/uppy/blob/master/CHANGELOG.md#1270) for details.
-
-## Download
-
-<a class="TryButton" href="https://releases.transloadit.com/uppy/v1.27.0/uppy-v1.27.0.zip">Download Uppy 1.27.0</a>
-
-<small>Or [include from CDN](/uppy/docs/). Note that it’s highly recommended to [pick and choose specific Uppy plugins](/uppy/docs/plugins/#package-list) that you need, and install them with `npm` or `yarn`. This is because the bundle includes all Uppy plugins at once.</small>

+ 0 - 79
website/src/_posts/2021-04-1.29.md

@@ -1,79 +0,0 @@
----
-title: "Uppy 1.29: Golden Retriever, disableLocalFiles, Webcam previews, uppy.logout"
-date: 2021-05-31
-author: arturi
-image: "/uppy/uppy/images/blog/1.29/golden-retriever-all-recovered.png"
-published: true
----
-
-In Uppy 1.29, we’ve revamped the Golden Retriever plugin with support for partially recovered “ghost” files, added a `disableLocalFiles` option to the Dashboard, enabled the ability to preview webcam videos before submitting and provided an `uppy.logout()` method, along with an assortment of Companion improvements.
-
-<video alt="Demo of Uppy Golden Retriever file restore plugin in action" muted autoplay loop>
-  <source src="/uppy/images/blog/1.29/ghosts-demo.mp4" type="video/mp4">
-  Your browser does not support the video tag: /uppy/uppy/images/blog/1.29/ghosts-demo.mp4
-</video>
-
-<!--more-->
-
-## Golden Retriever
-
-[Golden Retriever](/docs/golden-retriever/) (`@uppy/golden-retriever`) is Uppy’s innovative plugin that recovers users’ files after an accidentally closed tab/window or a browser crash. Golden Retriever was first [introduced a few years ago](/blog/2017/07/golden-retriever/), during Transloadit’s company meetup in Berlin, and now it finally underwent a proper refactor.
-
-![](/uppy/images/blog/1.29/golden-retriever-all-recovered.png)
-
-In this release, we’re adding support for “ghosts” — files for which we’ve restored the metadata, but were unable to recover the data blob itself (usually due to its size). In this case, users will see a ghost icon over the file and a “Re-select” button to pick the file again.
-
-![](/uppy/images/blog/1.29/golden-retriever-ghost.png)
-
-You can try Golden Retriever in action on [the Dashboard example page](/uppy/examples/dashboard/).
-
-<center><img src="/uppy/images/blog/golden-retriever/catch-fail-2.gif" alt="Golden Retriever failing to catch something" title="Good try, girl!"></center>
-
-## Dashboard: `disableLocalFiles`
-
-The `disableLocalFiles: true` option will disable drag & drop, and hide the “Browse” and “My Device” buttons, allowing only uploads from plugins, such as Webcam, Screen Capture, Google Drive or Instagram.
-
-![](/uppy/images/blog/1.29/disableLocalFiles.png)
-
-[Docs: disableLocalFiles](/uppy/docs/dashboard/#disableLocalFiles).
-
-## Webcam Previews
-
-When recording a video with the `@uppy/webcam` plugin, you will now be given the opportunity to play it back and review before submitting. If you happen to not like the crab mask you’ve used, you can re-record the video using a more appropriate baby Yoda or duckface mask.
-
-<video alt="Demo of Uppy Golden Retriever file restore plugin in action" muted autoplay loop>
-  <source src="/uppy/images/blog/1.29/webcam-preview-demo.mp4" type="video/mp4">
-  Your browser does not support the video tag: /uppy/uppy/images/blog/1.29/webcam-preview-demo.mp4
-</video>
-
-## uppy.logout()
-
-When your users log out of your app, you might want to also log them out of any cloud providers they might have used through Uppy, for extra security.
-
-`uppy.logout()` calls `provider.logout()` on each remote provider plugin, like Google Drive, Instagram, Dropbox, etc.
-
-[Docs: uppy-logout](/uppy/docs/uppy/#uppy-logout)
-
-## Companion
-
-- @uppy/companion-client: rethrow original error objects (#2889 / @goto-bus-stop)
-- Pull out metric middleware logic (#2854 / @mifi)
-- Smaller Heroku deployment (#2845 / @goto-bus-stop)
-- Bump redis from 2.8.0 to 3.1.1 (#2865 / @dependabot, @ kiloreux)
-- add chunkSize Companion option (#2881 / @mifi)
-- fix NRP TypeScript errors (#2884 / @mifi)
-- support relative redirect URLs in responses (#2901 / @ goto-bus-stop)
-
-## Misc
-
-- core: use AggregateError when available (#2869 / @aduh95)
-- build: upgrade TypeScript (#2856 / @ajkachnic)
-- webcam: improve MIME type detection to solve issue in iOS Safari (#2851 / @dominiceden)
-
-See [changelog](https://github.com/transloadit/uppy/blob/master/CHANGELOG.md#1291) for details.
-
-## Download
-
-<a class="TryButton" href="https://releases.transloadit.com/uppy/v1.29.1/uppy-v1.29.1.zip">Download Uppy 1.29.1</a>
-
-<small>Or [include from CDN](/uppy/docs/). Note that it’s highly recommended to [pick and choose specific Uppy plugins](/uppy/docs/plugins/#package-list) that you need, and install them with `npm` or `yarn`. This is because the bundle includes all Uppy plugins at once.</small>

+ 0 - 80
website/src/_posts/2021-07-1.30.md

@@ -1,80 +0,0 @@
----
-title: "Uppy 1.30: Angular integration, granular image rotation, Google Drive shortcuts"
-date: 2021-07-02
-author: arturi
-published: true
----
-
-Uppy 1.30 introduces the long-awaited Angular integration (beta), granular image rotation and Google Drive shortcuts.
-
-<!--more-->
-
-## Angular integration
-
-Uppy now has an official Angular integration! It’s still in beta, so please try it out and do let us know how we can improve through [Twitter](https://mobile.twitter.com/uppy_io/) or [GitHub](https://github.com/transloadit/uppy). The original draft implementation was made by [Adam Medford](https://github.com/adammedford), then finalized, polished and brought to release today by [Andrew Kachnic](https://github.com/ajkachnic) 👏
-
-```sh
-npm install @uppy/angular
-```
-
-```ts
-// app.component.ts
-
-import { Component } from '@angular/core'
-import { Uppy } from '@uppy/core'
-
-@Component({
-  selector: 'app-root',
-})
-export class AppComponent {
-  uppy: Uppy = new Uppy({ debug: true, autoProceed: true })
-}
-```
-
-```html
-<!--- app.component.html -->
-
-<uppy-dashboard [uppy]='uppy'>
-</uppy-dashboard>
-```
-
-The following plugins are available as Angular component wrappers:
-
-- `<uppy-dashboard />`
-- `<uppy-drag-drop />`
-- `<uppy-progress-bar />`
-- `<uppy-status-bar />`
-
-See the [Angular docs](/docs/angular/) for more details.
-
-## Granular image rotation
-
-`@uppy/image-editor` plugin received a new option `granularRotate: true` that allows for granular image rotation: be it 12° or 59° — just adjust the slider to your liking.
-
-<video alt="" muted autoplay loop>
-  <source src="/uppy/images/blog/1.30/granular-rotation.mp4" type="video/mp4">
-  Your browser does not support the video tag: /uppy/uppy/images/blog/1.30/granular-rotation.mp4
-</video>
-
-## Google Drive Shortcuts
-
-Google Drive shortcuts, much like in a desktop OS, are pointers to files or folders that can be stored in another folder or drive. Uppy now supports shortcuts – you will see them alongside your usual files and folders.
-
-![](/uppy/images/blog/1.30/drive-shortcut.png)
-
-![](/uppy/images/blog/1.30/uppy-shortcut.png)
-
-## Misc
-
-- @uppy/react: allowed HTML attributes to be passed via props (#2891 / @ajkachnic)
-- @uppy/drag-drop: Expose drag-drop events (#2914 / @Murderlon)
-- @uppy/companion: add `logClientVersion` option (#2855 / @mifi)
-- build: Fix eslint uppy package imports (#2915 / @Murderlon)
-
-See the [changelog](https://github.com/transloadit/uppy/blob/master/CHANGELOG.md#1300) for more details.
-
-## Download
-
-<a class="TryButton" href="https://releases.transloadit.com/uppy/v1.29.1/uppy-v1.30.0.zip">Download Uppy 1.30 Bundle</a>
-
-<small>Or [include from CDN](/uppy/docs/). Note that it’s highly recommended to [pick and choose specific Uppy plugins](/uppy/docs/plugins/#package-list) that you need, and install them with `npm` or `yarn`. This is because the bundle includes all Uppy plugins at once.</small>

+ 0 - 255
website/src/_posts/2021-08-2.0.md

@@ -1,255 +0,0 @@
----
-title: "Uppy 2.0.0: smaller, faster, modular plugins, Preact X, stricter types, and much more"
-date: 2021-08-30
-author: 
-  - aduh95
-  - murderlon
-  - arturi
-  - renee
-  - mifi
-  - andrew
-image: /uppy/uppy/images/blog/2.0/uppy-2-0-cover.jpg
-published: true
----
-
-Today, our tails are positively wagging with excitement about the release of Uppy 2.0! This latest version is on average 25% smaller and up to a thousand times faster, thanks to dropping support for IE11 and a lot of refactoring work. We’ve upgraded many dependencies, most notably Preact 8 to Preact X, greatly improved TypeScript support and screen reader accessibility, paid technical debt, and added support for multiple messages in the Informer plugin.
-
-Chow down on all the juicy bits and pieces inside! And make sure to [try Uppy live demo](/uppy/examples/dashboard/).
-
-![Uppy 2.0 cover banner](/uppy/images/blog/2.0/uppy-2-0-cover.jpg)
-
-<!--more-->
-
-> Uppy is a sleek, modular JavaScript file uploader that integrates seamlessly with any application. It is made for developers who want to provide their users with the ability to see image previews, edit metadata, pick large files directly from Dropbox, restore selected files when a tab was accidentally closed, or crop an image in-browser before sending.
-
-* * *
-
-## A pup no more
-
-Ever since the first introduction of Uppy [five years ago](/blog/2016/07/uppy-begins/) (or 36 in [dog-years](https://www.akc.org/expert-advice/health/how-to-calculate-dog-years-to-human-years/)), we’ve always referred to our project as ‘the next open source file uploader for web browsers’. The release of [Uppy 1.0](/blog/2019/04/1.0/) a little over two years ago, however, soon led to a steep increase in adoption. Uppy now boasts over [24,000 stargazers on GitHub](https://github.com/transloadit/uppy/stargazers), making it the undisputed top dog in the world of file uploaders 🌍
-
-With that in mind, we felt it was high time to give Uppy some more much-needed trimming. We want to take this opportunity to break with the past, to make the project leaner – and to pave the way for an even brighter future for Uppy!
-
-<img class="border" alt="Uppy 2.0 UI with files" src="/uppy/images/blog/2.0/uppy-ui-with-files.jpg">
-
-## Table of Contents
-
-- [Highlights since 1.0](#Highlights-since-1-0)
-- [Smaller bundles](#Smaller-bundles)
-- [Faster](#Faster)
-- [Preact X and upgraded dependencies](#Preact-X-and-upgraded-dependencies)
-- [`Plugin` is replaced with `BasePlugin` and `UIPlugin`](#Plugin-is-replaced-with-BasePlugin-and-UIPlugin)
-- [Strict TypeScript types by default](#Strict-TypeScript-types-by-default)
-- [Batch pre-signing URL's for AWS S3 Multipart](#Batch-pre-signing-URLs-for-AWS-S3-Multipart)
-- [And more](#And-more)
-- [What future remains for 1.0?](#What-future-remains-for-1-0?)
-- [That's it](#That’s-it)
-
-<video alt="Video demo showing updated Uppy 2.0 UI" muted autoplay loop>
-  <source src="/uppy/images/uppy-2-0-demo-aug-2021.mp4" type="video/mp4">
-  Your browser does not support the video tag: /uppy/uppy/images/uppy-2-0-demo-aug-2021.mp4
-</video>
-
-## Highlights since 1.0
-
-A lot of things have happened since we released Uppy 1.0 in April of 2019. In case you have missed some of our 1.x releases, here is a small overview. We have added:
-
-- Official integrations for [Vue](/blog/2020/11/1.23/) ([3](/blog/2021/04/1.27/)), [Angular](/blog/2021/07/1.30/), and [Svelte](/blog/2020/12/1.24/)
-- [Hooks](/blog/2020/12/1.24/) for the React integration
-- Support for picking files from [Box](/blog/2020/11/1.23/), [Unsplash](/blog/2020/10/1.22/), [Facebook](/blog/2020/04/1.10/), and [OneDrive](/blog/2020/04/1.10/) 
-- [“Ghost” files](/blog/2021/05/1.29/), as part of a revamped Golden Retriever plugin, which makes recovering lost files even more intuitive
-- Support for 25 more languages (bringing it to a total of [37](/docs/locales/#List-of-locale-packs))
-- [Dark mode](/blog/2020/04/1.13/) 
-- an [Image Editor](/blog/2020/07/1.18-image-editor/)
-- And four new core team members: [@ajkachnic](https://github.com/ajkachnic), [@mifi](https://github.com/mifi), [@aduh95](https://github.com/aduh95), and [@murderlon](https://github.com/murderlon)
-
-## Smaller bundles
-
-With 2.0, following in the footsteps of Microsoft, we are dropping support for IE11. As a result, we are able to remove all built-in polyfills, and the new bundle size is **25% smaller**! If you want your app to still support older browsers (such as IE11), you may need to add the following polyfills to your bundle:
-
-- [abortcontroller-polyfill](https://github.com/mo/abortcontroller-polyfill)
-- [core-js](https://github.com/zloirock/core-js)
-- [md-gum-polyfill](https://github.com/mozdevs/mediaDevices-getUserMedia-polyfill)
-- [resize-observer-polyfill](https://github.com/que-etc/resize-observer-polyfill)
-- [whatwg-fetch](https://github.com/github/fetch)
-
-If you're using a bundler, you need import these before Uppy:
-
-```js
-import 'core-js'
-import 'whatwg-fetch'
-import 'abortcontroller-polyfill/dist/polyfill-patch-fetch'
-// Order matters here: AbortController needs fetch, which needs Promise (provided by core-js).
-
-import 'md-gum-polyfill'
-import ResizeObserver from 'resize-observer-polyfill'
-
-window.ResizeObserver ??= ResizeObserver
-
-export { default } from '@uppy/core'
-export * from '@uppy/core'
-```
-
-If you're using Uppy from a CDN, we now provide two bundles: one for up-to-date browsers that do not include polyfills and use modern syntax, and one for legacy browsers. When migrating, be mindful about the types of browsers you want to support:
-
-```html
-<!-- Modern browsers (recommended) -->
-<script src="https://releases.transloadit.com/uppy/v2.0.1/uppy.min.js"></script>
-
-<!-- Legacy browsers (IE11+) -->
-<script nomodule src="https://releases.transloadit.com/uppy/v2.0.1/uppy.legacy.min.js"></script>
-<script type="module">import "https://releases.transloadit.com/uppy/v2.0.1/uppy.min.js";</script>
-```
-
-Please note that while you may be able to get 2.0 to work in IE11 this way, we do not officially support it anymore.
-
-## Faster
-
-Uppy now loads faster thanks to the decreased bundle size. With Uppy 1.0, adding many files (hundreds or even thousands) used to take dozens of seconds. Uppy 2.0 does the same thing in mere milliseconds! So, at least for this specific use case, we feel comfortable in claiming that you may see your loading times go **up to a thousand times faster**.
-
-This was made possible by avoiding having to re-render all the file components whenever something changes, using `memoize` and `virtual-list` (allowing us to only render what is actually visible on screen). In addition, multiple files are now added to state in one go via `uppy.addFiles(Array)` as opposed to before, when `uppy.addFile(File)` + `uppy.setState` were being called in a loop.
-
-Before optimizations:
-
-![](/uppy/images/blog/2.0/uppy-performance-before.gif)
-
-And after:
-
-![](/uppy/images/blog/2.0/uppy-performance-after.gif)
-
-## Preact X and upgraded dependencies
-
-We’ve upgraded almost all of Uppy’s dependencies. This includes the migration to Preact X. All plugins that depend on Preact have been upgraded from `8.2.9` to the latest version `10.5.13`. If you’d like your custom plugin to continue working with Uppy 2.0, it also needs to be using latest version of Preact.
-
-Other notable upgrades include browserify to `v10`, typescript to `v4.3`, autoprefixer to `v10`, and lerna to `v4`.
-
-## `Plugin` is replaced with `BasePlugin` and `UIPlugin`
-
-[`@uppy/core`][core] provided a `Plugin` class for creating plugins. This was used for any official plugin, but also for users who want to create their own custom plugin. However, `Plugin` always came bundled with Preact, even if the plugin itself didn't add any UI elements.
-
-As of Uppy 2.0.0, `Plugin` has been replaced with `BasePlugin` and `UIPlugin`. `BasePlugin` is the minimum you need to create a plugin and `UIPlugin` adds Preact for rendering user interfaces. 
-
-**Note:** some bundlers will include `UIPlugin` (and therefore Preact) if you import from `@uppy/core`. To make sure this does not happen, you can import `Uppy` and `BasePlugin` directly: 
-
-```js
-import Uppy from '@uppy/core/lib/Uppy.js'
-import BasePlugin from '@uppy/core/lib/BasePlugin.js'
-```
-
-Interested in creating your own plugin? Check out the [“writing plugins”](/docs/writing-plugins) guide.
-
-## Strict TypeScript types by default
-
-Uppy used to have loose types by default and strict types as an opt-in. The default export was a function that returned the `Uppy` class, and the types came bundled with the default export (`Uppy.SomeType`).
-
-```ts
-import Uppy from '@uppy/core'
-import Tus from '@uppy/tus'
-
-const uppy = Uppy<Uppy.StrictTypes>()
-
-uppy.use(Tus, {
-  invalidOption: null, // this will make the compilation fail!
-})
-```
-
-Uppy is now strictly typed by default and loose types have been removed. The default export is the `Uppy` class and not a function. This means you need to call `Uppy` with the `new` keyword when initializing it.
-
-```ts
-// ...
-
-const uppy = new Uppy()
-
-uppy.use(Tus, {
-  invalidOption: null, // this will make the compilation fail!
-})
-```
-
-Uppy types are now individual exports and should be imported separately.
-
-<!-- eslint-disable @typescript-eslint/no-unused-vars -->
-```ts
-import type { PluginOptions, UIPlugin, PluginTarget } from '@uppy/core'
-```
-
-### Event types
-
-[`@uppy/core`][core] provides an [`.on`](/docs/uppy/#uppy-on-39-event-39-action) method to listen to [events](/docs/uppy/#Events). The types for these events were loose and allowed for invalid events to be passed, such as `uppy.on('upload-errrOOOoooOOOOOrrrr')`.
-
-Events have received a big update thanks to [@Hawxy](https://github.com/Hawxy), making them more strict and accurate.
-
-A breaking change was required to make this happen:
-
-<!-- eslint-disable @typescript-eslint/no-unused-vars -->
-```ts
-// Before:
-
-type Meta = { myCustomMetadata: string }
-
-// Invalid event
-uppy.on<Meta>('upload-errrOOOoooOOOOOrrrr', () => {
-  // ...
-})
-
-// After:
-
-// Normal event signature
-uppy.on('complete', (result) => {
-  const successResults = result.successful
-})
-
-// Custom signature
-type Meta = { myCustomMetadata: string }
-
-// Notice how the custom type has now become the second argument
-uppy.on<'complete', Meta>('complete', (result) => {
-  // The passed type is now merged into the `meta` types.
-  const meta = result.successful[0].meta.myCustomMetadata
-})
-```
-
-Plugins that add their own events can merge with existing ones in `@uppy/core` with `declare module '@uppy/core' { ... }`. This is a TypeScript pattern called [module augmentation](https://www.typescriptlang.org/docs/handbook/declaration-merging.html#module-augmentation). For instance, when using [`@uppy/dashboard`][dashboard]:
-
-<!-- eslint-disable @typescript-eslint/no-unused-vars -->
-```ts
-uppy.on('dashboard:file-edit-start', (file) => {
-  const fileName = file.name
-})
-```
-
-## Batch pre-signing URLs for AWS S3 Multipart
-
-The [`@uppy/aws-s3-multipart`][aws-s3-multipart] plugin can be used to upload files directly to an S3 bucket using S3’s Multipart upload strategy. With this strategy, files are chopped up in parts of 5MB+ each, so they can be uploaded concurrently. It is also very reliable: if a single part fails to upload, only that 5MB chunk has to be retried.
-
-However, in Uppy 1.0, every part had to make the trip to the server to generate a pre-signed URL. This meant that a 1GB file uploaded in 5MB chunks would require two hundred trips to the server.
-
-As of Uppy 2.0.0, we now pre-sign URLs in batches. That same 1GB file now only takes fifty trips to the server (if the limit was four).
-
-This is now the new default. Thanks to [@martin-brennan](https://github.com/martin-brennan) for this contribution!
-
-Do you care about reliable uploads? You could also consider [`@uppy/tus`][tus] with a self-hosted or Transloadit Tus server. Tus can resume uploads, supports smaller chunks, and offers increased upload speeds.
-
-## And more
-
-- The `.run` method on the `Uppy` instance has been removed. This method was already obsolete and only logged a warning. As of this major version, it no longer exists.
-- [`@uppy/informer`][informer] now supports showing multiple notifications at the same time. The notifications themselves have also been improved.
-- Improved screen reader accessibility for checkboxes and the 'remove file' button for [`@uppy/dashboard`][dashboard].
-- Sort files and folders alphabetically in the Google Drive provider.
-- Polished our code base with improved eslint rules, private field methods, and other modern JavaScript features that help us write more intention-revealing and safe code.
-- To make Uppy more friendly towards new contributors, we have renamed our `master` branch to `main`.
-
-## What future remains for 1.0?
-
-Uppy 1.0 will continue to receive bug fixes for three more months (until <time datetime="2021-12-01">1 December 2021</time>), security fixes for one more year (until <time datetime="2022-09-01">1 September 2022</time>), but no more new features after today. Exceptions are unlikely, but _can_ be made – to accommodate those with commercial support contracts, for example.
-
-## That's it!
-
-We hope you'll waste no time in taking Uppy 2.0 out for a walk. When you do, please let us know what you thought of it on [Reddit](https://www.reddit.com/r/javascript/comments/penbr7/uppy_file_uploader_20_smaller_and_faster_modular/), [HN](https://news.ycombinator.com/item?id=28359287), ProductHunt, or [Twitter](https://twitter.com/uppy_io/status/1432399270846603264). We're howling at the moon to hear from you!
-
-<!-- definitions -->
-
-[core]: /docs/uppy/
-[dashboard]: /docs/dashboard/
-[informer]: /docs/informer/
-[aws-s3-multipart]: /docs/aws-s3-multipart/
-[tus]: /docs/tus/

+ 0 - 121
website/src/_posts/2021-12-2.1-2.3.md

@@ -1,121 +0,0 @@
----
-title: "🎄 Uppy 2.1-2.3: Audio plugin, fast and efficient streaming for Companion, production-ready Unsplash, and more" 
-date: 2021-12-15
-author: 
-  - aduh95
-  - murderlon
-  - arturi
-  - mifi
-image: /uppy/uppy/images/blog/2.1-2.3/audio-cover.jpg
-published: true
----
-
-<!--retext-simplify ignore very-->
-
-Last Christmas, we gave you [Uppy 1.24](/uppy/blog/2020/12/1.24/), but this very next year, we’ll take it away (since it’s outdated by now) and give you a brand-new Uppy 2.3 🎁!
-
-After the [release](/uppy/blog/2021/08/2.0/) of our latest major version, 2.0.0, we’ve been busy with many things. First of all is the long-awaited Audio plugin to record and upload live audio directly. We then worked on adding a fast and efficient streaming interface to Companion and made Unsplash production ready. Housekeeping was also part of the job: we made Status Bar improvements, moved from npm to Yarn 3, did some refactoring, and updated dependencies.
-
-Last but not least, we got the issue count down from around 110 since 2.0.0 to around 45 now.
-
-<!--more-->
-
-## Audio plugin
-
-Uppy now has a new `@uppy/audio` plugin for recording audio memos, sounds, jingling bells, Christmas carols, and all your holiday cheer. Check it out on the [demo page](/uppy/examples/dashboard/).
-
-<video alt="Audio plugin demo" muted autoplay loop>
-  <source src="/uppy/images/blog/2.1-2.3/audio-demo.mp4" type="video/mp4">
-  Your browser does not support the video tag: /uppy/uppy/images/blog/2.1-2.3/audio-demo.mp4
-</video>
-
-## `@uppy/unsplash` is now production ready
-
-The Unsplash plugin has received an update, providing attribution to the image authors and adding some polish to make it look better. Being fully brand compliant with Unsplash means it’s now production ready. You can demo the plugin on the [website](/uppy/examples/dashboard) or read the [docs](/uppy/docs/unsplash/).
-
-## New streaming interface for Companion
-
-[Companion][companion] handles the server-to-server communication between your server and file storage providers such as Google Drive, Dropbox, Instagram, and the like. This bypasses the client (so a 5 GB video isn’t eating into your users’ data plans) and files are directly uploaded to the final destination. Companion is made to be effortlessly integrate-able with Uppy.
-
-It used to work by downloading the requested file from a remote provider on the server to then start uploading it to the destination. This did the job, but it’s wasn’t ideal.
-
-We now built streaming support into Companion, which means the download and upload can happen simultaneously. This can result in **two times faster uploads**, because we no longer have to wait for files to finish downloading before starting the upload process. It’s especially useful for large files and removes the need for a lot of storage space on the server, as data will be buffered in memory.
-
-You can enable this by setting `streamingUpload` in the Companion [options](/uppy/docs/companion/#Options).
-
-**NOTE:** Streaming is turned off by default. Do not turn it on yet if you’re using TUS for uploads, due to [this tus-js-client bug](https://github.com/tus/tus-js-client/issues/275).
-
-Interested in using Companion? You can use Transloadit-hosted Companion on every [Plan](https://transloadit.com/pricing/).
-
-## Status Bar error state improvements
-
-The Status Bar plugin would get confused about upload errors in Uppy, and we’ve addressed this:
-
-* The error state is now shown in case of only _one_ failed file instead of _all_ failed files. The plugin used to get stuck in the uploading state when a single file failed.
-* Added “X of X files uploaded” below “Upload failed” for extra context.
-* Improved the error details button styling in the Status Bar and the file info card.
-* Status Bar state is set to complete if the user manually removes the failed files.
-
-![status bar improvements screenshot](/uppy/images/blog/2.1-2.3/status-bar-improvements.jpg)
-
-## Internal housekeeping
-
-### Yarn v3 instead of npm
-
-We’ve switched the Uppy repo to Yarn 3 to improve package install performance. With our complex dependency graph and over thirty packages in a monorepo, we are seeing install times reduced by more than a few minutes!
-
-We are using [Corepack](https://github.com/nodejs/corepack) to make sure all Uppy contributors are using the same version of Yarn. If you are an Uppy contributor, please run the following commands to enable Corepack:
-
-```sh
-corepack -v || npm i -g corepack # install Corepack if not already installed
-yarn -v || corepack enable # install Yarn through Corepack if not already installed
-yarn || corepack yarn install # install npm dependencies using yarn
-```
-
-[View the PR](https://github.com/transloadit/uppy/pull/3237)
-
-### Refactor locale scripts & generate types and docs
-
-This is an internal change, but important nonetheless. Our locales now live in a separate `locale.js` file for every plugin instead of `this.defaultLocale` in the class. The docs and types are automatically updated when we add or remove new locale strings.
-
-[View the PR](https://github.com/transloadit/uppy/pull/3276).
-
-### Automated release scripts
-
-A lot of things need to happen when we’re publishing a new release. A complete redo of the automation script is now available for quick and secure releases.
-
-Here are some highlights:
-
-* Releaser runs `yarn release` and will get a series of [prompts](https://github.com/terkelg/prompts) to set up a release.
-* A changelog will be generated.
-* The contributions table will be updated.
-* GitHub Actions will create a release candidate pull request.
-* When approved, GitHub Actions automatically merges, publishes to the npm public registry, and creates CDN bundles.
-
-[View the PR](https://github.com/transloadit/uppy/pull/3304).
-
-## And more
-
-* google-drive: plugin has been updated for brand compliance (#3178)
-* google-drive: sort Google Drive list by name #3069
-* status-bar: now shows all details on mobile when `showProgressDetails` is `true` (#3174)
-* core: move `Uppy` class to its own module (#3225)
-* angular: fix component crash by loosening `package.json` version constraints (#3210)
-* drop-target: exposed events (#3238)
-* companion: add `maxFileSize` option in companion for safety #3159
-* companion: new AWS S3 multipart presigned URL batching endpoint #3056
-* companion: improve CORS default headers #3167
-* companion: use GET instead of HEAD for `getURLMeta` for better server compatibility (especially signed S3 URLs) #3048
-* companion: deprecate missing `uploadUrls` option (will be required in the future) #3182
-* companion: close window on auth callback error and show error to user #3143
-* companion: cut off length of file names to avoid AWS error #3048
-* companion: safely escape `<script>` injected code in Companion’s send-token.js #3101
-* companion: upgrade aws-sdk #3334
-* companion: improve logging #3103
-* companion: change Provider/SearchProvider API to async and use streams instead #3159
-
-Happy Holidays from the Uppy team! Enjoy Christmas and New Year, stay safe, take a walk outside. See you in 2022!
-
-<!-- definitions -->
-
-[companion]: /uppy/docs/companion/

+ 0 - 72
website/src/_posts/2022-03-2.4-2.7.md

@@ -1,72 +0,0 @@
----
-title: "Uppy 2.4-2.7: Image Compressor, Transloadit Rate Limiting, ESM" 
-date: 2022-03-11
-author: 
-  - aduh95
-  - arturi
-  - mifi
-  - murderlon
-image: "/uppy/uppy/images/blog/2.4-2.7/compressor.jpg"
-published: true
----
-
-We’re always looking for opportunities to teach Uppy cool new tricks, and the past few months have been no exception. Since our [most recent post](/uppy/blog/2021/12/2.1-2.3/) in December, Uppy has continued to receive a steady stream of updates. This post covers all the improvements made in Uppy versions 2.4 through 2.7. Changes and additions include: image compression, improved Transloadit rate limiting and a lighter Dashboard plugin. We’ve also moved our end-to-end tests to Cypress, and are slowly converting plugins to ES modules (ESM).
-
-<img class="border" alt="Uppy Compressor plugin showing compressed images notification" src="/uppy/images/blog/2.4-2.7/compressor.jpg">
-
-<!--more-->
-
-## Compressor
-
-Some of the most commonly uploaded files on the internet are images — photos, stock images, screenshots, and documents scans. Uppy now includes a new plugin called `@uppy/compressor` that optimizes images (JPEG, PNG), saving on average up to 60% in size (roughly 18 MB for 10 images). It uses [Compressor.js](https://github.com/fengyuanchen/compressorjs) under the hood.
-
-[Read the docs](/uppy/docs/compressor/) and [try Compressor in action](/uppy/examples/dashboard/).
-
-```js
-import Uppy from '@uppy/core'
-import Compressor from '@uppy/compressor'
-
-const uppy = new Uppy()
-uppy.use(Compressor)
-```
-
-`@uppy/compressor` is also the first plugin that we are releasing as ESM, backwards compatible as CJS, to test out how this works. Please report any issues.
-
-## Hosted Companion custom credentials
-
-It cannot be overstated that our [Transloadit-hosted](https://transloadit.com/docs/sdks/uppy/) [Companion Plugin](/uppy/docs/companion/) is the easiest secure way to allow your users pick files from cloud sources like Google Drive, Instagram, Box, etc. via Uppy. Up until now, however, that meant your users had to authenticate their cloud account with Transloadit, preventing you from showing your own logo instead. That has now been fixed! Head to `Transloadit Console` / `Credentials`, scroll down to `Third-party Credentials`, click on `Add new Credentials`, select `Companion OAuth`, and voilà!
-
-<img class="border" alt="Transloadit Companion 3rd party credentials" src="/uppy/images/blog/2.4-2.7/companion-3rd-party-oauth.jpg">
-
-Try it out with the [free Transloadit Community Plan — 5GB / month and access to Companion](https://transloadit.com/pricing/).
-
-## Transloadit rate limiting
-
-We’ve added rate limiting to Transloadit [assembly creation and status polling](https://github.com/transloadit/uppy/pull/3429), and [tus retries](https://github.com/transloadit/uppy/pull/3394):
-
-> When the remote server responds with HTTP 429, all requests are paused for a while in the hope that it can resolve the rate limiting. Failed requests are now also queued up after the retry delay. Before, they were scheduled for retry without being queued up, which would sometimes end up overflowing the limit option.
-
-As a result of this change, uploading many files at once has become even more robust.
-
-## Move to ESM
-
-The JavaScript ecosystem is moving towards ESM, and we want to follow suit. We are slowly starting to adopt ESM in Uppy packages. To do so, we integrated a plugin into our build system that transpiles ESM source code to CommonJS syntax, which is distributed with the npm package. Nothing will change on your end, though – we know that not everyone is using tooling that support ESM, so we’re holding on to CommonJS for the time being. Our plan is to refactor all official Uppy plugins to ESM before Uppy 3.0 is released, and drop CommonJS in favor of ESM in the npm packages at that point.
-
-For details, see [PR 3468](https://github.com/transloadit/uppy/pull/3468).
-
-## End to end: move to Cypress
-
-Uppy has had end to end from the start, but the developer experience was less than ideal with custom Webdriver.io + Selenium. The transition to [Cypress](https://github.com/transloadit/uppy/pull/3444) allows us to write tests with ease and comfort, backed by great documentation.
-
-## Lighter Bundle
-
-We continue to look for ways to reduce Uppy’s bundle size and modernize our build toolchain. This time, we’ve replaced the [Exifr.js](https://github.com/exif-js/exif-js) legacy bundle with the modern one without IE polyfills. Our Browserify bundler has been replaced with a modern and more efficient ESBuild.
-
-## Companion improvements
-
-* Improved private IP check (#3403)
-* Implement periodic ping functionality (#3246)
-* Fix broken thumbnails for Box and Dropbox (#3460)
-* Fix unpslash author meta, sanitize metadata to strings and improve Companion tests (#3478)
-
-That’s it for today! See the full [changelog](https://github.com/transloadit/uppy/blob/master/CHANGELOG.md#1300) for more details.

Some files were not shown because too many files changed in this diff