diff --git a/.env.example b/.env.example
deleted file mode 100644
index c4a0e85e..00000000
--- a/.env.example
+++ /dev/null
@@ -1,16 +0,0 @@
-AIRTABLE_API_KEY=
-AIRTABLE_BOOKS_BASE_ID=
-RAINDROP_COLLECTION=
-RAINDROP_TOKEN=
-REVUE_API_KEY=
-CONVERTKIT_API_KEY=
-CONVERTKIT_API_SECRET=
-GITHUB_ACCESS_TOKEN=
-SIMKL_CLIENT_ID=
-SIMKL_CLIENT_SECRET=
-PLAUSIBLE_TOKEN=
-SIMKL_CLIENT_ID=
-SIMKL_CLIENT_SECRET=
-SPOTIFY_CLIENT_ID=
-SPOTIFY_CLIENT_SECRET=
-SPOTIFY_REFRESH_TOKEN=
diff --git a/.eslintignore b/.eslintignore
deleted file mode 100755
index 697de6aa..00000000
--- a/.eslintignore
+++ /dev/null
@@ -1,13 +0,0 @@
-.next
-next-env.d.ts
-node_modules
-package.json
-package-lock.json
-public
-coverage
-docs
-
-npm-debug.log*
-.DS_Store
-.vscode
-!.storybook
diff --git a/.eslintrc.js b/.eslintrc.js
deleted file mode 100755
index cc532e67..00000000
--- a/.eslintrc.js
+++ /dev/null
@@ -1,102 +0,0 @@
-module.exports = {
- env: {
- browser: true,
- es2021: true,
- node: true,
- jest: true,
- },
- parser: '@typescript-eslint/parser',
- parserOptions: {
- ecmaFeatures: {
- jsx: true,
- },
- ecmaVersion: '12',
- sourceType: 'module',
- },
- plugins: ['module-resolver', 'simple-import-sort'],
- extends: [
- 'eslint:recommended',
- 'next',
- 'next/core-web-vitals',
- 'plugin:import/recommended',
- 'prettier',
- ],
- settings: {
- react: {
- version: 'detect',
- },
- 'import/resolver': {
- 'eslint-import-resolver-custom-alias': {
- alias: {
- '@/': './src',
- },
- extensions: ['.ts', '.tsx'],
- },
- typescript: {
- project: './tsconfig.json',
- },
- },
- 'import/parsers': {
- '@typescript-eslint/parser': ['.ts', '.tsx'],
- },
- },
- overrides: [
- {
- files: ['*.ts', '*.tsx'],
- rules: {
- '@typescript-eslint/explicit-module-boundary-types': 'off',
- },
- extends: [
- 'plugin:@typescript-eslint/recommended',
- 'plugin:import/typescript',
- 'plugin:jsx-a11y/recommended',
- 'plugin:prettier/recommended', // always at the end
- ],
- },
- {
- files: ['*.js'],
- extends: [
- 'plugin:prettier/recommended', // always at the end
- ],
- },
- ],
- rules: {
- 'simple-import-sort/imports': [
- 'warn',
- {
- groups: [
- // ext library & side effect imports
- ['^@?\\w', '^\\u0000'],
- // {s}css files
- ['^.+\\.s?css$'],
- // Lib and hooks
- ['^@/lib', '^@/hooks'],
- // static data
- ['^@/data'],
- // components
- ['^@/components'],
- // Other imports
- ['^@/'],
- // relative paths up until 3 level
- [
- '^\\./?$',
- '^\\.(?!/?$)',
- '^\\.\\./?$',
- '^\\.\\.(?!/?$)',
- '^\\.\\./\\.\\./?$',
- '^\\.\\./\\.\\.(?!/?$)',
- '^\\.\\./\\.\\./\\.\\./?$',
- '^\\.\\./\\.\\./\\.\\.(?!/?$)',
- ],
- ['^@/types'],
- // other that didnt fit in
- ['^'],
- ],
- },
- ],
- 'simple-import-sort/exports': 'error',
- 'import/first': 'error',
- 'import/newline-after-import': 'error',
- 'import/no-duplicates': 'error',
- },
-}
diff --git a/.frontmatter/content/mediaDb.json b/.frontmatter/content/mediaDb.json
deleted file mode 100644
index 0967ef42..00000000
--- a/.frontmatter/content/mediaDb.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/.frontmatter/database/mediaDb.json b/.frontmatter/database/mediaDb.json
new file mode 100644
index 00000000..79b7a7e0
--- /dev/null
+++ b/.frontmatter/database/mediaDb.json
@@ -0,0 +1 @@
+{"public":{"images":{"articles":{"astuces-dexpat-pour-faciliter-demarches-administratives":{"map-earth-carnet-camera.jpeg":{"caption":"Carnet open on an old brown map. Multiple objects around like a pair of glasses, an old camera.","alt":"Photo by Dariusz Sankowski on Unsplash"},"american-passport-airplane-ticket.jpeg":{}},"decade-web-development-personal-journey":{"wikiktosource-fr.jpg":{}}}}}}
\ No newline at end of file
diff --git a/.frontmatter/templates/articles.mdx b/.frontmatter/templates/articles.mdx
new file mode 100644
index 00000000..39438497
--- /dev/null
+++ b/.frontmatter/templates/articles.mdx
@@ -0,0 +1,14 @@
+---
+draft: true
+locale: en
+title: null
+date: null
+description: null
+author: David Dias
+categories: []
+tags: []
+type: article
+preview:
+ url: /images/articles/
+ alt: null
+---
diff --git a/.frontmatter/templates/notes.mdx b/.frontmatter/templates/notes.mdx
new file mode 100644
index 00000000..f9c7695a
--- /dev/null
+++ b/.frontmatter/templates/notes.mdx
@@ -0,0 +1,13 @@
+---
+draft: true
+locale: en
+title: null
+date: null
+description: null
+author: David Dias
+tags: []
+type: note
+preview:
+ url: /images/notes/
+ alt: null
+---
diff --git a/.github/dependabot.yml b/.github/dependabot.yml
index 8ef01bdd..31f476a8 100644
--- a/.github/dependabot.yml
+++ b/.github/dependabot.yml
@@ -1,5 +1,19 @@
version: 2
+
updates:
+ - package-ecosystem: 'npm'
+ directory: '/'
+ schedule:
+ interval: 'weekly'
+
+ commit-message:
+ prefix: fix
+ prefix-development: chore
+ include: scope
+
+ labels:
+ - 'dependencies'
+
- package-ecosystem: github-actions
directory: '/'
schedule:
diff --git a/.github/workflows/deploy-vercel-staging.yml b/.github/workflows/deploy-vercel-staging.yml
deleted file mode 100644
index 5ecc134e..00000000
--- a/.github/workflows/deploy-vercel-staging.yml
+++ /dev/null
@@ -1,58 +0,0 @@
-name: Deploy Vercel Staging
-
-on: [push, pull_request]
-
-jobs:
- lint:
- name: Lint
- runs-on: ubuntu-latest
-
- steps:
- - name: Git checkout
- uses: actions/checkout@v3
-
- - name: Detect Node version
- run: echo "##[set-output name=version;]$(cat .nvmrc)"
- id: nvmrc
-
- - name: Setup Node.js
- uses: actions/setup-node@v3
- with:
- node-version: '${{ steps.nvmrc.outputs.version }}'
-
- - name: Install pnpm
- uses: pnpm/action-setup@v2.2.2
- id: pnpm-install
- with:
- version: 7
- run_install: false
-
- # - name: Get pnpm store directory
- # id: pnpm-cache
- # run: |
- # echo "::set-output name=pnpm_cache_dir::$(pnpm store path)"
-
- # - name: Setup pnpm cache
- # uses: actions/cache@v3
- # with:
- # path: |
- # ${{ github.workspace }}/.next/cache
- # ${{ steps.pnpm-cache.outputs.pnpm_cache_dir }}
- # key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}-${{ hashFiles('**.[jt]s', '**.[jt]sx') }}
- # restore-keys: |
- # ${{ runner.os }}-pnpm-store-
-
- - name: Install dependencies
- run: pnpm install
-
- - name: Build
- run: pnpm run build
-
- - name: Vercel deployment
- uses: amondnet/vercel-action@v20
- with:
- vercel-token: ${{ secrets.VERCEL_TOKEN }}
- github-token: ${{ secrets.GITHUB_TOKEN }}
- # vercel-args: "--prod"
- vercel-org-id: ${{ secrets.VERCEL_ORG_ID}}
- vercel-project-id: ${{ secrets.VERCEL_PROJECT_ID}}
diff --git a/.github/workflows/production-deployment.yml b/.github/workflows/production-deployment.yml
new file mode 100644
index 00000000..212a9ba9
--- /dev/null
+++ b/.github/workflows/production-deployment.yml
@@ -0,0 +1,72 @@
+name: Production deployment
+
+on:
+ push:
+ branches:
+ - main
+ workflow_dispatch:
+
+jobs:
+ build:
+ name: Build
+ runs-on: ubuntu-latest
+ env:
+ RAINDROP_COLLECTION: ${{ secrets.RAINDROP_COLLECTION }}
+ RAINDROP_TOKEN: ${{ secrets.RAINDROP_TOKEN }}
+
+ steps:
+ # - name: Cancel Previous Runs
+ # uses: styfle/cancel-workflow-action@0.10.0
+ # with:
+ # access_token: ${{ github.token }}
+
+ - name: Git checkout
+ uses: actions/checkout@v3
+
+ - name: Detect Node version
+ run: echo "##[set-output name=version;]$(cat .nvmrc)"
+ id: nvmrc
+
+ - name: Setup Node.js
+ uses: actions/setup-node@v3
+ with:
+ node-version: '${{ steps.nvmrc.outputs.version }}'
+
+ - name: Install pnpm
+ uses: pnpm/action-setup@v2.2.2
+ id: pnpm-install
+ with:
+ version: 7
+ run_install: false
+
+ - name: Install dependencies
+ run: pnpm install
+
+ - name: Run tests
+ run: pnpm test
+
+ - name: Install playwright browsers
+ run: npx playwright install --with-deps
+
+ - name: Run build
+ run: pnpm build
+
+ - name: Run tests
+ run: pnpm test:e2e
+
+ # - name: SimpleLocalize Download
+ # uses: simplelocalize/download@latest
+ # with:
+ # apiKey: ${{ secrets.SIMPLE_LOCALIZE_KEY }}
+ # downloadPath: ./locales/{lang}/{ns}.json
+ # downloadFormat: single-language-json
+ # uploadOptions: 'WRITE_NESTED,ESCAPE_NEW_LINES'
+
+ - name: Vercel deployment
+ uses: amondnet/vercel-action@v25.1.1
+ with:
+ vercel-token: ${{ secrets.VERCEL_TOKEN }}
+ github-token: ${{ secrets.GITHUB_TOKEN }}
+ vercel-args: '--prod'
+ vercel-org-id: ${{ secrets.VERCEL_ORG_ID}}
+ vercel-project-id: ${{ secrets.VERCEL_PROJECT_ID}}
diff --git a/.github/workflows/staging-deployment.yml b/.github/workflows/staging-deployment.yml
new file mode 100644
index 00000000..66bb97a8
--- /dev/null
+++ b/.github/workflows/staging-deployment.yml
@@ -0,0 +1,92 @@
+name: Staging deployment
+
+on:
+ pull_request:
+ types: [opened, synchronize, reopened]
+ branches:
+ - main
+
+jobs:
+ lint:
+ name: Lint
+ runs-on: ubuntu-latest
+
+ steps:
+ # - name: Cancel Previous Runs
+ # uses: styfle/cancel-workflow-action@0.10.0
+ # with:
+ # access_token: ${{ github.token }}
+
+ - name: Git checkout
+ uses: actions/checkout@v3
+
+ - name: Detect Node version
+ run: echo "##[set-output name=version;]$(cat .nvmrc)"
+ id: nvmrc
+
+ - name: Setup Node.js
+ uses: actions/setup-node@v3
+ with:
+ node-version: '${{ steps.nvmrc.outputs.version }}'
+
+ - name: Install pnpm
+ uses: pnpm/action-setup@v2.2.2
+ id: pnpm-install
+ with:
+ version: 7
+ run_install: false
+
+ - name: Get pnpm store directory
+ id: pnpm-cache
+ run: |
+ echo "::set-output name=pnpm_cache_dir::$(pnpm store path)"
+
+ - name: Cache pnpm
+ uses: actions/cache@v3
+ with:
+ path: |
+ ${{ steps.pnpm-cache.outputs.pnpm_cache_dir }}
+ key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}-${{ hashFiles('**.[jt]s', '**.[jt]sx') }}
+ restore-keys: |
+ ${{ runner.os }}-pnpm-store-
+
+ - name: Install dependencies
+ if: steps.pnpm-cache.outputs.cache-hit != 'true'
+ run: pnpm install
+
+ - name: Run tests
+ run: pnpm test
+
+ - name: Upload translations
+ uses: simplelocalize/upload@latest
+ with:
+ apiKey: ${{ secrets.SIMPLE_LOCALIZE_KEY }}
+ uploadPath: ./locales/{lang}/{ns}.json
+ uploadFormat: single-language-json
+
+ - name: Build Next.js project
+ run: pnpm build
+ env:
+ RAINDROP_COLLECTION: ${{ secrets.RAINDROP_COLLECTION }}
+ RAINDROP_TOKEN: ${{ secrets.RAINDROP_TOKEN }}
+ GH_PUBLIC_TOKEN: ${{ secrets.GH_PUBLIC_TOKEN }}
+ SPOTIFY_CLIENT_ID: ${{ secrets.SPOTIFY_CLIENT_ID }}
+ SPOTIFY_CLIENT_SECRET: ${{ secrets.SPOTIFY_CLIENT_SECRET }}
+ SPOTIFY_REFRESH_TOKEN: ${{ secrets.SPOTIFY_REFRESH_TOKEN }}
+
+ - name: Deploy to Staging
+ id: deploy-vercel-staging
+ uses: BetaHuhn/deploy-to-vercel-action@v1
+ with:
+ VERCEL_TOKEN: ${{ secrets.VERCEL_TOKEN }}
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ VERCEL_ORG_ID: ${{ secrets.VERCEL_ORG_ID }}
+ VERCEL_PROJECT_ID: ${{ secrets.VERCEL_PROJECT_ID}}
+ PRODUCTION: false
+ BUILD_ENV: |
+ RAINDROP_COLLECTION=${{ secrets.RAINDROP_COLLECTION }}
+ RAINDROP_TOKEN=${{ secrets.RAINDROP_TOKEN }}
+ GH_PUBLIC_TOKEN=${{ secrets.GH_PUBLIC_TOKEN }}
+ SPOTIFY_CLIENT_ID=${{ secrets.SPOTIFY_CLIENT_ID }}
+ SPOTIFY_CLIENT_SECRET=${{ secrets.SPOTIFY_CLIENT_SECRET }}
+ SPOTIFY_REFRESH_TOKEN=${{ secrets.SPOTIFY_REFRESH_TOKEN }}
diff --git a/.github/workflows/update-lockfile.yml b/.github/workflows/update-lockfile.yml
new file mode 100644
index 00000000..c7c1b720
--- /dev/null
+++ b/.github/workflows/update-lockfile.yml
@@ -0,0 +1,25 @@
+# https://github.com/dependabot/dependabot-core/issues/1736
+name: Dependabot
+on: pull_request_target
+permissions: read-all
+jobs:
+ update-lockfile:
+ runs-on: ubuntu-latest
+ if: ${{ github.actor == 'dependabot[bot]' }}
+ permissions:
+ pull-requests: write
+ contents: write
+ steps:
+ - uses: pnpm/action-setup@v2
+ with:
+ version: ^7
+ - uses: actions/checkout@v3
+ with:
+ ref: ${{ github.event.pull_request.head.ref }}
+ - run: pnpm i --lockfile-only
+ - run: |
+ git config --global user.name github-actions[bot]
+ git config --global user.email github-actions[bot]@users.noreply.github.com
+ git add pnpm-lock.yaml
+ git commit -m "Update pnpm-lock.yaml"
+ git push
diff --git a/.gitignore b/.gitignore
old mode 100755
new mode 100644
index 737d8721..54562bbc
--- a/.gitignore
+++ b/.gitignore
@@ -1,19 +1,21 @@
# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
# dependencies
-/node_modules
+**/node_modules
/.pnp
.pnp.js
# testing
/coverage
+test-results
# next.js
-/.next/
+.next
/out/
+.swc
# production
-/build
+build
# misc
.DS_Store
@@ -33,3 +35,17 @@ yarn-error.log*
# typescript
*.tsbuildinfo
+
+# custom
+public/sitemap.xml
+public/sitemap-0.xml
+
+# Sentry
+.sentryclirc
+
+# Simple Localize
+simplelocalize.yml
+
+.turbo
+
+.env.local
diff --git a/.husky/pre-push b/.husky/pre-push
deleted file mode 100644
index 9c96ce93..00000000
--- a/.husky/pre-push
+++ /dev/null
@@ -1,4 +0,0 @@
-#!/usr/bin/env sh
-. "$(dirname -- "$0")/_/husky.sh"
-
-pnpm build
diff --git a/.npmrc b/.npmrc
index 319e41e6..c7b730ca 100644
--- a/.npmrc
+++ b/.npmrc
@@ -1 +1,3 @@
strict-peer-dependencies=false
+enable-pre-post-scripts=true
+auto-install-peers=true
diff --git a/.prettierignore b/.prettierignore
old mode 100755
new mode 100644
index 7d42f5a0..0d7bf920
--- a/.prettierignore
+++ b/.prettierignore
@@ -1,9 +1,4 @@
-.next
-next-env.d.ts
-node_modules
-package.json
-package-lock.json
public
-coverage
-docs/
-!.storybook
+pnpm-lock.yaml
+node_modules
+.next
diff --git a/.prettierrc b/.prettierrc
old mode 100755
new mode 100644
diff --git a/.vscode/launch.json b/.vscode/launch.json
index 32e56b9e..c96b004e 100755
--- a/.vscode/launch.json
+++ b/.vscode/launch.json
@@ -5,7 +5,7 @@
"name": "Next.js: debug server-side",
"type": "node-terminal",
"request": "launch",
- "command": "npm run dev"
+ "command": "pnpm dev"
},
{
"name": "Next.js: debug client-side",
@@ -16,12 +16,31 @@
"name": "Next.js: debug full stack",
"type": "node-terminal",
"request": "launch",
- "command": "npm run dev",
+ "command": "pnpm dev",
"serverReadyAction": {
"pattern": "started server on .+, url: (https?://.+)",
"uriFormat": "%s",
"action": "debugWithChrome"
}
+ },
+ {
+ "type": "node",
+ "name": "vscode-jest-tests.v2",
+ "request": "launch",
+ "args": [
+ "test",
+ "--runInBand",
+ "--watchAll=false",
+ "--testNamePattern",
+ "${jest.testNamePattern}",
+ "--runTestsByPath",
+ "${jest.testFile}"
+ ],
+ "cwd": "${workspaceFolder}",
+ "console": "integratedTerminal",
+ "internalConsoleOptions": "neverOpen",
+ "disableOptimisticBPs": true,
+ "program": "${workspaceFolder}/pnpm"
}
]
}
diff --git a/.vscode/settings.json b/.vscode/settings.json
index edd682b0..6fb72cfc 100755
--- a/.vscode/settings.json
+++ b/.vscode/settings.json
@@ -6,14 +6,10 @@
".next": true,
"coverage": true,
"public": true,
- "out": true,
- "out_build": true,
- "out_functions": true,
"CHANGELOG": true,
"CODE_OF_CONDUCT": true,
"CONTRIBUTING": true,
- "LICENCE": true,
- "package-lock.json.old": true
+ "LICENCE": true
},
"editor.formatOnSave": true,
"javascript.format.enable": true,
@@ -27,10 +23,6 @@
"[typescript]": {
"editor.formatOnSave": true
},
- "[handlebars]": {
- "editor.formatOnSave": false,
- "editor.formatOnPaste": false
- },
"eslint.alwaysShowStatus": true,
"eslint.format.enable": true,
"eslint.run": "onSave",
@@ -38,5 +30,13 @@
"eslint.lintTask.enable": true,
"eslint.nodePath": "node_modules",
"eslint.validate": ["javascript", "javascriptreact", "typescript", "typescriptreact"],
- "cSpell.words": ["lastmod", "rehype", "semibold"]
+ "cSpell.words": ["lastmod", "Pybh", "rehype", "semibold", "UCXYs"],
+ "frontMatter.content.defaultFileType": "mdx",
+ "frontMatter.content.draftField": {
+ "name": "draft",
+ "type": "boolean"
+ },
+ "frontMatter.content.supportedFileTypes": ["mdx"],
+ "jest.jestCommandLine": "npm run test --",
+ "jest.rootPath": "/Users/thedaviddias/Projects/thedaviddias-blog"
}
diff --git a/README.md b/README.md
old mode 100755
new mode 100644
index c0656f29..a6ec9461
--- a/README.md
+++ b/README.md
@@ -1 +1 @@
-# David Dias Blog
+# thedaviddias
diff --git a/SECURITY.md b/SECURITY.md
new file mode 100644
index 00000000..034e8480
--- /dev/null
+++ b/SECURITY.md
@@ -0,0 +1,21 @@
+# Security Policy
+
+## Supported Versions
+
+Use this section to tell people about which versions of your project are
+currently being supported with security updates.
+
+| Version | Supported |
+| ------- | ------------------ |
+| 5.1.x | :white_check_mark: |
+| 5.0.x | :x: |
+| 4.0.x | :white_check_mark: |
+| < 4.0 | :x: |
+
+## Reporting a Vulnerability
+
+Use this section to tell people how to report a vulnerability.
+
+Tell them where to go, how often they can expect to get an update on a
+reported vulnerability, what to expect if the vulnerability is accepted or
+declined, etc.
diff --git a/apps/blog/.env.example b/apps/blog/.env.example
new file mode 100644
index 00000000..eb964b9b
--- /dev/null
+++ b/apps/blog/.env.example
@@ -0,0 +1,47 @@
+# Unsplash metrics
+UNSPLASH_ACCESS_KEY=
+
+# Analytics
+PLAUSIBLE_API_KEY=
+
+# Github projects
+GH_PUBLIC_TOKEN=
+
+# Bookmarks
+RAINDROP_COLLECTION=
+RAINDROP_TOKEN=
+
+# Shows and movies stats
+SIMKL_USER_ID=
+SIMKL_TOKEN=
+SIMKL_CLIENT_ID=
+
+# Newsletters metrics
+REVUE_API_KEY=
+
+# Code metrics
+WAKATIME_API_KEY=
+
+# Steam
+STEAM_USER_ID=
+STEAM_KEY=
+
+# Foursquare
+FOURSQUARE_API_KEY=
+FOURSQUARE_CLIENT_ID=
+
+# Spotify
+SPOTIFY_CLIENT_ID=
+SPOTIFY_CLIENT_SECRET=
+SPOTIFY_REFRESH_TOKEN=
+
+# YouTube metrics
+YOUTUBE_CHANNEL_ID=
+GOOGLE_CLIENT_EMAIL=
+GOOGLE_PRIVATE_KEY=
+
+# Mailbox
+MAILBOX_VALIDATOR_KEY=
+
+# Simple Localize
+SIMPLE_LOCALIZE_KEY=
diff --git a/apps/blog/.env.publish.example b/apps/blog/.env.publish.example
new file mode 100644
index 00000000..59b5992f
--- /dev/null
+++ b/apps/blog/.env.publish.example
@@ -0,0 +1,7 @@
+# Medium
+MEDIUM_TOKEN=
+MEDIUM_AUTHOR_ID=
+
+DEV_TOKEN=
+
+HASHNODE_TOKEN=
diff --git a/apps/blog/.eslintignore b/apps/blog/.eslintignore
new file mode 100644
index 00000000..2a61ce85
--- /dev/null
+++ b/apps/blog/.eslintignore
@@ -0,0 +1,2 @@
+wallaby.js
+next.config.js
diff --git a/apps/blog/.eslintrc.js b/apps/blog/.eslintrc.js
new file mode 100644
index 00000000..538b6d45
--- /dev/null
+++ b/apps/blog/.eslintrc.js
@@ -0,0 +1,54 @@
+module.exports = {
+ extends: [
+ 'next/core-web-vitals',
+ 'plugin:@typescript-eslint/recommended',
+ 'plugin:import/typescript',
+ 'plugin:react-hooks/recommended',
+ 'plugin:mdx/recommended',
+ 'plugin:jsx-a11y/recommended',
+ 'plugin:prettier/recommended', // always at the end
+ ],
+ plugins: ['simple-import-sort'],
+ rules: {
+ 'simple-import-sort/imports': [
+ 'warn',
+ {
+ groups: [
+ // ext library & side effect imports
+ ['^@?\\w', '^\\u0000'],
+ // {s}css files
+ ['^.+\\.s?css$'],
+ // Lib and hooks
+ ['^@/lib', '^@/hooks'],
+ // static data
+ ['^@/data'],
+ // components
+ ['^@/components'],
+ // Other imports
+ ['^@/'],
+ // relative paths up until 3 level
+ [
+ '^\\./?$',
+ '^\\.(?!/?$)',
+ '^\\.\\./?$',
+ '^\\.\\.(?!/?$)',
+ '^\\.\\./\\.\\./?$',
+ '^\\.\\./\\.\\.(?!/?$)',
+ '^\\.\\./\\.\\./\\.\\./?$',
+ '^\\.\\./\\.\\./\\.\\.(?!/?$)',
+ ],
+ ['^@/types'],
+ // other that didn't fit in
+ ['^'],
+ ],
+ },
+ ],
+ 'simple-import-sort/exports': 'error',
+ 'import/first': 'error',
+ 'import/newline-after-import': 'error',
+ 'import/no-duplicates': 'error',
+ 'no-console': ['error'],
+ 'react/jsx-no-undef': ['off', { allowGlobals: true }],
+ '@typescript-eslint/no-unused-vars': ['error'],
+ },
+}
diff --git a/.quokka b/apps/blog/.quokka
similarity index 100%
rename from .quokka
rename to apps/blog/.quokka
diff --git a/apps/blog/README.md b/apps/blog/README.md
new file mode 100644
index 00000000..31827574
--- /dev/null
+++ b/apps/blog/README.md
@@ -0,0 +1,5 @@
+# David Dias's personal website
+
+- Simple Localize: help with translations
+
+## Design inspiration
diff --git a/apps/blog/e2e/about.spec.ts b/apps/blog/e2e/about.spec.ts
new file mode 100644
index 00000000..e16b1e5d
--- /dev/null
+++ b/apps/blog/e2e/about.spec.ts
@@ -0,0 +1,15 @@
+import { expect, test } from '@playwright/test'
+
+test('should navigate to the about page', async ({ page }) => {
+ // Start from the index page (the baseURL is set via the webServer in the playwright.config.ts)
+ await page.goto('/')
+
+ // Find an element with the text 'About Page' and click on it
+ await page.click('text=About')
+ // The new url should be "/about" (baseURL is used there)
+
+ await expect(page).toHaveURL('/about')
+
+ // The new page should contain an h1 with "About Page"
+ await expect(page.locator('h1')).toContainText('About me')
+})
diff --git a/apps/blog/i18n.json b/apps/blog/i18n.json
new file mode 100644
index 00000000..af2f8483
--- /dev/null
+++ b/apps/blog/i18n.json
@@ -0,0 +1,10 @@
+{
+ "locales": ["en", "fr"],
+ "defaultLocale": "en",
+ "localeDetection": false,
+ "pages": {
+ "*": ["common", "about"],
+ "/404": ["404"],
+ "/about": ["about"]
+ }
+}
diff --git a/apps/blog/jest.config.js b/apps/blog/jest.config.js
new file mode 100644
index 00000000..2bd000e5
--- /dev/null
+++ b/apps/blog/jest.config.js
@@ -0,0 +1,21 @@
+module.exports = {
+ preset: 'ts-jest',
+ testEnvironment: 'jsdom',
+ testPathIgnorePatterns: [' You've probably heard about "mobile first", "content first", "design first", etc. But have you heard about "user first"? I think it's the most important principle of all. "User First" is a methodology and principle where you put the user first in everything you do. You get the idea. So why some businesses continue to do the opposite? Why some businesses continue to do what they think is best for their users without asking them? Sometimes it can a business think they know better what users want. I sometimes hear "our users don't know what they want, they always complain...". Well, if they complain, it's because they want something else. User needs creates businesses and businesses create user needs. It's a virtuous circle. If you don't listen to your users, you will lose them. And not excuses will make up for failing to listen to them. Depending on the platform, sometimes you may get audiobooks in MP3 format. However, MP3 is not the best format for audiobooks. It doesn't support chapters, and it's not bookmarkable. M4B is the best format for audiobooks. It supports chapters and is bookmarkable. It's also the format used by Apple for audiobooks. Last year, I discovered the only MacOS that simply convert multiple MP3 files into one M4B file. It's called AudioBookBinder App Store page and can be found on the App Store for free! AudioBook Binder is a simple app that does one thing and does it well. It converts MP3 files into M4B files. You drag your MP3 files into the app, and the cover, and it will convert them into one M4B file.\n
\nHow to use AudioBookBinder?
\n
The options are limited but sufficient. You can set the cover, the title, the author, and the genre. I usually leave it to "Audiobook" for the genre.
\nI hope you find this app useful as I did.
\nAnd in case you store some audiobooks on your own server, you take a look at audiobookshelf. It's a Google and Apple app that allows you to listen to your audiobooks from your own server. It's open-source and free. You're welcome!
\n", + "url": "https://thedaviddias.dev/notes/how-to-convert-mp3-to-m4b-for-audiobooks", + "title": "How to Convert MP3 to M4B for Audiobooks lovers, on MacOS?", + "summary": "Explore \"AudioBookBinder\", a handy MacOS app designed for making audiobooks. It quickly turns MP3 files into M4B format, making audiobook creation a breeze.", + "date_modified": "2023-07-16T21:04:32.187Z", + "author": { + "name": "David Dias", + "url": "https://twitter.com/thedaviddias" + } + }, + { + "id": "https://thedaviddias.dev/notes/stop-using-thematic-break-to-design-horizontal-line", + "content_html": "I have seen way too many times people using the <hr>
HTML element, which is called "thematic break" instead of CSS.
Using the HTML <hr>
tag purely for designing horizontal lines is an incorrect practice.\nThe real purpose of the <hr>
tag is to denote a thematic break in the content (like between paragraphs), not just to visually create a horizontal rule.
If you need a decorative line, CSS is a more appropriate choice.
\nFor instance:
\n<div class="styled-line">Some content</div>\n
Example CSS:
\n.styled-line {\n border-bottom: 1px solid #000;\n margin: 1em 0;\n}\n
You generally don't want to have a single empty <span>
or <div>
element just to style it as a horizontal line. Often times, you can just use a bottom border on the element above it.
In terms of accessibility, using <hr>
as a design element can confuse screen reader users, as it indicates a "thematic break".
Semantics are important, not only for accessibility but also for SEO. So, please, stop using the <hr>
tag to design a horizontal line!
You may be getting the issue "The set-output
command is deprecated and will be disabled soon. Please upgrade to using Environment Files." from your Github workflow.
Few months ago, I choose to update some of my Github workflows to read from my .nvmrc
file instead of manually specifying my node version.
on: push\n\njobs:\n build:\n runs-on: ubuntu-latest\n\n steps:\n - name: Detect Node version\n run: echo ::set-output name=NODE_VERSION::$(cat .nvmrc)\n id: nvmrc\n\n - name: Use Node.js ${{ steps.nvmrc.outputs.NODE_VERSION }}\n uses: actions/setup-node@v3\n with:\n node-version: ${{ steps.nvmrc.outputs.NODE_VERSION }}\n
But since October 2022 and the runner version 2.298.2
, Github shows a warning regarding a future depreciation of the set-output
command.
After few trials, I figured out how to update using the $GITHUB_OUTPUT
instead:
on: push\n\njobs:\n build:\n runs-on: ubuntu-latest\n\n steps:\n - name: Detect Node version\n run: echo "NODE_VERSION=$(cat .nvmrc)" >> $GITHUB_OUTPUT\n id: nvmrc\n # shell: bash (to be added if you use composite actions)\n\n - name: Use Node.js ${{ steps.nvmrc.outputs.NODE_VERSION }}\n uses: actions/setup-node@v3\n with:\n node-version: '${{ steps.nvmrc.outputs.NODE_VERSION }}'\n
And "voilà", the warning should have disappeared and you should see the number of the version right after Use Node.js XXXX
in your workflow.
When recently working on my blog, I tried to add a postbuild
scripts with next-sitemap
in my package.json
. My goal was to automatically generate .xml
files after each Next.js builds.
Using pnpm, I found out that my postbuild
was working with npm
but not pnpm
.
I found out this issue on Github mentionning the same problem I encountered. It seems that pre/posts scripts are not activated if using pnpm.
\nI found the solution adding the line below in my .npmrc
local file:
enable-pre-post-scripts=true\n
Now I can use pre/posts scripts and pnpm
. I hope this could save you some time!
This was a long wait! After months of lurking on Youtube watching others playing with their Deck, I finally got my purchase confirmation email for the Steam Deck!
\n\nWhat kept me sane during this time was probably this tool created by Labidou51. I was able to get a sense of when I would receive the email confirmation.
\nSome more days to wait and I hope to get this new amazing piece of tech (it's a computer) in my own hands! Maybe I can find a nice skin on Dbrand in the meantime 😜?!
", + "url": "https://thedaviddias.dev/notes/finally-received-steam-deck-confirmation-email", + "title": "Finally received my Steam Deck confirmation email!", + "date_modified": "2022-07-28T15:47:33.508Z", + "author": { + "name": "David Dias", + "url": "https://twitter.com/thedaviddias" + } + }, + { + "id": "https://thedaviddias.dev/articles/decade-web-development-personal-journey-showcase", + "content_html": "I published my first website around 2001. Probably before that. Almost 20 years ago. Unfortunately, the exact date I started doing web development is probably lost by now.
\nEverything began when my dear friend, Christophe Raimbault, a priest in the Diocese of Tours, asked if I was interested in managing and building a website for the "Notre-Dame La Riche" parish. If you are not too familiar with what a parish is, it's mostly a local community of different churches. At the time, this sounded like an amazing challenge but I had no idea what I was getting into. I had never touch a line of code before, I was only 15 years old. I never stopped coding since then.
\nThe following list of websites are the ones that had the most impact on my life. I build a lot more websites but smaller and less important. I'm not including them here.
\n"Notre-Dame La Riche" parish website was my first website. At the time, no blogs, no Google, no Github... most of my time was dedicated in studying code source of other websites, reading books about HTML, CSS, PHP. It was definitelly a fun time. I was learning a lot, things seemed to be a lot more simple than nowadays.
\n\nI still have some code source and I can't bear looking at it just for few seconds 🤣: CSS mixed with HTML, no version control, layouts build with tables... as I said, it was fun but I'm glad things have changed. The website had multiple refactoring along the years. I remember having some animated banners build with Flash.
\n\n\nWikipedia was launched in 2001. At this time, wikis were popular and Wikipedia was just beginning. I remember how much criticism this community project received. For many reasons that I have somewhat forgotten, I decided to create a dedicated wiki related to Catholic knowledge. I named it WikiKto (Kto is the French abbreviation for Catholic).
\nTo my great surprise, the project gained a lot of contributors. I was no longer alone. I was not the only one who thought that a wiki about Catholic knowledge was a good idea. I was not the only one who believed that Catholic knowledge should be shared and made accessible to everyone.
\nThe project was officially launched on May 13, 2005. I had to shut it down a little over a year later when I moved to Brazil and could no longer manage it.
\n\n\nWikiKtosource was launched few weeks after WikiKto and was the equivalent to Wikimedia. It was a wiki dedicated to offer open source resources for the catholic community. It was a place to share and download resources like images mainly.
\n\nI created a first version of my personal blog in 2010. Few months before I started my first job as a web developer. For many years, creating new content and maintaining a blog has been a challenge for me with so many things and ideas to create. The current version of my blog (2022-2023) is probably the one that finally got the most attention to me.
\n\n\n\nBack from Brazil, I decided to create a forum to help Brazilians to move to France and to connect to other Brazilians living in France. Thanks to all my contacts made in Brazil, I was able to get a lot of exposure and the forum and blog got very popular.
\nfrontenddeveloper.fr
was another trial to create a blog about front-end development. I was not very active on it and I decided to close it after few months.
The Front-End Checklist is an open-source project I created just few month before leaving Mauritius. Initially build for my frontend team, it became a worlwide and very popular project around the globe. I have been meaning to build a V2, more modern and with a better user experience. Not sure if and when I will have time to do it.
\n\nI officially start the podcast World Web Stories when I was living in Mauritus, in 2016. I was not very active, only had 5 episodes and it was in French. In 2021, unemployed for few weeks, I decided to relaunch the podcast in English with a new format and with the goal to interview one person from each country in the world.
\nUnfortunately, I choose to spend more time on my other podcast "Erreur 200". I still want to continue this project, but I'm not sure when I will.
\n\nErreur 200 is a French podcast I co-host with Jean-Rémy Duboc about web development. We talk about our experience, our mistakes, our successes, our tips and tricks. We also interview people from the web development community.
\n\nLooking back more than 10 years, I'm very proud and grateful for all the opportunities and projects I had the chance to work on. I'm also very grateful for all the people I met along the way. Those projects shaped in a way my career and life and I'm not even mentionning all the professional projects I've worked on.
", + "url": "https://thedaviddias.dev/articles/decade-web-development-personal-journey-showcase", + "title": "My Decade in Web Development: A Personal Journey and Showcase", + "summary": "Dive into my decade-long journey in web development, chronicling key projects that have shaped my career.", + "image": "https://thedaviddias.dev/images/articles/decade-web-development-personal-journey/featured.jpg", + "date_modified": "2023-07-16T21:43:28.398Z", + "author": { + "name": "David Dias", + "url": "https://twitter.com/thedaviddias" + } + }, + { + "id": "https://thedaviddias.dev/articles/raycast-applications-super-developer", + "content_html": "Spolight on Mac is great, but it always lacked the possibility to add custom commands and third party access. And that's where Alfred comes in. It's a great application that allows you to do just that. I have been a big fan of "Alfred" at least since 2015. I would recommend this application to anyone who wants to be more productive on their Mac. I was a big fan!
\nBut few months ago, one of my colleague talked to me about Raycast. Eager to always find better tools and expand my productivity, I decided to give it a try. The first thing I noticed was the speed. Not that "Alfred" is slow, but Raycast was just blazing fast!
\nI was hooked! And when I found out that all the applications were build in TypeScript, this was the cherry on the cake! After a few weeks now using it, I don't see myself going back.
\nAnd today, I wanted to share with you the 10 applications I use the most in Raycast, on a daily basis. Those applications are more towards developers but I highly recommend you to check Raycast out (it's free)
\n1Password has been my password manager for many years. I can search, copy username or password, open the website. The only annoying part is the fact that 1Password always ask me to give access to the application. Annoying but still useful.
\nI use TailwindCSS and nothing better than opening the TailwindCSS documentation directly from Raycast. I could search directly on the website but this saves me some clicks.
\nOpen pull requests, notifications, discussions from Github... I can also search directly repositories from Raycast.
\nPlay, pause, stop, next... I can control Spotify directly from Raycast. This is something I was always using on Alfred, couldn't approve Raycast if I didn't have this option.
\nRaindrops is my favourite bookmark manager. The kind of tool that constantly adds new features. I can search, open, add new bookmarks directly from Raycast with the Raindrop application.
\nI love seeing the status of my deployment on Vercel from Raycast. Can directly open my projects too.
\nI use "Visual Studio Code" Raycast App in combinaison with "Project Manager" to quickly access all my projects in an instant.
\nThis is not an application, but a feature I loved on Alfred and actually exists on Raycast, even it's slighly less powerful.
\n"Clipboard History" give you access to your last copied items. I've assign the double ⌥
(action) key to open the clipboard history. This is a feature I use constantly, and I'm glad it's available on Raycast.
User testing is a crucial tool for gathering feedback on a product, but it's not enough to truly understand and improve user engagement. For the past 13 years, I have been building multi-language platforms for international brands and for a wide variety of users. Even in a space that constantly changes, where users have evolving needs, it's important to also acknowledge the role that experience plays in understanding them.
\nBeing a Front-End Developer gave me and all my colleagues around the world a unique perspective on user experience. We understand how small design decisions can have a big impact on the user experience, and we have a deep understanding of how users interact with products. By leveraging our experience in front-end development, we can help create products that are not only effective but also enjoyable to use, leading to increased user satisfaction and loyalty.
\nUser testing is a critical component of product development that can help identify usability issues and gather feedback from real users. By testing products with representative users, product teams can gain valuable insights in how users interact with their interfaces and what their pain points are. Whatever you use services like User Testing, or your own user testing directly with regular users, user testing also possess some limits that can’t be overlooked.
\nFor example, users may not always be able to articulate their needs and preferences accurately, or identify more obvious usability issues that sometimes are more subtle or hidden. User testing is also typically conducted in a controlled environment, which may not always accurately reflect real-wold usage scenarios.
\nWhat about people that don’t use technology in a daily basis?
\nUsually user testing is done by a certain user group or demographics and don’t include 100% of all users. From my point of view, user testing can’t be really complete without testing with people with disabilities. For people with experience in doing accessibility testing with real users, I’m sure you will agree that.
\nThrough Internet history, user testing had lead to create successful products:
\nBut user testing can also fail to uncover critical usability issues which can contribute to the failure of some projects:
\nBuilding a successful project is not an easy task, a lot of factors can influence the success or the failure of a new product. Nowadays, users have different needs. Users switch faster to competitor then before, we have daily examples of that.
\nUser testing is one tool in companies belt that should be used as often as possible, but shouldn’t be the only one.
\nFront-End Developers (FED) are not just coders. Usually seen as the ones that “just” integrate designs into HTML, CSS and JavaScript, their t-shape personalities is often times overlooked (not all FES have t-shape skills though).
\nA FED can play a critical role in creating engaging user experiences.
\nAs I said in my previous article about Front-End Developers, Web and UX/UI Designers collaboration, collaboration and communication is key in building a successful product.
\nThis collaborative approach allows different perspectives to merge and create a more holistic vision of the product. As Front-End Developers, we have the unique position of working at the intersection of design and technology. We are often the ones who bring the designers' visions to life while ensuring that the product remains functional and user-friendly.
\nFront-end development is about more than just making things look good. It's about creating a seamless and intuitive interface that guides users through a product. Every button, every transition, every piece of interactive content is a chance to engage users and keep them invested in the product.
\nFront-end developers have a deep understanding of user behavior, as they are responsible for creating the interactive elements that users engage with. They can use this knowledge to create more engaging user interfaces and to guide user testing to focus on areas of the product that are most likely to affect user engagement.
\nBeyond just implementing designs, a seasoned FED can provide insights and suggest improvements to the UX/UI designs based on their knowledge of what is technically feasible and what would create a smoother user journey. They can spot potential pitfalls in the designs that might be overlooked during user testing.
\nFor example, a developer might notice that a particular design element could cause issues on certain devices or browsers. They might also suggest an alternative way of implementing a feature that enhances the user's experience. I have been advocating about accessibility for years now. Last year, I became CPACC certified and I continue to advocate for accessibility in my daily work. Not everyone understand what web accessibility is and how it impacts users. It takes time and effort to educate people about it.
\nAs technology advances, users' expectations also rise. They demand faster, smoother, and more intuitive interfaces. User testing will always be a vital tool for gathering feedback, but to meet these evolving demands, we need to go beyond testing.
\nIncorporating the front-end developer's expertise into the design process and user testing can help create a product that not only meets the users' needs but also provides an engaging and satisfying experience.
\nWe must continue to push the boundaries, experiment with new technologies, and constantly seek ways to better understand and improve user engagement. Only by doing this can we hope to create products that users will love to use.
\nFront-End Developers bring a valuable perspective to the product development process. Let's use it to its fullest potential to create engaging, user-friendly products. After all, the success of any product lies in the satisfaction of its users.
\nAt the end, user engagement is not just about the single experience of a product but the entire journey. It's about creating an engaging, intuitive, and satisfying journey that users want to return to again and again. And Front-End Developers play a crucial role in crafting this journey.
\nRemember, user testing is a part of the journey, not the destination. We must use all the tools at our disposal, and that includes leveraging the front-end development experience to truly understand and improve user engagement.
\nLet's continue to build with the user in mind, always striving to enhance their journey, their experience, and ultimately, their engagement.
\nThe web has changed so much in the past 10 years. Technology has enabled new usages, new ways of communication, new ways of seeing the world. Web Design trends are also constantly changing, every year we see new trends that sometimes stick for few years, sometimes they don’t. The same happened in web development: we’ve seen new JavaScript frameworks, new ways to build components, new ways to code CSS, using pre or post-processors. The list is almost infinite. But something that has not changed is the need for collaboration between people working on the same web project.
\nAs a Front-End Developer, I had the chance to work with numerous Web Designers and UX/UI designers over my career. No matter if I was in Brazil, France, Mauritius or Canada, I have observed the same challenges over and over again. And one unique solution doesn’t always apply to similar situations. You need to find what works best for you.
\nIn this article, I want to share some topics I believe should be discussed. From my point of view, we, as web professionals want the same thing: build accessible and performant products that will provide the best user experience possible.
\nIf you want your product to work, to get revenues, then you should start with the above goal first, not the other way around.
\nBut let’s start with some definitions.
\nA lot of people could probably define what is a Web Designer better than I. But from my perspective, as a Front-End Developer, a Web Designer is someone with extensive skills in design that understands the constraints and the possibilities given by the web. I’ve seen a lot of really good “designers” but who were not always able to fully understand the “web” part of their title. Designing for the web is far from being straightforward. Be familiar with how to use Sketch or Figma is surely part of being a Web Designer, but it’s unfortunately not enough. And honestly, for me it’s totally fine: you learn as you progress.
\nProbably, from my point of view, a Web Designers shouldn’t just rely on his knowledge and put pressure on himself to know everything about the web. That’s where a Front-End Developer can come into play. Front-End Developers are the ones that spend their time on the web, scrolling, studying code, finding new ways of building components… They are the perfect buddies of Web Designers, and both should be pairing regularly.
\nA UX/UI Designer is someone where focus lays on users. Nothing should be more important than the user, the person, the human. A UX Designer needs to spend a lot of his time doing researches. I’ve always considered that a good UX/UI Designer should be passionate about people, what they want, how they want things… Of course, you also have the word “designer” in the title, because in the context we are talking about, a UX/UI Designer has the task to understand the user and also know what works the best in terms of UI. Something that works for a website dedicate to moms may not work for a website which main users are teens.
\n\n\nI’ve always considered that a good UX/UI Designer should be passionate about people, what they want, how they want things.
\n
But he is not the only one who has developed an understanding of what users prefer and are used to when they browse the Internet. When a Front-End Developer wants to create a piece of code, a component, he usually dives into his structured memory of patterns. When someone says “button”, it triggers in his brain all the times (thousands of) he clicked on a button, but also snippets of CSS code that can be used to create a button or the long hours he spent analyzing CSS framework documentation…
\nFront-End Developers can be a huge asset for any UX/UI Designer because they’ve learned so much about the web and usual patterns from a different perspective.
\nI know a lot of people that could potentially disagree with my definition. For me, a Front-End Developer is a builder, someone that loves building web content using a combination of multiple skills. Because a Front-End Developer is not just a coder. To be a Front-End Developer you need to learn HTML, CSS, JavaScript but these are just the basics. You need to understand how to make a website accessible, how to use CSS to create an amazing layout, how to translate a design file to CSS, how to keep your application performant, how to build a UI/pattern library… the list is long but I’m sure you get my point.
\nA Front-End Developer is the backbone of any web content. Without a Front-End Developer, the website couldn’t be created (even if you use a no-code generator, a Front-End Developer had to create the UI).
\nDoes that mean that a Front-End Developer is more important than other people in their team? Absolutely not, but his role requires him to be a facilitator, to understand what he can provide for the rest of his team.
\nNow that we have a better idea of what these roles represent, how do we make them work together in a way that they feel empowered and enjoying the collaboration?
\nAny athlete will tell you that mindset is everything to achieve their goals, to win championships, to perform better. This is not that different when it’s about working as a team. Everyone’s mindset is important within a team. But it’s something that the group itself doesn’t have any control. Only individuals can decide to have an open mind, a true relationship with the other member of the team, visualize solutions instead of problems…
\nWe often forget that we all have a common goal. Sure, we can also have multiple goals for ourselves but if you are part of a team, it’s only to achieve a common goal.
\nDifferences are what make this specific group worth existing. EVERYONE has a role to play in any team.
\nBut it’s not only about individual mindsets. A team with a Web Designer, UX/UI and developers are usually part of a corporation. All over the world, numerous companies understand and value their culture. This is an essential part to guide employees towards common goals and achieve specific tasks.
\nIf companies provide the tools and the support to create trust and equality between the members of a team, then it makes it easier for people to collaborate together and learn from each other.
\nAaah the ego! Some people say that a bad reputation can hurt any company, I believe ego can hurt sometimes even more. The ego is one of the biggest enemies of any company, team or leadership group. I had the displeasure to work with 1–2 people during my career with a pretty big ego.
\nI will always feel the pain these people have caused, it’s important to make peace with any related event but also with them. After all, we are all humans.
\nEgo shouldn’t exist in a team. Period.
\nCollaboration is knowing that people are better than you in certain areas. It’s knowing that you can learn from them. It’s knowing that you can also give something to them. Collaboration is finding the balance and putting everything and everyone at the center of the group.
\nAnd no, collaboration is not something you implement once and it’s done, everything will always work perfectly. Collaboration is an equilibrist performance that could go wrong at any time. But you have to keep going because it’s so rewarding when you succeed!
\nBefore giving you some answers, I want to tell you about two of the best experiences I had during my career with Web / UX / UI Designers.
\nMy first best experience was in August 2014, in Cincinnati, USA. I’ve worked for a month with Barefoot Proximity to build a new platform. Julie Tran, which was leading the project in terms of design would create pieces of design, sent them to me for prototyping and we would discuss around that. What made the experience amazing was the level of exchange and collaboration.
\nIt wasn’t just about, “Hey, here is the design”, it would be more “hey, here is the design, can you do a quick prototype to see if that works. Let me know if you see any problems that may occur for mobile, accessibility etc…”.
\nI was able to give my feedback based on my knowledge and experience, Julie would also push back when I would be hesitant to test a particular approach. Combining our visions, being open with each other was what made this project successful. Even with my English being pretty basic at this time, we both enjoyed our work and I kept only good memories from that collaboration.
\nMy second best experience was in 2015, with Julia Bruyneel, who was working in Paris as a Web/UX Designer freelancer. I was in Mauritius for a month and we had to collaborate for few weeks on new designs for an existing project.
\nEven with the distance, and not knowing each other before, Julia would contact me and exchange about designs she would have made. That simple communication and regular exchange were reassuring for me (was lead on that project for 3 years) but also a manifestation of maturity and professionalism from Julia. It was short but I kept good memories of that collaboration.
\nThe three main keys, from my unique point of view, to have successful teams rely on mindset, culture and processes.
\n\nMindset: If you want to have people working together, in collaboration, using each other experience and vision, they need to have a similar mindset. I’m not saying an “identical mindset” or “same personalities”, I’m saying “similar mindset”. When everyone understands the goal of the team and is open to see each human behind his title, then you have more probabilities to have a successful team.
\nCulture: Sometimes, having a similar mindset is not possible or challenging. In that case, is the responsibility of the structure or company to influence a specific mindset. Companies can decide who should be part of the “family”. That’s why the recruitment process is important.
\nProcesses: a lot of people I know, hate the word processes. For me, processes have always mean freedom. When you have a defined and clear process, you don’t have to stress or be hesitant or afraid. A process should exist to guide you in a process where people can predict what will come next. It’s reassuring to know that everyone has the same process in mind. Sometimes, when people's mindsets are not similar or the culture is lacking, processes should help people to visualize the direction they need to take.
\nYou could take these 3 points separated or combine them to maximize your chances to build successful teams.
\n\n\n“We love the web and we love being part of the creation process! We decided to become Front-End Developers because we love building! And it’s not just about converting designs to CSS, we love understanding the why, the how of the creation.\nAnd we understand that this may be scary at times because why the heck a Front-End Developer will tell a designer that his design is not accessible? Or tell the designers that he is not sure, this is gonna work for the user? It’s not about competing, it’s about putting energies in sync.\nThe problem sometimes is that we see patterns and code examples in our minds that we don’t always translate for other people to understand. But we’re working on that! I promise!\nWe have more to share than just our “title”, we have more to give than just lines of code. We are here to help!”
\n
If you are still reading, I hope you also share some common ideas exposed in this article. I have dedicated a portion of my career to try to be a facilitator and share all the knowledge I accumulated to build awesome products.
\nWhat about your experience? How do you like to work with others? What would you like to see happening more often within your team?
", + "url": "https://thedaviddias.dev/articles/how-front-end-developers-ui-ux-could-better-collaborate-together", + "title": "How Front-End Developers, Web and UX/UI Designers could better collaborate together?", + "summary": "Collaboration between Developers and UX/UI Designers is essential to build a good product. With the right mindset, clear processes and an inclusive culture, everything is possible.", + "image": "https://thedaviddias.dev/images/articles/how-front-end-developers-web-and-ux-ui-designers-could-better-collaborate-together/featured.jpeg", + "date_modified": "2021-06-13T22:27:03.206Z", + "author": { + "name": "David Dias", + "url": "https://twitter.com/thedaviddias" + } + }, + { + "id": "https://thedaviddias.dev/articles/9-best-practices-ux-for-two-factor-authentification", + "content_html": "In 2023 alone, cybercriminals will steal 33 billion records. It takes 196 days on average to identify a data breach. The cost of a data breach will reach $150 million by 2020...\nThese numbers may be scary but they are only previsions. Things could be much worse in the near future. Security has become a hot topic these last years, almost everyone on the planet has already heard about a company data breach or even a friend that lost his Facebook account because someone hacked it! No one is completely safe nowadays.\n
\nI've recently spent multiple hours ensuring that all the accounts I possess use a unique password, complex and long with at least 20 characters and with the two-factor authentication (2FA) enable if present. I've discovered so many disparities between companies and so many issues in terms of features and user experience. I wanted to share with you in this article, what I believe are the best and recommended features for any website or company that takes the security of their users seriously.
\nThat is the starting point.
\nIf you care about your users or customers, you should give them the choice to activate the two-factor authentication. On around 800 websites where I have an account, only 5% offer a 2FA option. Some may argue that if you don't have highly sensitive information, it may be overkill to offer the 2FA. But any personal information could be considered sensitive.
\nIf you care about your users and their security, give them the option to enable the 2FA. Period.
\nGoogle, Facebook, Twitter... they all offer simultaneous ways for 2FA: text message, authentication app and security key. More commonly, at least in a text message and authentication app, the security key seems to be set up only on certain services.
\nBut I've been surprised to see Etsy, even they use toggles on their UI, to force you to only choose one of the options. I'm not even sure if it was originally designed to work like that.
\n\nBit.ly and booking.com in other hand only allow you to use your phone as a 2FA device. So if you lose your phone and your email access, you could be screwed.
\n\nMailchimp and Tumblr, on the contrary, only offer 2FA using an authentication app.
\nZapier has an awesome step by step 2FA setup, probably one of the best I found. They offer multiple complementary ways and specifically tell you "in the event you get locked out of your account and have lost both your authentication device and recovery codes". The user understands that providing his phone number is an additional way to ensure he/she can access his account in case he/she lost the other ways to connect to their web app.
\n\nI have been using 1Password for quite some time now and the modal that scans the QR code doesn't always find the QR code. In that case, I found myself drag and dropping the QR into that modal to be recognized. But it only works when the code is an image.
\nI would recommend having it as a format image that can be saved / drag and dropped.
\nReddit for example don't have the QR code as an image. Fortunately, everyone offers the text version of the QR code that you can use in your authentication application.
\nThis one only happened to me once. It happened with Instagram.
\nWhen Instagram sends a "verification code" by SMS, they included a space. If you copy-paste that code where it's required, first the input doesn't want the space and the last digit is not included in your paste. It's an annoying issue that could be fixed easily!
\n\nSounds weird when said at loud but a lot of websites don't offer backup/recovery codes when you enable the 2FA. This was a surprise for me at first, 2FA means you will always have backup codes in case you lost access to your phone, email or the app you use to generate the random number. Nowadays, some websites don't offer that option. I tend to be really careful with those.
\nKickstarter and WPEngine are examples of websites that don't offer you any recovery/backup codes. I hope they could improve that.
\n\nMost of the websites propose to copy the recovery codes. This is not the best option.
\nIt's nice to have it, sure, but it's not enough. I personally store all my recovery codes in multiple places: one is the vault from Dropbox. Having just to drag and paste a simple text file is easy and fast.
\nIf you offer only the option to copy, then you could be forcing the user to:
\nTechnology is there to save user's time.
\nSlack for example allows you to "Print codes" but not download them. Why not? I have to generate a PDF instead of my simple text file. Not the best user experience.
\n\nEven Facebook can make mistakes and this one is important for me. Currently, if you download the recovery codes from Facebook, you open the file and you can't find any mention of Facebook or the name of the account. The file name facebook_recovery_codes
is helpful but in my opinion, not enough. The name of the account and the name of the platform should be a minimum.
And to make it more useful, adding the date when the codes were generated could also be added.
\nGoogle which is a good example, uses your username in the name of the file, and also adds:
\nSAVE YOUR BACKUP CODES\nKeep these backup codes somewhere safe but accessible.\n\nLIST OF CODES\n\n(email@gmail.com)\n\n* You can only use each backup code once.\n* Need more? Visit https://g.co/2sv\n* These codes were generated on: Date, 2021.\n
It's essential to give the user the ability to regenerate recovery codes. Some don't offer this useful option.
\nThis one is less important but I still wanted to mention a key difference in terms of recovery/backup codes.
\nMost of the companies only offer one code vs a list of multiples codes that can be used. It's hard for me to defend one approach vs the other one. I just know that I feel better when I have more than one code.
\nSecurity keys are the less common way to secure your account. If you are a public figure or someone with a high level of responsibility, having a security key could give you a little bit more peace of mind. But for a normal user, it may be overkill. Nonetheless, I wanted to maximize the security of my accounts and recently bought the Titan Security Key from Google. The USB version works on any computer and I use the Bluetooth version in case I'm on my iPhone or iPad.
\n\nThey both are not cheap, but security should be part of your "unlimited budget", the same as for food.
\nI'm not a security expert and have limited knowledge in terms of security. But as a Software Engineer and particularly a user, I believe we have a long way ahead until most of the platforms implement all the tools to ensure secure access for users.
\nRecap:
\nThanks for reading, I hope these suggestions would help you to have a better UX and improve your 2FA implementation.
\nFeel free to ask me anything in the comments below!
", + "url": "https://thedaviddias.dev/articles/9-best-practices-ux-for-two-factor-authentification", + "title": "9 Best Practices & UX Improvements for the two-factor authentication (2FA)", + "summary": "The best and recommended features for any website or company that takes the security of their users seriously.", + "image": "https://thedaviddias.dev/images/articles/9-best-practices-ux-for-two-factor-authentification/featured.jpg", + "date_modified": "2021-02-25T00:01:00.000Z", + "author": { + "name": "David Dias", + "url": "https://twitter.com/thedaviddias" + } + }, + { + "id": "https://thedaviddias.dev/articles/how-to-deploy-your-nextjs-app-on-netlify-using-github-actions", + "content_html": "I've recently spent some time working with Next.js projects. Once my projects are done, the next logical step is to deploy these apps to be accessible to the world.
\nI have naturally used the Vercel platform, which couldn't be easier to use and deploy your application with ease. Then I tried AWS Amplify, which I particularly love but for now, requires you to use the Serverless Framework if you want to benefit from Server Side Rendering (SSR) capabilities.
\nThen, I remembered that Netlify has added support for Next.js, including dynamic routes, Preview Mode and more around November 2020. It was time for me to try it! But I also wanted to have a real CI/CD in place, to test my code and do more actions before deploying to Netlify. That's where Github Actions came to the rescue!
\nI'm going to describe in this article, all the steps you need to take to deploy your Next.js application on Netlify using Github Actions.
\n\n\nThe full version of the project can be found on Github.
\n
As always, you need to have a recent version of Node and NPM installed on your machine. I personally recommend using NVM
since it simplifies having multiple active Node.js versions.
To create a new Next.js project, type this command in your CLI:
\nnpx create-next-app name-of-your-app\n\n# move into the app's root directory\ncd ~/path-to-projects/name-of-your-app/\n
This will install a new application using a basic Next.js boilerplate. Don't forget to move to your app root folder before launching any next commands.
\nOnce your Next.js project is locally created, you can create a new project on Github and push the code generated.
\n(For those you are new to coding, feel free to follow these steps to create a new repository on Github.)
\nThere are 2 ways of creating a new Netlify project:
\nLet's use the CLI this time, I'm sure you already created a new project in the past using the Netlify interface.
\nLet's start by installing netlify-cli
globally:
npm install netlify-cli -g\n
Then check if the installation succeeds, confirming with this command:
\nnetlify\n
Now you need to link your computer with your Netlify account. To authenticate with Netlify, you need to run this command:
\nnetlify login\n
This will open a new tab in your browser where you'll need to "Authorize your Application" and then grant access to Netlify CLI.
\nIn case you already logged in previously, the console will output:
\nAlready logged in via netlify config on your machine\n
Now that your CLI is authorized to communicate with your Netlify account, it's time to programmatically create a new project:
\n# create a new Netlify site using the Netlify shortcut: ntl\nntl init\n
The first question you are asked is if you want to connect this directory to an existing Netlify site or create & configure a new site. Choose Create & configure a new site:
\n\nThen you have to choose your team:
\n\nChoose the name of your application:
\n\nAfter entering the name of your project, the site is created and few URLs populated the CLI which gave you access to your admin URL, the URL of your site and the Site ID. Keep the site ID aside, you will need that number later on.
\nFor the next 3 questions (build, start and function), insert a space. We are not going to directly use the NPM scripts, our Github actions will later trigger each command.\n
\nFinally, automatically create a netlify.toml file, which we will edit later. If your respond no, you can still create that file manually at the root of your project.
\n\nOnce you provided an answer to all the questions, your terminal should look like this:
\n\nIt's now time to change some options on our Netlify project. Open directly your project on Netlify with this command:
\nntl open\n
You should see that our production deployment failed. You don't have to worry, this is totally normal. We need to disable our automatic build because our Github Actions will take care of it.
\nGo in your Settings > Build & deploy. Click on Edit settings
and Stop builds
. Save.
Just below, go to the Deploy contexts
section and select None
for the Deploy previews.
Don't worry, like the build, we will create our preview URL using Github actions.
\nIf you have been using Next.js you are aware of the capability to do the server-side rendering. But usually, you will need to configure a Node server and that's something we don't want to have to deal with. Around October 2020, the Netlify team started working on next-on-netlify
, a utility to enable SSR in Next.js on Netlify. That's what we are going to use here.
(In case you are not interested in Github Actions and want to use Netlify to build your project, take a look at how to use the Next on Netlify Plugin. It directly wraps your Next.js app and doesn't need as much configuration as we are going to explain.)
\nLet's start by installing our utility:
\nnpm install -D next-on-netlify\n
We must build our Next.js app as a serverless app
\nmodule.exports = {\n // Target must be serverless\n target: "serverless",\n};\n
We need to add a postbuild
command that is automatically triggered after our build
command finishes. next-on-netlify
does a lot of "magic" to copy and set up our Next.js app to be correctly hosted on Netlify.
{\n "name": "next-netlify-github-actions-starter",\n "version": "0.1.0",\n "private": true,\n "scripts": {\n "dev": "next dev",\n "build": "next build",\n "start": "next start",\n "postbuild": "next-on-netlify"\n },\n ...\n}\n
Remember the file that was automatically created and called netlify.toml
? You can remove all the boilerplate and replace it with only this code (be careful in respecting the indentation):
[build]\n command = ""\n functions = "out_functions"\n publish = "out_publish"\n
Technically, when next-on-netlify
will run, it will take what is in these folders and host it on Netlify. DO NOT CHANGE the name of these folders as these are hardcoded into the utility.
Don't forget to add these line to your .gitignore
file
# Netlify build\nout_*\n
You can commit your files. Let's work now on the Github Actions configuration.
\nThe netlify configuration is now done, all dependencies installed, it's time to configure our Github actions which will test, build and deploy our Next.js application to Netlify. But before that, we need to set up some Github secrets that we will need in our GH Actions.
\nGo to your Github project > Settings > Secrets > New repository secret
| Actions secret name | Comments |\n| -------------------- | ------------------------------------------------------------------------------------------- |\n| NETLIFY_AUTH_TOKEN
| Request your token here |\n| NETLIFY_SITE_ID
| The site to where deploy your site (get it from the API ID on your Site Settings) |
Create a new file called main.yml
inside .github/workflows
. Copy-paste the following code and read the explanation of it after this snippet.
name: Main workflow\n\non:\n pull_request:\n branches:\n - master\n - main\n types: [opened, synchronize, reopened]\n\njobs:\n test:\n runs-on: ubuntu-latest\n steps:\n - name: Checkout code\n uses: actions/checkout@v2\n\n # Cache node modules and next folder\n - name: 📬 Caching\n uses: actions/cache@v2\n with:\n path: |\n **/node_modules\n ${{ github.workspace }}/.next/cache\n key: ${{ runner.os }}-modules-${{ hashFiles('**/package-lock.json') }}\n\n - name: Use Node.js 14.x\n uses: actions/setup-node@v1\n with:\n node-version: 14.x\n\n - name: 🧰 Install dependencies\n run: npm run install\n\n - name: 📦 Build project\n run: npm run build --if-present\n\n # - name: 🧹 Run lint\n # run: npm run lint\n\n # - name: 🐛 Run tests\n # run: npm run test\n\n # Deploy to Netlify with a personalized message\n - name: 🚀 Deploy to Netlify\n id: deploy-netlify\n uses: netlify/actions/cli@master\n env:\n NETLIFY_AUTH_TOKEN: ${{ secrets.NETLIFY_AUTH_TOKEN }}\n NETLIFY_SITE_ID: ${{ secrets.NETLIFY_SITE_ID }}\n with:\n args: deploy -m 'v${{ steps.package-version.outputs.current-version}} ・ ${{ github.head_ref }}'\n
build
logs in your Github Action tab:\nYou may have seen an argument passed to the Netlify deploy:
\nargs: deploy -m 'v${{ steps.package-version.outputs.current-version}} ・ ${{ github.head_ref }}'\n
This will add a message for each Deploy Preview, a way to keep track of which PR generated which Deploy.
\n\nOn the same deploy page, you can click on the Deploy Preview and access your app using the preview URL.
\nA better way would be to use another task to automatically populate your pull request with the log and preview URL. At the end of your file, add this action:
\n# Publish the inspect and preview link to the PR\n- name: 👓 Netlify Preview URL\n uses: unsplash/comment-on-pr@master\n env:\n GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}\n OUTPUT: "This pull request is being automatically deployed to Netlify.\\n\\n🔍 Inspect: ${{ steps.deploy-netlify.outputs.NETLIFY_LOGS_URL }}\\n✅ Preview: ${{ steps.deploy-netlify.outputs.NETLIFY_URL }}"\n with:\n msg: ${{ env.OUTPUT }}\n check_for_duplicate_msg: false\n
This will automatically create a comment in your PR.
\n\nIf you are still reading this, congrats! You have succeeded in deploying a fully enabled Next.JS application to Netlify using Github Actions!
\nThe next step for you now will be to add some linting rules and tests to ensure that you are sending to Netlify, an app that works perfectly!
\nFeel free to download or fork the next-netlify-github-actions-starter
, open an issue if you find any problem or send me any suggestion to make it better!
I’m not a psychologist or either a student in psychology. I spent a good amount of time in my life reading personal development books but in the end, I’m just a Front-End Web developer, who writes code. I had the chance to live in different countries and created real and profound relationships with people with different cultures, different colors, different ages, different religions, different visions of the world… I couldn’t imagine my life without all these persons and what they brought to my existence.
\nTalking and sharing life’s moments with all these people made me realized something you may know already: most of the human beings struggle in being happy and spend most of their lives, living in their past and acting or not acting based on numerous fears. Fear and past are the two biggest challenges that every human in history had to face.
\nFear is more than just a word or a feeling you experimented watching horror movies. Fear is just the most powerful weapon that, in 2019, is killing more than any other weapon in the world.
\nFear does not just kill physically people, fear kills creativity, originality, growth, relationships, marriages, ideas, will, happiness… Fear makes you feel bad at work because you think you don’t know enough, it pushes you to fail at the University: fear to not be good enough, fear to fail another relationship, fear to talk too much, fear to not talk enough, fear to be judged, fear to be invisible, fear to be different, fear to not be understood…
\nWith all the social media platforms, we try to connect people, reduce the friction in creating new possible relationships, and it works. We have so many incredible situations, made possible thanks to all these platforms out there. But I don’t think it’s really enough to make people fearless. You can be a movie star, or a famous singer, at the end of the day, your memories, your past is there. You can’t really push the button rewind or delete. All of us need to learn to live with our past, our mistakes. And that’s probably one of the most complicated parts of being human.
\nTake 2 minutes to analyze your day until now: I doubt you didn’t find any trace of fear pushing you to act or say something you didn’t really want to.
\nWe can’t do anything to change our past, including yesterday. We can try to forget or think that we are not attached to it, and yes, you are right, our pasts don’t define who we are. But our pasts mold our personality and our beliefs, and beliefs are something so hard to change sometimes.\nWe can battle a whole life and try to change our pasts, but you know and I know that it’s a waste of time. Our pasts are all painful, we all have moments we would like to forget, people that make us feel bad, people that hurt us, friends, parents, that disappointed us, love relationships that created a hole in our heart… Fortunately, not physically.
\nSo what are our options? Actually, do we have options? Maybe we have an easy option. And if we tried to choose the one the majority chooses? That would work? I don’t think I have an answer that would make you feel happy. The only answer that I can think of, is that accepting our past, whatever happened, whatever you lived is probably the only way to live our present and feel that joy that exists in every little thing around you.
\nI know what you may think: “Easy to say, hard to do”. Does anyone told you in your entire life: “Things are easy!”? Just ask you the question. Why most of us want something easy instead of something true. What happened in the history of humanity to make us believe that life equal easy or hard? Why can’t we just say that things are how they should be, and we need to choose the way we want to react when we are facing them? The way we choose to react and act is what matters.
\nWhen someone out there, our neighbor, a president, a friend decide to create a wall in their garden or between countries, we all think and believe that it is not a solution or even an option. But how many times, did we create a mental barrier between us and the world? How many times, did we get nervous because we don’t have full control over our life’s events? How many times, did we get angry because our child felt and instead of showing him love, we yell at him because we were afraid it could hurt himself? Afraid that next time, he could fall being alone? It’s easier to hide that fear behind that attitude than accepts and embrace that uncomfortable feeling of fear and react with love.
\nMaybe things in your life, made you create layers. Layers of protection to “help you face life’s challenge”. Really? Are you feeling happiest since you closed some doors and people think you are a negative person? Is the world a better place because you hide your feelings and you are not able to cry anymore? I don’t think so.
\nI wish I could have multiple lives (some people believe in it), but the one we all have is the one we are currently living. And we usually don’t regret things we did, but things we were not able to achieve and to do, like be open to our wife or husband, show to our kids that we are not perfect and that we made mistakes sometimes.
\nIn some cultures, some places in the world, you can’t really talk about fear and past. You can’t talk about the struggle you have in your life. A lot of people across history tried their best to remove some humanity in some cultures and who really wants to defeat centuries of culture which forces you to not be yourself? Things are not equaled in the world, but it’s not a reason to not try.
\nWhat makes people think they can’t talk about their issues, once again, fear is probably behind that for most cases.
\nSometimes I’m not sure why, in a work environment, people can’t say “I don’t know, I’m not sure, I’m having doubts lately…” Is an issue to be human nowadays? Because I feel, I can’t work? Because I’m not sure, I will not be a good employee? Of course, a company is a place for you to work, help a company to grow and get more value in the market but is it not a place where humans live, breath and share emotions and moments?
\nI met many people around the world that were themselves at home, but could never be themselves at work. Look at your right… yeah, you found him/her!
\nThings are going fast, technologies like cryptocurrency, AI, VR, autonomous cars, all of that is changing and is going to change our worlds. But in the end, fears, layers, will always be there, and one day, a lot more people will have to seek help if they want to be free from all of that. Life will always be what it is, but all of us can improve other’s lives, being there when they need, sending a small message asking if everything is fine. We don’t really need to make big efforts to help our world to feel better. Believing that you can do a lot for the people around you is the first step.
\nRight now, maybe a friend is waiting to receive a message from you. A signal to make him feel he is not alone. Have someone that can reassure him that his/her past will not define his/her tomorrow.
\n…What are you really waiting for? 📲
\nDisclaimer: I usually write articles about code, immigration, and tech, but a lot of my friends are lately facing the same issues, and even I try my best to help them, it’s also up to them to take action and choose the life they really want. This article is a way to hopefully help other people that may be facing the same issues in their lives. Let me a comment if you find this article relevant for your life!
", + "url": "https://thedaviddias.dev/articles/you-have-something-in-you-the-world-needs", + "title": "You have something in YOU that the world needs", + "summary": "Sometimes the only thing you need to remember is that you are not alone in this world.", + "image": "https://thedaviddias.dev/images/articles/you-have-something-in-you-the-world-needs/featured.jpeg", + "date_modified": "2019-06-21T00:00:00.000Z", + "author": { + "name": "David Dias", + "url": "https://twitter.com/thedaviddias" + } + }, + { + "id": "https://thedaviddias.dev/articles/front-end-performance-checklist-speeds-up-web-developments", + "content_html": "Performance is a huge subject, but it's not always a "back-end" or an "admin" subject: it's a Front-End responsibility too. The Front-End Performance Checklist is an exhaustive list of elements you should check or at least be aware of, as a Front-End developer and apply to your project (personal and professional).
\nFor each rule, you will have a paragraph explaining why this rule is important and how you can fix it. For more deep information, you should find links that will point to 🛠 tools, 📖 articles or 📹 medias that can complete the checklist.
\nAll items in the Front-End Performance Checklist are essentials to achieve the highest performance score but you would find an indicator to help you to eventually prioritised some rules amount others. There are 3 levels of priority:
\nList of the tools you can use to test or monitor your website or application:
\n[ ] Minified HTML: ![medium] The HTML code is minified, comments, white spaces and new lines are removed from production files.
\nWhy:
\n\n\nRemoving all unnecessary spaces, comments and attributes will reduce the size of your HTML and speed up your site's page load times and obviously lighten the download for your user.
\n
How:
\n\n\n\nMost of the frameworks have plugins to facilitate the minification of the webpages. You can use a bunch of NPM modules that can do the job for you automatically.
\n
[ ] Place CSS tags always before JavaScript tags: ![high] Ensure that your CSS is always loaded before having JavaScript code.
\n<!-- Not recommended -->\n<script src="jquery.js"></script>\n<script src="foo.js"></script>\n<link rel="stylesheet" href="foo.css" />\n\n<!-- Recommended -->\n<link rel="stylesheet" href="foo.css" />\n<script src="jquery.js"></script>\n<script src="foo.js"></script>\n
Why:
\n\n\nHaving your CSS tags before any JavaScript enables better, parallel download which speed up browser rendering time.
\n
How:
\n\n\n\n⁃ Ensure that
\n<link>
and<style>
in your<head>
are always before your<script>
.
[ ] Minimize the number of iframes: ![high] Use iframes only if you don't have any other technical possibility. Try to avoid iframes as much as you can.
\n[ ] Pre-load optimization with prefetch, dns-prefetch and prerender: ![low] Popular browsers can use directive on <link>
tag and "rel" attribute with certain keywords to pre-load specific URLs.
Why:
\n\n\nPrefetching allows a browser to silently fetch the necessary resources needed to display content that a user might access in the near future. The browser is able to store these resources in its cache and speed up the way web pages load when they are using different domains for page resources. When a web page has finished loading and the idle time has passed, the browser begins downloading other resources. When a user go in a particular link (already prefetched), the content will be instantly served.
\n
How:
\n\n\n\n⁃ Ensure that
\n<link>
is in your<head>
section.
[ ] Minification: ![high] All CSS files are minified, comments, white spaces and new lines are removed from production files.
\nWhy:
\n\n\nWhen CSS files are minified, the content is loaded faster and less data is sent to the client. It's important to always minify CSS files in production. It is beneficial for the user as it is for any business who wants to lower bandwidth costs and lower resource usage.
\n
How:
\n\n\n\n⁃ Use tools to minify your files automatically before or during your build or your deployment.
\n
[ ] Concatenation: ![medium] CSS files are concatenated in a single file (Not always valid for HTTP/2).
\n<!-- Not recommended -->\n<link rel="stylesheet" href="foo.css" />\n<link rel="stylesheet" href="bar.css" />\n\n<!-- Recommended -->\n<link rel="stylesheet" href="foobar.css" />\n
Why:
\n\n\nIf you are still using HTTP/1, you may need to still concatenate your files, it's less true if your server use HTTP/2 (tests should be made).
\n
How:
\n\n\n\n⁃ Use online tool or any plugin before or during your build or your deployment to concatenate your files.\n⁃ Ensure, of course, that concatenation does not break your project.
\n
[ ] Non-blocking: ![high] CSS files need to be non-blocking to prevent the DOM from taking time to load.
\n<link rel="preload" href="global.min.css" as="style" onload="this.rel='stylesheet'" />\n<noscript><link rel="stylesheet" href="global.min.css" /></noscript>\n
Why:
\n\n\nCSS files can block the page load and delay the rendering of your page. Using
\npreload
can actually load the CSS files before the browser starts showing the content of the page.
How:
\n\n\n\n⁃ You need to add the
\nrel
attribute with thepreload
value and addas="style"
on the<link>
element.
[ ] Unused CSS: ![medium] Remove unused CSS selectors.
\nWhy:
\n\n\nRemoving unused CSS selectors can reduce the size of your files and then speed up the load of your assets.
\n
How:
\n\n\n⁃ ⚠️ Always check if the framework CSS you want to use don't already has a reset / normalize code included. Sometimes you may not need everything that is inside your reset / normalize file.
\n
[ ] CSS Critical: ![high] The CSS critical (or "above the fold") collects all the CSS used to render the visible portion of the page. It is embedded before your principal CSS call and between <style></style>
in a single line (minified if possible).
Why:
\n\n\nInlining critical CSS help to speed up the rendering of the web pages reducing the number of requests to the server.
\n
How:
\n\n\n\nGenerate the CSS critical with online tools or using a plugin like the one that Addy Osmani developed.
\n
[ ] Embedded or inline CSS: ![high] Avoid using embed or inline CSS inside your <body>
(Not valid for HTTP/2)
Why:
\n\n\nOne of the first reason it's because it's a good practice to separate content from design. It also helps you have a more maintainable code and keep your site accessible. But regarding performance, it's simply because it decreases the file-size of your HTML pages and the load time.
\n
How:
\n\n\n\nAlways use external stylesheets or embed CSS in your
\n<head>
(and follow the others CSS performance rules)
[ ] Analyse stylesheets complexity: ![high] Analyzing your stylesheets can help you to flag issues, redundancies and duplicate CSS selectors.
\nWhy:
\n\n\nSometimes you may have redundancies or validation errors in your CSS, analysing your CSS files and removed these complexities can help you to speed up your CSS files (because your browser will read them faster)
\n
How:
\n\n\nYour CSS should be organized, using a CSS preprocessor can help you with that. Some online tools listed below can also help you analysing and correct your code.
\n
![fonts]
\n[ ] Webfont formats: ![medium] You are using WOFF2 on your web project or application.
\nWhy:
\n\n\nAccording to Google, the WOFF 2.0 Web Font compression format offers 30% average gain over WOFF 1.0. It's then good to use WOFF 2.0, WOFF 1.0 as a fallback and TTF.
\n
How:
\n\n\n\nCheck before buying your new font that the provider gives you the WOFF2 format. If you are using a free font, you can always use Font Squirrel to generate all the formats you need.
\n
[ ] Use preconnect
to load your fonts faster: ![medium]
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />\n
Why:
\n\n\nWhen you arrived on a website, your device needs to find out where your site lives and which server it needs to connect with. Your browser had to contact a DNS server and wait for the lookup complete before fetching the resource (fonts, CSS files...). Prefetches and preconnects allow the browser to lookup the DNS information and start establishing a TCP connection to the server hosting the font file. This provides a performance boost because by the time the browser gets around to parsing the css file with the font information and discovering it needs to request a font file from the server, it will already have pre-resolved the DNS information and have an open connection to the server ready in its connection pool.
\n
How:
\n\n\n⁃ Before prefetching your webfonts, use webpagetest to evaluate your website\n⁃ Look for teal colored DNS lookups and note the host that are being requested\n⁃ Prefetch your webfonts in your
\n<head>
and add eventually these hostnames that you should prefetch too
[ ] Webfont size: ![medium] Webfont sizes don't exceed 300kb (all variants included)
\n[ ] Prevent Flash or Invisible Text: ![medium] Avoid transparent text until the Webfont is loaded
\n[ ] Images optimization: ![high] Your images are optimized, compressed without direct impact to the end user.
\nWhy:
\n\n\nOptimized images load faster in your browser and consume less data.
\n
How:
\n\n\n⁃ Try using CSS3 effects when it's possible (instead of a small image)\n⁃ When it's possible, use fonts instead of text encoded in your images\n⁃ Use SVG\n⁃ Use a tool and specify a level compression under 85.
\n
[ ] Images format: ![high] Choose your image format appropriately.
\nWhy:
\n\n\nTo ensure that your images don't slow your website, choose the format that will correspond to your image. If it's a photo, JPEG is most of the time more appropriate than PNG or GIF. But don't forget to look a the nex-gen formats which can reduce the size of your files. Each image format has pros and cons, it's important to know these to make the best choice possible.
\n
How:
\n\n\n\n⁃ Use Lighthouse to identify which images can eventually use next-gen formats (like JPEG 2000m JPEG XR or WebP)\n⁃ Compare different formats, sometimes using PNG8 is better than PNG16, sometimes it's not.
\n
[ ] Use vector image vs raster/bitmap: ![medium] Prefer using vector image rather than bitmap images (when possible).
\nWhy:
\n\n\nVector images (SVG) tend to be smaller than images and SVG's are responsive and scale perfectly. These images can be animated and modified by CSS.
\n
[ ] Images dimensions: ![medium] Set width
and height
attributes on <img>
if the final rendered image size is known.
Why:
\n\n\nIf height and width are set, the space required for the image is reserved when the page is loaded. However, without these attributes, the browser does not know the size of the image, and cannot reserve the appropriate space to it. The effect will be that the page layout will change during loading (while the images load).
\n
[ ] Avoid using Base64 images: ![medium] You could eventually convert tiny images to base64 but it's actually not the best practice.
\n\n[ ] Lazy loading: ![medium] Offscreen images are loaded lazily (A noscript fallback is always provided).
\nWhy:
\n\n\nIt will improve the response time of the current page and then avoid loading unnecessary images that the user may not need.
\n
How:
\n\n\n\n⁃ Use Lighthouse to identify how many images are offscreen.\n⁃ Use a JavaScript plugin like the following to lazyload your images. Make sure you target offscreen images only.\n⁃ Also make sure to lazyload alternative images shown at mouseover or upon other user actions.
\n
[ ] Responsive images: ![medium] Ensure to serve images that are close to your display size.
\nWhy:
\n\n\nSmall devices don't need images bigger than their viewport. It's recommended to have multiple versions of one image on different sizes.
\n
How:
\n\n\n\n⁃ Create different image sizes for the devices you want to target.\n⁃ Use
\nsrcset
andpicture
to deliver multiple variants of each image.
[ ] JS Minification: ![high] All JavaScript files are minified, comments, white spaces and new lines are removed from production files (still valid if using HTTP/2).
\nWhy:
\n\n\nRemoving all unnecessary spaces, comments and break will reduce the size of your JavaScript files and speed up your site's page load times and obviously lighten the download for your user.
\n
How:
\n\n\n\n⁃ Use the tools suggested below to minify your files automatically before or during your build or your deployment.
\n
[ ] No JavaScript inside: ![medium] (Only valid for website) Avoid having multiple JavaScript codes embedded in the middle of your body. Regroup your JavaScript code inside external files or eventually in the <head>
or at the end of your page (before </body>
).
Why:
\n\n\nPlacing JavaScript embedded code directly in your
\n<body>
can slow down your page because it loads while the DOM is being built. The best option is to use external files withasync
ordefer
to avoid blocking the DOM. Another option is to place some scripts inside your<head>
. Most of the time analytics code or small script that need to load before the DOM gets to main processing.
How:
\n\n\n\nEnsure that all your files are loaded using
\nasync
ordefer
and decide wisely the code that you will need to inject in your<head>
.
[ ] Non-blocking JavaScript: ![high] JavaScript files are loaded asynchronously using async
or deferred using defer
attribute.
<!-- Defer Attribute -->\n<script defer src="foo.js"></script>\n\n<!-- Async Attribute -->\n<script async src="foo.js"></script>\n
Why:
\n\n\nJavaScript blocks the normal parsing of the HTML document, so when the parser reaches a
\n<script>
tag (particularly is inside the<head>
), it stops to fetch and run it. Addingasync
ordefer
are highly recommended if your scripts are placed in the top of your page but less valuable if just before your</body>
tag. But it's a good practice to always use these attributes to avoid any performance issue.
How:
\n\n\n\n⁃ Add
\nasync
(if the script don't rely on other scripts) ordefer
(if the script relies upon or relied upon by an async script) as an attribute to your script tag.\n⁃ If you have small scripts, maybe use inline script place above async scripts.
[ ] Optimized and updated JS libraries: ![medium] All JavaScript libraries used in your project are necessary (prefer Vanilla JavaScript for simple functionalities), updated to their latest version and don't overwhelm your JavaScript with unnecessary methods.
\nWhy:
\n\n\nMost of the time, new versions come with optimization and security fix. You should use the most optimized code to speed up your project and ensure that you'll not slow down your website or app without outdated plugin.
\n
How:
\n\n\n\nIf your project use NPM packages, npm-check is a pretty interesting library to upgrade / update your libraries.\nGreenkeeper can automatically look for your dependencies and suggest an update every time a new version is out.
\n
[ ] Check dependencies size limit: ![low] Ensure to use wisely external libraries, most of the time, you can use a lighter library for a same functionality.
\nWhy:
\n\n\nYou may be tempted to use one of the 745 000 packages you can find on npm, but you need to choose the best package for your needs. For example, MomentJS is an awesome library but with a lot of methods you may never use, that's why Day.js was created. It's just 2kB vs 16.4kB gz for Moment.
\n
How:
\n\n\n\nAlways compare and choose the best and lighter library for your needs. You can also use tools like npm trends to compare NPM package downloads counts or Bundlephobia to know the size of your dependencies.
\n
[ ] JavaScript Profiling: ![medium] Check for performance problems in your JavaScript files (and CSS too).
\nWhy:
\n\n\nJavaScript complexity can slow down runtime performance. Identifying these possible issues are essential to offer the smoothest user experience.
\n
How:
\n\n\nUse the Timeline tool in the Chrome Developer Tool to evaluate scripts events and found the one that may take too much time.
\n
[ ] Use of Service Workers: ![medium] You are using Service Workers in your PWA to cache data or execute possible heavy tasks without impacting the user experience of your application.
\n\n[ ] Your website is using HTTPS: ![high]
\nWhy:
\n\n\nHTTPS is not only for ecommerce websites, but for all websites that are exchanging data. Data shared by a user or data shared to an external entity. Modern browsers today limit functionalities for sites that are not secure. For example: geolocation, push notifications and service workers don't work if your instance is not using HTTPS. And today is much more easy to setup a project with an SSL certificate than it was before (and for free, thanks to Let's Encrypt).
\n
📖 Enabling HTTPS Without Sacrificing Your Web Performance - Moz
\n📖 HTTP versus HTTPS versus HTTP2 - The real story | Tune The Web
\n[ ] Page weight < 1500 KB (ideally < 500 KB): ![high] Reduce the size of your page + resources as much as you can.
\nWhy:
\n\n\nIdeally you should try to target < 500 KB but the state of web shows that the median of Kilobytes is around 1500 KB (even on mobile). Depending on your target users, network connection, devices, it's important to reduce as much as possible your total Kilobytes to have the best user experience possible.
\n
How:
\n\n\n\n⁃ All the rules inside the Front-End Performance Checklist will help you to reduce as much as possible your resources and your code.
\n
[ ] Page load times < 3 seconds: ![high] Reduce as much as possible your page load times to quickly deliver your content to your users.
\nWhy:
\n\n\nFaster your website or app is, less you have probability of bounce increases, in other terms you have less chances to lose your user or future client. Enough researches on the subject prove that point.
\n
How:
\n\n\n\nUse online tools like Page Speed Insight or WebPageTest to analyze what could be slowing you down and use the Front-End Performance Checklist to improve your load times.
\n
[ ] Time To First Byte < 1.3 seconds: ![high] Reduce as much as you can the time your browser waits before receiving data.
\n\n[ ] Cookie size: ![medium] If you are using cookies, be sure each cookie doesn't exceed 4096 bytes and your domain name doesn't have more than 20 cookies.
\nWhy:
\n\n\nCookies are exchanged in the HTTP headers between web servers and browsers. It's important to keep the size of cookies as low as possible to minimize the impact on the user's response time.
\n
How:
\n\n\n\nEliminate unnecessary cookies.
\n
[ ] Minimizing HTTP requests: ![high] Always ensure that every file requested are essential for your website or application.
\n[ ] Use a CDN to deliver your assets: ![medium] Use a CDN to deliver faster your content over the world.
\n[ ] Serve files from the same protocol: ![high] Avoid having your website serving files coming from source using HTTP on your website which is using HTTPS for example. If your website is using HTTPS, external files should come from the same protocol.
\n[ ] Serve reachable files: ![high] Avoid requesting unreachable files (404).
\n[ ] Set HTTP cache headers properly: ![high] Set HTTP headers to avoid expensive number of roundtrips between your browser and the server.
\n[ ] GZIP / Brotli compression is enabled: ![high] Use a compression method such as Gzip or Brotli to reduce the size of your JavaScript files. With a smaller sizes file, users will be able to download the asset faster, resulting in improved performance.
\nThe Front-End Performance Checklist wants to also be available in other languages! Don't hesitate to submit your contribution!
\nIn October 2017, I launched my first open-source project on Github: the Front-End Checklist. In few hours, the project gained international visibility. After that, for a number of weeks, I had an incredible journey with many people around the world. I recently started giving talks in local communities around Spain and Portugal about the project, and I plan to check out France later on.
\nDoing these presentations gave me a different perspective and vision about the worldwide communities who organize meetups regularly. I discovered that there were an huge number of people who were looking for more and more content and wanted to participate in local communities.
\nAfter initiating the Front-End Dev Mauritius community, I know how complicated it can be to find people willing to share their experiences about Front-End Development. And for some, such as those who recently have moved from another city or country, having a welcoming tech community is important to getting setting up.\nI wanted to share with you some of the things I learned before, during, and after these meetups I participated in throughout Europe. And I want to encourage you to participate more in local events no matter where you are today.
\nKnowing that I would be on "holidays" for a few weeks in France, Spain, and Portugal I decided to try contacting local groups in Barcelona, Madrid, Lisbon, Aveiro, and Porto. I sent messages directly to the founders of local groups using Meetup.com, or contacted them via Twitter when they had specified their account on their profile. But, as I was expecting, I didn’t receive a lot of replies at first.
\nIn Barcelona however, Bettina from Ignit, who managed the “Barcelona Front-End Development Meetup”, answered me really quickly. We decided, after some email exchanges and a phone call, to have a meetup on 14 March about my project.
\nIn Madrid, the “Front-end Developers Madrid” organizers never answered me. But Juan Macias, a teacher’s assistant at “Ironhack Madrid,” did everything to help me setup a talk, which I gave on 16 March.
\nIn Lisbon, Shannon Graybill from “Lisbon Le Wagon” showed a lot of interest in having me do a presentation. But we lost touch after we tried to call each other few times without setting a time. Besides, I decided not to present in Lisboa, but instead tried to do something in Porto (easier for me, as I was in Aveiro for two weeks).\nThen in Porto I contacted Ricardo Mendes, who usually organizes “Porto Codes”. After few messages and emails, we decide to organize a talk on 5 April at Porto.io, at a coworking space in the middle of the city.
\n\nOne of the first rules I learned about giving a talk or a presentation was to “know your audience.” That is maybe the most challenging but nonetheless important rule you need to have in mind.\nA few days before each talk, I went through all the profiles on Meetup, trying to know my future audience better. Unfortunately, most of the people don’t put their Twitter or Facebook account in their profiles. They don’t often answer some basic questions sent by the owner of the group when they subscribe, which makes it really hard for a speaker learn about the target audience of a meetup.\nI sent a tweet to some people before the meetup in Barcelona, but I didn’t receive any responses. Next time 😉.
\nSince I didn’t know my audience in advance, I then decided to ask about each person’s career just before I started my talk. I adapted my content and discourse depending on their responses and it seemed that my slides were understandable by any level.
\nI’m not a fan of football (although my father is) — I never felt passionate about it. But that was something that would’ve been useful to think about before setting the Barcelona meetup’s date. Twenty-three peopole planned to come, but just…2 of them came. I discovered afterwards that “Barcelona — Chelsea” was probably one of the reasons why people didn’t come.\nFor me, it was an awesome time. I was able to focus more on specific questions asked by Jimmy from Los Angeles and Costa Rica and Marcela from Mexico (I also won’t forget the delicious pizza we ate after the meetup at Anauco).
\nThat might sound crazy, but printing my username on a tee-shirt was one of the things I’m happy I did. Some people may ask you how to contact you or may be too shy to do so. But with your username “on you,” it’s impossible not to find you on Internet (or forget who you are 😅)!
\nTelling stories is not that hard.\nLots of talks I’ve heard in the past, from different people, seemed “empty,” without any soul. Doing a talk is much more for me than a simple exposition of facts or numbers or code. It’s about a story, how someone found a way to develop their application, how some new technologies can improve the way we work in our daily lives, and so on.\nIn my case, it was how a “simple” checklist changed the way I see the Front-End worldwide community, and the way that some people will work in the future.
\nThat is maybe one of the biggest lesson I wanted to share with you in this post: you don’t need to be the best or the expert to share what you know or what you’ve learned before.\nLot of beginners with less than a couple years of experience don’t feel confident sharing what they know with others, because they think they don’t know enough.\nFrom my point of view, that’s the wrong belief. Whether you have experience or not, you always have something useful that can be shared with others. It’s as simple as that. And it’s something some people need to start believing once and for all.
\nIf your audience is used to sharing photos on Twitter or other social media, you’re lucky — you’ll have some photos of you to help you remember your talk or show the presentation you did. They might even come in handy if you want to write an article about it 😅.\nBut taking a group photo with all your attendees is a fun thing to plan before everyone runs out of the meetup. I failed on that point many times, and I was only able to take a picture in Porto with the two organisers, including Tim Lai.
\nA photo took after most of the attendees already went home.
\nThis is another thing I missed, but I now know how useful it could’ve been. Having feedback on any work or talk can be really helpful when we try to improve ourselves and the way we present things.\nIn my next meetups, I’ll probably give attendees a bit.ly link redirecting to a Typeform quizz which I’ll ask them to fill out.
\nAnd in case you didn’t read my article about how everything began, take a look at it here.\nPutting it all together\nGiving these talks in different cities and countries helped me learn how much can be shared and taught to an incredible number of people. During these last few years, while learning and sharing my vision of Front-End development, I wasn’t able to see how large the community of people wanting to become better actually was.\nWe can start with something really small, and that small thing can give us the opportunity to meet people and give them something they needed or were searching for.
\nNow, let’s recap each point I went through:
\nThat’s it. In case you like my article and find it useful, here are some things you can do to show your support:
\nAfter I’ve been invited by my previous company to move to Mauritius to manage a Front-End Developer’s team, I’m now looking forward to choose where I want to move next. I’ve been working for many years in Paris, but going back to France, like some of my compatriotes I know, is not an option for me.
\n\nWhen you start living outside your native country, creating worldwide links with others, you know that you can’t just “go back”. You can’t live ignoring the fact that being out of your comfort zone is the best thing that you can experience in life, more challenging when you live abroad. I spent 3 years in Brazil and these last two years in Mauritius. Thus I know that everything I learned from people around, I couldn’t learn if I was living in France.
\nBut today I’m facing a dilemma. I’m not sure which country / city I should to focus on my job researches. I need your help to decide where could be my next move…
\nCanada was is on 12th position of the Top Expat Destinations in 2016, 16th in 2017 according to “Expat Insider”. With more than 35 000 000 habitants split on around 9 000 000 km2, Canada is worldwide known to be a multicultural nation and with sometimes long and cold winters.
\nI went to Canada in October 2014, to visit Toronto and Montreal. I really loved it! Most of the people prefer Montreal, but in my case, I enjoyed more staying in Toronto. I have few friends who moved there so they will be able to give me some advices if I need some. Since 2015, I have been registered in the pool for the IEC Working Holidays visa. Unfortunately, until today, I hadn’t any luck… But I still have hope 🌤
\nThe International Mobility Program for Francophones could be also an option for me. And to apply for the Express Entry, I just need to pass my [IELTS exam}(https://www.ielts.org/) (on January the 20th) and have enough point to apply for.
\nThe website Numbeo helps to compare the cost of living of different cities in the world. It seems that the cost of living in Toronto is less than most of the cities I’m interested in although these datas are not 100% reliable.
\n\nThe kangorou’s country was on 7th position in the Top 10 of best countries Expat Insider 2016 and is now on 34th position in 2017.
\nI never went to Australia, but all my friend who went there, tell me good things about it. The immigration process does not seems easy and because I am +30 years, I can’t apply for the Working Holidays Visa. I’m still waiting from the French government to expand the upper age of eligibility from 30 to 35 years old.
\nAccording to Numbeo, Sydney has a cost of living a little higher than Melbourne.
\n\nNew Zealand was on 5th position for the Top 10 best countries by Expat Insider in 2016 and 6th for 2017.
\nI don’t know why but I was always fascinated by that country. I read a lot of articles about the pros and cons, comments of people who complain about things which are better handled elsewhere. But let me tell you something, I learned one thing since I had lived in different countries. You can have an opinion about everything around, but you should learn to live with that. It doesn’t mean you need to accept everything, but you can’t be happy in a place where you are always criticising.
\nComparing two places, in the same country or in different country is in general a mistake you do in the first country you live… But the more you move, the more you’ll learn of how to enjoy where you are and skip details.
\nThe city of Auckland was the first to answer to my tweet asking about “Where I need to move”.
\nWellington followed the next day with two adorable tweets:
\nMaybe the weather in Wellington is not as good as Auckland… But the weather can’t be the only thing to compare (I’m already missing Mauritius’ sun 😂).
\n\nThe USA was always on my TOP 1 choice (I went to NY 3 times) but it seems to be more and more complicated to get a job or a visa to go to the USA (Even if you have a project on Github with more than 23 000 likes 😅).
\nI don’t completely leave that option away but today, it’s more part of a dream than a reality plan.
\nI registered on the Green Card lottery for 2018… but I really don’t believe I can be so lucky…
\nYou may wonder: why the USA? It turns out that most of the people I admire are living in the USA. It seems to be easier to follow them being in the same country. It’s without counting on all conferences and meetups that are happening all over the country which I one day, I would like to be able to participate.
\nBut it’s probably because I’m looking for years to find a team of Developers, Web Designers and UX who can build innovative products together sharing their knowledge and having a similar vision.
\n\n\nI’m looking for years to find a team of Developers, Web Designers and UX who can build innovative products together sharing their knowledge and having a similar vision.
\n
I just had that experience once: at Barefoot Proximity in Cincinnati, Ohio. Julie Tran, Creative Director and Micky Osterman, project manager gave me in 2014 an experience I could not forget. For more than one month, I’ve been working hand by hand creating a new brand website. Whereas I have much more experience today, what I tasted that month is how I would like to work with future teams.
\n2018 should be an interesting year.
\nIn January, my IELTS exam will give me more chances to complete some immigration forms.
\nIn February, I’ll start sending my resume to some companies I perceive I can fit and by chance, it’ll become easier to decide which country I should focus on more.
\nIn May/June, I hope to be in the country which will give me the chance to continue creating products and websites, managing young developers and working with an awesome team of experts who see the future of the web!
", + "url": "https://thedaviddias.dev/articles/choose-city-country-front-developer", + "title": "Help me to choose the best city/country to be a Front-End Developer!", + "summary": "Choosing a new city or country to leave is not an easy task. I'm sharing my process to choose the next city where I wanna live.", + "image": "https://thedaviddias.dev/images/articles/choose-city-country-front-developer/earth-rounded.jpeg", + "date_modified": "2017-12-28T13:07:27.957Z", + "author": { + "name": "David Dias", + "url": "https://twitter.com/thedaviddias" + } + }, + { + "id": "https://thedaviddias.dev/articles/front-end-checklist-just-tool-everything-depends-on-you", + "content_html": "One month ago, I launched the Front-End Checklist on GitHub. In less than 2 weeks, more than 10,000 people around the world starred the repository. That was completely unexpected and incredible!
\n\nI’ve been working as a front-end developer since 2011, but I started to build websites in 2000. Since then, like us all, I’ve been trying to improve the quality of my code and deliver websites faster. Along the way, I’ve been managing developers from two different countries. That has helped me to produce a checklist a little different than what I’ve found on around the web over the years.
\nWhile I was creating the checklist, I continuously had the book “The Checklist Manifesto: How to Get Things Right” by Atul Gawade in mind. That book has helped me build checklists for my work and personal life, and simplify things that sometimes seem too complex.
\nIf you are working alone or in a team, individually, remotely, or on-site, I wanted to share some advice on using the Front-End Checklist and the web application that goes with it. Perhaps I can convince you to integrate it into your development cycle.
\n\nEvery project is different. Before starting a new project, the whole team (i.e. the project managers, designers, developers, QA, etc.) need to agree on what the deliverables will be.
\nTo help you to decide, I created 3 different levels of priority: high, medium, and low. You don’t necessarily need to agree with those distinctions, but they may help order your tasks.
\nThe Front-End Checklist app was done to facilitate the creation of personalized checklists. Change some JSON files to your liking and you are ready to start!
\nYou shouldn’t check all these rules only at the end of a project. You know as well as I do how projects are at the very end! Too hectic. Most of the items of the Front-End Checklist can be considered at the beginning of your development. It’s up to you to decide. Make it clear to your team upfront what happens when.
\nWho loves reading the docs? Not most of us, but it’s essential. If you want to understand the reasons for the rule, you can’t avoid reading up about them. The more you understand the why of each rule, the better developer you become.
\nThe Front-End Checklist app can facilitate your life as a developer. It’s a live checklist, so as you complete items your progress and grade are updated live. Everything is saved in localStorage so you can leave and come back as needed.
\nThe project is open source, so feel free to fork it and use it however you like. I’m working on making sure all the files are commented. I especially invite those interested in Pug to take a look at the views folder.
\nWe all dream of automation (or is it just me?). For now, the Front-End Checklist is just an interactive list, but some of the tasks can be automated in your workflow.
\nTake a look at the gulpfile used to generate the project. All tasks are packages you can use with npm, webpack, etc.
\nIf you’re passionate about generating clean code and care about your code quality, you should be regularly testing your pages. It’s so easy to make mistakes and remove some essential code. Or, someone else on your team might have done it, but it’s your shared responsibilty to be catching things like that.
\nThe Front-End Checklist can generate beautiful reports you can send to a project manager or Quality Assurance team.
\nSome people might look at such a long checklist and feel sick to their stomach. Going through such a list might cause anxiety and really not be any fun.
\nBut the Front-End Checklist is just a tool to help you deliver higher quality code. Code that affects all aspects of a project: the SEO, the user experience, the ROI, and ultimately the success of the project. A tool that can help across all those things might actually help reduce your anxiety and improve your health!
\nThe success the Front-End Checklist received in such a short time reminded me that a lot of people are really interested in finding ways to improve their work. But just because the tool exists doesn’t directly help with that. You also need to commit to using it.
\nIn a time where AI is taking over many manual tasks, quality is a must-have. Even if automation takes over a lot of our tasks, some level of quality will remain impossible to automate, and us front-end developers still have many long days to enjoy our jobs.
", + "url": "https://thedaviddias.dev/articles/front-end-checklist-just-tool-everything-depends-on-you", + "title": "The Front-End Checklist is just a tool… everything depends on you", + "summary": "The steps you need to follow to efficiently use the application frontendchecklist.io", + "image": "https://thedaviddias.dev/images/articles/front-end-checklist-just-tool-everything-depends-on-you/featured.jpg", + "date_modified": "2017-12-08T00:01:00.000Z", + "author": { + "name": "David Dias", + "url": "https://twitter.com/thedaviddias" + } + }, + { + "id": "https://thedaviddias.dev/articles/how-my-open-source-project-earned-6000-stars-on-github-in-just-5-days", + "content_html": "Last month I launched two open source projects on GitHub. A few days later, my Front-End Checklist was showing more than 6,000 stars (17,000 as of writing). And I got 600 stars for my Resources-Front-End-Beginner project!
\nIt was unexpected for me to receive such support coming from so many people around the globe: USA, Brazil, China, Japan, France, Canada, Spain, Mauritius, Japan, Portugal... Even now, I still can’t believe how many pull requests I received with changes and corrections these last days.
\nFor so long I received gifts from the open source world. Now I felt it was finally time for me to give back everything I have learned, and to help others.
\nAs a professional Front-End manager, I spend my time teaching and encouraging others to learn and practice. I regularly share interesting content and useful tools on the Front-End Dev Mauritius group on Facebook. But I never planned that the Front-End Checklist will become a worldwide project.
\nI’ve seen some Front-End checklists over the past year on the web:
\n\nSome of them helped me years ago when I wanted to improve my Front-End knowledge, but most of them were just “not enough.”
\nTwo years ago, I decided to start writing my own checklist based on my experiences. That checklist became way more important when I started to manage Front-End teams in France and Mauritius. Based on questions and usual mistakes from the teams, the content kept improving.
\nWhen I needed to teach someone how to become a better Front-End developer, I always had in mind that checklist that I started to work on. The document which started with a simple personal need became an ambitious tool for my team.
\nThen I started to feel the need to share it with more people.
\nA month ago I decided to put a first version on GitHub. And… at that moment, everything started to happen fast… really fast.
\nOn 18 October, I published the first version of my Front-End Checklist. I went to see all members of my team and I asked them to put a star 😀 on the repository. They don’t really have the habit to star projects on Github, I had to encourage them to do so 😂.
\nA few hours later, watching an episode of Hawaii Five-O with my wife, I opened my GitHub repository on my iPad. I was shocked to find that in only few hours, I had already received 700 stars.
\n\nI was not able to understand why and where these stars were coming from. (At that time, I didn’t know about the Insights > Traffic section on GitHub.)
\nI hadn’t even published any tweet about the Github repository. The next day, I published on my Twitter account: just few likes and retweets about the checklist. Nothing that may explain, where everyone was coming from.
\nI then started to validate pull requests and answer some logged issues. I was feeling so grateful for that unimaginable support. Even working daily with international websites, I forgot sometimes the power of Internet. (Or it’s maybe I’m living in a small island far from everything 😂.)
\nNext day, I received on Twitter a message from Product Hunt:
\nWithout really taking time to think, I opened my Illustrator and designed a logo to put on the page. I kept it basic, inspired by the logo of Front-End Coders, a future NGO I’ll be launching soon officially.
\n\nSince then, I received in less than one week 40 pull requests, was published on Codrops for my 2 lists in their Collective #359, on the Panda Weekly Newsletter #130 and #131, Hacker news, Reddit (multiple times), NewsCenter.io, La Ferme du Web and more.
\nTranslation in Japanese, Spanish, Chinese, Korean, Portuguese and Vietnamese were done in less than 2 weeks!
\n\nThe list is positioned first on Google for the words “Front-End Checklist”. Some landing pages on Github have the checklist on first position (Front-End Development, Checklist, Guidelines).
\nI discovered more recently that the project was on top of the trending feed on GitHub with more than 6,000 stars in less than a week (on 27 October 2017).
\nThe Front-End Checklist is trending on Github!
\nI’m a big fan of “Awesome”, the curated list of awesome lists created first by\nSindre Sorhus\n. But some lists are colossal and I found myself sometimes struggling to find what I want. I’m not sure if it’s because the amount of links or the absence of information attached to each link.
\nThis is why I decided to add emoticons in my two lists. I usually don’t use them too often, but in that case I found interesting to add more of these to have more information about the content of my links.
\nThe Front-End Checklist use emoticons to add more informations for each rule\nAs mentionned in the introduction of the Front-End Checklist, I used:
\nI also used 3 images (High, medium, low) to integrate different levels of priorities. I didn’t find any emoticon that could replace these images easily.
\nThe list of resources for Front-End Beginners also use emoticons to add some additional informations.\nOn my list of resources for Front-End Beginners, for example, I decided to indicate free and paid tutorials. It’s easier to have these type of informations before you click on any link. People can directly focus on what they prefer.
\nI use daily applications like Cloud Outliner Pro and MindNode to create new lists for my personal and professional life (and Todoist). I can’t imagine doing a complex task without a set of items into a list.
\nIf you have something to share, share it on GitHub now!\nWhen it comes to sharing documentation or code, today, there’s no other place I like more than Github. Last week I decided I needed to put my work in a place where people can easily access and participate.
\nThis kind of project is meant to be used and perfected by experiences and different points of view. Because Front-End development is always moving, evolving, it’s not always simple to stay on track on everything. Collaborative projects, where people can participate are for me the best way to have constantly updated tools.
\nI regularly meet young developers and people who want to become Front-End developer. Even on my YouTube channel, I receive lot of questions and requests. The first advice I give to them is to start coding and put their work on Github. It’s a way for them to show their interests to their friends, a future recruiter and to the world.
\nThe Front-End Code Camp is an event workshop to better understand the process of web development.\nDon’t hesitate, everything you do, related to coding and web, take time to present it correctly on an README file and click “push”!
\nBy the time I wrote this article I was already working on a small open-source web app... Today, you can already access the Front-End Checklist App online!
\nDue to many requests, I’m already working on an NPM module which will probably be used by a future website. It was not in my initial plans but when I saw so many people asking for, I couldn’t refuse.
\nI have much more to share! I’m working on other lists that may be as good as the Front-End Checklist… Well, I hope! 😃
", + "url": "https://thedaviddias.dev/articles/how-my-open-source-project-earned-6000-stars-on-github-in-just-5-days", + "title": "How my open source project earned 6,000 stars on GitHub in just 5 days", + "summary": "The Front-End Checklist is my first open-source project gaining so much attraction and visibility! In this article, I explain what happen the first 5 days my project got published.", + "image": "https://thedaviddias.dev/images/articles/how-my-open-source-project-earned-6000-stars-on-github-in-just-5-days/github-stars.jpeg", + "date_modified": "2017-11-28T03:47:53.024Z", + "author": { + "name": "David Dias", + "url": "https://twitter.com/thedaviddias" + } + }, + { + "id": "https://thedaviddias.dev/articles/how-morning-routine-can-positively-change-your-life-forever", + "content_html": "\nI cannot remember how many times it was hard for me to wake up in the morning. The snooze button was my best friend every morning, and I even hated when I was late to go somewhere. It was hard to believe that other ways could possibly exist when you work in my job area.
\n\n\nAt that time, I believed only one possible way to live was possible.
\n
As a Front-End Web Developer, these last years, sleeping 3–4 hours per night during a few successive days, drinking cups of coffee during the day (sometimes Redbull) was my ritual and my life. And I thought all developers life was close to that. To be the best, you need to go further, faster and perform better than others, and you cannot be restful, calm, have lot of leisure if you want to succeed…
\nI was asked to move from France to Mauritius in October 2015, delaying my goal to move to North America, to help my company to grow up and to manage a Front-End team of 12 persons (today 20).
\nI met my wife on that island, the most beautiful and Kind woman ever (Kajaal Dias). And you may imagine I was in the paradise…
\nBut in reality, it was far to be the paradise like most of my colleagues and friends may still imagine.
\nAt that point of my life, I was not feeling accomplished; I was not really happy for what I was doing and I was not living the life I always wanted.
\nAs most of the people, I was not able to take real actions and make changes to build something new and different.
\nIn October 2016, seeing web tutorials on Youtube, my eyes were attracted by a video title “My 20 Hour Day” by Travis Neilson on his DevTips channel. And that was probably the start of lots of changes in my life.
\nIt was the first time I heard about “polyphasic sleep”. A way to sleep less, but being in good health and more alert than sleeping successive 8 hours. At the beginning, I thought it was another fake experiment that may work for few people only. But my curiosity pushed me to dive in some advanced research. (Thanks to Damien Fauché and his french ebook: “How to sleep only 2h per day”)
\nFinally, few days after, I decided to try the polyphasic sleep - Everyman 3.
\nAt the beginning it was hard and challenging but my motivation and dedication help me not to give up. Today, it has been 4 months that I’m still sleeping 3–4 hours at night and taking 2–3 naps during the day.
\nMy core sleeping time is between 10h30 pm to 2h30–3h00 am. I do my first nap at home before leaving for work at 7h am for 25 minutes, my second nap is at 1h pm during lunch time for 20 minutes (in my car) and the third one at home again at 6h30 pm for 25 minutes after working hours.
\nIt is not always simple to be regular, but it’s really essential to listen to your body. I remember sometimes at the beginning sleeping much more in the weekend because I missed some naps during the weekdays. I simply took attention to my body reactions and even you need to try hard at the beginning to create a new habit, your body can adapt if your are really aware of its needs.
\nToday I am able to fall in sleep in less than 5 minutes (I slow down my breath, put myself in a stress-free position and not let my thoughts haunt me). That helps a lot when you need to do a 20 minutes nap.
\nSome weeks after, I started to feel that my life can be different, I could do things differently and put a real step forward to my dreams and achieve more than I always wanted to do.
\nPutting a step forward in life, is putting a step ahead of others. And to feel good with others, you need to feel good in your life. And it started with me being grateful…
\n\n\nGratitude is the quality of being thankful and simply appreciate what we have, even in general we don’t want to see how lucky we are.
\n
I started writing into “The Five Minute Journal”. It is not a journal like the others. It allows me to be grateful, mindful and plan which great things will happen during my day. I feel positive and happier when I use it.
\nStarting my day with my journal, creating and tracking new habits were just the beginning of my journey.
\nSleeping less allowed me to have time… much more time (one more day in my week). And even I love my work and to be a programmer, I felt I gave maybe too much to my coding life and not to my personal life and personal growth. I needed to put a real daily routine, a way to equilibrate my life in all its aspects.
\nAfter starting my Five Minute Journal, I discovered “The Miracle Morning” by Hal Elrod, reading articles and his book. That was exactly what I was looking for!
\nThen I started to put a morning routine using my favorite Todo app (Todoist).
\nS.A.V.E.R.S means Silence, Affirmations, Visualization, Exercises, Reading and Scribing. These 6 elements are part of my daily routine now and help me to start my day in the most positive way.
\nWaking up at 2h30 am, I start my day with a glass of water and a personal recipe with lemon, water, cinnamon, cayenne, ginger, apple cider, honey and collagen (everything organic). It allows me to feel good for whatever I ate the day before or will eat during the day. That did a huge change for my stomach, and I never had any stomach problems or pain again. (Remember in Mauritius, most of the recipes are spicy).
\nI brew my “Kick Ass” coffee from Kicking Horse Coffee with my beautiful Java Presse (I really love USA brands). I don’t really need coffee, but it’s more a personal pleasure for my morning ritual. (Sometimes I drink the Bulletproof Coffee by Dave Asprey with Coconut Oil and Ghee).
\n\nFor meditation I use the excellent app calm.com. It can take only 10 minutes sometimes more, but that practice in my life had a significant impact in my way I live the present and feel more peaceful. There are other useful apps like Headspace amongst others.
\nI wrote some affirmations I read every morning and before to go bed. After I take some minutes to visualize what I want to achieve in my day, that helps me to keep focus.
\nI use Day One for scribbing whatever I feel or have in mind during my day and recently move to Fields Notes for my Morning Pages (thanks to Loic Le Meur).
\nI put Brain.fm for 15 minutes (with my headphones) and read at least for 15 minutes. I created a list of books on Evernote I want to read each week and month. I’m challenging myself with Goodreads to read 50 books in 2017… I am late already… :)
\nI regularly undertake activities like coding, watching tutorials, design, social media updates, new projects depending on the day. It is normally between 1h to 1h30 hours in the morning and oneextra hour in the evening.
\nThen when my wife wakes up, we go for a 20 minutes walk in the park near our apartment. Before I take my shower, 5 minutes of plank and 5 minutes of shaper, it’s enough for me to sweat and feel good.
\nI add when I have 20 minutes free some Yoga exercises with the help of Daily Yoga. Otherwise I participate every Saturday morning to a session class.
\n\nI take my cold shower hearing my favorite podcasts The School of Greatness by Lewis Howes, The 5 AM miracle by Jeff Sanders and The Tim Ferris Show by Tim Ferriss. Can’t leave home without hearing these guys!
\nSince few weeks, I’m practicing Intermittent Fasting, so I don’t take breakfast but instead, I prepare a natural juice with cucumber, lemon, parsley, apple, carrot, wheat grass and with all others vegetables and fruits I find around.
\nDuring my short trajet to work (10 minutes), I listen with my wife some best-selling nonfiction books using Blinkist. I really recommend you to take a premium account, it is worths every penny.
\nThen I start my day at work with some other routines I may share in another article.
\n(I use to track some new habits on my mini-book “Track your habits” by kikki.k and with the Coach.me app.)
\nExperimenting lot of new things in the previous 4 months, give me the will to go further and do everything I can to achieve my goals and dreams.
\nI know I’m still adjusting with my Morning Routine, but I can’t go back after all what I discovered, all people I meet that give me some mindfulness and clarity in the life. I’m so grateful for all of this.
\nNothing can stop me now to fulfill every single unique present moment of my life.
\nAnd you, do you have a daily or morning routine?
\nWhat you do daily to improve your life, achieve your goals and take actions to build the life you want?
", + "url": "https://thedaviddias.dev/articles/how-morning-routine-can-positively-change-your-life-forever", + "title": "How a Morning Routine can positively change your life forever", + "summary": "Having a Morning Routine can positively change your life in so many good ways. Through experimentation, I explore ways to improve my health and my mindset.", + "image": "https://thedaviddias.dev/images/articles/how-morning-routine-can-positively-change-your-life-forever/featured.jpeg", + "date_modified": "2017-01-21T00:01:00.000Z", + "author": { + "name": "David Dias", + "url": "https://twitter.com/thedaviddias" + } + } + ] +} \ No newline at end of file diff --git a/apps/blog/public/rss/feed.xml b/apps/blog/public/rss/feed.xml new file mode 100644 index 00000000..bf74a338 --- /dev/null +++ b/apps/blog/public/rss/feed.xml @@ -0,0 +1,2622 @@ + +"User First" is a methodology and principle where you put the user first in everything you do.
+You get the idea.
+So why some businesses continue to do the opposite? Why some businesses continue to do what they think is best for their users without asking them? Sometimes it can a business think they know better what users want.
+I sometimes hear "our users don't know what they want, they always complain...". Well, if they complain, it's because they want something else.
+User needs creates businesses and businesses create user needs. It's a virtuous circle. If you don't listen to your users, you will lose them. And not excuses will make up for failing to listen to them.
]]>Last year, I discovered the only MacOS that simply convert multiple MP3 files into one M4B file. It's called AudioBookBinder App Store page and can be found on the App Store for free!
+AudioBook Binder is a simple app that does one thing and does it well. It converts MP3 files into M4B files. You drag your MP3 files into the app, and the cover, and it will convert them into one M4B file.
+ + +The options are limited but sufficient. You can set the cover, the title, the author, and the genre. I usually leave it to "Audiobook" for the genre.
+I hope you find this app useful as I did.
+And in case you store some audiobooks on your own server, you take a look at audiobookshelf. It's a Google and Apple app that allows you to listen to your audiobooks from your own server. It's open-source and free. You're welcome!
+]]><hr>
HTML element, which is called "thematic break" instead of CSS.
+Using the HTML <hr>
tag purely for designing horizontal lines is an incorrect practice.
+The real purpose of the <hr>
tag is to denote a thematic break in the content (like between paragraphs), not just to visually create a horizontal rule.
If you need a decorative line, CSS is a more appropriate choice.
+For instance:
+<div class="styled-line">Some content</div>
+
Example CSS:
+.styled-line {
+ border-bottom: 1px solid #000;
+ margin: 1em 0;
+}
+
You generally don't want to have a single empty <span>
or <div>
element just to style it as a horizontal line. Often times, you can just use a bottom border on the element above it.
In terms of accessibility, using <hr>
as a design element can confuse screen reader users, as it indicates a "thematic break".
Semantics are important, not only for accessibility but also for SEO. So, please, stop using the <hr>
tag to design a horizontal line!
set-output
command is deprecated and will be disabled soon. Please upgrade to using Environment Files." from your Github workflow.
+
+Few months ago, I choose to update some of my Github workflows to read from my .nvmrc
file instead of manually specifying my node version.
on: push
+
+jobs:
+ build:
+ runs-on: ubuntu-latest
+
+ steps:
+ - name: Detect Node version
+ run: echo ::set-output name=NODE_VERSION::$(cat .nvmrc)
+ id: nvmrc
+
+ - name: Use Node.js ${{ steps.nvmrc.outputs.NODE_VERSION }}
+ uses: actions/setup-node@v3
+ with:
+ node-version: ${{ steps.nvmrc.outputs.NODE_VERSION }}
+
But since October 2022 and the runner version 2.298.2
, Github shows a warning regarding a future depreciation of the set-output
command.
After few trials, I figured out how to update using the $GITHUB_OUTPUT
instead:
on: push
+
+jobs:
+ build:
+ runs-on: ubuntu-latest
+
+ steps:
+ - name: Detect Node version
+ run: echo "NODE_VERSION=$(cat .nvmrc)" >> $GITHUB_OUTPUT
+ id: nvmrc
+ # shell: bash (to be added if you use composite actions)
+
+ - name: Use Node.js ${{ steps.nvmrc.outputs.NODE_VERSION }}
+ uses: actions/setup-node@v3
+ with:
+ node-version: '${{ steps.nvmrc.outputs.NODE_VERSION }}'
+
And "voilà", the warning should have disappeared and you should see the number of the version right after Use Node.js XXXX
in your workflow.
postbuild
scripts with next-sitemap
in my package.json
. My goal was to automatically generate .xml
files after each Next.js builds.
+Using pnpm, I found out that my postbuild
was working with npm
but not pnpm
.
I found out this issue on Github mentionning the same problem I encountered. It seems that pre/posts scripts are not activated if using pnpm.
+I found the solution adding the line below in my .npmrc
local file:
enable-pre-post-scripts=true
+
Now I can use pre/posts scripts and pnpm
. I hope this could save you some time!
What kept me sane during this time was probably this tool created by Labidou51. I was able to get a sense of when I would receive the email confirmation.
+Some more days to wait and I hope to get this new amazing piece of tech (it's a computer) in my own hands! Maybe I can find a nice skin on Dbrand in the meantime 😜?!
]]>Everything began when my dear friend, Christophe Raimbault, a priest in the Diocese of Tours, asked if I was interested in managing and building a website for the "Notre-Dame La Riche" parish. If you are not too familiar with what a parish is, it's mostly a local community of different churches. At the time, this sounded like an amazing challenge but I had no idea what I was getting into. I had never touch a line of code before, I was only 15 years old. I never stopped coding since then.
+The following list of websites are the ones that had the most impact on my life. I build a lot more websites but smaller and less important. I'm not including them here.
+"Notre-Dame La Riche" parish website was my first website. At the time, no blogs, no Google, no Github... most of my time was dedicated in studying code source of other websites, reading books about HTML, CSS, PHP. It was definitelly a fun time. I was learning a lot, things seemed to be a lot more simple than nowadays.
+ +I still have some code source and I can't bear looking at it just for few seconds 🤣: CSS mixed with HTML, no version control, layouts build with tables... as I said, it was fun but I'm glad things have changed. The website had multiple refactoring along the years. I remember having some animated banners build with Flash.
+ + +Wikipedia was launched in 2001. At this time, wikis were popular and Wikipedia was just beginning. I remember how much criticism this community project received. For many reasons that I have somewhat forgotten, I decided to create a dedicated wiki related to Catholic knowledge. I named it WikiKto (Kto is the French abbreviation for Catholic).
+To my great surprise, the project gained a lot of contributors. I was no longer alone. I was not the only one who thought that a wiki about Catholic knowledge was a good idea. I was not the only one who believed that Catholic knowledge should be shared and made accessible to everyone.
+The project was officially launched on May 13, 2005. I had to shut it down a little over a year later when I moved to Brazil and could no longer manage it.
+ + +WikiKtosource was launched few weeks after WikiKto and was the equivalent to Wikimedia. It was a wiki dedicated to offer open source resources for the catholic community. It was a place to share and download resources like images mainly.
+ +I created a first version of my personal blog in 2010. Few months before I started my first job as a web developer. For many years, creating new content and maintaining a blog has been a challenge for me with so many things and ideas to create. The current version of my blog (2022-2023) is probably the one that finally got the most attention to me.
+ + + +Back from Brazil, I decided to create a forum to help Brazilians to move to France and to connect to other Brazilians living in France. Thanks to all my contacts made in Brazil, I was able to get a lot of exposure and the forum and blog got very popular.
+frontenddeveloper.fr
was another trial to create a blog about front-end development. I was not very active on it and I decided to close it after few months.
The Front-End Checklist is an open-source project I created just few month before leaving Mauritius. Initially build for my frontend team, it became a worlwide and very popular project around the globe. I have been meaning to build a V2, more modern and with a better user experience. Not sure if and when I will have time to do it.
+ +I officially start the podcast World Web Stories when I was living in Mauritus, in 2016. I was not very active, only had 5 episodes and it was in French. In 2021, unemployed for few weeks, I decided to relaunch the podcast in English with a new format and with the goal to interview one person from each country in the world.
+Unfortunately, I choose to spend more time on my other podcast "Erreur 200". I still want to continue this project, but I'm not sure when I will.
+ +Erreur 200 is a French podcast I co-host with Jean-Rémy Duboc about web development. We talk about our experience, our mistakes, our successes, our tips and tricks. We also interview people from the web development community.
+ +Looking back more than 10 years, I'm very proud and grateful for all the opportunities and projects I had the chance to work on. I'm also very grateful for all the people I met along the way. Those projects shaped in a way my career and life and I'm not even mentionning all the professional projects I've worked on.
]]>But few months ago, one of my colleague talked to me about Raycast. Eager to always find better tools and expand my productivity, I decided to give it a try. The first thing I noticed was the speed. Not that "Alfred" is slow, but Raycast was just blazing fast!
+I was hooked! And when I found out that all the applications were build in TypeScript, this was the cherry on the cake! After a few weeks now using it, I don't see myself going back.
+And today, I wanted to share with you the 10 applications I use the most in Raycast, on a daily basis. Those applications are more towards developers but I highly recommend you to check Raycast out (it's free)
+1Password has been my password manager for many years. I can search, copy username or password, open the website. The only annoying part is the fact that 1Password always ask me to give access to the application. Annoying but still useful.
+I use TailwindCSS and nothing better than opening the TailwindCSS documentation directly from Raycast. I could search directly on the website but this saves me some clicks.
+Open pull requests, notifications, discussions from Github... I can also search directly repositories from Raycast.
+Play, pause, stop, next... I can control Spotify directly from Raycast. This is something I was always using on Alfred, couldn't approve Raycast if I didn't have this option.
+Raindrops is my favourite bookmark manager. The kind of tool that constantly adds new features. I can search, open, add new bookmarks directly from Raycast with the Raindrop application.
+I love seeing the status of my deployment on Vercel from Raycast. Can directly open my projects too.
+I use "Visual Studio Code" Raycast App in combinaison with "Project Manager" to quickly access all my projects in an instant.
+This is not an application, but a feature I loved on Alfred and actually exists on Raycast, even it's slighly less powerful.
+"Clipboard History" give you access to your last copied items. I've assign the double ⌥
(action) key to open the clipboard history. This is a feature I use constantly, and I'm glad it's available on Raycast.
Being a Front-End Developer gave me and all my colleagues around the world a unique perspective on user experience. We understand how small design decisions can have a big impact on the user experience, and we have a deep understanding of how users interact with products. By leveraging our experience in front-end development, we can help create products that are not only effective but also enjoyable to use, leading to increased user satisfaction and loyalty.
+User testing is a critical component of product development that can help identify usability issues and gather feedback from real users. By testing products with representative users, product teams can gain valuable insights in how users interact with their interfaces and what their pain points are. Whatever you use services like User Testing, or your own user testing directly with regular users, user testing also possess some limits that can’t be overlooked.
+For example, users may not always be able to articulate their needs and preferences accurately, or identify more obvious usability issues that sometimes are more subtle or hidden. User testing is also typically conducted in a controlled environment, which may not always accurately reflect real-wold usage scenarios.
+What about people that don’t use technology in a daily basis?
+Usually user testing is done by a certain user group or demographics and don’t include 100% of all users. From my point of view, user testing can’t be really complete without testing with people with disabilities. For people with experience in doing accessibility testing with real users, I’m sure you will agree that.
+Through Internet history, user testing had lead to create successful products:
+But user testing can also fail to uncover critical usability issues which can contribute to the failure of some projects:
+Building a successful project is not an easy task, a lot of factors can influence the success or the failure of a new product. Nowadays, users have different needs. Users switch faster to competitor then before, we have daily examples of that.
+User testing is one tool in companies belt that should be used as often as possible, but shouldn’t be the only one.
+Front-End Developers (FED) are not just coders. Usually seen as the ones that “just” integrate designs into HTML, CSS and JavaScript, their t-shape personalities is often times overlooked (not all FES have t-shape skills though).
+A FED can play a critical role in creating engaging user experiences.
+As I said in my previous article about Front-End Developers, Web and UX/UI Designers collaboration, collaboration and communication is key in building a successful product.
+This collaborative approach allows different perspectives to merge and create a more holistic vision of the product. As Front-End Developers, we have the unique position of working at the intersection of design and technology. We are often the ones who bring the designers' visions to life while ensuring that the product remains functional and user-friendly.
+Front-end development is about more than just making things look good. It's about creating a seamless and intuitive interface that guides users through a product. Every button, every transition, every piece of interactive content is a chance to engage users and keep them invested in the product.
+Front-end developers have a deep understanding of user behavior, as they are responsible for creating the interactive elements that users engage with. They can use this knowledge to create more engaging user interfaces and to guide user testing to focus on areas of the product that are most likely to affect user engagement.
+Beyond just implementing designs, a seasoned FED can provide insights and suggest improvements to the UX/UI designs based on their knowledge of what is technically feasible and what would create a smoother user journey. They can spot potential pitfalls in the designs that might be overlooked during user testing.
+For example, a developer might notice that a particular design element could cause issues on certain devices or browsers. They might also suggest an alternative way of implementing a feature that enhances the user's experience. I have been advocating about accessibility for years now. Last year, I became CPACC certified and I continue to advocate for accessibility in my daily work. Not everyone understand what web accessibility is and how it impacts users. It takes time and effort to educate people about it.
+As technology advances, users' expectations also rise. They demand faster, smoother, and more intuitive interfaces. User testing will always be a vital tool for gathering feedback, but to meet these evolving demands, we need to go beyond testing.
+Incorporating the front-end developer's expertise into the design process and user testing can help create a product that not only meets the users' needs but also provides an engaging and satisfying experience.
+We must continue to push the boundaries, experiment with new technologies, and constantly seek ways to better understand and improve user engagement. Only by doing this can we hope to create products that users will love to use.
+Front-End Developers bring a valuable perspective to the product development process. Let's use it to its fullest potential to create engaging, user-friendly products. After all, the success of any product lies in the satisfaction of its users.
+At the end, user engagement is not just about the single experience of a product but the entire journey. It's about creating an engaging, intuitive, and satisfying journey that users want to return to again and again. And Front-End Developers play a crucial role in crafting this journey.
+Remember, user testing is a part of the journey, not the destination. We must use all the tools at our disposal, and that includes leveraging the front-end development experience to truly understand and improve user engagement.
+Let's continue to build with the user in mind, always striving to enhance their journey, their experience, and ultimately, their engagement.
+As a Front-End Developer, I had the chance to work with numerous Web Designers and UX/UI designers over my career. No matter if I was in Brazil, France, Mauritius or Canada, I have observed the same challenges over and over again. And one unique solution doesn’t always apply to similar situations. You need to find what works best for you.
+In this article, I want to share some topics I believe should be discussed. From my point of view, we, as web professionals want the same thing: build accessible and performant products that will provide the best user experience possible.
+If you want your product to work, to get revenues, then you should start with the above goal first, not the other way around.
+But let’s start with some definitions.
+A lot of people could probably define what is a Web Designer better than I. But from my perspective, as a Front-End Developer, a Web Designer is someone with extensive skills in design that understands the constraints and the possibilities given by the web. I’ve seen a lot of really good “designers” but who were not always able to fully understand the “web” part of their title. Designing for the web is far from being straightforward. Be familiar with how to use Sketch or Figma is surely part of being a Web Designer, but it’s unfortunately not enough. And honestly, for me it’s totally fine: you learn as you progress.
+Probably, from my point of view, a Web Designers shouldn’t just rely on his knowledge and put pressure on himself to know everything about the web. That’s where a Front-End Developer can come into play. Front-End Developers are the ones that spend their time on the web, scrolling, studying code, finding new ways of building components… They are the perfect buddies of Web Designers, and both should be pairing regularly.
+A UX/UI Designer is someone where focus lays on users. Nothing should be more important than the user, the person, the human. A UX Designer needs to spend a lot of his time doing researches. I’ve always considered that a good UX/UI Designer should be passionate about people, what they want, how they want things… Of course, you also have the word “designer” in the title, because in the context we are talking about, a UX/UI Designer has the task to understand the user and also know what works the best in terms of UI. Something that works for a website dedicate to moms may not work for a website which main users are teens.
+++I’ve always considered that a good UX/UI Designer should be passionate about people, what they want, how they want things.
+
But he is not the only one who has developed an understanding of what users prefer and are used to when they browse the Internet. When a Front-End Developer wants to create a piece of code, a component, he usually dives into his structured memory of patterns. When someone says “button”, it triggers in his brain all the times (thousands of) he clicked on a button, but also snippets of CSS code that can be used to create a button or the long hours he spent analyzing CSS framework documentation…
+Front-End Developers can be a huge asset for any UX/UI Designer because they’ve learned so much about the web and usual patterns from a different perspective.
+I know a lot of people that could potentially disagree with my definition. For me, a Front-End Developer is a builder, someone that loves building web content using a combination of multiple skills. Because a Front-End Developer is not just a coder. To be a Front-End Developer you need to learn HTML, CSS, JavaScript but these are just the basics. You need to understand how to make a website accessible, how to use CSS to create an amazing layout, how to translate a design file to CSS, how to keep your application performant, how to build a UI/pattern library… the list is long but I’m sure you get my point.
+A Front-End Developer is the backbone of any web content. Without a Front-End Developer, the website couldn’t be created (even if you use a no-code generator, a Front-End Developer had to create the UI).
+Does that mean that a Front-End Developer is more important than other people in their team? Absolutely not, but his role requires him to be a facilitator, to understand what he can provide for the rest of his team.
+Now that we have a better idea of what these roles represent, how do we make them work together in a way that they feel empowered and enjoying the collaboration?
+Any athlete will tell you that mindset is everything to achieve their goals, to win championships, to perform better. This is not that different when it’s about working as a team. Everyone’s mindset is important within a team. But it’s something that the group itself doesn’t have any control. Only individuals can decide to have an open mind, a true relationship with the other member of the team, visualize solutions instead of problems…
+We often forget that we all have a common goal. Sure, we can also have multiple goals for ourselves but if you are part of a team, it’s only to achieve a common goal.
+Differences are what make this specific group worth existing. EVERYONE has a role to play in any team.
+But it’s not only about individual mindsets. A team with a Web Designer, UX/UI and developers are usually part of a corporation. All over the world, numerous companies understand and value their culture. This is an essential part to guide employees towards common goals and achieve specific tasks.
+If companies provide the tools and the support to create trust and equality between the members of a team, then it makes it easier for people to collaborate together and learn from each other.
+Aaah the ego! Some people say that a bad reputation can hurt any company, I believe ego can hurt sometimes even more. The ego is one of the biggest enemies of any company, team or leadership group. I had the displeasure to work with 1–2 people during my career with a pretty big ego.
+I will always feel the pain these people have caused, it’s important to make peace with any related event but also with them. After all, we are all humans.
+Ego shouldn’t exist in a team. Period.
+Collaboration is knowing that people are better than you in certain areas. It’s knowing that you can learn from them. It’s knowing that you can also give something to them. Collaboration is finding the balance and putting everything and everyone at the center of the group.
+And no, collaboration is not something you implement once and it’s done, everything will always work perfectly. Collaboration is an equilibrist performance that could go wrong at any time. But you have to keep going because it’s so rewarding when you succeed!
+Before giving you some answers, I want to tell you about two of the best experiences I had during my career with Web / UX / UI Designers.
+My first best experience was in August 2014, in Cincinnati, USA. I’ve worked for a month with Barefoot Proximity to build a new platform. Julie Tran, which was leading the project in terms of design would create pieces of design, sent them to me for prototyping and we would discuss around that. What made the experience amazing was the level of exchange and collaboration.
+It wasn’t just about, “Hey, here is the design”, it would be more “hey, here is the design, can you do a quick prototype to see if that works. Let me know if you see any problems that may occur for mobile, accessibility etc…”.
+I was able to give my feedback based on my knowledge and experience, Julie would also push back when I would be hesitant to test a particular approach. Combining our visions, being open with each other was what made this project successful. Even with my English being pretty basic at this time, we both enjoyed our work and I kept only good memories from that collaboration.
+My second best experience was in 2015, with Julia Bruyneel, who was working in Paris as a Web/UX Designer freelancer. I was in Mauritius for a month and we had to collaborate for few weeks on new designs for an existing project.
+Even with the distance, and not knowing each other before, Julia would contact me and exchange about designs she would have made. That simple communication and regular exchange were reassuring for me (was lead on that project for 3 years) but also a manifestation of maturity and professionalism from Julia. It was short but I kept good memories of that collaboration.
+The three main keys, from my unique point of view, to have successful teams rely on mindset, culture and processes.
+ +Mindset: If you want to have people working together, in collaboration, using each other experience and vision, they need to have a similar mindset. I’m not saying an “identical mindset” or “same personalities”, I’m saying “similar mindset”. When everyone understands the goal of the team and is open to see each human behind his title, then you have more probabilities to have a successful team.
+Culture: Sometimes, having a similar mindset is not possible or challenging. In that case, is the responsibility of the structure or company to influence a specific mindset. Companies can decide who should be part of the “family”. That’s why the recruitment process is important.
+Processes: a lot of people I know, hate the word processes. For me, processes have always mean freedom. When you have a defined and clear process, you don’t have to stress or be hesitant or afraid. A process should exist to guide you in a process where people can predict what will come next. It’s reassuring to know that everyone has the same process in mind. Sometimes, when people's mindsets are not similar or the culture is lacking, processes should help people to visualize the direction they need to take.
+You could take these 3 points separated or combine them to maximize your chances to build successful teams.
+++“We love the web and we love being part of the creation process! We decided to become Front-End Developers because we love building! And it’s not just about converting designs to CSS, we love understanding the why, the how of the creation. +And we understand that this may be scary at times because why the heck a Front-End Developer will tell a designer that his design is not accessible? Or tell the designers that he is not sure, this is gonna work for the user? It’s not about competing, it’s about putting energies in sync. +The problem sometimes is that we see patterns and code examples in our minds that we don’t always translate for other people to understand. But we’re working on that! I promise! +We have more to share than just our “title”, we have more to give than just lines of code. We are here to help!”
+
If you are still reading, I hope you also share some common ideas exposed in this article. I have dedicated a portion of my career to try to be a facilitator and share all the knowledge I accumulated to build awesome products.
+What about your experience? How do you like to work with others? What would you like to see happening more often within your team?
]]>I've recently spent multiple hours ensuring that all the accounts I possess use a unique password, complex and long with at least 20 characters and with the two-factor authentication (2FA) enable if present. I've discovered so many disparities between companies and so many issues in terms of features and user experience. I wanted to share with you in this article, what I believe are the best and recommended features for any website or company that takes the security of their users seriously.
+That is the starting point.
+If you care about your users or customers, you should give them the choice to activate the two-factor authentication. On around 800 websites where I have an account, only 5% offer a 2FA option. Some may argue that if you don't have highly sensitive information, it may be overkill to offer the 2FA. But any personal information could be considered sensitive.
+If you care about your users and their security, give them the option to enable the 2FA. Period.
+Google, Facebook, Twitter... they all offer simultaneous ways for 2FA: text message, authentication app and security key. More commonly, at least in a text message and authentication app, the security key seems to be set up only on certain services.
+But I've been surprised to see Etsy, even they use toggles on their UI, to force you to only choose one of the options. I'm not even sure if it was originally designed to work like that.
+ +Bit.ly and booking.com in other hand only allow you to use your phone as a 2FA device. So if you lose your phone and your email access, you could be screwed.
+ +Mailchimp and Tumblr, on the contrary, only offer 2FA using an authentication app.
+Zapier has an awesome step by step 2FA setup, probably one of the best I found. They offer multiple complementary ways and specifically tell you "in the event you get locked out of your account and have lost both your authentication device and recovery codes". The user understands that providing his phone number is an additional way to ensure he/she can access his account in case he/she lost the other ways to connect to their web app.
+ +I have been using 1Password for quite some time now and the modal that scans the QR code doesn't always find the QR code. In that case, I found myself drag and dropping the QR into that modal to be recognized. But it only works when the code is an image.
+I would recommend having it as a format image that can be saved / drag and dropped.
+Reddit for example don't have the QR code as an image. Fortunately, everyone offers the text version of the QR code that you can use in your authentication application.
+This one only happened to me once. It happened with Instagram.
+When Instagram sends a "verification code" by SMS, they included a space. If you copy-paste that code where it's required, first the input doesn't want the space and the last digit is not included in your paste. It's an annoying issue that could be fixed easily!
+ +Sounds weird when said at loud but a lot of websites don't offer backup/recovery codes when you enable the 2FA. This was a surprise for me at first, 2FA means you will always have backup codes in case you lost access to your phone, email or the app you use to generate the random number. Nowadays, some websites don't offer that option. I tend to be really careful with those.
+Kickstarter and WPEngine are examples of websites that don't offer you any recovery/backup codes. I hope they could improve that.
+ +Most of the websites propose to copy the recovery codes. This is not the best option.
+It's nice to have it, sure, but it's not enough. I personally store all my recovery codes in multiple places: one is the vault from Dropbox. Having just to drag and paste a simple text file is easy and fast.
+If you offer only the option to copy, then you could be forcing the user to:
+Technology is there to save user's time.
+Slack for example allows you to "Print codes" but not download them. Why not? I have to generate a PDF instead of my simple text file. Not the best user experience.
+ +Even Facebook can make mistakes and this one is important for me. Currently, if you download the recovery codes from Facebook, you open the file and you can't find any mention of Facebook or the name of the account. The file name facebook_recovery_codes
is helpful but in my opinion, not enough. The name of the account and the name of the platform should be a minimum.
And to make it more useful, adding the date when the codes were generated could also be added.
+Google which is a good example, uses your username in the name of the file, and also adds:
+SAVE YOUR BACKUP CODES
+Keep these backup codes somewhere safe but accessible.
+
+LIST OF CODES
+
+(email@gmail.com)
+
+* You can only use each backup code once.
+* Need more? Visit https://g.co/2sv
+* These codes were generated on: Date, 2021.
+
It's essential to give the user the ability to regenerate recovery codes. Some don't offer this useful option.
+This one is less important but I still wanted to mention a key difference in terms of recovery/backup codes.
+Most of the companies only offer one code vs a list of multiples codes that can be used. It's hard for me to defend one approach vs the other one. I just know that I feel better when I have more than one code.
+Security keys are the less common way to secure your account. If you are a public figure or someone with a high level of responsibility, having a security key could give you a little bit more peace of mind. But for a normal user, it may be overkill. Nonetheless, I wanted to maximize the security of my accounts and recently bought the Titan Security Key from Google. The USB version works on any computer and I use the Bluetooth version in case I'm on my iPhone or iPad.
+ +They both are not cheap, but security should be part of your "unlimited budget", the same as for food.
+I'm not a security expert and have limited knowledge in terms of security. But as a Software Engineer and particularly a user, I believe we have a long way ahead until most of the platforms implement all the tools to ensure secure access for users.
+Recap:
+Thanks for reading, I hope these suggestions would help you to have a better UX and improve your 2FA implementation.
+Feel free to ask me anything in the comments below!
]]>I have naturally used the Vercel platform, which couldn't be easier to use and deploy your application with ease. Then I tried AWS Amplify, which I particularly love but for now, requires you to use the Serverless Framework if you want to benefit from Server Side Rendering (SSR) capabilities.
+Then, I remembered that Netlify has added support for Next.js, including dynamic routes, Preview Mode and more around November 2020. It was time for me to try it! But I also wanted to have a real CI/CD in place, to test my code and do more actions before deploying to Netlify. That's where Github Actions came to the rescue!
+I'm going to describe in this article, all the steps you need to take to deploy your Next.js application on Netlify using Github Actions.
+++The full version of the project can be found on Github.
+
As always, you need to have a recent version of Node and NPM installed on your machine. I personally recommend using NVM
since it simplifies having multiple active Node.js versions.
To create a new Next.js project, type this command in your CLI:
+npx create-next-app name-of-your-app
+
+# move into the app's root directory
+cd ~/path-to-projects/name-of-your-app/
+
This will install a new application using a basic Next.js boilerplate. Don't forget to move to your app root folder before launching any next commands.
+Once your Next.js project is locally created, you can create a new project on Github and push the code generated.
+(For those you are new to coding, feel free to follow these steps to create a new repository on Github.)
+There are 2 ways of creating a new Netlify project:
+Let's use the CLI this time, I'm sure you already created a new project in the past using the Netlify interface.
+Let's start by installing netlify-cli
globally:
npm install netlify-cli -g
+
Then check if the installation succeeds, confirming with this command:
+netlify
+
Now you need to link your computer with your Netlify account. To authenticate with Netlify, you need to run this command:
+netlify login
+
This will open a new tab in your browser where you'll need to "Authorize your Application" and then grant access to Netlify CLI.
+In case you already logged in previously, the console will output:
+Already logged in via netlify config on your machine
+
Now that your CLI is authorized to communicate with your Netlify account, it's time to programmatically create a new project:
+# create a new Netlify site using the Netlify shortcut: ntl
+ntl init
+
The first question you are asked is if you want to connect this directory to an existing Netlify site or create & configure a new site. Choose Create & configure a new site:
+ +Then you have to choose your team:
+ +Choose the name of your application:
+ +After entering the name of your project, the site is created and few URLs populated the CLI which gave you access to your admin URL, the URL of your site and the Site ID. Keep the site ID aside, you will need that number later on.
+For the next 3 questions (build, start and function), insert a space. We are not going to directly use the NPM scripts, our Github actions will later trigger each command. +
+Finally, automatically create a netlify.toml file, which we will edit later. If your respond no, you can still create that file manually at the root of your project.
+ +Once you provided an answer to all the questions, your terminal should look like this:
+ +It's now time to change some options on our Netlify project. Open directly your project on Netlify with this command:
+ntl open
+
You should see that our production deployment failed. You don't have to worry, this is totally normal. We need to disable our automatic build because our Github Actions will take care of it.
+Go in your Settings > Build & deploy. Click on Edit settings
and Stop builds
. Save.
Just below, go to the Deploy contexts
section and select None
for the Deploy previews.
Don't worry, like the build, we will create our preview URL using Github actions.
+If you have been using Next.js you are aware of the capability to do the server-side rendering. But usually, you will need to configure a Node server and that's something we don't want to have to deal with. Around October 2020, the Netlify team started working on next-on-netlify
, a utility to enable SSR in Next.js on Netlify. That's what we are going to use here.
(In case you are not interested in Github Actions and want to use Netlify to build your project, take a look at how to use the Next on Netlify Plugin. It directly wraps your Next.js app and doesn't need as much configuration as we are going to explain.)
+Let's start by installing our utility:
+npm install -D next-on-netlify
+
We must build our Next.js app as a serverless app
+module.exports = {
+ // Target must be serverless
+ target: "serverless",
+};
+
We need to add a postbuild
command that is automatically triggered after our build
command finishes. next-on-netlify
does a lot of "magic" to copy and set up our Next.js app to be correctly hosted on Netlify.
{
+ "name": "next-netlify-github-actions-starter",
+ "version": "0.1.0",
+ "private": true,
+ "scripts": {
+ "dev": "next dev",
+ "build": "next build",
+ "start": "next start",
+ "postbuild": "next-on-netlify"
+ },
+ ...
+}
+
Remember the file that was automatically created and called netlify.toml
? You can remove all the boilerplate and replace it with only this code (be careful in respecting the indentation):
[build]
+ command = ""
+ functions = "out_functions"
+ publish = "out_publish"
+
Technically, when next-on-netlify
will run, it will take what is in these folders and host it on Netlify. DO NOT CHANGE the name of these folders as these are hardcoded into the utility.
Don't forget to add these line to your .gitignore
file
# Netlify build
+out_*
+
You can commit your files. Let's work now on the Github Actions configuration.
+The netlify configuration is now done, all dependencies installed, it's time to configure our Github actions which will test, build and deploy our Next.js application to Netlify. But before that, we need to set up some Github secrets that we will need in our GH Actions.
+Go to your Github project > Settings > Secrets > New repository secret
| Actions secret name | Comments |
+| -------------------- | ------------------------------------------------------------------------------------------- |
+| NETLIFY_AUTH_TOKEN
| Request your token here |
+| NETLIFY_SITE_ID
| The site to where deploy your site (get it from the API ID on your Site Settings) |
Create a new file called main.yml
inside .github/workflows
. Copy-paste the following code and read the explanation of it after this snippet.
name: Main workflow
+
+on:
+ pull_request:
+ branches:
+ - master
+ - main
+ types: [opened, synchronize, reopened]
+
+jobs:
+ test:
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout code
+ uses: actions/checkout@v2
+
+ # Cache node modules and next folder
+ - name: 📬 Caching
+ uses: actions/cache@v2
+ with:
+ path: |
+ **/node_modules
+ ${{ github.workspace }}/.next/cache
+ key: ${{ runner.os }}-modules-${{ hashFiles('**/package-lock.json') }}
+
+ - name: Use Node.js 14.x
+ uses: actions/setup-node@v1
+ with:
+ node-version: 14.x
+
+ - name: 🧰 Install dependencies
+ run: npm run install
+
+ - name: 📦 Build project
+ run: npm run build --if-present
+
+ # - name: 🧹 Run lint
+ # run: npm run lint
+
+ # - name: 🐛 Run tests
+ # run: npm run test
+
+ # Deploy to Netlify with a personalized message
+ - name: 🚀 Deploy to Netlify
+ id: deploy-netlify
+ uses: netlify/actions/cli@master
+ env:
+ NETLIFY_AUTH_TOKEN: ${{ secrets.NETLIFY_AUTH_TOKEN }}
+ NETLIFY_SITE_ID: ${{ secrets.NETLIFY_SITE_ID }}
+ with:
+ args: deploy -m 'v${{ steps.package-version.outputs.current-version}} ・ ${{ github.head_ref }}'
+
build
logs in your Github Action tab:
+You may have seen an argument passed to the Netlify deploy:
+args: deploy -m 'v${{ steps.package-version.outputs.current-version}} ・ ${{ github.head_ref }}'
+
This will add a message for each Deploy Preview, a way to keep track of which PR generated which Deploy.
+ +On the same deploy page, you can click on the Deploy Preview and access your app using the preview URL.
+A better way would be to use another task to automatically populate your pull request with the log and preview URL. At the end of your file, add this action:
+# Publish the inspect and preview link to the PR
+- name: 👓 Netlify Preview URL
+ uses: unsplash/comment-on-pr@master
+ env:
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ OUTPUT: "This pull request is being automatically deployed to Netlify.\n\n🔍 Inspect: ${{ steps.deploy-netlify.outputs.NETLIFY_LOGS_URL }}\n✅ Preview: ${{ steps.deploy-netlify.outputs.NETLIFY_URL }}"
+ with:
+ msg: ${{ env.OUTPUT }}
+ check_for_duplicate_msg: false
+
This will automatically create a comment in your PR.
+ +If you are still reading this, congrats! You have succeeded in deploying a fully enabled Next.JS application to Netlify using Github Actions!
+The next step for you now will be to add some linting rules and tests to ensure that you are sending to Netlify, an app that works perfectly!
+Feel free to download or fork the next-netlify-github-actions-starter
, open an issue if you find any problem or send me any suggestion to make it better!
Talking and sharing life’s moments with all these people made me realized something you may know already: most of the human beings struggle in being happy and spend most of their lives, living in their past and acting or not acting based on numerous fears. Fear and past are the two biggest challenges that every human in history had to face.
+Fear is more than just a word or a feeling you experimented watching horror movies. Fear is just the most powerful weapon that, in 2019, is killing more than any other weapon in the world.
+Fear does not just kill physically people, fear kills creativity, originality, growth, relationships, marriages, ideas, will, happiness… Fear makes you feel bad at work because you think you don’t know enough, it pushes you to fail at the University: fear to not be good enough, fear to fail another relationship, fear to talk too much, fear to not talk enough, fear to be judged, fear to be invisible, fear to be different, fear to not be understood…
+With all the social media platforms, we try to connect people, reduce the friction in creating new possible relationships, and it works. We have so many incredible situations, made possible thanks to all these platforms out there. But I don’t think it’s really enough to make people fearless. You can be a movie star, or a famous singer, at the end of the day, your memories, your past is there. You can’t really push the button rewind or delete. All of us need to learn to live with our past, our mistakes. And that’s probably one of the most complicated parts of being human.
+Take 2 minutes to analyze your day until now: I doubt you didn’t find any trace of fear pushing you to act or say something you didn’t really want to.
+We can’t do anything to change our past, including yesterday. We can try to forget or think that we are not attached to it, and yes, you are right, our pasts don’t define who we are. But our pasts mold our personality and our beliefs, and beliefs are something so hard to change sometimes. +We can battle a whole life and try to change our pasts, but you know and I know that it’s a waste of time. Our pasts are all painful, we all have moments we would like to forget, people that make us feel bad, people that hurt us, friends, parents, that disappointed us, love relationships that created a hole in our heart… Fortunately, not physically.
+So what are our options? Actually, do we have options? Maybe we have an easy option. And if we tried to choose the one the majority chooses? That would work? I don’t think I have an answer that would make you feel happy. The only answer that I can think of, is that accepting our past, whatever happened, whatever you lived is probably the only way to live our present and feel that joy that exists in every little thing around you.
+I know what you may think: “Easy to say, hard to do”. Does anyone told you in your entire life: “Things are easy!”? Just ask you the question. Why most of us want something easy instead of something true. What happened in the history of humanity to make us believe that life equal easy or hard? Why can’t we just say that things are how they should be, and we need to choose the way we want to react when we are facing them? The way we choose to react and act is what matters.
+When someone out there, our neighbor, a president, a friend decide to create a wall in their garden or between countries, we all think and believe that it is not a solution or even an option. But how many times, did we create a mental barrier between us and the world? How many times, did we get nervous because we don’t have full control over our life’s events? How many times, did we get angry because our child felt and instead of showing him love, we yell at him because we were afraid it could hurt himself? Afraid that next time, he could fall being alone? It’s easier to hide that fear behind that attitude than accepts and embrace that uncomfortable feeling of fear and react with love.
+Maybe things in your life, made you create layers. Layers of protection to “help you face life’s challenge”. Really? Are you feeling happiest since you closed some doors and people think you are a negative person? Is the world a better place because you hide your feelings and you are not able to cry anymore? I don’t think so.
+I wish I could have multiple lives (some people believe in it), but the one we all have is the one we are currently living. And we usually don’t regret things we did, but things we were not able to achieve and to do, like be open to our wife or husband, show to our kids that we are not perfect and that we made mistakes sometimes.
+In some cultures, some places in the world, you can’t really talk about fear and past. You can’t talk about the struggle you have in your life. A lot of people across history tried their best to remove some humanity in some cultures and who really wants to defeat centuries of culture which forces you to not be yourself? Things are not equaled in the world, but it’s not a reason to not try.
+What makes people think they can’t talk about their issues, once again, fear is probably behind that for most cases.
+Sometimes I’m not sure why, in a work environment, people can’t say “I don’t know, I’m not sure, I’m having doubts lately…” Is an issue to be human nowadays? Because I feel, I can’t work? Because I’m not sure, I will not be a good employee? Of course, a company is a place for you to work, help a company to grow and get more value in the market but is it not a place where humans live, breath and share emotions and moments?
+I met many people around the world that were themselves at home, but could never be themselves at work. Look at your right… yeah, you found him/her!
+Things are going fast, technologies like cryptocurrency, AI, VR, autonomous cars, all of that is changing and is going to change our worlds. But in the end, fears, layers, will always be there, and one day, a lot more people will have to seek help if they want to be free from all of that. Life will always be what it is, but all of us can improve other’s lives, being there when they need, sending a small message asking if everything is fine. We don’t really need to make big efforts to help our world to feel better. Believing that you can do a lot for the people around you is the first step.
+Right now, maybe a friend is waiting to receive a message from you. A signal to make him feel he is not alone. Have someone that can reassure him that his/her past will not define his/her tomorrow.
+…What are you really waiting for? 📲
+Disclaimer: I usually write articles about code, immigration, and tech, but a lot of my friends are lately facing the same issues, and even I try my best to help them, it’s also up to them to take action and choose the life they really want. This article is a way to hopefully help other people that may be facing the same issues in their lives. Let me a comment if you find this article relevant for your life!
]]>For each rule, you will have a paragraph explaining why this rule is important and how you can fix it. For more deep information, you should find links that will point to 🛠 tools, 📖 articles or 📹 medias that can complete the checklist.
+All items in the Front-End Performance Checklist are essentials to achieve the highest performance score but you would find an indicator to help you to eventually prioritised some rules amount others. There are 3 levels of priority:
+List of the tools you can use to test or monitor your website or application:
+[ ] Minified HTML: ![medium] The HTML code is minified, comments, white spaces and new lines are removed from production files.
+Why:
+++Removing all unnecessary spaces, comments and attributes will reduce the size of your HTML and speed up your site's page load times and obviously lighten the download for your user.
+
How:
+++ +Most of the frameworks have plugins to facilitate the minification of the webpages. You can use a bunch of NPM modules that can do the job for you automatically.
+
[ ] Place CSS tags always before JavaScript tags: ![high] Ensure that your CSS is always loaded before having JavaScript code.
+<!-- Not recommended -->
+<script src="jquery.js"></script>
+<script src="foo.js"></script>
+<link rel="stylesheet" href="foo.css" />
+
+<!-- Recommended -->
+<link rel="stylesheet" href="foo.css" />
+<script src="jquery.js"></script>
+<script src="foo.js"></script>
+
Why:
+++Having your CSS tags before any JavaScript enables better, parallel download which speed up browser rendering time.
+
How:
+++ +⁃ Ensure that
+<link>
and<style>
in your<head>
are always before your<script>
.
[ ] Minimize the number of iframes: ![high] Use iframes only if you don't have any other technical possibility. Try to avoid iframes as much as you can.
+[ ] Pre-load optimization with prefetch, dns-prefetch and prerender: ![low] Popular browsers can use directive on <link>
tag and "rel" attribute with certain keywords to pre-load specific URLs.
Why:
+++Prefetching allows a browser to silently fetch the necessary resources needed to display content that a user might access in the near future. The browser is able to store these resources in its cache and speed up the way web pages load when they are using different domains for page resources. When a web page has finished loading and the idle time has passed, the browser begins downloading other resources. When a user go in a particular link (already prefetched), the content will be instantly served.
+
How:
+++ +⁃ Ensure that
+<link>
is in your<head>
section.
[ ] Minification: ![high] All CSS files are minified, comments, white spaces and new lines are removed from production files.
+Why:
+++When CSS files are minified, the content is loaded faster and less data is sent to the client. It's important to always minify CSS files in production. It is beneficial for the user as it is for any business who wants to lower bandwidth costs and lower resource usage.
+
How:
+++ +⁃ Use tools to minify your files automatically before or during your build or your deployment.
+
[ ] Concatenation: ![medium] CSS files are concatenated in a single file (Not always valid for HTTP/2).
+<!-- Not recommended -->
+<link rel="stylesheet" href="foo.css" />
+<link rel="stylesheet" href="bar.css" />
+
+<!-- Recommended -->
+<link rel="stylesheet" href="foobar.css" />
+
Why:
+++If you are still using HTTP/1, you may need to still concatenate your files, it's less true if your server use HTTP/2 (tests should be made).
+
How:
+++ +⁃ Use online tool or any plugin before or during your build or your deployment to concatenate your files. +⁃ Ensure, of course, that concatenation does not break your project.
+
[ ] Non-blocking: ![high] CSS files need to be non-blocking to prevent the DOM from taking time to load.
+<link rel="preload" href="global.min.css" as="style" onload="this.rel='stylesheet'" />
+<noscript><link rel="stylesheet" href="global.min.css" /></noscript>
+
Why:
+++CSS files can block the page load and delay the rendering of your page. Using
+preload
can actually load the CSS files before the browser starts showing the content of the page.
How:
+++ +⁃ You need to add the
+rel
attribute with thepreload
value and addas="style"
on the<link>
element.
[ ] Unused CSS: ![medium] Remove unused CSS selectors.
+Why:
+++Removing unused CSS selectors can reduce the size of your files and then speed up the load of your assets.
+
How:
+++⁃ ⚠️ Always check if the framework CSS you want to use don't already has a reset / normalize code included. Sometimes you may not need everything that is inside your reset / normalize file.
+
[ ] CSS Critical: ![high] The CSS critical (or "above the fold") collects all the CSS used to render the visible portion of the page. It is embedded before your principal CSS call and between <style></style>
in a single line (minified if possible).
Why:
+++Inlining critical CSS help to speed up the rendering of the web pages reducing the number of requests to the server.
+
How:
+++ +Generate the CSS critical with online tools or using a plugin like the one that Addy Osmani developed.
+
[ ] Embedded or inline CSS: ![high] Avoid using embed or inline CSS inside your <body>
(Not valid for HTTP/2)
Why:
+++One of the first reason it's because it's a good practice to separate content from design. It also helps you have a more maintainable code and keep your site accessible. But regarding performance, it's simply because it decreases the file-size of your HTML pages and the load time.
+
How:
+++ +Always use external stylesheets or embed CSS in your
+<head>
(and follow the others CSS performance rules)
[ ] Analyse stylesheets complexity: ![high] Analyzing your stylesheets can help you to flag issues, redundancies and duplicate CSS selectors.
+Why:
+++Sometimes you may have redundancies or validation errors in your CSS, analysing your CSS files and removed these complexities can help you to speed up your CSS files (because your browser will read them faster)
+
How:
+++Your CSS should be organized, using a CSS preprocessor can help you with that. Some online tools listed below can also help you analysing and correct your code.
+
![fonts]
+[ ] Webfont formats: ![medium] You are using WOFF2 on your web project or application.
+Why:
+++According to Google, the WOFF 2.0 Web Font compression format offers 30% average gain over WOFF 1.0. It's then good to use WOFF 2.0, WOFF 1.0 as a fallback and TTF.
+
How:
+++ +Check before buying your new font that the provider gives you the WOFF2 format. If you are using a free font, you can always use Font Squirrel to generate all the formats you need.
+
[ ] Use preconnect
to load your fonts faster: ![medium]
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
+
Why:
+++When you arrived on a website, your device needs to find out where your site lives and which server it needs to connect with. Your browser had to contact a DNS server and wait for the lookup complete before fetching the resource (fonts, CSS files...). Prefetches and preconnects allow the browser to lookup the DNS information and start establishing a TCP connection to the server hosting the font file. This provides a performance boost because by the time the browser gets around to parsing the css file with the font information and discovering it needs to request a font file from the server, it will already have pre-resolved the DNS information and have an open connection to the server ready in its connection pool.
+
How:
+++⁃ Before prefetching your webfonts, use webpagetest to evaluate your website +⁃ Look for teal colored DNS lookups and note the host that are being requested +⁃ Prefetch your webfonts in your
+<head>
and add eventually these hostnames that you should prefetch too
[ ] Webfont size: ![medium] Webfont sizes don't exceed 300kb (all variants included)
+[ ] Prevent Flash or Invisible Text: ![medium] Avoid transparent text until the Webfont is loaded
+[ ] Images optimization: ![high] Your images are optimized, compressed without direct impact to the end user.
+Why:
+++Optimized images load faster in your browser and consume less data.
+
How:
+++⁃ Try using CSS3 effects when it's possible (instead of a small image) +⁃ When it's possible, use fonts instead of text encoded in your images +⁃ Use SVG +⁃ Use a tool and specify a level compression under 85.
+
[ ] Images format: ![high] Choose your image format appropriately.
+Why:
+++To ensure that your images don't slow your website, choose the format that will correspond to your image. If it's a photo, JPEG is most of the time more appropriate than PNG or GIF. But don't forget to look a the nex-gen formats which can reduce the size of your files. Each image format has pros and cons, it's important to know these to make the best choice possible.
+
How:
+++ +⁃ Use Lighthouse to identify which images can eventually use next-gen formats (like JPEG 2000m JPEG XR or WebP) +⁃ Compare different formats, sometimes using PNG8 is better than PNG16, sometimes it's not.
+
[ ] Use vector image vs raster/bitmap: ![medium] Prefer using vector image rather than bitmap images (when possible).
+Why:
+++Vector images (SVG) tend to be smaller than images and SVG's are responsive and scale perfectly. These images can be animated and modified by CSS.
+
[ ] Images dimensions: ![medium] Set width
and height
attributes on <img>
if the final rendered image size is known.
Why:
+++If height and width are set, the space required for the image is reserved when the page is loaded. However, without these attributes, the browser does not know the size of the image, and cannot reserve the appropriate space to it. The effect will be that the page layout will change during loading (while the images load).
+
[ ] Avoid using Base64 images: ![medium] You could eventually convert tiny images to base64 but it's actually not the best practice.
+ +[ ] Lazy loading: ![medium] Offscreen images are loaded lazily (A noscript fallback is always provided).
+Why:
+++It will improve the response time of the current page and then avoid loading unnecessary images that the user may not need.
+
How:
+++ +⁃ Use Lighthouse to identify how many images are offscreen. +⁃ Use a JavaScript plugin like the following to lazyload your images. Make sure you target offscreen images only. +⁃ Also make sure to lazyload alternative images shown at mouseover or upon other user actions.
+
[ ] Responsive images: ![medium] Ensure to serve images that are close to your display size.
+Why:
+++Small devices don't need images bigger than their viewport. It's recommended to have multiple versions of one image on different sizes.
+
How:
+++ +⁃ Create different image sizes for the devices you want to target. +⁃ Use
+srcset
andpicture
to deliver multiple variants of each image.
[ ] JS Minification: ![high] All JavaScript files are minified, comments, white spaces and new lines are removed from production files (still valid if using HTTP/2).
+Why:
+++Removing all unnecessary spaces, comments and break will reduce the size of your JavaScript files and speed up your site's page load times and obviously lighten the download for your user.
+
How:
+++ +⁃ Use the tools suggested below to minify your files automatically before or during your build or your deployment.
+
[ ] No JavaScript inside: ![medium] (Only valid for website) Avoid having multiple JavaScript codes embedded in the middle of your body. Regroup your JavaScript code inside external files or eventually in the <head>
or at the end of your page (before </body>
).
Why:
+++Placing JavaScript embedded code directly in your
+<body>
can slow down your page because it loads while the DOM is being built. The best option is to use external files withasync
ordefer
to avoid blocking the DOM. Another option is to place some scripts inside your<head>
. Most of the time analytics code or small script that need to load before the DOM gets to main processing.
How:
+++ +Ensure that all your files are loaded using
+async
ordefer
and decide wisely the code that you will need to inject in your<head>
.
[ ] Non-blocking JavaScript: ![high] JavaScript files are loaded asynchronously using async
or deferred using defer
attribute.
<!-- Defer Attribute -->
+<script defer src="foo.js"></script>
+
+<!-- Async Attribute -->
+<script async src="foo.js"></script>
+
Why:
+++JavaScript blocks the normal parsing of the HTML document, so when the parser reaches a
+<script>
tag (particularly is inside the<head>
), it stops to fetch and run it. Addingasync
ordefer
are highly recommended if your scripts are placed in the top of your page but less valuable if just before your</body>
tag. But it's a good practice to always use these attributes to avoid any performance issue.
How:
+++ +⁃ Add
+async
(if the script don't rely on other scripts) ordefer
(if the script relies upon or relied upon by an async script) as an attribute to your script tag. +⁃ If you have small scripts, maybe use inline script place above async scripts.
[ ] Optimized and updated JS libraries: ![medium] All JavaScript libraries used in your project are necessary (prefer Vanilla JavaScript for simple functionalities), updated to their latest version and don't overwhelm your JavaScript with unnecessary methods.
+Why:
+++Most of the time, new versions come with optimization and security fix. You should use the most optimized code to speed up your project and ensure that you'll not slow down your website or app without outdated plugin.
+
How:
+++ +If your project use NPM packages, npm-check is a pretty interesting library to upgrade / update your libraries. +Greenkeeper can automatically look for your dependencies and suggest an update every time a new version is out.
+
[ ] Check dependencies size limit: ![low] Ensure to use wisely external libraries, most of the time, you can use a lighter library for a same functionality.
+Why:
+++You may be tempted to use one of the 745 000 packages you can find on npm, but you need to choose the best package for your needs. For example, MomentJS is an awesome library but with a lot of methods you may never use, that's why Day.js was created. It's just 2kB vs 16.4kB gz for Moment.
+
How:
+++ +Always compare and choose the best and lighter library for your needs. You can also use tools like npm trends to compare NPM package downloads counts or Bundlephobia to know the size of your dependencies.
+
[ ] JavaScript Profiling: ![medium] Check for performance problems in your JavaScript files (and CSS too).
+Why:
+++JavaScript complexity can slow down runtime performance. Identifying these possible issues are essential to offer the smoothest user experience.
+
How:
+++Use the Timeline tool in the Chrome Developer Tool to evaluate scripts events and found the one that may take too much time.
+
[ ] Use of Service Workers: ![medium] You are using Service Workers in your PWA to cache data or execute possible heavy tasks without impacting the user experience of your application.
+ +[ ] Your website is using HTTPS: ![high]
+Why:
+++HTTPS is not only for ecommerce websites, but for all websites that are exchanging data. Data shared by a user or data shared to an external entity. Modern browsers today limit functionalities for sites that are not secure. For example: geolocation, push notifications and service workers don't work if your instance is not using HTTPS. And today is much more easy to setup a project with an SSL certificate than it was before (and for free, thanks to Let's Encrypt).
+
📖 Enabling HTTPS Without Sacrificing Your Web Performance - Moz
+📖 HTTP versus HTTPS versus HTTP2 - The real story | Tune The Web
+[ ] Page weight < 1500 KB (ideally < 500 KB): ![high] Reduce the size of your page + resources as much as you can.
+Why:
+++Ideally you should try to target < 500 KB but the state of web shows that the median of Kilobytes is around 1500 KB (even on mobile). Depending on your target users, network connection, devices, it's important to reduce as much as possible your total Kilobytes to have the best user experience possible.
+
How:
+++ +⁃ All the rules inside the Front-End Performance Checklist will help you to reduce as much as possible your resources and your code.
+
[ ] Page load times < 3 seconds: ![high] Reduce as much as possible your page load times to quickly deliver your content to your users.
+Why:
+++Faster your website or app is, less you have probability of bounce increases, in other terms you have less chances to lose your user or future client. Enough researches on the subject prove that point.
+
How:
+++ +Use online tools like Page Speed Insight or WebPageTest to analyze what could be slowing you down and use the Front-End Performance Checklist to improve your load times.
+
[ ] Time To First Byte < 1.3 seconds: ![high] Reduce as much as you can the time your browser waits before receiving data.
+ +[ ] Cookie size: ![medium] If you are using cookies, be sure each cookie doesn't exceed 4096 bytes and your domain name doesn't have more than 20 cookies.
+Why:
+++Cookies are exchanged in the HTTP headers between web servers and browsers. It's important to keep the size of cookies as low as possible to minimize the impact on the user's response time.
+
How:
+++ +Eliminate unnecessary cookies.
+
[ ] Minimizing HTTP requests: ![high] Always ensure that every file requested are essential for your website or application.
+[ ] Use a CDN to deliver your assets: ![medium] Use a CDN to deliver faster your content over the world.
+[ ] Serve files from the same protocol: ![high] Avoid having your website serving files coming from source using HTTP on your website which is using HTTPS for example. If your website is using HTTPS, external files should come from the same protocol.
+[ ] Serve reachable files: ![high] Avoid requesting unreachable files (404).
+[ ] Set HTTP cache headers properly: ![high] Set HTTP headers to avoid expensive number of roundtrips between your browser and the server.
+[ ] GZIP / Brotli compression is enabled: ![high] Use a compression method such as Gzip or Brotli to reduce the size of your JavaScript files. With a smaller sizes file, users will be able to download the asset faster, resulting in improved performance.
+The Front-End Performance Checklist wants to also be available in other languages! Don't hesitate to submit your contribution!
+Doing these presentations gave me a different perspective and vision about the worldwide communities who organize meetups regularly. I discovered that there were an huge number of people who were looking for more and more content and wanted to participate in local communities.
+After initiating the Front-End Dev Mauritius community, I know how complicated it can be to find people willing to share their experiences about Front-End Development. And for some, such as those who recently have moved from another city or country, having a welcoming tech community is important to getting setting up. +I wanted to share with you some of the things I learned before, during, and after these meetups I participated in throughout Europe. And I want to encourage you to participate more in local events no matter where you are today.
+Knowing that I would be on "holidays" for a few weeks in France, Spain, and Portugal I decided to try contacting local groups in Barcelona, Madrid, Lisbon, Aveiro, and Porto. I sent messages directly to the founders of local groups using Meetup.com, or contacted them via Twitter when they had specified their account on their profile. But, as I was expecting, I didn’t receive a lot of replies at first.
+In Barcelona however, Bettina from Ignit, who managed the “Barcelona Front-End Development Meetup”, answered me really quickly. We decided, after some email exchanges and a phone call, to have a meetup on 14 March about my project.
+In Madrid, the “Front-end Developers Madrid” organizers never answered me. But Juan Macias, a teacher’s assistant at “Ironhack Madrid,” did everything to help me setup a talk, which I gave on 16 March.
+In Lisbon, Shannon Graybill from “Lisbon Le Wagon” showed a lot of interest in having me do a presentation. But we lost touch after we tried to call each other few times without setting a time. Besides, I decided not to present in Lisboa, but instead tried to do something in Porto (easier for me, as I was in Aveiro for two weeks). +Then in Porto I contacted Ricardo Mendes, who usually organizes “Porto Codes”. After few messages and emails, we decide to organize a talk on 5 April at Porto.io, at a coworking space in the middle of the city.
+ +One of the first rules I learned about giving a talk or a presentation was to “know your audience.” That is maybe the most challenging but nonetheless important rule you need to have in mind. +A few days before each talk, I went through all the profiles on Meetup, trying to know my future audience better. Unfortunately, most of the people don’t put their Twitter or Facebook account in their profiles. They don’t often answer some basic questions sent by the owner of the group when they subscribe, which makes it really hard for a speaker learn about the target audience of a meetup. +I sent a tweet to some people before the meetup in Barcelona, but I didn’t receive any responses. Next time 😉.
+Since I didn’t know my audience in advance, I then decided to ask about each person’s career just before I started my talk. I adapted my content and discourse depending on their responses and it seemed that my slides were understandable by any level.
+I’m not a fan of football (although my father is) — I never felt passionate about it. But that was something that would’ve been useful to think about before setting the Barcelona meetup’s date. Twenty-three peopole planned to come, but just…2 of them came. I discovered afterwards that “Barcelona — Chelsea” was probably one of the reasons why people didn’t come. +For me, it was an awesome time. I was able to focus more on specific questions asked by Jimmy from Los Angeles and Costa Rica and Marcela from Mexico (I also won’t forget the delicious pizza we ate after the meetup at Anauco).
+That might sound crazy, but printing my username on a tee-shirt was one of the things I’m happy I did. Some people may ask you how to contact you or may be too shy to do so. But with your username “on you,” it’s impossible not to find you on Internet (or forget who you are 😅)!
+Telling stories is not that hard. +Lots of talks I’ve heard in the past, from different people, seemed “empty,” without any soul. Doing a talk is much more for me than a simple exposition of facts or numbers or code. It’s about a story, how someone found a way to develop their application, how some new technologies can improve the way we work in our daily lives, and so on. +In my case, it was how a “simple” checklist changed the way I see the Front-End worldwide community, and the way that some people will work in the future.
+That is maybe one of the biggest lesson I wanted to share with you in this post: you don’t need to be the best or the expert to share what you know or what you’ve learned before. +Lot of beginners with less than a couple years of experience don’t feel confident sharing what they know with others, because they think they don’t know enough. +From my point of view, that’s the wrong belief. Whether you have experience or not, you always have something useful that can be shared with others. It’s as simple as that. And it’s something some people need to start believing once and for all.
+If your audience is used to sharing photos on Twitter or other social media, you’re lucky — you’ll have some photos of you to help you remember your talk or show the presentation you did. They might even come in handy if you want to write an article about it 😅. +But taking a group photo with all your attendees is a fun thing to plan before everyone runs out of the meetup. I failed on that point many times, and I was only able to take a picture in Porto with the two organisers, including Tim Lai.
+A photo took after most of the attendees already went home.
+This is another thing I missed, but I now know how useful it could’ve been. Having feedback on any work or talk can be really helpful when we try to improve ourselves and the way we present things. +In my next meetups, I’ll probably give attendees a bit.ly link redirecting to a Typeform quizz which I’ll ask them to fill out.
+And in case you didn’t read my article about how everything began, take a look at it here. +Putting it all together +Giving these talks in different cities and countries helped me learn how much can be shared and taught to an incredible number of people. During these last few years, while learning and sharing my vision of Front-End development, I wasn’t able to see how large the community of people wanting to become better actually was. +We can start with something really small, and that small thing can give us the opportunity to meet people and give them something they needed or were searching for.
+Now, let’s recap each point I went through:
+That’s it. In case you like my article and find it useful, here are some things you can do to show your support:
+When you start living outside your native country, creating worldwide links with others, you know that you can’t just “go back”. You can’t live ignoring the fact that being out of your comfort zone is the best thing that you can experience in life, more challenging when you live abroad. I spent 3 years in Brazil and these last two years in Mauritius. Thus I know that everything I learned from people around, I couldn’t learn if I was living in France.
+But today I’m facing a dilemma. I’m not sure which country / city I should to focus on my job researches. I need your help to decide where could be my next move…
+Canada was is on 12th position of the Top Expat Destinations in 2016, 16th in 2017 according to “Expat Insider”. With more than 35 000 000 habitants split on around 9 000 000 km2, Canada is worldwide known to be a multicultural nation and with sometimes long and cold winters.
+I went to Canada in October 2014, to visit Toronto and Montreal. I really loved it! Most of the people prefer Montreal, but in my case, I enjoyed more staying in Toronto. I have few friends who moved there so they will be able to give me some advices if I need some. Since 2015, I have been registered in the pool for the IEC Working Holidays visa. Unfortunately, until today, I hadn’t any luck… But I still have hope 🌤
+The International Mobility Program for Francophones could be also an option for me. And to apply for the Express Entry, I just need to pass my [IELTS exam}(https://www.ielts.org/) (on January the 20th) and have enough point to apply for.
+The website Numbeo helps to compare the cost of living of different cities in the world. It seems that the cost of living in Toronto is less than most of the cities I’m interested in although these datas are not 100% reliable.
+ +The kangorou’s country was on 7th position in the Top 10 of best countries Expat Insider 2016 and is now on 34th position in 2017.
+I never went to Australia, but all my friend who went there, tell me good things about it. The immigration process does not seems easy and because I am +30 years, I can’t apply for the Working Holidays Visa. I’m still waiting from the French government to expand the upper age of eligibility from 30 to 35 years old.
+According to Numbeo, Sydney has a cost of living a little higher than Melbourne.
+ +New Zealand was on 5th position for the Top 10 best countries by Expat Insider in 2016 and 6th for 2017.
+I don’t know why but I was always fascinated by that country. I read a lot of articles about the pros and cons, comments of people who complain about things which are better handled elsewhere. But let me tell you something, I learned one thing since I had lived in different countries. You can have an opinion about everything around, but you should learn to live with that. It doesn’t mean you need to accept everything, but you can’t be happy in a place where you are always criticising.
+Comparing two places, in the same country or in different country is in general a mistake you do in the first country you live… But the more you move, the more you’ll learn of how to enjoy where you are and skip details.
+The city of Auckland was the first to answer to my tweet asking about “Where I need to move”.
+Wellington followed the next day with two adorable tweets:
+Maybe the weather in Wellington is not as good as Auckland… But the weather can’t be the only thing to compare (I’m already missing Mauritius’ sun 😂).
+ +The USA was always on my TOP 1 choice (I went to NY 3 times) but it seems to be more and more complicated to get a job or a visa to go to the USA (Even if you have a project on Github with more than 23 000 likes 😅).
+I don’t completely leave that option away but today, it’s more part of a dream than a reality plan.
+I registered on the Green Card lottery for 2018… but I really don’t believe I can be so lucky…
+You may wonder: why the USA? It turns out that most of the people I admire are living in the USA. It seems to be easier to follow them being in the same country. It’s without counting on all conferences and meetups that are happening all over the country which I one day, I would like to be able to participate.
+But it’s probably because I’m looking for years to find a team of Developers, Web Designers and UX who can build innovative products together sharing their knowledge and having a similar vision.
+++I’m looking for years to find a team of Developers, Web Designers and UX who can build innovative products together sharing their knowledge and having a similar vision.
+
I just had that experience once: at Barefoot Proximity in Cincinnati, Ohio. Julie Tran, Creative Director and Micky Osterman, project manager gave me in 2014 an experience I could not forget. For more than one month, I’ve been working hand by hand creating a new brand website. Whereas I have much more experience today, what I tasted that month is how I would like to work with future teams.
+2018 should be an interesting year.
+In January, my IELTS exam will give me more chances to complete some immigration forms.
+In February, I’ll start sending my resume to some companies I perceive I can fit and by chance, it’ll become easier to decide which country I should focus on more.
+In May/June, I hope to be in the country which will give me the chance to continue creating products and websites, managing young developers and working with an awesome team of experts who see the future of the web!
]]>I’ve been working as a front-end developer since 2011, but I started to build websites in 2000. Since then, like us all, I’ve been trying to improve the quality of my code and deliver websites faster. Along the way, I’ve been managing developers from two different countries. That has helped me to produce a checklist a little different than what I’ve found on around the web over the years.
+While I was creating the checklist, I continuously had the book “The Checklist Manifesto: How to Get Things Right” by Atul Gawade in mind. That book has helped me build checklists for my work and personal life, and simplify things that sometimes seem too complex.
+If you are working alone or in a team, individually, remotely, or on-site, I wanted to share some advice on using the Front-End Checklist and the web application that goes with it. Perhaps I can convince you to integrate it into your development cycle.
+ +Every project is different. Before starting a new project, the whole team (i.e. the project managers, designers, developers, QA, etc.) need to agree on what the deliverables will be.
+To help you to decide, I created 3 different levels of priority: high, medium, and low. You don’t necessarily need to agree with those distinctions, but they may help order your tasks.
+The Front-End Checklist app was done to facilitate the creation of personalized checklists. Change some JSON files to your liking and you are ready to start!
+You shouldn’t check all these rules only at the end of a project. You know as well as I do how projects are at the very end! Too hectic. Most of the items of the Front-End Checklist can be considered at the beginning of your development. It’s up to you to decide. Make it clear to your team upfront what happens when.
+Who loves reading the docs? Not most of us, but it’s essential. If you want to understand the reasons for the rule, you can’t avoid reading up about them. The more you understand the why of each rule, the better developer you become.
+The Front-End Checklist app can facilitate your life as a developer. It’s a live checklist, so as you complete items your progress and grade are updated live. Everything is saved in localStorage so you can leave and come back as needed.
+The project is open source, so feel free to fork it and use it however you like. I’m working on making sure all the files are commented. I especially invite those interested in Pug to take a look at the views folder.
+We all dream of automation (or is it just me?). For now, the Front-End Checklist is just an interactive list, but some of the tasks can be automated in your workflow.
+Take a look at the gulpfile used to generate the project. All tasks are packages you can use with npm, webpack, etc.
+If you’re passionate about generating clean code and care about your code quality, you should be regularly testing your pages. It’s so easy to make mistakes and remove some essential code. Or, someone else on your team might have done it, but it’s your shared responsibilty to be catching things like that.
+The Front-End Checklist can generate beautiful reports you can send to a project manager or Quality Assurance team.
+Some people might look at such a long checklist and feel sick to their stomach. Going through such a list might cause anxiety and really not be any fun.
+But the Front-End Checklist is just a tool to help you deliver higher quality code. Code that affects all aspects of a project: the SEO, the user experience, the ROI, and ultimately the success of the project. A tool that can help across all those things might actually help reduce your anxiety and improve your health!
+The success the Front-End Checklist received in such a short time reminded me that a lot of people are really interested in finding ways to improve their work. But just because the tool exists doesn’t directly help with that. You also need to commit to using it.
+In a time where AI is taking over many manual tasks, quality is a must-have. Even if automation takes over a lot of our tasks, some level of quality will remain impossible to automate, and us front-end developers still have many long days to enjoy our jobs.
]]>Last month I launched two open source projects on GitHub. A few days later, my Front-End Checklist was showing more than 6,000 stars (17,000 as of writing). And I got 600 stars for my Resources-Front-End-Beginner project!
+It was unexpected for me to receive such support coming from so many people around the globe: USA, Brazil, China, Japan, France, Canada, Spain, Mauritius, Japan, Portugal... Even now, I still can’t believe how many pull requests I received with changes and corrections these last days.
+For so long I received gifts from the open source world. Now I felt it was finally time for me to give back everything I have learned, and to help others.
+As a professional Front-End manager, I spend my time teaching and encouraging others to learn and practice. I regularly share interesting content and useful tools on the Front-End Dev Mauritius group on Facebook. But I never planned that the Front-End Checklist will become a worldwide project.
+I’ve seen some Front-End checklists over the past year on the web:
+ +Some of them helped me years ago when I wanted to improve my Front-End knowledge, but most of them were just “not enough.”
+Two years ago, I decided to start writing my own checklist based on my experiences. That checklist became way more important when I started to manage Front-End teams in France and Mauritius. Based on questions and usual mistakes from the teams, the content kept improving.
+When I needed to teach someone how to become a better Front-End developer, I always had in mind that checklist that I started to work on. The document which started with a simple personal need became an ambitious tool for my team.
+Then I started to feel the need to share it with more people.
+A month ago I decided to put a first version on GitHub. And… at that moment, everything started to happen fast… really fast.
+On 18 October, I published the first version of my Front-End Checklist. I went to see all members of my team and I asked them to put a star 😀 on the repository. They don’t really have the habit to star projects on Github, I had to encourage them to do so 😂.
+A few hours later, watching an episode of Hawaii Five-O with my wife, I opened my GitHub repository on my iPad. I was shocked to find that in only few hours, I had already received 700 stars.
+ +I was not able to understand why and where these stars were coming from. (At that time, I didn’t know about the Insights > Traffic section on GitHub.)
+I hadn’t even published any tweet about the Github repository. The next day, I published on my Twitter account: just few likes and retweets about the checklist. Nothing that may explain, where everyone was coming from.
+I then started to validate pull requests and answer some logged issues. I was feeling so grateful for that unimaginable support. Even working daily with international websites, I forgot sometimes the power of Internet. (Or it’s maybe I’m living in a small island far from everything 😂.)
+Next day, I received on Twitter a message from Product Hunt:
+Without really taking time to think, I opened my Illustrator and designed a logo to put on the page. I kept it basic, inspired by the logo of Front-End Coders, a future NGO I’ll be launching soon officially.
+ +Since then, I received in less than one week 40 pull requests, was published on Codrops for my 2 lists in their Collective #359, on the Panda Weekly Newsletter #130 and #131, Hacker news, Reddit (multiple times), NewsCenter.io, La Ferme du Web and more.
+Translation in Japanese, Spanish, Chinese, Korean, Portuguese and Vietnamese were done in less than 2 weeks!
+ +The list is positioned first on Google for the words “Front-End Checklist”. Some landing pages on Github have the checklist on first position (Front-End Development, Checklist, Guidelines).
+I discovered more recently that the project was on top of the trending feed on GitHub with more than 6,000 stars in less than a week (on 27 October 2017).
+The Front-End Checklist is trending on Github!
+I’m a big fan of “Awesome”, the curated list of awesome lists created first by +Sindre Sorhus +. But some lists are colossal and I found myself sometimes struggling to find what I want. I’m not sure if it’s because the amount of links or the absence of information attached to each link.
+This is why I decided to add emoticons in my two lists. I usually don’t use them too often, but in that case I found interesting to add more of these to have more information about the content of my links.
+The Front-End Checklist use emoticons to add more informations for each rule +As mentionned in the introduction of the Front-End Checklist, I used:
+I also used 3 images (High, medium, low) to integrate different levels of priorities. I didn’t find any emoticon that could replace these images easily.
+The list of resources for Front-End Beginners also use emoticons to add some additional informations. +On my list of resources for Front-End Beginners, for example, I decided to indicate free and paid tutorials. It’s easier to have these type of informations before you click on any link. People can directly focus on what they prefer.
+I use daily applications like Cloud Outliner Pro and MindNode to create new lists for my personal and professional life (and Todoist). I can’t imagine doing a complex task without a set of items into a list.
+If you have something to share, share it on GitHub now! +When it comes to sharing documentation or code, today, there’s no other place I like more than Github. Last week I decided I needed to put my work in a place where people can easily access and participate.
+This kind of project is meant to be used and perfected by experiences and different points of view. Because Front-End development is always moving, evolving, it’s not always simple to stay on track on everything. Collaborative projects, where people can participate are for me the best way to have constantly updated tools.
+I regularly meet young developers and people who want to become Front-End developer. Even on my YouTube channel, I receive lot of questions and requests. The first advice I give to them is to start coding and put their work on Github. It’s a way for them to show their interests to their friends, a future recruiter and to the world.
+The Front-End Code Camp is an event workshop to better understand the process of web development. +Don’t hesitate, everything you do, related to coding and web, take time to present it correctly on an README file and click “push”!
+By the time I wrote this article I was already working on a small open-source web app... Today, you can already access the Front-End Checklist App online!
+Due to many requests, I’m already working on an NPM module which will probably be used by a future website. It was not in my initial plans but when I saw so many people asking for, I couldn’t refuse.
+I have much more to share! I’m working on other lists that may be as good as the Front-End Checklist… Well, I hope! 😃
]]>I cannot remember how many times it was hard for me to wake up in the morning. The snooze button was my best friend every morning, and I even hated when I was late to go somewhere. It was hard to believe that other ways could possibly exist when you work in my job area.
+++At that time, I believed only one possible way to live was possible.
+
As a Front-End Web Developer, these last years, sleeping 3–4 hours per night during a few successive days, drinking cups of coffee during the day (sometimes Redbull) was my ritual and my life. And I thought all developers life was close to that. To be the best, you need to go further, faster and perform better than others, and you cannot be restful, calm, have lot of leisure if you want to succeed…
+I was asked to move from France to Mauritius in October 2015, delaying my goal to move to North America, to help my company to grow up and to manage a Front-End team of 12 persons (today 20).
+I met my wife on that island, the most beautiful and Kind woman ever (Kajaal Dias). And you may imagine I was in the paradise…
+But in reality, it was far to be the paradise like most of my colleagues and friends may still imagine.
+At that point of my life, I was not feeling accomplished; I was not really happy for what I was doing and I was not living the life I always wanted.
+As most of the people, I was not able to take real actions and make changes to build something new and different.
+In October 2016, seeing web tutorials on Youtube, my eyes were attracted by a video title “My 20 Hour Day” by Travis Neilson on his DevTips channel. And that was probably the start of lots of changes in my life.
+It was the first time I heard about “polyphasic sleep”. A way to sleep less, but being in good health and more alert than sleeping successive 8 hours. At the beginning, I thought it was another fake experiment that may work for few people only. But my curiosity pushed me to dive in some advanced research. (Thanks to Damien Fauché and his french ebook: “How to sleep only 2h per day”)
+Finally, few days after, I decided to try the polyphasic sleep - Everyman 3.
+At the beginning it was hard and challenging but my motivation and dedication help me not to give up. Today, it has been 4 months that I’m still sleeping 3–4 hours at night and taking 2–3 naps during the day.
+My core sleeping time is between 10h30 pm to 2h30–3h00 am. I do my first nap at home before leaving for work at 7h am for 25 minutes, my second nap is at 1h pm during lunch time for 20 minutes (in my car) and the third one at home again at 6h30 pm for 25 minutes after working hours.
+It is not always simple to be regular, but it’s really essential to listen to your body. I remember sometimes at the beginning sleeping much more in the weekend because I missed some naps during the weekdays. I simply took attention to my body reactions and even you need to try hard at the beginning to create a new habit, your body can adapt if your are really aware of its needs.
+Today I am able to fall in sleep in less than 5 minutes (I slow down my breath, put myself in a stress-free position and not let my thoughts haunt me). That helps a lot when you need to do a 20 minutes nap.
+Some weeks after, I started to feel that my life can be different, I could do things differently and put a real step forward to my dreams and achieve more than I always wanted to do.
+Putting a step forward in life, is putting a step ahead of others. And to feel good with others, you need to feel good in your life. And it started with me being grateful…
+++Gratitude is the quality of being thankful and simply appreciate what we have, even in general we don’t want to see how lucky we are.
+
I started writing into “The Five Minute Journal”. It is not a journal like the others. It allows me to be grateful, mindful and plan which great things will happen during my day. I feel positive and happier when I use it.
+Starting my day with my journal, creating and tracking new habits were just the beginning of my journey.
+Sleeping less allowed me to have time… much more time (one more day in my week). And even I love my work and to be a programmer, I felt I gave maybe too much to my coding life and not to my personal life and personal growth. I needed to put a real daily routine, a way to equilibrate my life in all its aspects.
+After starting my Five Minute Journal, I discovered “The Miracle Morning” by Hal Elrod, reading articles and his book. That was exactly what I was looking for!
+Then I started to put a morning routine using my favorite Todo app (Todoist).
+S.A.V.E.R.S means Silence, Affirmations, Visualization, Exercises, Reading and Scribing. These 6 elements are part of my daily routine now and help me to start my day in the most positive way.
+Waking up at 2h30 am, I start my day with a glass of water and a personal recipe with lemon, water, cinnamon, cayenne, ginger, apple cider, honey and collagen (everything organic). It allows me to feel good for whatever I ate the day before or will eat during the day. That did a huge change for my stomach, and I never had any stomach problems or pain again. (Remember in Mauritius, most of the recipes are spicy).
+I brew my “Kick Ass” coffee from Kicking Horse Coffee with my beautiful Java Presse (I really love USA brands). I don’t really need coffee, but it’s more a personal pleasure for my morning ritual. (Sometimes I drink the Bulletproof Coffee by Dave Asprey with Coconut Oil and Ghee).
+ +For meditation I use the excellent app calm.com. It can take only 10 minutes sometimes more, but that practice in my life had a significant impact in my way I live the present and feel more peaceful. There are other useful apps like Headspace amongst others.
+I wrote some affirmations I read every morning and before to go bed. After I take some minutes to visualize what I want to achieve in my day, that helps me to keep focus.
+I use Day One for scribbing whatever I feel or have in mind during my day and recently move to Fields Notes for my Morning Pages (thanks to Loic Le Meur).
+I put Brain.fm for 15 minutes (with my headphones) and read at least for 15 minutes. I created a list of books on Evernote I want to read each week and month. I’m challenging myself with Goodreads to read 50 books in 2017… I am late already… :)
+I regularly undertake activities like coding, watching tutorials, design, social media updates, new projects depending on the day. It is normally between 1h to 1h30 hours in the morning and oneextra hour in the evening.
+Then when my wife wakes up, we go for a 20 minutes walk in the park near our apartment. Before I take my shower, 5 minutes of plank and 5 minutes of shaper, it’s enough for me to sweat and feel good.
+I add when I have 20 minutes free some Yoga exercises with the help of Daily Yoga. Otherwise I participate every Saturday morning to a session class.
+ +I take my cold shower hearing my favorite podcasts The School of Greatness by Lewis Howes, The 5 AM miracle by Jeff Sanders and The Tim Ferris Show by Tim Ferriss. Can’t leave home without hearing these guys!
+Since few weeks, I’m practicing Intermittent Fasting, so I don’t take breakfast but instead, I prepare a natural juice with cucumber, lemon, parsley, apple, carrot, wheat grass and with all others vegetables and fruits I find around.
+During my short trajet to work (10 minutes), I listen with my wife some best-selling nonfiction books using Blinkist. I really recommend you to take a premium account, it is worths every penny.
+Then I start my day at work with some other routines I may share in another article.
+(I use to track some new habits on my mini-book “Track your habits” by kikki.k and with the Coach.me app.)
+Experimenting lot of new things in the previous 4 months, give me the will to go further and do everything I can to achieve my goals and dreams.
+I know I’m still adjusting with my Morning Routine, but I can’t go back after all what I discovered, all people I meet that give me some mindfulness and clarity in the life. I’m so grateful for all of this.
+Nothing can stop me now to fulfill every single unique present moment of my life.
+And you, do you have a daily or morning routine?
+What you do daily to improve your life, achieve your goals and take actions to build the life you want?
]]>Un carnet de voyage ouvert et vide posé sur un vieux mappemonde marron. Entouré par une vieille loupe, de vieilles cartes postales, des lunettes et un appareil photo.\nPhoto by Dariusz Sankowski on Unsplash\nCe n’est que récemment que j’ai pris le temps de rassembler toutes les informations concernant mes précédents voyages, j’aurais préféré avoir pu le commencer avant. Aujourd’hui, pour beaucoup, les vols sont réservés en ligne: il est donc assez facile de retrouver la trace de ses voyages dans ses emails. Mais étant donné que dans mon cas, j’avais la volonté de lister tous mes voyages depuis 2003, et qu’à cette époque, la réservation en ligne n’était pas extrêmement courante, la tâche n’a pas été simple.
\nHeureusement pour moi, les photos (à l’aéroport ou de mon billet d’avion), les numérisation des pages de passeports (avec les tampons d’entrée et de sortie) m’ont permit de pouvoir lister les 22 vols en avion que j’ai effectués depuis 2003.
\nJe vous partage d’ailleurs un simple modèle de feuilles de données Google que j’ai utilisé pour répertorier mes voyages (vous pouvez le dupliquer et l’enregistrer dans votre propre Google Drive). Avoir un carnet de voyage / vol est indispensable et vous sauvera de nombreuses heures de recherche lorsque votre futur pays d’expatriation vous demandera où vous êtes allez vous promener ces dernières années. Souvent, pour une demande de résidence, on peut aussi vous demander vos voyages sur les 10 dernières années (c’est le cas pour les USA). Je vous conseille de vous y préparer.
\nVous pouvez aussi trouver un modèle de journal de voyages sur le site du Canada, à imprimer si vous le souhaitez.
\nNumériser ses documents régulièrement devrait être une habitude et une pratique enseignée à l’école! Depuis des années, j’ai l’habitude de numériser tous mes documents sur un espace de stockage en ligne comme Google Drive, totalement gratuit et simple à utiliser quel que soit votre âge. Vous pouvez de nos jours utiliser facilement votre téléphone pour la numérisation de n’importe quel document. Des applications gratuites comme Adobe Scan (que j’utilise), Microsoft Office Lens ou même Evernote Scannable uniquement pour iOS, vous permettent d’identifier le type de document et de le sauvegarder ou de le partager facilement.
\nPasseports (toutes les pages écrites), carte d’identité (recto-verso), justificatifs de domicile, factures, notes du baccalauréat, diplômes, certificats de travail, fiches de paies, billets d’avions, feuilles d’impôts, les documents se trouvant dans votre portefeuille (en cas de vol, cela peut s’avérer pratique)… Tous ces documents sont importants, et je dirais que même si vous ne vous expatrier pas ou plus, prendre l’habitude de stocker ces documents peuvent vous faciliter beaucoup la tâche pour de futures démarches administratives.
\nSi vous habitez en France et que vous avez un compte sur le site « Service-Public.fr » (si vous n’en avez pas, aller tout de suite en créer un!), vous avez une catégorie « Mes documents » vous permettant facilement de stocker des documents importants liés à votre état civil, un endroit en plus pour ne pas avoir à chercher ailleurs. Lors de votre l’enregistrement sur les Registres des Français établis hors de France, votre carte consulaire est automatiquement sauvegardée dans cette rubrique. Je pense que c’est le cas pour d’autres démarches également.
\n![Capture d'écran du site Service-Public.fr montrant la catégorie "Mes documents"](/images/articles/astuces-dexpat-pour-faciliter-demarches-administratives/service-public-capture.jpeg 'Capture d'écran du site Service-Public.fr montrant la catégorie "Mes documents"')
\nLe format PDF est un format électronique permettant le partage assez simple de documents. Souvent vous avez aussi la possibilité de télécharger des documents aux formats JPEG, PNG qui sont des formats d’images. Mais il est toujours plus simple, surtout pour celui qui reçoit les documents de recevoir les fichiers au format PDF. S’il n’est pas déjà installé sur votre appareil, vous pouvez utiliser le logiciel gratuit Acrobat Reader ou trouver la panoplie d’autres logiciels gratuits qui vous permettent de convertir un format image en PDF, d’y insérer une image, d’écrire dans le document…
\nIl m’arrive très souvent, au lieu d’imprimer des documents (et par faute d’imprimante), de les ouvrir dans un lecteur / éditeur de fichiers PDF et d’écrire sur les formulaires comme si je le faisais à la main. Une photo de ma signature importée dans ce document et me voilà avec un document entièrement rempli, que je peux facilement envoyer et sauvegarder sur mon ordinateur et en ligne.
\nLes quelques astuces que vous pouvez apprendre comme remplir un formulaire (s’il n’est pas déjà prêt à être rempli) ou ajouter une image (votre signature par exemple) vous seront souvent utiles et pourront vous faire gagner un temps précieux (en plus de contribuer à protéger la planète en imprimant moins)
\nDans la majorité de vos démarches, il vous sera demandé une photo au format d’identité. Et quoi de plus embêtant que de vous apercevoir que vous n’en avez pas pris avant d’accidentellement vous raser un côté de la tête (ne rigolez pas, cela peut arriver à tout le monde). Si vous prenez l’habitude de prendre des photos au format identité (sans sourire et sans chapeau s’il vous plaît), cela vous permettra deux choses:
\nVous n’avez pas besoin d’aller à chaque fois chez le photographe (sauf pour une demande de résidence permanente), mais tâchez de respecter les consignes pour éviter de voir votre dossier refusé à cause d’une photo floue ou de dimensions incorrectes.
\nPréparer tous vos documents pour une demande de permis de travail ou de visa étudiant c’est super! Mais pouvoir anticiper vos futures démarches c’est encore mieux. Et cela a été mon erreur très récemment: en plein processus de demande de résidence; j’ai la possibilité de faire valoir ma première année d’université et ainsi pouvoir peut-être avoir les points nécessaires pour une demande d’Entrée Express.
\nMais voilà, mon numéro d’étudiant est soigneusement rangé dans une pochette cartonnée en France et mes parents étant en vacances, ils n’ont donc pas la possibilité de m’envoyer mon identifiant. Je dois donc attendre pour pouvoir faire ma demande de relevé de notes, juste parce que je n’avais pas suffisamment anticipé ces démarches.
\nJeter un œil sur la liste des documents nécessaires pour de futures démarches peut s’avérer essentiel. Pour ceux qui ont habité dans d’autres pays comme moi, il faut considérer que certaines démarches prennent aussi plus de temps dans certains endroits. Par exemple, en France, faire une demande d’extrait judiciaire se fait en ligne, et vous recevez votre acte par la poste en moins de deux semaines (selon la destination bien sûr). A l’Île Maurice, cela peut prendre entre un à deux mois et vous devez avoir une personne sur place pour s’en occuper. Deux mois, c’est très long…
\nIl se peut que vous ayez beaucoup voyagé, ou que votre appartement ai pris feux un jour (je vous le souhaite pas) et que vous ayez perdu vos documents importants. Ne paniquez pas!
\nLes démarches administratives font parties de tout processus d’immigration, et la majorité des personnes savent cela. Il vous manque un document? Voyez un moyen de pouvoir en récupérer une copie: il y a toujours en règle générale une alternative ou possibilité de récupérer ou avoir accès à un document important. Ne vous mettez pas davantage de pression inutile et essayer de suivre les astuces que je vous partage. Je vous assure que vos démarches n’en seront que moins stressantes et plus simples à affronter.
", + "url": "https://thedaviddias.dev/fr/articles/astuces-dexpat-pour-faciliter-demarches-administratives", + "title": "Mes astuces d'expat pour faciliter vos démarches administratives", + "summary": "Toute préparation à une possible expatriation passe par une phase inévitable: celle de rassembler tous les documents requis pour avoir la possibilité d’accomplir son rêve. Pour vous faciliter cette phase et vous permettre de sereinement vous préparer, j’ai rassemblé toutes mes astuces et habitudes qui m’ont permis de vivre sereinement mes 3 expatriations.", + "image": "https://thedaviddias.dev/images/articles/astuces-dexpat-pour-faciliter-demarches-administratives/featured.jpg", + "date_modified": "2019-06-21T00:01:00.000Z", + "author": { + "name": "David Dias", + "url": "https://twitter.com/thedaviddias" + } + }, + { + "id": "https://thedaviddias.dev/fr/articles/9-reponses-questions-vous-vous-posez-toronto-canada", + "content_html": "Régulièrement, beaucoup de personnes me contactent pour me poser des questions sur le Canada et Toronto : parfois des jeunes qui souhaiterai s’expatrier pour la premiere fois, des couples qui souhaitent changer de vie. J’essaye autant que je peux de leur répondre avec ma petite expérience (bientôt un an) de vie dans la grande métropole.
\n\nQue vous viviez en France ou dans un pays francophone, les questions que j’ai rassemblé dans cet article sont sûrement celles que vous vous posez. Il n’est pas toujours évident de pouvoir dénouer le vrai du faux en ligne, car les expériences sont toutes différentes. Il se peut même que mes réponses ne soient pas parfaites mais elles sont des pistes qui je l’espère vous permettront d’y voir plus clair.
\nC’est LA question que vous verrez le plus un peu partout, sur les forums, dans les groupes de discussions Facebook. Et la réponse ne tiendra jamais en quelques lignes tellement le Canada offrent des possibilités pour légalement venir habiter ou déménager sur le sol nord américain. Entre le Programme Vacances Travail, le programme mobilité francophone, le visa d’affaire, le parrainage… Un petit tour sur la rubrique « Autres visas et procédures » peut être un bon début si vous voulez en savoir plus.
\nQuel que soit votre situation, vos compétences, il est presque certain qu’il existe un programme ou des démarches qui peuvent vous permettre de venir vous installer ici.
\nPour les plus jeunes, de manière générale, même s’il vous est possible de venir sans forcément avoir fait de longues études, j’ai de plus en plus tendance à fortement recommandé d’avoir un niveau Master, peu importe la filière (je vous recommande toutefois vous renseigner pour vous assurer que votre Master possède des équivalences au Canada). Le fait d’avoir un diplôme de niveau Master est un facteur qui vous favorisera toujours que ce soit pour habiter au Canada, aux États-Unis, en Nouvelle-Zélande…
\nSi vous décidez de faire une demande de résidence permanente, beaucoup d’éléments sont pris en compte pour vous attribuez un certain nombre de points, avoir des études supérieures est un plus à ne pas négliger sur le long terme.
\nBeaucoup d’entreprises, notamment dans le secteurs des services ou de l’informatique, ont recours au sponsorship. Cela peut être coûteux et long pour une entreprise, mais certains ont compris l’avantage d’avoir des employés aux expériences et provenances diverses.
\nLe programme mobilité francophone par lequel je suis venu au Canada est assez simple, peu coûteux et rapide (j’ai reçu mon visa de travail en 4 semaines environ). Travailler en étant sous visa du PVT est aussi une autre possibilité. J’entends parfois certaines personnes me dire que les employeurs n’aiment pas trop le PVT, je ne pourrais pas le confirmer ou le nier. Je pense simplement que si un employeur a besoin de main-d’oeuvre, il ne s’arrêtera pas à cela. C’est après à vous de le convaincre de vous embaucher.
\nChanger d’emploi tous les 2 ans et demi est assez courant au Canada. Cela n’est pas forcément vu ou synonyme d’instabilité professionnelle comme cela l’est parfois en France. Votre futur employeur n’a en général aucun moyen de savoir si vous avez été licencié ou si vous êtes parti de vous même.
\nIl faut aussi savoir que lorsqu’une entreprise établis votre contrat d’embauche, elle peut être amenée à vous demander le téléphone / contact de votre précédent responsable. Les vérifications existent, elles ne sont pas non plus trop poussées (ils ne demandent pas si vous êtes un gentil employé) mais simplement pour vérifier vos dires. Ne chercher donc pas à mentir à votre futur employeur, il y a de fortes chances qui le découvre.
\nLinkedIn. Ma première réponse est que quel que soit votre secteur, vous devez absolument avoir un profile sur LinkedIn (en anglais et actualisé). Comprendre comment les recruteurs utilisent les filtres de LinkedIn pour trouver de possible candidats est très important et vous permettra de vous différenciez.
\nMais ce n’est pas suffisant. Glassdoor, Indeed et Kijiji sont aussi des plate-formes que je vous recommande. Certaines entreprises ont souvent une rubrique sur leur site où elles postent leurs offres. Ne pas oublier aussi que les pages Facebook et comptes Twitter des entreprises qui vous intéressent peuvent aussi vous permettre de ne pas manquer une opportunité.
\nÊtre visible est d’une importance primordiale, montrer ce que vous savez faire permet de rassurer un futur employeur. Et c’est quelque chose que vous devez mettre en place bien avant de venir au Canada. Si vous faites partie d’une association, voyez si un journal en ligne ne serait pas intéressé de vous interviewer, si vous êtes expert dans un domaine, n’hésitez pas à écrire sur un site ou votre propre articles, pensez aussi à lancer une chaîne Youtube… Il existe de nombreux moyens aujourd’hui qui peuvent vous permettre d’être visible et donner un aperçu de vos compétences à un employeur.
\nC’est certainement l’une des plus grandes craintes, et la raison pour laquelle beaucoup de français choisissent la région du Québec, plutôt que le reste du Canada. Et très honnêtement, bien que ce soit une appréhension normale, elle n’a pas forcément lieu d’être. Oui, vous serez certainement amené à beaucoup douter de vous et de votre choix lorsque pendant les premières semaines, vous n’arriverez pas forcément à vous exprimer et à tout comprendre. Mais c’est un processus temporaire et tout à fait normal: tout le monde passe par cela et s’en sort.
\nJe ne peux que vous recommander de vous plonger dans la langue anglaise bien avant votre arrivée. Des années avant de venir habiter au Canada, je commençais déjà à visionner des séries en anglais (avec sous-titre d’abord en français puis après en anglais). Travaillant dans le web, tout le contenu que je suis amené à lire est le plus souvent en anglais. Aujourd’hui, avec Youtube et les podcasts, il ne manque pas de contenu en anglais pour pouvoir vous y plonger.
\nSi vous souhaitez venir un mois à Toronto et pouvoir améliorer votre anglais, je ne peux qu’hautement vous recommander le cours de « English for effective communication » de l’Université de Toronto. Oui, le cours est assez cher, mais vous serez forcer de parler pendant toutes vos matinées pendant 4 semaines. Vous vous sentirez beaucoup plus à l’aise après cela et vous apprendrez énormément sur d’autres cultures.
\nLe système français est je pense l’un des meilleurs au monde. Et l’on s’en rends bien compte en venant ici. Le système n’est pas mauvais et mon expérience est assez limité dans le domaine, heureusement. Basé sur mon expérience personnelle: la difficulté réside surtout pour trouver un médecin de famille, obligatoire si vous souhaitez voir certains spécialistes. A ce jour, je n’en ai toujours pas.
\nPar contre, ce qui est assez surprenant c’est que si vous avez une carte de santé appelé OHIP (qui est effective 3 mois après votre installation, à demander bien avant la fin des 3 premiers mois), vous sortez de chez le docteur sans rien payer. Dans mon cas, il m’est arrivé deux ou trois fois d’aller dans des walk-ing cliniques ouvertes quasiment tous les jours, et je n’ai jamais rien eu à régler. C’est un peu déroutant au début.
\nIl est indispensable toutefois d’avoir une mutuelle, car certains frais peuvent vite vous coûter cher. Selon votre profession, vous pourriez avoir la chance d’avoir une bonne mutuelle. Certaines même vous allouent une somme de 1000 dollars par an pour l’utiliser à des fins médicales et couvrir certaines dépenses non pris en charge par la carte de santé ou le plan de base de votre mutuelle. Ne dépensez pas tout dans de nouvelles jolies paires de lunettes Channel!
\nUn appartement d’environ 35m2 dans le centre de Toronto peut coûter aux alentours de 2200 dollars canadien. Un appartement dans la périphérie (la GTA), plus spacieux peut vous coûter mensuellement aux alentours de 1800 dollars. Les prix peuvent varier, bien sûr, mais c’est une moyenne basé sur le témoignages des gens que je rencontre.
\nIl ne faut pas commettre l’erreur de comparer avec les loyers en France (notamment Paris) ou même se dire qu’il est mieux de payer 1800 que 2200 car d’autres coûts doivent être pris en considération avant de faire son choix.
\nSi vous êtes deux et que vous prenez un abonnement mensuel pour le TTC (Toronto Transit Commission société qui gère les transports de la ville), il faudra rajouter environ 150 dollars par personne, ce qui fait un total de 300 dollars par mois. Il faut aussi prendre en considération votre possible lieu de travail, les frais liés à la dépense d’eau, le chauffage etc… Dans certains condominiums, vous n’aurez à payer que l’électricité, pas la climatisation et l’eau. Il est donc important d’avoir une liste de tous les frais possibles afin de déterminer le loyer acceptable dans votre situation.
\nPour donner un exemple de mon cas personnel, pour ce qui est de l’électricité, je suis amené à payer aux alentours de 60 dollars, 100 pour l’abonnement internet et environ 150 pour deux abonnements cellulaires avec données. Avec aux alentours de 200–250 dollars de dépenses, toutes les deux semaines pour des courses au supermarché, vous avez ici un exemple de dépenses pour un couple vivant dans le centre de Toronto.
\nCe qui est formidable à Toronto, c’est qu’il est très difficile d’y vivre et d’y avoir des préjugés. Bien sûr, il existe des personnes qui en ont, mais le fait que la ville de Toronto soit cosmopolite rends difficile d’y vivre si on possédent des a-priori sur les personnes et les nationalités..
\nJ’ai récemment organisé une petite fête entre amis, où sur 20 personnes, 14 nationalités étaient représentées: de quoi vous donner une idée de la pluri-culturalité qu’il peut y avoir à Toronto.
\nJ’ai tendance à trouver que les prix sont plus ou moins comparables à ceux que vous pouvez trouver en France. Certaines enseignes affichent des prix un peu plus élevés que d’autres. Loblaws est considéré par certains comme étant le plus cher mais la viande et les fruits de mer y sont de qualité. Vous avez Walmart, Costco, Sobeys sont d’autres enseignes répandues au Canada.
\nBien sûr, le fromage, le vin et autres spécialités françaises restent plus chers qu’en France, mais c’est le cas de tous les pays importateurs de produits français. Oui souvent, lorsque l’ont passe des vacances France, nos familles et amis ne comprennent pas forcément pourquoi certains repas se résument à plusieurs fromages, du pain et une bonne bouteille de vin rouge… On peut pas leur en vouloir, mais n’espérer pas qu’ils comprennent.
\nL’expatriation en règle générale a son lot de haut et bas (voir le schéma ), des phases qui peuvent durer plus ou moins longtemps selon les personnes et les événements. A chaque expatriation, les phases sont les mêmes. Il ne faut pas faire l’erreur de croire que plus on vit d’expatriations plus cela est facile, ça ne l’est pas.
\nEtant certainement dans la phase « acceptation » maintenant, il a fallu affronter des moments de doutes et de crise, personnelle et professionnelle. Pendant ces moments, le replis sur soi est souvent perçu comme une solution, mais je vous en décourage fortement. Le Canada étant un pays d’immigrants, vous pouvez être assuré qu’il existe juste à côté de vous une personne qui est passé par les mêmes phases et qui sera là pour vous aider.
\nLe plus gros défi, que j’ai personnellement dû affronter récemment concerne la manière dont certains Canadiens (attention toujours à ne pas généraliser) ont pour communiquer lorsqu’il y a des problèmes. J’ai été surpris, dans le cadre professionnel, de passer du tout va très bien à tout va très mal, en l’espace simplement de quelques semaines. A ma grande surprise, tous les francophones, immigrés à Toronto que je connais, m’ont témoigné être passer par là, souvent durant leur première année au Canada. C’est rassurant de savoir que mon cas n’est pas isolé.
\nIl existe un certain non-dit parfois, qui peut parfois être une bonne chose mais qui lorsque nous n’avons pas l’habitude peut aussi être déroutant. C’est quelque chose à avoir en tête, mais qui fait partie du jeu.
", + "url": "https://thedaviddias.dev/fr/articles/9-reponses-questions-vous-vous-posez-toronto-canada", + "title": "9 réponses aux questions que vous vous posez sur Toronto et le Canada", + "summary": "Régulièrement, beaucoup de personnes me contactent pour me poser des questions sur le Canada et Toronto : parfois des jeunes qui souhaiterai s’expatrier pour la premiere fois, des couples qui souhaitent changer de vie. J’essaye autant que je peux de leur répondre avec ma petite expérience (bientôt un an) de vie dans la grande métropole. ", + "image": "https://thedaviddias.dev/images/articles/9-reponses-questions-vous-vous-posez-toronto-canada/featured.jpg", + "date_modified": "2019-06-17T00:01:00.000Z", + "author": { + "name": "David Dias", + "url": "https://twitter.com/thedaviddias" + } + }, + { + "id": "https://thedaviddias.dev/fr/articles/comment-canada-devenu-maison-4-ans-tentatives", + "content_html": "C’est en 2014 que je pose les pieds au Canada pour la première fois. Depuis cette année, j’ai tenté de tout mettre en œuvre pour que ce pays, et spécialement la ville de Toronto, devienne ma maison. En juin 2018, après deux tentatives de PVT, un déménagement de deux ans à l’Île Maurice, je pose enfin les pieds au Canada avec ma femme et mon permis de travail en poche. Ce n’est que le début de l’aventure!
\n\nAucun parcours n’est jamais le même. Celui que j’ai eu au cours des dernières années n’a pas toujours été facile, faire face à l’inconnu de savoir si un jour je pourrais vivre au Canada… Mais je me suis toujours dis que si certains pouvaient y arriver, il n’y avais pas de raison que moi-même je ne puisse pas y arriver non plus.
\nTout a commencé à mon retour du Canada en 2014: j’ai passé beaucoup de temps à lire des articles, des livres et des témoignages de personnes en ligne ou même à discuter de l’expatriation au Canada avec des personnes que je rencontrais. Je souhaitais avoir les pour, les contre, tout ce qui pouvait m’aider à faire les choix qui me correspondent le plus. Malgré mes tentatives de PVT en 2015 et en 2016, je n’ai pas renoncé pour autant à trouver un moyen de commencer une nouvelle vie future au Canada.
\nÉtant développeur web (Front-End) depuis déjà plusieurs années, je n’étais pas sans ignorer que ma profession est en forte demande un peu partout dans le monde, le Canada ne dérogeais pas à la règle. Mais même avec cet avantage dans les mains, il faut parfois se rendre plus visible car au milieu de tous les potentiels candidats, il faut pouvoir savoir prouver sa valeur et montrer à son futur possible employeur l’avantage que l’on peut représenter face à un candidat Canadien.
\nC’est notamment grâce à un de mes projets informatique open-source (dont la fameuse Front-End Checklist) que j’ai pu me faire connaître. Grâce à ces plus de 33 000 étoiles (l’équivalent des j’aimes de Facebook), j’ai eu la chance de gagner une visibilité internationale qui a certainement joué pour pouvoir alors décrocher des entretiens dans plusieurs startups de Toronto avant même de venir sur place.
\nAprès avoir passé beaucoup temps sur LinkedIn et Glassdoor, j’ai eu la chance de pouvoir passer plusieurs entretiens via Skype, à chaque fois avec différentes personnes. Les 3-4 entretiens pour une même entreprise étant assez courants au Canada. Il faut s’y préparer et être relax: tous les recruteurs que j’ai pu rencontrer ont vraiment été supers et transparents. Celles-ci ont été des expériences différentes de celles que j’avais pu avoir par le passé.
\nC’est aussi en grande partie grâce à l’existence du programme mobilité francophone que j’ai pu assez facilement, ayant une proposition de travail, décrocher mon permis de travail et venir m’installer au Canada.
\nContrairement à un sponsorship, le programme mobilité francophone ne coûte qu’aux alentours de 230 dollars canadien pour l’employeur. Après avoir remplir un formulaire en ligne sur le portail de l’employeur canadien, il reçoit un numéro correspond au dossier et que vous aurez à indiquer dans les documents que vous devrez réunir et transmettre en ligne. Il faut noter que le Canada est vraiment exemplaire, de mon point de vue, en ce qui concerne leur le site officiel du gouvernement du Canada et tous les services à destination des futurs immigrés.
\nGrâce à mon expatriation au Brésil de 2006 à 2009 et puis celle de l’Île Maurice entre 2015 et 2018, j’ai vécu mon expatriation au Canada de manière plus sereine. Cela n’empêche cependant pas les remises en questions et les manques de repères, ce qui au début est toujours une phase quelque peu déroutante. La clé pour moi et ma femme a certainement été de ne pas trop regarder en arrière mais plutôt en avant. Trouver des solutions aux problèmes qui pouvaient possiblement se manifester et accepter le choix que nous avions fait de venir au Canada.
\nLa recherche d’un logement a été beaucoup plus compliquée que nous l’avions anticipé. L’absence d’un historique de crédit (un document permettant de montrer que vous remboursez correctement vos crédits et dettes) rends plus difficile pour de nouveaux arrivants d’être accepté par les bailleurs. D’autant plus, que nous recherchions dans le centre-ville de Toronto, là où la demande est très élevée et les places rares.
\nGrâce à l’aide d’une « broker » française: Nelly de Breze, après un mois et demi de Airbnb, nous avons finalement pu trouver un petit appartement (environ 35 mètres carrés) dans un condo à 15 minutes à pied de mon travail, et 5 minutes à pied du travail de ma femme. On ne pouvait vraiment pas rêver mieux.
\nUn an s’est presque écoulé depuis notre arrivée au Canada. Il n’y a pas un jour qui se passe où nous regrettons notre choix. Nous commençons à nous préparer pour notre demande de résidence via l’Entrée express. Une autre étape confirmant notre volonté de faire partie de ce merveilleux pays qui nous permet de connaître de nouvelles personnes chaque jour, souvent eux aussi expatriés au Canada!
", + "url": "https://thedaviddias.dev/fr/articles/comment-canada-devenu-maison-4-ans-tentatives", + "title": "Comment le Canada est devenu ma maison après 4 ans de tentatives?", + "summary": "C’est en 2014 que je pose les pieds au Canada pour la première fois. Depuis cette année, j’ai tenté de tout mettre en œuvre pour que ce pays, et spécialement la ville de Toronto, devienne ma maison. En juin 2018, après deux tentatives de PVT, un déménagement de deux ans à l’Île Maurice, je pose enfin les pieds au Canada avec ma femme et mon permis de travail en poche. Ce n’est que le début de l’aventure!", + "image": "https://thedaviddias.dev/images/articles/comment-canada-devenu-maison-4-ans-tentatives/featured.jpg", + "date_modified": "2019-04-02T00:01:00.000Z", + "author": { + "name": "David Dias", + "url": "https://twitter.com/thedaviddias" + } + }, + { + "id": "https://thedaviddias.dev/fr/articles/outils-astuces-rendre-accessible-performante-application-react", + "content_html": "L’accessibilité et la performance sont deux (vastes) sujets qui m’ont toujours passionné et qui sont devenus ces dernières années au centre de nombreux meetups et conférences auquels j’ai pu assister (petit clin d’oeil à A11yTO). Récemment expatrié au Canada, j’ai eu l’opportunité, dans ma nouvelle entreprise, de dédier mon temps à la refonte d’un project avec React et de devoir du coup, rendre cette application accessible et performante. (Youpi !)
\nQue vous connaissiez React ou pas, que vous utilisiez un framework JavaScript ou que vous développiez un simple site web en HTML et CSS, les outils et astuces que j’ai rassemblé dans cet article vous permettront de mieux appréhender ces problématiques et d’y répondre correctement dans vos projets (présents et futurs).
\nL’accessibilité (aussi appelée a11y) est un sujet qui a toujours été présent depuis le début du web.
\nEncore de nos jours, certaines entreprises et même développeurs continuent pourtant de penser que l’accessibilité est un sujet à part… tout comme certains pensaient il y a quelques années que l’UX (Expérience Utilisateur) n’était pas importante… Hum hum. Je vais prendre un exemple très simple pour vous démontrer l’importance de rendre un site internet ou une application web accessible.
\nImaginons que vous deviez en urgence acheter un billet d’avion ou de train de chez vous. Vous êtes sur votre PC, vous naviguez tranquillement sur le site d’achat quand soudain… votre souris fonctionnant sur batterie, n’a plus de jus (et non vous n’avez pas de piles de rechange ni même le câble USB pour la connecter à votre ordinateur, et votre iPhone 5s vient juste de s’éteindre). Imaginons donc que vous n’ayez plus que votre clavier pour finaliser votre achat. Et maintenant imaginez que le développeur n’ait absolument pas eu envie de tester la navigation par clavier. On peut même imaginer qu’il ait gentiment mis un outline: 0;
parce que le client n’aimait pas voir ce contour bleu autour des liens et boutons.
Je ne pense pas avoir besoin d’aller plus loin. J’ai beaucoup d’autre exemples aussi simple que celui-ci, qui ne mettent aucun doute sur le fait que l’accessibilité n’est pas une thématique limitée aux personnes avec des handicaps ou problèmes physiques. L’accessibilité est une thématique actuelle et universelle.
\nLa documentation de React consacre toute une page concernant l’accessibilité et vous y trouverez des éléments complémentaires au contenu de mon article.
\nQue vous veniez de commencer à développer votre application ou que vous deviez optimiser un projet existant, il y a certains outils que vous pouvez utiliser pour vous donner un aperçu du statut de votre projet.
\nQue ce soit l’accessibilité, la performance, le SEO ou tout autre domaine front-end, il est important de pouvoir mesurer régulièrement l’état de votre application avant d’y apporter des améliorations ou corrections. L’un des outils que j’utilise quotidiennement et que vous connaissez peut-être est Lighthouse.
\n\nBeaucoup mis en avant lors du dernier Google Dev Summit en novembre 2018, Lighthouse est l’outil que vous trouverez soit dans l’onglet « Audit » des outils de développement de Chrome, ou maintenant intégré dans la page résultat de Google PageSpeed Insights. Vous pouvez ainsi analyser n’importe quel site en utilisant n’importe quel navigateur.
\nWebhint est aussi un outil (open-source) qui a été créé par deux connaissances travaillant chez Microsoft. La documentation présente sur leur site est une des plus complètes que j’ai vu à ce jour, je vous recommande d’y jeter un œil.
\nVous pouvez soit utiliser leur site ou analyser n’importe quel site utilisant la ligne de commande. Webhint vous génèrera un rapport en HTML que vous pourrez partager avec vos équipes ou votre client.
\nDareboost (entreprise française) et Calibre sont d’autres services que j’utilise selon les projets et que vous pouvez tester gratuitement pour une durée ou un nombre de fois limité.
\nAu delà des outils précédents qui vous donnent un aperçu global de l’état de votre site internet ou de votre application web, il m’arrive de travailler avec des packages ou modules plus spécifiques que je couple avec mon workflow de travail. Mais avant de vous les présenter, voici par quoi vous devez commencer : activer l’inspecteur d’accessibilité.
\nDans Google Chrome:
\nDans Mozilla Firefox:
\nOuvrez la boîte à outils du développeur dans Firefox: depuis la version 63 de Firefox, vous devriez avoir un onglet « Accessibilité » comme sur la capture suivante. Il suffit de cliquer sur le bouton pour l’activer.\n
\nSi vous travaillez avec JavaScript depuis quelques temps, vous devez certainement utiliser ESLint dans votre workflow (vous pouvez lire cet article pour une complète présentation d’ESLint). ESLint-plugin-jsx-a11y, qui fonctionne avec ESLint) est un simple plugin qui va vous alerter dans le cas où votre code présente une erreur en terme d’accessibilité. Un simple outil mais efficace pour détecteur une erreur pendant le développement ou au moment du build.
\nRécemment sorti, stylelint-a11y, est à utiliser si bien sûr vous utiliser Stylelint de base. Le plugin vous alerte sur des possibles erreurs d’accessibilité dans votre CSS / Sass.\nSi par exemple, vous utilisez une taille de texte trop petite ou des display: none, stylelint-a11y vous le dira.
\nPermettre à un utilisateur d’accéder au contenu de votre website ou application en prenant en compte tous ces facteurs est important. Addy Osmani, ingénieur chez Google, a récemment publié un article sur le « Coût du JavaScript » et présente les problématiques et les solutions pour améliorer les performances de son site ou application.
\nreact-a11y est un autre module qui vous alerte de possibles problèmes d’accessibilité directement dans votre console.
\nreact-axe, similaire à react-a11y, mais est basé sur axe-core développé par Deque et qui permet aussi de prendre connaissance de possibles erreurs d’accessibilité. Vous pouvez aussi télécharger l’extension aXe qui rajoute un onglet à votre Google DevTools et vous donne la même chose que react-axe mais pour n’importe quel site.
\nMalheureusement, il serait trop long de vous parlez de tous les plugins que j’ai pu tester depuis le début de mon projet, et qui m’on permis de construire une application React plus accessible. Je vous partage toutefois une petite liste de plugins (régulièrement mis à jour) auxquels je vous recommande de jeter un œil :
\nBien sûr, après avoir testé et optimiser votre code à l’aide de ces outils, le seul vrai moyen de tester votre application et d’inviter des personnes avec des difficultés d’accessibilité différentes à la tester manuellement. Ils pourront ainsi vous faire des retours utiles basés sur leurs expériences et leur manière de naviguer le web.
\n\nAprès avoir traiter assez rapidement certains outils et astuces pour davantage d’accessibilité, nous allons nous pencher sur la performance.
\nQue vous viviez en France ou au Canada, de nos jours, les connexions internet sont ici et là extrêmement rapides. Mais Internet n’est pas limité à la France, ou même à l’Europe ou à l’Amérique. Internet est accessible de n’importe où dans le monde et à travers n’importe quel appareil (téléphone, smartphone, TV, montre, réfrigérateur, tableau blanc tactile…).
\nAméliorer les performances de son site ou plus particulièrement de son application React demande l’utilisation de certains outils que nous pouvons utiliser dès le début, au milieu ou même en fin de projet.
\nwebpack-bundle-analyser n’est pas un outil spécifique à React : c’est un plugin qui permet de visualiser le poids de vos modules et fichiers JavaScript présents dans vos bundles générés par Webpack. C’est un bon moyen de découvrir un potentiel module qui serait trop lourd. Il est tout à fait possible de l’utiliser dès que vous commencer à importer des packages pour votre projet.
\nSi webpack-bundle-analyser a mis un évidence certains modules qui pourraient impacter vos performances, vous pouvez alors utiliser Bundlephobia pour choisir d’autres modules équivalents (et plus léger). Un simple exemple avec la fameuse librairie Moment.js qui en général est utilisée à tort et à travers et qui pourrait très souvent être remplacée par d’autres librairies beaucoup plus petites.
\nAvant de choisir d’utiliser quelqueconque plugin, n’hésitez pas à vous demander si celui que vous souhaitez utiliser est vraiment utile, s’il n’existe pas d’autres alternatives ou une alternative plus légère…
\nLe module why-did-you-update peut vous permettre de vous alerter lorsque vos props sont re-rendu inutilement.
\n\nIl vous suffit d’installer le package dans votre projet et insérer ce bout de code dans votre app.js :
\nimport React from 'react'\n\nif (process.env.NODE_ENV !== 'production') {\n const { whyDidYouUpdate } = require('why-did-you-update')\n whyDidYouUpdate(React)\n}\n
Le « tree-shaking » est une technique qui permet, à la création de votre bundle, de ne pas inclure du « code mort » dont vous n’avez pas besoin. Vous vous retrouvez donc avec un bundle plus léger.
\nPour cela, vous devez utiliser :
\nUn exemple de bonne pratique à adopter :
\n// Au lieu de\nimport * from 'package'\n\n// Préférer cela\nimport { module } from 'package'\n
La mise en cache n’est pas forcément utile dans la phase de développement mais est indispensable pour une web application en production. Cela consiste tout simplement à rajouter un hash (série de chiffres et caractères) qui change à chaque fois que le contenu du fichier est modifié.
\nCe que beaucoup font consiste à créer au moins un bundle (à l’aide de Webpack) « main » avec votre propre code et un fichier « vendor » qui contiendrait tous les fichiers des libraries externes que vous seriez amener à utiliser. (en production, préférer l’utilisation de contenthash).
\nBien sûr dans cet article, je n’ai fait que gratter la surface (il y aurait beaucoup d’autres points à traiter), l’accessibilité et la performance web sont des spécialités à part entière qui demande beaucoup de pratique avant d’être appréhendé correctement. Mais aujourd’hui, plus que jamais, si vous n’en avez pas fait vos domaines d’expertises, ce sont définitivement des sujets qu’il est impossible d’ignorer. Le Web a toujours été un moyen de partage et de communication ouvert à tous, c’est à nous, architectes de faire en sorte que cela puisse continuer de la sorte.
\nJe vous laisse quelques ressources complémentaires qui vous permettront d’approfondir un peu plus ces 2 thématiques !
\nEt bientôt, j’aurais le plaisir de publier la « Front-End Accessibility Checklist » sur GitHub, restez attentif !
", + "url": "https://thedaviddias.dev/fr/articles/outils-astuces-rendre-accessible-performante-application-react", + "title": "Outils et astuces pour rendre accessible et performante son application React", + "summary": "L'accessibilité et la performance sont deux de mes sujets de prédilection. Je partage dans cet article mes astuces et conseils pour vous assurez une qualité minimum pour votre projet.", + "image": "https://thedaviddias.dev/images/articles/outils-astuces-rendre-accessible-performante-application-react/featured.jpg", + "date_modified": "2018-12-24T02:34:11.000Z", + "author": { + "name": "David Dias", + "url": "https://twitter.com/thedaviddias" + } + } + ] +} \ No newline at end of file diff --git a/apps/blog/public/rss/fr/feed.xml b/apps/blog/public/rss/fr/feed.xml new file mode 100644 index 00000000..e75749da --- /dev/null +++ b/apps/blog/public/rss/fr/feed.xml @@ -0,0 +1,253 @@ + +Un carnet de voyage ouvert et vide posé sur un vieux mappemonde marron. Entouré par une vieille loupe, de vieilles cartes postales, des lunettes et un appareil photo. +Photo by Dariusz Sankowski on Unsplash +Ce n’est que récemment que j’ai pris le temps de rassembler toutes les informations concernant mes précédents voyages, j’aurais préféré avoir pu le commencer avant. Aujourd’hui, pour beaucoup, les vols sont réservés en ligne: il est donc assez facile de retrouver la trace de ses voyages dans ses emails. Mais étant donné que dans mon cas, j’avais la volonté de lister tous mes voyages depuis 2003, et qu’à cette époque, la réservation en ligne n’était pas extrêmement courante, la tâche n’a pas été simple.
+Heureusement pour moi, les photos (à l’aéroport ou de mon billet d’avion), les numérisation des pages de passeports (avec les tampons d’entrée et de sortie) m’ont permit de pouvoir lister les 22 vols en avion que j’ai effectués depuis 2003.
+Je vous partage d’ailleurs un simple modèle de feuilles de données Google que j’ai utilisé pour répertorier mes voyages (vous pouvez le dupliquer et l’enregistrer dans votre propre Google Drive). Avoir un carnet de voyage / vol est indispensable et vous sauvera de nombreuses heures de recherche lorsque votre futur pays d’expatriation vous demandera où vous êtes allez vous promener ces dernières années. Souvent, pour une demande de résidence, on peut aussi vous demander vos voyages sur les 10 dernières années (c’est le cas pour les USA). Je vous conseille de vous y préparer.
+Vous pouvez aussi trouver un modèle de journal de voyages sur le site du Canada, à imprimer si vous le souhaitez.
+Numériser ses documents régulièrement devrait être une habitude et une pratique enseignée à l’école! Depuis des années, j’ai l’habitude de numériser tous mes documents sur un espace de stockage en ligne comme Google Drive, totalement gratuit et simple à utiliser quel que soit votre âge. Vous pouvez de nos jours utiliser facilement votre téléphone pour la numérisation de n’importe quel document. Des applications gratuites comme Adobe Scan (que j’utilise), Microsoft Office Lens ou même Evernote Scannable uniquement pour iOS, vous permettent d’identifier le type de document et de le sauvegarder ou de le partager facilement.
+Passeports (toutes les pages écrites), carte d’identité (recto-verso), justificatifs de domicile, factures, notes du baccalauréat, diplômes, certificats de travail, fiches de paies, billets d’avions, feuilles d’impôts, les documents se trouvant dans votre portefeuille (en cas de vol, cela peut s’avérer pratique)… Tous ces documents sont importants, et je dirais que même si vous ne vous expatrier pas ou plus, prendre l’habitude de stocker ces documents peuvent vous faciliter beaucoup la tâche pour de futures démarches administratives.
+Si vous habitez en France et que vous avez un compte sur le site « Service-Public.fr » (si vous n’en avez pas, aller tout de suite en créer un!), vous avez une catégorie « Mes documents » vous permettant facilement de stocker des documents importants liés à votre état civil, un endroit en plus pour ne pas avoir à chercher ailleurs. Lors de votre l’enregistrement sur les Registres des Français établis hors de France, votre carte consulaire est automatiquement sauvegardée dans cette rubrique. Je pense que c’est le cas pour d’autres démarches également.
+![Capture d'écran du site Service-Public.fr montrant la catégorie "Mes documents"](/images/articles/astuces-dexpat-pour-faciliter-demarches-administratives/service-public-capture.jpeg 'Capture d'écran du site Service-Public.fr montrant la catégorie "Mes documents"')
+Le format PDF est un format électronique permettant le partage assez simple de documents. Souvent vous avez aussi la possibilité de télécharger des documents aux formats JPEG, PNG qui sont des formats d’images. Mais il est toujours plus simple, surtout pour celui qui reçoit les documents de recevoir les fichiers au format PDF. S’il n’est pas déjà installé sur votre appareil, vous pouvez utiliser le logiciel gratuit Acrobat Reader ou trouver la panoplie d’autres logiciels gratuits qui vous permettent de convertir un format image en PDF, d’y insérer une image, d’écrire dans le document…
+Il m’arrive très souvent, au lieu d’imprimer des documents (et par faute d’imprimante), de les ouvrir dans un lecteur / éditeur de fichiers PDF et d’écrire sur les formulaires comme si je le faisais à la main. Une photo de ma signature importée dans ce document et me voilà avec un document entièrement rempli, que je peux facilement envoyer et sauvegarder sur mon ordinateur et en ligne.
+Les quelques astuces que vous pouvez apprendre comme remplir un formulaire (s’il n’est pas déjà prêt à être rempli) ou ajouter une image (votre signature par exemple) vous seront souvent utiles et pourront vous faire gagner un temps précieux (en plus de contribuer à protéger la planète en imprimant moins)
+Dans la majorité de vos démarches, il vous sera demandé une photo au format d’identité. Et quoi de plus embêtant que de vous apercevoir que vous n’en avez pas pris avant d’accidentellement vous raser un côté de la tête (ne rigolez pas, cela peut arriver à tout le monde). Si vous prenez l’habitude de prendre des photos au format identité (sans sourire et sans chapeau s’il vous plaît), cela vous permettra deux choses:
+Vous n’avez pas besoin d’aller à chaque fois chez le photographe (sauf pour une demande de résidence permanente), mais tâchez de respecter les consignes pour éviter de voir votre dossier refusé à cause d’une photo floue ou de dimensions incorrectes.
+Préparer tous vos documents pour une demande de permis de travail ou de visa étudiant c’est super! Mais pouvoir anticiper vos futures démarches c’est encore mieux. Et cela a été mon erreur très récemment: en plein processus de demande de résidence; j’ai la possibilité de faire valoir ma première année d’université et ainsi pouvoir peut-être avoir les points nécessaires pour une demande d’Entrée Express.
+Mais voilà, mon numéro d’étudiant est soigneusement rangé dans une pochette cartonnée en France et mes parents étant en vacances, ils n’ont donc pas la possibilité de m’envoyer mon identifiant. Je dois donc attendre pour pouvoir faire ma demande de relevé de notes, juste parce que je n’avais pas suffisamment anticipé ces démarches.
+Jeter un œil sur la liste des documents nécessaires pour de futures démarches peut s’avérer essentiel. Pour ceux qui ont habité dans d’autres pays comme moi, il faut considérer que certaines démarches prennent aussi plus de temps dans certains endroits. Par exemple, en France, faire une demande d’extrait judiciaire se fait en ligne, et vous recevez votre acte par la poste en moins de deux semaines (selon la destination bien sûr). A l’Île Maurice, cela peut prendre entre un à deux mois et vous devez avoir une personne sur place pour s’en occuper. Deux mois, c’est très long…
+Il se peut que vous ayez beaucoup voyagé, ou que votre appartement ai pris feux un jour (je vous le souhaite pas) et que vous ayez perdu vos documents importants. Ne paniquez pas!
+Les démarches administratives font parties de tout processus d’immigration, et la majorité des personnes savent cela. Il vous manque un document? Voyez un moyen de pouvoir en récupérer une copie: il y a toujours en règle générale une alternative ou possibilité de récupérer ou avoir accès à un document important. Ne vous mettez pas davantage de pression inutile et essayer de suivre les astuces que je vous partage. Je vous assure que vos démarches n’en seront que moins stressantes et plus simples à affronter.
]]>Que vous viviez en France ou dans un pays francophone, les questions que j’ai rassemblé dans cet article sont sûrement celles que vous vous posez. Il n’est pas toujours évident de pouvoir dénouer le vrai du faux en ligne, car les expériences sont toutes différentes. Il se peut même que mes réponses ne soient pas parfaites mais elles sont des pistes qui je l’espère vous permettront d’y voir plus clair.
+C’est LA question que vous verrez le plus un peu partout, sur les forums, dans les groupes de discussions Facebook. Et la réponse ne tiendra jamais en quelques lignes tellement le Canada offrent des possibilités pour légalement venir habiter ou déménager sur le sol nord américain. Entre le Programme Vacances Travail, le programme mobilité francophone, le visa d’affaire, le parrainage… Un petit tour sur la rubrique « Autres visas et procédures » peut être un bon début si vous voulez en savoir plus.
+Quel que soit votre situation, vos compétences, il est presque certain qu’il existe un programme ou des démarches qui peuvent vous permettre de venir vous installer ici.
+Pour les plus jeunes, de manière générale, même s’il vous est possible de venir sans forcément avoir fait de longues études, j’ai de plus en plus tendance à fortement recommandé d’avoir un niveau Master, peu importe la filière (je vous recommande toutefois vous renseigner pour vous assurer que votre Master possède des équivalences au Canada). Le fait d’avoir un diplôme de niveau Master est un facteur qui vous favorisera toujours que ce soit pour habiter au Canada, aux États-Unis, en Nouvelle-Zélande…
+Si vous décidez de faire une demande de résidence permanente, beaucoup d’éléments sont pris en compte pour vous attribuez un certain nombre de points, avoir des études supérieures est un plus à ne pas négliger sur le long terme.
+Beaucoup d’entreprises, notamment dans le secteurs des services ou de l’informatique, ont recours au sponsorship. Cela peut être coûteux et long pour une entreprise, mais certains ont compris l’avantage d’avoir des employés aux expériences et provenances diverses.
+Le programme mobilité francophone par lequel je suis venu au Canada est assez simple, peu coûteux et rapide (j’ai reçu mon visa de travail en 4 semaines environ). Travailler en étant sous visa du PVT est aussi une autre possibilité. J’entends parfois certaines personnes me dire que les employeurs n’aiment pas trop le PVT, je ne pourrais pas le confirmer ou le nier. Je pense simplement que si un employeur a besoin de main-d’oeuvre, il ne s’arrêtera pas à cela. C’est après à vous de le convaincre de vous embaucher.
+Changer d’emploi tous les 2 ans et demi est assez courant au Canada. Cela n’est pas forcément vu ou synonyme d’instabilité professionnelle comme cela l’est parfois en France. Votre futur employeur n’a en général aucun moyen de savoir si vous avez été licencié ou si vous êtes parti de vous même.
+Il faut aussi savoir que lorsqu’une entreprise établis votre contrat d’embauche, elle peut être amenée à vous demander le téléphone / contact de votre précédent responsable. Les vérifications existent, elles ne sont pas non plus trop poussées (ils ne demandent pas si vous êtes un gentil employé) mais simplement pour vérifier vos dires. Ne chercher donc pas à mentir à votre futur employeur, il y a de fortes chances qui le découvre.
+LinkedIn. Ma première réponse est que quel que soit votre secteur, vous devez absolument avoir un profile sur LinkedIn (en anglais et actualisé). Comprendre comment les recruteurs utilisent les filtres de LinkedIn pour trouver de possible candidats est très important et vous permettra de vous différenciez.
+Mais ce n’est pas suffisant. Glassdoor, Indeed et Kijiji sont aussi des plate-formes que je vous recommande. Certaines entreprises ont souvent une rubrique sur leur site où elles postent leurs offres. Ne pas oublier aussi que les pages Facebook et comptes Twitter des entreprises qui vous intéressent peuvent aussi vous permettre de ne pas manquer une opportunité.
+Être visible est d’une importance primordiale, montrer ce que vous savez faire permet de rassurer un futur employeur. Et c’est quelque chose que vous devez mettre en place bien avant de venir au Canada. Si vous faites partie d’une association, voyez si un journal en ligne ne serait pas intéressé de vous interviewer, si vous êtes expert dans un domaine, n’hésitez pas à écrire sur un site ou votre propre articles, pensez aussi à lancer une chaîne Youtube… Il existe de nombreux moyens aujourd’hui qui peuvent vous permettre d’être visible et donner un aperçu de vos compétences à un employeur.
+C’est certainement l’une des plus grandes craintes, et la raison pour laquelle beaucoup de français choisissent la région du Québec, plutôt que le reste du Canada. Et très honnêtement, bien que ce soit une appréhension normale, elle n’a pas forcément lieu d’être. Oui, vous serez certainement amené à beaucoup douter de vous et de votre choix lorsque pendant les premières semaines, vous n’arriverez pas forcément à vous exprimer et à tout comprendre. Mais c’est un processus temporaire et tout à fait normal: tout le monde passe par cela et s’en sort.
+Je ne peux que vous recommander de vous plonger dans la langue anglaise bien avant votre arrivée. Des années avant de venir habiter au Canada, je commençais déjà à visionner des séries en anglais (avec sous-titre d’abord en français puis après en anglais). Travaillant dans le web, tout le contenu que je suis amené à lire est le plus souvent en anglais. Aujourd’hui, avec Youtube et les podcasts, il ne manque pas de contenu en anglais pour pouvoir vous y plonger.
+Si vous souhaitez venir un mois à Toronto et pouvoir améliorer votre anglais, je ne peux qu’hautement vous recommander le cours de « English for effective communication » de l’Université de Toronto. Oui, le cours est assez cher, mais vous serez forcer de parler pendant toutes vos matinées pendant 4 semaines. Vous vous sentirez beaucoup plus à l’aise après cela et vous apprendrez énormément sur d’autres cultures.
+Le système français est je pense l’un des meilleurs au monde. Et l’on s’en rends bien compte en venant ici. Le système n’est pas mauvais et mon expérience est assez limité dans le domaine, heureusement. Basé sur mon expérience personnelle: la difficulté réside surtout pour trouver un médecin de famille, obligatoire si vous souhaitez voir certains spécialistes. A ce jour, je n’en ai toujours pas.
+Par contre, ce qui est assez surprenant c’est que si vous avez une carte de santé appelé OHIP (qui est effective 3 mois après votre installation, à demander bien avant la fin des 3 premiers mois), vous sortez de chez le docteur sans rien payer. Dans mon cas, il m’est arrivé deux ou trois fois d’aller dans des walk-ing cliniques ouvertes quasiment tous les jours, et je n’ai jamais rien eu à régler. C’est un peu déroutant au début.
+Il est indispensable toutefois d’avoir une mutuelle, car certains frais peuvent vite vous coûter cher. Selon votre profession, vous pourriez avoir la chance d’avoir une bonne mutuelle. Certaines même vous allouent une somme de 1000 dollars par an pour l’utiliser à des fins médicales et couvrir certaines dépenses non pris en charge par la carte de santé ou le plan de base de votre mutuelle. Ne dépensez pas tout dans de nouvelles jolies paires de lunettes Channel!
+Un appartement d’environ 35m2 dans le centre de Toronto peut coûter aux alentours de 2200 dollars canadien. Un appartement dans la périphérie (la GTA), plus spacieux peut vous coûter mensuellement aux alentours de 1800 dollars. Les prix peuvent varier, bien sûr, mais c’est une moyenne basé sur le témoignages des gens que je rencontre.
+Il ne faut pas commettre l’erreur de comparer avec les loyers en France (notamment Paris) ou même se dire qu’il est mieux de payer 1800 que 2200 car d’autres coûts doivent être pris en considération avant de faire son choix.
+Si vous êtes deux et que vous prenez un abonnement mensuel pour le TTC (Toronto Transit Commission société qui gère les transports de la ville), il faudra rajouter environ 150 dollars par personne, ce qui fait un total de 300 dollars par mois. Il faut aussi prendre en considération votre possible lieu de travail, les frais liés à la dépense d’eau, le chauffage etc… Dans certains condominiums, vous n’aurez à payer que l’électricité, pas la climatisation et l’eau. Il est donc important d’avoir une liste de tous les frais possibles afin de déterminer le loyer acceptable dans votre situation.
+Pour donner un exemple de mon cas personnel, pour ce qui est de l’électricité, je suis amené à payer aux alentours de 60 dollars, 100 pour l’abonnement internet et environ 150 pour deux abonnements cellulaires avec données. Avec aux alentours de 200–250 dollars de dépenses, toutes les deux semaines pour des courses au supermarché, vous avez ici un exemple de dépenses pour un couple vivant dans le centre de Toronto.
+Ce qui est formidable à Toronto, c’est qu’il est très difficile d’y vivre et d’y avoir des préjugés. Bien sûr, il existe des personnes qui en ont, mais le fait que la ville de Toronto soit cosmopolite rends difficile d’y vivre si on possédent des a-priori sur les personnes et les nationalités..
+J’ai récemment organisé une petite fête entre amis, où sur 20 personnes, 14 nationalités étaient représentées: de quoi vous donner une idée de la pluri-culturalité qu’il peut y avoir à Toronto.
+J’ai tendance à trouver que les prix sont plus ou moins comparables à ceux que vous pouvez trouver en France. Certaines enseignes affichent des prix un peu plus élevés que d’autres. Loblaws est considéré par certains comme étant le plus cher mais la viande et les fruits de mer y sont de qualité. Vous avez Walmart, Costco, Sobeys sont d’autres enseignes répandues au Canada.
+Bien sûr, le fromage, le vin et autres spécialités françaises restent plus chers qu’en France, mais c’est le cas de tous les pays importateurs de produits français. Oui souvent, lorsque l’ont passe des vacances France, nos familles et amis ne comprennent pas forcément pourquoi certains repas se résument à plusieurs fromages, du pain et une bonne bouteille de vin rouge… On peut pas leur en vouloir, mais n’espérer pas qu’ils comprennent.
+L’expatriation en règle générale a son lot de haut et bas (voir le schéma ), des phases qui peuvent durer plus ou moins longtemps selon les personnes et les événements. A chaque expatriation, les phases sont les mêmes. Il ne faut pas faire l’erreur de croire que plus on vit d’expatriations plus cela est facile, ça ne l’est pas.
+Etant certainement dans la phase « acceptation » maintenant, il a fallu affronter des moments de doutes et de crise, personnelle et professionnelle. Pendant ces moments, le replis sur soi est souvent perçu comme une solution, mais je vous en décourage fortement. Le Canada étant un pays d’immigrants, vous pouvez être assuré qu’il existe juste à côté de vous une personne qui est passé par les mêmes phases et qui sera là pour vous aider.
+Le plus gros défi, que j’ai personnellement dû affronter récemment concerne la manière dont certains Canadiens (attention toujours à ne pas généraliser) ont pour communiquer lorsqu’il y a des problèmes. J’ai été surpris, dans le cadre professionnel, de passer du tout va très bien à tout va très mal, en l’espace simplement de quelques semaines. A ma grande surprise, tous les francophones, immigrés à Toronto que je connais, m’ont témoigné être passer par là, souvent durant leur première année au Canada. C’est rassurant de savoir que mon cas n’est pas isolé.
+Il existe un certain non-dit parfois, qui peut parfois être une bonne chose mais qui lorsque nous n’avons pas l’habitude peut aussi être déroutant. C’est quelque chose à avoir en tête, mais qui fait partie du jeu.
]]>Aucun parcours n’est jamais le même. Celui que j’ai eu au cours des dernières années n’a pas toujours été facile, faire face à l’inconnu de savoir si un jour je pourrais vivre au Canada… Mais je me suis toujours dis que si certains pouvaient y arriver, il n’y avais pas de raison que moi-même je ne puisse pas y arriver non plus.
+Tout a commencé à mon retour du Canada en 2014: j’ai passé beaucoup de temps à lire des articles, des livres et des témoignages de personnes en ligne ou même à discuter de l’expatriation au Canada avec des personnes que je rencontrais. Je souhaitais avoir les pour, les contre, tout ce qui pouvait m’aider à faire les choix qui me correspondent le plus. Malgré mes tentatives de PVT en 2015 et en 2016, je n’ai pas renoncé pour autant à trouver un moyen de commencer une nouvelle vie future au Canada.
+Étant développeur web (Front-End) depuis déjà plusieurs années, je n’étais pas sans ignorer que ma profession est en forte demande un peu partout dans le monde, le Canada ne dérogeais pas à la règle. Mais même avec cet avantage dans les mains, il faut parfois se rendre plus visible car au milieu de tous les potentiels candidats, il faut pouvoir savoir prouver sa valeur et montrer à son futur possible employeur l’avantage que l’on peut représenter face à un candidat Canadien.
+C’est notamment grâce à un de mes projets informatique open-source (dont la fameuse Front-End Checklist) que j’ai pu me faire connaître. Grâce à ces plus de 33 000 étoiles (l’équivalent des j’aimes de Facebook), j’ai eu la chance de gagner une visibilité internationale qui a certainement joué pour pouvoir alors décrocher des entretiens dans plusieurs startups de Toronto avant même de venir sur place.
+Après avoir passé beaucoup temps sur LinkedIn et Glassdoor, j’ai eu la chance de pouvoir passer plusieurs entretiens via Skype, à chaque fois avec différentes personnes. Les 3-4 entretiens pour une même entreprise étant assez courants au Canada. Il faut s’y préparer et être relax: tous les recruteurs que j’ai pu rencontrer ont vraiment été supers et transparents. Celles-ci ont été des expériences différentes de celles que j’avais pu avoir par le passé.
+C’est aussi en grande partie grâce à l’existence du programme mobilité francophone que j’ai pu assez facilement, ayant une proposition de travail, décrocher mon permis de travail et venir m’installer au Canada.
+Contrairement à un sponsorship, le programme mobilité francophone ne coûte qu’aux alentours de 230 dollars canadien pour l’employeur. Après avoir remplir un formulaire en ligne sur le portail de l’employeur canadien, il reçoit un numéro correspond au dossier et que vous aurez à indiquer dans les documents que vous devrez réunir et transmettre en ligne. Il faut noter que le Canada est vraiment exemplaire, de mon point de vue, en ce qui concerne leur le site officiel du gouvernement du Canada et tous les services à destination des futurs immigrés.
+Grâce à mon expatriation au Brésil de 2006 à 2009 et puis celle de l’Île Maurice entre 2015 et 2018, j’ai vécu mon expatriation au Canada de manière plus sereine. Cela n’empêche cependant pas les remises en questions et les manques de repères, ce qui au début est toujours une phase quelque peu déroutante. La clé pour moi et ma femme a certainement été de ne pas trop regarder en arrière mais plutôt en avant. Trouver des solutions aux problèmes qui pouvaient possiblement se manifester et accepter le choix que nous avions fait de venir au Canada.
+La recherche d’un logement a été beaucoup plus compliquée que nous l’avions anticipé. L’absence d’un historique de crédit (un document permettant de montrer que vous remboursez correctement vos crédits et dettes) rends plus difficile pour de nouveaux arrivants d’être accepté par les bailleurs. D’autant plus, que nous recherchions dans le centre-ville de Toronto, là où la demande est très élevée et les places rares.
+Grâce à l’aide d’une « broker » française: Nelly de Breze, après un mois et demi de Airbnb, nous avons finalement pu trouver un petit appartement (environ 35 mètres carrés) dans un condo à 15 minutes à pied de mon travail, et 5 minutes à pied du travail de ma femme. On ne pouvait vraiment pas rêver mieux.
+Un an s’est presque écoulé depuis notre arrivée au Canada. Il n’y a pas un jour qui se passe où nous regrettons notre choix. Nous commençons à nous préparer pour notre demande de résidence via l’Entrée express. Une autre étape confirmant notre volonté de faire partie de ce merveilleux pays qui nous permet de connaître de nouvelles personnes chaque jour, souvent eux aussi expatriés au Canada!
]]>Que vous connaissiez React ou pas, que vous utilisiez un framework JavaScript ou que vous développiez un simple site web en HTML et CSS, les outils et astuces que j’ai rassemblé dans cet article vous permettront de mieux appréhender ces problématiques et d’y répondre correctement dans vos projets (présents et futurs).
+L’accessibilité (aussi appelée a11y) est un sujet qui a toujours été présent depuis le début du web.
+Encore de nos jours, certaines entreprises et même développeurs continuent pourtant de penser que l’accessibilité est un sujet à part… tout comme certains pensaient il y a quelques années que l’UX (Expérience Utilisateur) n’était pas importante… Hum hum. Je vais prendre un exemple très simple pour vous démontrer l’importance de rendre un site internet ou une application web accessible.
+Imaginons que vous deviez en urgence acheter un billet d’avion ou de train de chez vous. Vous êtes sur votre PC, vous naviguez tranquillement sur le site d’achat quand soudain… votre souris fonctionnant sur batterie, n’a plus de jus (et non vous n’avez pas de piles de rechange ni même le câble USB pour la connecter à votre ordinateur, et votre iPhone 5s vient juste de s’éteindre). Imaginons donc que vous n’ayez plus que votre clavier pour finaliser votre achat. Et maintenant imaginez que le développeur n’ait absolument pas eu envie de tester la navigation par clavier. On peut même imaginer qu’il ait gentiment mis un outline: 0;
parce que le client n’aimait pas voir ce contour bleu autour des liens et boutons.
Je ne pense pas avoir besoin d’aller plus loin. J’ai beaucoup d’autre exemples aussi simple que celui-ci, qui ne mettent aucun doute sur le fait que l’accessibilité n’est pas une thématique limitée aux personnes avec des handicaps ou problèmes physiques. L’accessibilité est une thématique actuelle et universelle.
+La documentation de React consacre toute une page concernant l’accessibilité et vous y trouverez des éléments complémentaires au contenu de mon article.
+Que vous veniez de commencer à développer votre application ou que vous deviez optimiser un projet existant, il y a certains outils que vous pouvez utiliser pour vous donner un aperçu du statut de votre projet.
+Que ce soit l’accessibilité, la performance, le SEO ou tout autre domaine front-end, il est important de pouvoir mesurer régulièrement l’état de votre application avant d’y apporter des améliorations ou corrections. L’un des outils que j’utilise quotidiennement et que vous connaissez peut-être est Lighthouse.
+ +Beaucoup mis en avant lors du dernier Google Dev Summit en novembre 2018, Lighthouse est l’outil que vous trouverez soit dans l’onglet « Audit » des outils de développement de Chrome, ou maintenant intégré dans la page résultat de Google PageSpeed Insights. Vous pouvez ainsi analyser n’importe quel site en utilisant n’importe quel navigateur.
+Webhint est aussi un outil (open-source) qui a été créé par deux connaissances travaillant chez Microsoft. La documentation présente sur leur site est une des plus complètes que j’ai vu à ce jour, je vous recommande d’y jeter un œil.
+Vous pouvez soit utiliser leur site ou analyser n’importe quel site utilisant la ligne de commande. Webhint vous génèrera un rapport en HTML que vous pourrez partager avec vos équipes ou votre client.
+Dareboost (entreprise française) et Calibre sont d’autres services que j’utilise selon les projets et que vous pouvez tester gratuitement pour une durée ou un nombre de fois limité.
+Au delà des outils précédents qui vous donnent un aperçu global de l’état de votre site internet ou de votre application web, il m’arrive de travailler avec des packages ou modules plus spécifiques que je couple avec mon workflow de travail. Mais avant de vous les présenter, voici par quoi vous devez commencer : activer l’inspecteur d’accessibilité.
+Dans Google Chrome:
+Dans Mozilla Firefox:
+Ouvrez la boîte à outils du développeur dans Firefox: depuis la version 63 de Firefox, vous devriez avoir un onglet « Accessibilité » comme sur la capture suivante. Il suffit de cliquer sur le bouton pour l’activer. +
+Si vous travaillez avec JavaScript depuis quelques temps, vous devez certainement utiliser ESLint dans votre workflow (vous pouvez lire cet article pour une complète présentation d’ESLint). ESLint-plugin-jsx-a11y, qui fonctionne avec ESLint) est un simple plugin qui va vous alerter dans le cas où votre code présente une erreur en terme d’accessibilité. Un simple outil mais efficace pour détecteur une erreur pendant le développement ou au moment du build.
+Récemment sorti, stylelint-a11y, est à utiliser si bien sûr vous utiliser Stylelint de base. Le plugin vous alerte sur des possibles erreurs d’accessibilité dans votre CSS / Sass. +Si par exemple, vous utilisez une taille de texte trop petite ou des display: none, stylelint-a11y vous le dira.
+Permettre à un utilisateur d’accéder au contenu de votre website ou application en prenant en compte tous ces facteurs est important. Addy Osmani, ingénieur chez Google, a récemment publié un article sur le « Coût du JavaScript » et présente les problématiques et les solutions pour améliorer les performances de son site ou application.
+react-a11y est un autre module qui vous alerte de possibles problèmes d’accessibilité directement dans votre console.
+react-axe, similaire à react-a11y, mais est basé sur axe-core développé par Deque et qui permet aussi de prendre connaissance de possibles erreurs d’accessibilité. Vous pouvez aussi télécharger l’extension aXe qui rajoute un onglet à votre Google DevTools et vous donne la même chose que react-axe mais pour n’importe quel site.
+Malheureusement, il serait trop long de vous parlez de tous les plugins que j’ai pu tester depuis le début de mon projet, et qui m’on permis de construire une application React plus accessible. Je vous partage toutefois une petite liste de plugins (régulièrement mis à jour) auxquels je vous recommande de jeter un œil :
+Bien sûr, après avoir testé et optimiser votre code à l’aide de ces outils, le seul vrai moyen de tester votre application et d’inviter des personnes avec des difficultés d’accessibilité différentes à la tester manuellement. Ils pourront ainsi vous faire des retours utiles basés sur leurs expériences et leur manière de naviguer le web.
+ +Après avoir traiter assez rapidement certains outils et astuces pour davantage d’accessibilité, nous allons nous pencher sur la performance.
+Que vous viviez en France ou au Canada, de nos jours, les connexions internet sont ici et là extrêmement rapides. Mais Internet n’est pas limité à la France, ou même à l’Europe ou à l’Amérique. Internet est accessible de n’importe où dans le monde et à travers n’importe quel appareil (téléphone, smartphone, TV, montre, réfrigérateur, tableau blanc tactile…).
+Améliorer les performances de son site ou plus particulièrement de son application React demande l’utilisation de certains outils que nous pouvons utiliser dès le début, au milieu ou même en fin de projet.
+webpack-bundle-analyser n’est pas un outil spécifique à React : c’est un plugin qui permet de visualiser le poids de vos modules et fichiers JavaScript présents dans vos bundles générés par Webpack. C’est un bon moyen de découvrir un potentiel module qui serait trop lourd. Il est tout à fait possible de l’utiliser dès que vous commencer à importer des packages pour votre projet.
+Si webpack-bundle-analyser a mis un évidence certains modules qui pourraient impacter vos performances, vous pouvez alors utiliser Bundlephobia pour choisir d’autres modules équivalents (et plus léger). Un simple exemple avec la fameuse librairie Moment.js qui en général est utilisée à tort et à travers et qui pourrait très souvent être remplacée par d’autres librairies beaucoup plus petites.
+Avant de choisir d’utiliser quelqueconque plugin, n’hésitez pas à vous demander si celui que vous souhaitez utiliser est vraiment utile, s’il n’existe pas d’autres alternatives ou une alternative plus légère…
+Le module why-did-you-update peut vous permettre de vous alerter lorsque vos props sont re-rendu inutilement.
+ +Il vous suffit d’installer le package dans votre projet et insérer ce bout de code dans votre app.js :
+import React from 'react'
+
+if (process.env.NODE_ENV !== 'production') {
+ const { whyDidYouUpdate } = require('why-did-you-update')
+ whyDidYouUpdate(React)
+}
+
Le « tree-shaking » est une technique qui permet, à la création de votre bundle, de ne pas inclure du « code mort » dont vous n’avez pas besoin. Vous vous retrouvez donc avec un bundle plus léger.
+Pour cela, vous devez utiliser :
+Un exemple de bonne pratique à adopter :
+// Au lieu de
+import * from 'package'
+
+// Préférer cela
+import { module } from 'package'
+
La mise en cache n’est pas forcément utile dans la phase de développement mais est indispensable pour une web application en production. Cela consiste tout simplement à rajouter un hash (série de chiffres et caractères) qui change à chaque fois que le contenu du fichier est modifié.
+Ce que beaucoup font consiste à créer au moins un bundle (à l’aide de Webpack) « main » avec votre propre code et un fichier « vendor » qui contiendrait tous les fichiers des libraries externes que vous seriez amener à utiliser. (en production, préférer l’utilisation de contenthash).
+Bien sûr dans cet article, je n’ai fait que gratter la surface (il y aurait beaucoup d’autres points à traiter), l’accessibilité et la performance web sont des spécialités à part entière qui demande beaucoup de pratique avant d’être appréhendé correctement. Mais aujourd’hui, plus que jamais, si vous n’en avez pas fait vos domaines d’expertises, ce sont définitivement des sujets qu’il est impossible d’ignorer. Le Web a toujours été un moyen de partage et de communication ouvert à tous, c’est à nous, architectes de faire en sorte que cela puisse continuer de la sorte.
+Je vous laisse quelques ressources complémentaires qui vous permettront d’approfondir un peu plus ces 2 thématiques !
+Et bientôt, j’aurais le plaisir de publier la « Front-End Accessibility Checklist » sur GitHub, restez attentif !
]]>