# notes

path: Omnivore/2024-02-18 - Git Tips 3- Really Large Repositories.md
sortable_path: Omnivore2024-02-18 - Git Tips 3- Really Large Repositories.md
title: Git Tips 3: Really Large Repositories
lead: # Git Tips 3: Really Large Repositories
checksum: 8e2d88c2db1d8d640e9f7a9fbe73009650865c23c566c8a8ed1b9c501e09f0a0
created: 2024-09-15 00:40:58.123814104+00:00
modified: 2024-09-22 22:40:13.395511052+00:00
body:
  # Git Tips 3: Really Large Repositories

  ## Highlights

  Git has had shallow clones. You could almost always run something like `git clone --depth=1` to get only the last commit and the objects it needs and then `git fetch --unshallow` to get the rest of the history later if needed. But it did break lots of things. You can't `blame`, you can't `log`, etc. 

  [source](https://omnivore.app/me/git-tips-3-really-large-repositories-18dbc867c96#d319f349-d2ea-4aed-9558-d67e4b708d74) 

  ---

  If you want to do a blobless clone, you just pass `--filter=blob:none` 

  [source](https://omnivore.app/me/git-tips-3-really-large-repositories-18dbc867c96#d296df77-d1f6-4a1b-99c6-9716824f2ee2) 

  ---

  If each of those subdirectories was huge, this could be annoying to manage. Instead, we can use sparse checkouts to filter the checkouts to just specified directories.

  To do this, we run `git sparse-checkout set [dir1] [dir2] ...` 

  [source](https://omnivore.app/me/git-tips-3-really-large-repositories-18dbc867c96#d92785cc-9dde-46f8-9764-af2195722289) 

  ---

  [Scalar](https://git-scm.com/docs/scalar?ref=blog.gitbutler.com) is mostly just used to clone with the correct defaults and config settings (blobless clone, no checkout by default, setting up maintenance properly, etc). 

  [source](https://omnivore.app/me/git-tips-3-really-large-repositories-18dbc867c96#96d0ab7b-1bf9-4b10-a08a-3d13c01bf56c) 

  ---

  ## Original

  ![Git Tips 3: Really Large Repositories](https://proxy-prod.omnivore-image-cache.app/0x0,siZlz2SPUjb175XwxdyoxP42iDGrPNR_i-XDguj36PyY/https://blog.gitbutler.com/content/images/size/w500/2024/02/CleanShot-2024-02-08-at-15.55.00@2x.png) 

   Did you know that Git can handle enormous monorepos like Windows? Let's take a look at how.

  In our third and final section of our [Git Tips series](https://blog.gitbutler.com/git-tips-and-tricks/), we're going to talk about how well Git now handles **very large** repositories and monorepos.

  Do you want to use vanilla Git today to manage a 300GB repo of 3.5M files receiving a push every 20 seconds from 4000 developers without problems? **Read on!**

  Here is our blog agenda. Our blogenda.

  * [Prefetching](#prefetching)
  * [Commit Graph](#commit-graph)
  * [Filesystem Monitor](#filesystem-monitor)
  * [Partial Cloning](#partial-cloning)
  * [Sparse Checkouts](#sparse-checkouts)
  * [Scalar](#scalar)

  ## First, Let's Thank Windows

  Before we get started though, the first thing we have to do is thank Microsoft for nearly all of this.

  In 2017, Microsoft successfully moved the Windows codebase to Git. Brian Harry wrote a really great blog post about it called [The Largest Git Repo on the Planet](https://devblogs.microsoft.com/bharry/the-largest-git-repo-on-the-planet/?ref=blog.gitbutler.com) that you should read if you're interested, but the size and scope of this repository is astounding.

  * **3.5M** files  
     * for reference, the Linux kernel is about 80k files, or 2% of that
  * **300GB** repository (vs \~4.5G Linux kernel)
  * **4,000** active developers
  * **8,421** pushes per day (on average)
  * **4,352** active topic branches

  In order to get that to work in any possible way, Microsoft had a lot of work to do. With vanilla Git at that time, a lot of commands (ie, `git status`) would take hours if they ever finished at all. They needed to make every command close to as fast as Source Depot was.

  The first solution to this problem was a new project called [VFS for Git](https://github.com/microsoft/VFSForGit?ref=blog.gitbutler.com) which was a virtual filesystem layer that did virtual checkouts and then requested files from a central server on demand.

  Eventually they moved more and more of the solutions they developed to the [Scalar](https://github.com/microsoft/scalar?ref=blog.gitbutler.com) project, which got rid of the virtualization layer, and would instead request file contents on checkout rather than on demand.

  Then they moved everything, piece by piece, into the [Microsoft Git](https://github.com/microsoft/git?ref=blog.gitbutler.com) fork and then finally every part of _that_ was moved into [core Git](https://git-scm.com/docs/scalar?ref=blog.gitbutler.com).

  So, as promised, if you want to use Git out of the box today to manage a 300GB repo of 3.5M files receiving a push every 20 seconds from 4000 developers, you can _100%_ do so.

  Let's get into everything they added for us.

  ## Prefetching

  So, in the last blog post I talked about how running `git maintenance` on a repository will run prefetching and maintain your commit graph every hour. Let's cover the first of those. What is "prefetching"?

  One of the things that the Windows devs found annoying was that fetches would often be slow because there was _so much_ activity going on all the time. Whenever they would fetch, they have to get _all_ the data since whatever the last time they manually fetched.

  So in the cronjob, they added something called "prefetching", which will essentially run a fetch command every hour automatically for you.

  However, it does not update your remote references like it normally would, instead it populates a special `refs/prefetch` area of your references.

  ![](https://proxy-prod.omnivore-image-cache.app/2000x1124,s5PGJtd3NbLb1LIeeq_YWX0VJY09p-71Zf0LwHdEMMsg/https://blog.gitbutler.com/content/images/2024/02/image-3.png)

  These references aren't shown normally, even if you run something like `git log --all`, they are quite hidden from you. However, they are used in the remote server negotiation, which means that if you have this turned on, whenever you go to fetch, your computer is never more than 1 hour of pushes behind, data-wise.

  Basically it makes manual fetches fast.

  ![](https://proxy-prod.omnivore-image-cache.app/1596x888,sb4Lbt2QVISxOxom_DRM5UVNMt1lEn4ZkkAm8Cl062eg/https://blog.gitbutler.com/content/images/2024/02/CleanShot-2024-02-08-at-14.41.05@2x.png)

  Joke stolen from Martin Woodward :)

  ## Commit Graph

  The other thing that `git maintenance` does every hour is update your commit graph data. What does that mean exactly?

  Well, essentially, it makes walking your commit history faster. 

  Instead of opening up one commit object at a time to see what it's parent is, then opening up that object to see what it's parent is, etc, the commit graph is basically an index of all that information that can be quickly read in one go. This makes things like `git log --graph` or `git branch --contains` much, much faster. For most repositories this probably isn't a horrible problem, but when you start getting into millions of commits, it makes a huge difference.

  Here's a benchmark of some log related subcommands run on the Linux kernel codebase with and without the commit graph data (from the [GitHub blog](https://github.blog/2022-08-30-gits-database-internals-ii-commit-history-queries/?ref=blog.gitbutler.com#the-commit-graph))

  | **Command**               | **Withoutcommit-graph** | **Withcommit-graph** |
  | ------------------------- | ----------------------- | -------------------- |
  | git rev-list v5.19        | 6.94s                   | 0.98s                |
  | git rev-list v5.0..v5.19  | 2.51s                   | 0.30s                |
  | git merge-base v5.0 v5.19 | 2.59s                   | 0.24s                |

  Here is a quick test that I did on the same Linux repo running `git log --graph --oneline` before and after writing a commit graph file.

  ![](https://proxy-prod.omnivore-image-cache.app/2000x1097,sTzCPFXduXYtUdrHYMfcLWmrV9-98RbuoCIsu4c0788Q/https://blog.gitbutler.com/content/images/2024/02/CleanShot-2024-02-08-at-14.52.44@2x.png)

  Again, if you have your `maintenance` cron jobs running, this is just magically done for you constantly, you don't really have to do anything explicit.

  ## Filesystem Monitor

  One of the things that VFS for Git needed was a filesystem monitor so that it could detect when virtual file contents were being requested and fetch them from a central server if needed. 

  This monitor was eventually utilized to speed up the `git status` command by updating the index based on filesystem modification events rather than running `stat` on every file, every time when you run it.

  While the former became unnecessary when the virtualization layer was abandoned, the latter was integrated into Git core. If you want much, much faster `git status` runs for very large working directories, the new Git filesystem monitor is a lifesaver.

  Basically you just set these config settings:

  ```routeros
  $ git config core.fsmonitor true

  ```

  What this will do is add a setting that the `git status` command will see when it runs, indicating that it should be using the [fsmonitor-daemon](https://git-scm.com/docs/git-fsmonitor--daemon?ref=blog.gitbutler.com). If this daemon is not running, it will start it.

  ![](https://proxy-prod.omnivore-image-cache.app/2000x1183,sygera0cWIyNzCE8oYQ1maIUOqQuX7xqwA9VIR7-NzmI/https://blog.gitbutler.com/content/images/2024/02/CleanShot-2024-02-08-at-14.59.36@2x.png)

  fsmonitor on Chromium makes status 20x faster

  So, the first time you run `status` after setting the config setting, it won't be much faster. But every time after that it will be massively faster.

  Again, there's nothing really to explicitly do after setting the value, things just get faster.

  ## Partial Cloning

  Another big issue with large repositories is clone size. As you probably know, by default Git will fetch everything. You don't even need to have a 300GB repository for this to be a problem. [Linux](https://github.com/torvalds/linux?ref=blog.gitbutler.com) is over 4GB, [Chromium](https://github.com/chromium/chromium?ref=blog.gitbutler.com) is over 20GB. A full Chromium clone can easily take an hour, even over a pretty fast connection.

  Now, for a long time ==Git has had shallow clones. You could almost always run something like== `==git== ==clone== ==--depth=========1==` ==to get only the last commit and the objects it needs and then== `==git== ==fetch== ==--unshallow==` ==to get the rest of the history later if needed. But it did break lots of things. You can't== `==blame==`==, you can't== `==log==`==, etc.==

  However, now Git has both blobless and treeless clones. So you do get the whole history (all of the commits), but you don't locally have the actual content. Let's ignore the treeless clones for now because it's not generally recommended, but the blobless clone is.

  ![](https://proxy-prod.omnivore-image-cache.app/2000x841,s5O63kDCQr5bDr0tglWOF_SKPPIWXMui5ZnxgxZCTCTU/https://blog.gitbutler.com/content/images/2024/02/CleanShot-2024-02-08-at-15.12.29@2x.png)

  A full clone of the Linux repository is 4.6G, or (for me) a 20 min process

  ==If you want to do a blobless clone, you just pass== `==--filter=====blob:none==`

  This will change the process a little. It will download all the commits and trees, which in the case of cloning the Linux kernel reduces 4.6G to 1.4G, and it will then do a _second_ object fetch for just the blobs that it needs in order to populate the checkout.

  ![](https://proxy-prod.omnivore-image-cache.app/2000x949,shA_6-2W1enm5l40LjCQ2iZ15sTdVVB7NVv3Qjmiv-O0/https://blog.gitbutler.com/content/images/2024/02/CleanShot-2024-02-08-at-15.14.06@2x.png)

  So you can see that instead of 20 minutes for the clone, it took me 4.5 minutes. You can also see that it did two fetches, one for the 1.4GBs of commit and tree data, and a second for the 243MB of files it needs for my local checkout.

  Now, there are downsides to this too. If you want to run a command that needs data that is not there, Git will have to go back to the server and request those objects. Luckily, it does this on-demand as it needs the objects, but it can make something like `blame` do a bunch of roundtrips.

  ![](https://proxy-prod.omnivore-image-cache.app/2000x1130,sQnjRfPMnR0N-snkIfA9TVQUCVl8twPR_ReMNUGlvA_o/https://blog.gitbutler.com/content/images/2024/02/CleanShot-2024-02-08-at-15.17.14@2x.png)

  round and round we go

  In the case of Linux, my tests showed that a normal file blame might take 4 seconds now takes 45 seconds. But that's only the first time you need to do it.

  ## Sparse Checkouts

  The last big thing to look at is not only useful for large repositories, but specifically for monorepos. That is, repositories that contain multiple projects in subdirectories.

  For example, at GitButler, our web services are in a monorepo, with each service we run on AWS in a subdirectory.

  ```reasonml
  ❯ tree -L 1
  .
  ├── Gemfile
  ├── Gemfile.lock
  ├── README.md
  ├── auth-proxy
  ├── butler
  ├── chain
  ├── check.rb
  ├── copilot
  └── git

  6 directories, 4 files
  ```

  ==If each of those subdirectories was huge, this could be annoying to manage. Instead, we can use sparse checkouts to filter the checkouts to just specified directories.==

  ==To do this, we run== `==git== ==sparse-checkout== ==set [dir1] [dir2] ...==`

  ```smali
  ❯ git sparse-checkout set butler copilot
  ❯ tree -L 1
  .
  ├── Gemfile
  ├── Gemfile.lock
  ├── README.md
  ├── butler
  ├── check.rb
  └── copilot
  ```

  So we still have the top level files, but only the two subdirectories that we specified. This is called "cone mode" and tends to be pretty fast. It also makes `status` and related commands faster because there are fewer files to care about. You can also however, set patterns rather than subdirectories, but it's more complicated.

  Here's a local test I did with the Chromium repository:

  ```sql
  ❯ time git status
  On branch main
  Your branch is up to date with 'origin/main'.

  nothing to commit, working tree clean

  real	0m5.931s

  ❯ git sparse-checkout set build base

  ❯ time git status
  On branch main
  Your branch is up to date with 'origin/main'.

  You are in a sparse checkout with 2% of tracked files present.

  nothing to commit, working tree clean

  real	0m0.386s
  ```

  This is without the `fsmonitor` stuff. You can see that `status` went from 6 seconds to run down to 0.3 seconds because there just aren't as many files.

  If you're using large monorepos, this means you can do a blobless clone to have a much smaller local database (you can also run `clone --no-checkout` to skip the initial checkout), then do a `sparse-checkout` to filter to the directories you need and everything is massively faster.

  ## Scalar

  Finally, Git now (since Oct 2022, Git 2.38) ships with an _alternative_ command line invocation that wraps some of this stuff.

  This command is called `scalar`. Just go ahead and type it:

  ```fsharp
  ❯ scalar
  usage: scalar [-C <directory>] [-c <key>=<value>] <command> [<options>]

  Commands:
  	clone
  	list
  	register
  	unregister
  	run
  	reconfigure
  	delete
  	help
  	version
  	diagnose
  ```

  ==[Scalar](https://git-scm.com/docs/scalar?ref=blog.gitbutler.com)== ==is mostly just used to clone with the correct defaults and config settings (blobless clone, no checkout by default, setting up maintenance properly, etc).== 

  If you are managing large repositories, cloning with this negates the need to run `git maintenance start` and send the `--no-checkout` command and remember `--filter=tree:0` and whatnot.

  Now you're ready to scale! ...-ar.

  ## Some More Reading

  If you want to read about all of this in great detail, GitHub has done an amazing job covering lots of this too:

  * [The Commit Graph](https://github.blog/2022-08-30-gits-database-internals-ii-commit-history-queries/?ref=blog.gitbutler.com#the-commit-graph)
  * [Sparse checkout](https://github.blog/2020-01-17-bring-your-monorepo-down-to-size-with-sparse-checkout/?ref=blog.gitbutler.com)
  * [Filesystem Monitor](https://github.blog/2022-06-29-improve-git-monorepo-performance-with-a-file-system-monitor/?ref=blog.gitbutler.com)
  * [Sparse index](https://github.blog/2021-11-10-make-your-monorepo-feel-small-with-gits-sparse-index/?ref=blog.gitbutler.com)
  * [Partial and shallow clone](https://github.blog/2020-12-21-get-up-to-speed-with-partial-clone-and-shallow-clone/?ref=blog.gitbutler.com)
  * [The Story of Scalar](https://github.blog/2022-10-13-the-story-of-scalar/?ref=blog.gitbutler.com)

  There is also a ton more fascinating information on this from [Derrick Stolee](https://stolee.dev/?ref=blog.gitbutler.com), who did a lot of work on these projects.

  Ok, that's it for our Git Tips series! Hope you enjoyed it and let us know in Discord if you have any questions or comments, or would like to see us do any other topics in Git land.

  Thanks!

  ### Subscribe to new posts.

raw_content:
  ---
  id: 0f04cdaa-c871-4ba1-a882-7aecf65a2505
  title: |
    Git Tips 3: Really Large Repositories
  status: ARCHIVED
  tags:
    - read-later
    - dotfiles
    - git
  date_added: 2024-02-18 11:02:27
  url_omnivore: |
    https://omnivore.app/me/git-tips-3-really-large-repositories-18dbc867c96
  url_original: |
    https://blog.gitbutler.com/git-tips-3-really-large-repositories/
  ---

  # Git Tips 3: Really Large Repositories

  ## Highlights

  Git has had shallow clones. You could almost always run something like `git clone --depth=1` to get only the last commit and the objects it needs and then `git fetch --unshallow` to get the rest of the history later if needed. But it did break lots of things. You can't `blame`, you can't `log`, etc. 

  [source](https://omnivore.app/me/git-tips-3-really-large-repositories-18dbc867c96#d319f349-d2ea-4aed-9558-d67e4b708d74) 

  ---

  If you want to do a blobless clone, you just pass `--filter=blob:none` 

  [source](https://omnivore.app/me/git-tips-3-really-large-repositories-18dbc867c96#d296df77-d1f6-4a1b-99c6-9716824f2ee2) 

  ---

  If each of those subdirectories was huge, this could be annoying to manage. Instead, we can use sparse checkouts to filter the checkouts to just specified directories.

  To do this, we run `git sparse-checkout set [dir1] [dir2] ...` 

  [source](https://omnivore.app/me/git-tips-3-really-large-repositories-18dbc867c96#d92785cc-9dde-46f8-9764-af2195722289) 

  ---

  [Scalar](https://git-scm.com/docs/scalar?ref=blog.gitbutler.com) is mostly just used to clone with the correct defaults and config settings (blobless clone, no checkout by default, setting up maintenance properly, etc). 

  [source](https://omnivore.app/me/git-tips-3-really-large-repositories-18dbc867c96#96d0ab7b-1bf9-4b10-a08a-3d13c01bf56c) 

  ---

  ## Original

  ![Git Tips 3: Really Large Repositories](https://proxy-prod.omnivore-image-cache.app/0x0,siZlz2SPUjb175XwxdyoxP42iDGrPNR_i-XDguj36PyY/https://blog.gitbutler.com/content/images/size/w500/2024/02/CleanShot-2024-02-08-at-15.55.00@2x.png) 

   Did you know that Git can handle enormous monorepos like Windows? Let's take a look at how.

  In our third and final section of our [Git Tips series](https://blog.gitbutler.com/git-tips-and-tricks/), we're going to talk about how well Git now handles **very large** repositories and monorepos.

  Do you want to use vanilla Git today to manage a 300GB repo of 3.5M files receiving a push every 20 seconds from 4000 developers without problems? **Read on!**

  Here is our blog agenda. Our blogenda.

  * [Prefetching](#prefetching)
  * [Commit Graph](#commit-graph)
  * [Filesystem Monitor](#filesystem-monitor)
  * [Partial Cloning](#partial-cloning)
  * [Sparse Checkouts](#sparse-checkouts)
  * [Scalar](#scalar)

  ## First, Let's Thank Windows

  Before we get started though, the first thing we have to do is thank Microsoft for nearly all of this.

  In 2017, Microsoft successfully moved the Windows codebase to Git. Brian Harry wrote a really great blog post about it called [The Largest Git Repo on the Planet](https://devblogs.microsoft.com/bharry/the-largest-git-repo-on-the-planet/?ref=blog.gitbutler.com) that you should read if you're interested, but the size and scope of this repository is astounding.

  * **3.5M** files  
     * for reference, the Linux kernel is about 80k files, or 2% of that
  * **300GB** repository (vs \~4.5G Linux kernel)
  * **4,000** active developers
  * **8,421** pushes per day (on average)
  * **4,352** active topic branches

  In order to get that to work in any possible way, Microsoft had a lot of work to do. With vanilla Git at that time, a lot of commands (ie, `git status`) would take hours if they ever finished at all. They needed to make every command close to as fast as Source Depot was.

  The first solution to this problem was a new project called [VFS for Git](https://github.com/microsoft/VFSForGit?ref=blog.gitbutler.com) which was a virtual filesystem layer that did virtual checkouts and then requested files from a central server on demand.

  Eventually they moved more and more of the solutions they developed to the [Scalar](https://github.com/microsoft/scalar?ref=blog.gitbutler.com) project, which got rid of the virtualization layer, and would instead request file contents on checkout rather than on demand.

  Then they moved everything, piece by piece, into the [Microsoft Git](https://github.com/microsoft/git?ref=blog.gitbutler.com) fork and then finally every part of _that_ was moved into [core Git](https://git-scm.com/docs/scalar?ref=blog.gitbutler.com).

  So, as promised, if you want to use Git out of the box today to manage a 300GB repo of 3.5M files receiving a push every 20 seconds from 4000 developers, you can _100%_ do so.

  Let's get into everything they added for us.

  ## Prefetching

  So, in the last blog post I talked about how running `git maintenance` on a repository will run prefetching and maintain your commit graph every hour. Let's cover the first of those. What is "prefetching"?

  One of the things that the Windows devs found annoying was that fetches would often be slow because there was _so much_ activity going on all the time. Whenever they would fetch, they have to get _all_ the data since whatever the last time they manually fetched.

  So in the cronjob, they added something called "prefetching", which will essentially run a fetch command every hour automatically for you.

  However, it does not update your remote references like it normally would, instead it populates a special `refs/prefetch` area of your references.

  ![](https://proxy-prod.omnivore-image-cache.app/2000x1124,s5PGJtd3NbLb1LIeeq_YWX0VJY09p-71Zf0LwHdEMMsg/https://blog.gitbutler.com/content/images/2024/02/image-3.png)

  These references aren't shown normally, even if you run something like `git log --all`, they are quite hidden from you. However, they are used in the remote server negotiation, which means that if you have this turned on, whenever you go to fetch, your computer is never more than 1 hour of pushes behind, data-wise.

  Basically it makes manual fetches fast.

  ![](https://proxy-prod.omnivore-image-cache.app/1596x888,sb4Lbt2QVISxOxom_DRM5UVNMt1lEn4ZkkAm8Cl062eg/https://blog.gitbutler.com/content/images/2024/02/CleanShot-2024-02-08-at-14.41.05@2x.png)

  Joke stolen from Martin Woodward :)

  ## Commit Graph

  The other thing that `git maintenance` does every hour is update your commit graph data. What does that mean exactly?

  Well, essentially, it makes walking your commit history faster. 

  Instead of opening up one commit object at a time to see what it's parent is, then opening up that object to see what it's parent is, etc, the commit graph is basically an index of all that information that can be quickly read in one go. This makes things like `git log --graph` or `git branch --contains` much, much faster. For most repositories this probably isn't a horrible problem, but when you start getting into millions of commits, it makes a huge difference.

  Here's a benchmark of some log related subcommands run on the Linux kernel codebase with and without the commit graph data (from the [GitHub blog](https://github.blog/2022-08-30-gits-database-internals-ii-commit-history-queries/?ref=blog.gitbutler.com#the-commit-graph))

  | **Command**               | **Withoutcommit-graph** | **Withcommit-graph** |
  | ------------------------- | ----------------------- | -------------------- |
  | git rev-list v5.19        | 6.94s                   | 0.98s                |
  | git rev-list v5.0..v5.19  | 2.51s                   | 0.30s                |
  | git merge-base v5.0 v5.19 | 2.59s                   | 0.24s                |

  Here is a quick test that I did on the same Linux repo running `git log --graph --oneline` before and after writing a commit graph file.

  ![](https://proxy-prod.omnivore-image-cache.app/2000x1097,sTzCPFXduXYtUdrHYMfcLWmrV9-98RbuoCIsu4c0788Q/https://blog.gitbutler.com/content/images/2024/02/CleanShot-2024-02-08-at-14.52.44@2x.png)

  Again, if you have your `maintenance` cron jobs running, this is just magically done for you constantly, you don't really have to do anything explicit.

  ## Filesystem Monitor

  One of the things that VFS for Git needed was a filesystem monitor so that it could detect when virtual file contents were being requested and fetch them from a central server if needed. 

  This monitor was eventually utilized to speed up the `git status` command by updating the index based on filesystem modification events rather than running `stat` on every file, every time when you run it.

  While the former became unnecessary when the virtualization layer was abandoned, the latter was integrated into Git core. If you want much, much faster `git status` runs for very large working directories, the new Git filesystem monitor is a lifesaver.

  Basically you just set these config settings:

  ```routeros
  $ git config core.fsmonitor true

  ```

  What this will do is add a setting that the `git status` command will see when it runs, indicating that it should be using the [fsmonitor-daemon](https://git-scm.com/docs/git-fsmonitor--daemon?ref=blog.gitbutler.com). If this daemon is not running, it will start it.

  ![](https://proxy-prod.omnivore-image-cache.app/2000x1183,sygera0cWIyNzCE8oYQ1maIUOqQuX7xqwA9VIR7-NzmI/https://blog.gitbutler.com/content/images/2024/02/CleanShot-2024-02-08-at-14.59.36@2x.png)

  fsmonitor on Chromium makes status 20x faster

  So, the first time you run `status` after setting the config setting, it won't be much faster. But every time after that it will be massively faster.

  Again, there's nothing really to explicitly do after setting the value, things just get faster.

  ## Partial Cloning

  Another big issue with large repositories is clone size. As you probably know, by default Git will fetch everything. You don't even need to have a 300GB repository for this to be a problem. [Linux](https://github.com/torvalds/linux?ref=blog.gitbutler.com) is over 4GB, [Chromium](https://github.com/chromium/chromium?ref=blog.gitbutler.com) is over 20GB. A full Chromium clone can easily take an hour, even over a pretty fast connection.

  Now, for a long time ==Git has had shallow clones. You could almost always run something like== `==git== ==clone== ==--depth=========1==` ==to get only the last commit and the objects it needs and then== `==git== ==fetch== ==--unshallow==` ==to get the rest of the history later if needed. But it did break lots of things. You can't== `==blame==`==, you can't== `==log==`==, etc.==

  However, now Git has both blobless and treeless clones. So you do get the whole history (all of the commits), but you don't locally have the actual content. Let's ignore the treeless clones for now because it's not generally recommended, but the blobless clone is.

  ![](https://proxy-prod.omnivore-image-cache.app/2000x841,s5O63kDCQr5bDr0tglWOF_SKPPIWXMui5ZnxgxZCTCTU/https://blog.gitbutler.com/content/images/2024/02/CleanShot-2024-02-08-at-15.12.29@2x.png)

  A full clone of the Linux repository is 4.6G, or (for me) a 20 min process

  ==If you want to do a blobless clone, you just pass== `==--filter=====blob:none==`

  This will change the process a little. It will download all the commits and trees, which in the case of cloning the Linux kernel reduces 4.6G to 1.4G, and it will then do a _second_ object fetch for just the blobs that it needs in order to populate the checkout.

  ![](https://proxy-prod.omnivore-image-cache.app/2000x949,shA_6-2W1enm5l40LjCQ2iZ15sTdVVB7NVv3Qjmiv-O0/https://blog.gitbutler.com/content/images/2024/02/CleanShot-2024-02-08-at-15.14.06@2x.png)

  So you can see that instead of 20 minutes for the clone, it took me 4.5 minutes. You can also see that it did two fetches, one for the 1.4GBs of commit and tree data, and a second for the 243MB of files it needs for my local checkout.

  Now, there are downsides to this too. If you want to run a command that needs data that is not there, Git will have to go back to the server and request those objects. Luckily, it does this on-demand as it needs the objects, but it can make something like `blame` do a bunch of roundtrips.

  ![](https://proxy-prod.omnivore-image-cache.app/2000x1130,sQnjRfPMnR0N-snkIfA9TVQUCVl8twPR_ReMNUGlvA_o/https://blog.gitbutler.com/content/images/2024/02/CleanShot-2024-02-08-at-15.17.14@2x.png)

  round and round we go

  In the case of Linux, my tests showed that a normal file blame might take 4 seconds now takes 45 seconds. But that's only the first time you need to do it.

  ## Sparse Checkouts

  The last big thing to look at is not only useful for large repositories, but specifically for monorepos. That is, repositories that contain multiple projects in subdirectories.

  For example, at GitButler, our web services are in a monorepo, with each service we run on AWS in a subdirectory.

  ```reasonml
  ❯ tree -L 1
  .
  ├── Gemfile
  ├── Gemfile.lock
  ├── README.md
  ├── auth-proxy
  ├── butler
  ├── chain
  ├── check.rb
  ├── copilot
  └── git

  6 directories, 4 files
  ```

  ==If each of those subdirectories was huge, this could be annoying to manage. Instead, we can use sparse checkouts to filter the checkouts to just specified directories.==

  ==To do this, we run== `==git== ==sparse-checkout== ==set [dir1] [dir2] ...==`

  ```smali
  ❯ git sparse-checkout set butler copilot
  ❯ tree -L 1
  .
  ├── Gemfile
  ├── Gemfile.lock
  ├── README.md
  ├── butler
  ├── check.rb
  └── copilot
  ```

  So we still have the top level files, but only the two subdirectories that we specified. This is called "cone mode" and tends to be pretty fast. It also makes `status` and related commands faster because there are fewer files to care about. You can also however, set patterns rather than subdirectories, but it's more complicated.

  Here's a local test I did with the Chromium repository:

  ```sql
  ❯ time git status
  On branch main
  Your branch is up to date with 'origin/main'.

  nothing to commit, working tree clean

  real	0m5.931s

  ❯ git sparse-checkout set build base

  ❯ time git status
  On branch main
  Your branch is up to date with 'origin/main'.

  You are in a sparse checkout with 2% of tracked files present.

  nothing to commit, working tree clean

  real	0m0.386s
  ```

  This is without the `fsmonitor` stuff. You can see that `status` went from 6 seconds to run down to 0.3 seconds because there just aren't as many files.

  If you're using large monorepos, this means you can do a blobless clone to have a much smaller local database (you can also run `clone --no-checkout` to skip the initial checkout), then do a `sparse-checkout` to filter to the directories you need and everything is massively faster.

  ## Scalar

  Finally, Git now (since Oct 2022, Git 2.38) ships with an _alternative_ command line invocation that wraps some of this stuff.

  This command is called `scalar`. Just go ahead and type it:

  ```fsharp
  ❯ scalar
  usage: scalar [-C <directory>] [-c <key>=<value>] <command> [<options>]

  Commands:
  	clone
  	list
  	register
  	unregister
  	run
  	reconfigure
  	delete
  	help
  	version
  	diagnose
  ```

  ==[Scalar](https://git-scm.com/docs/scalar?ref=blog.gitbutler.com)== ==is mostly just used to clone with the correct defaults and config settings (blobless clone, no checkout by default, setting up maintenance properly, etc).== 

  If you are managing large repositories, cloning with this negates the need to run `git maintenance start` and send the `--no-checkout` command and remember `--filter=tree:0` and whatnot.

  Now you're ready to scale! ...-ar.

  ## Some More Reading

  If you want to read about all of this in great detail, GitHub has done an amazing job covering lots of this too:

  * [The Commit Graph](https://github.blog/2022-08-30-gits-database-internals-ii-commit-history-queries/?ref=blog.gitbutler.com#the-commit-graph)
  * [Sparse checkout](https://github.blog/2020-01-17-bring-your-monorepo-down-to-size-with-sparse-checkout/?ref=blog.gitbutler.com)
  * [Filesystem Monitor](https://github.blog/2022-06-29-improve-git-monorepo-performance-with-a-file-system-monitor/?ref=blog.gitbutler.com)
  * [Sparse index](https://github.blog/2021-11-10-make-your-monorepo-feel-small-with-gits-sparse-index/?ref=blog.gitbutler.com)
  * [Partial and shallow clone](https://github.blog/2020-12-21-get-up-to-speed-with-partial-clone-and-shallow-clone/?ref=blog.gitbutler.com)
  * [The Story of Scalar](https://github.blog/2022-10-13-the-story-of-scalar/?ref=blog.gitbutler.com)

  There is also a ton more fascinating information on this from [Derrick Stolee](https://stolee.dev/?ref=blog.gitbutler.com), who did a lot of work on these projects.

  Ok, that's it for our Git Tips series! Hope you enjoyed it and let us know in Discord if you have any questions or comments, or would like to see us do any other topics in Git land.

  Thanks!

  ### Subscribe to new posts.

metadata:
  {"date_added":"2024-02-18 11:02:27","id":"0f04cdaa-c871-4ba1-a882-7aecf65a2505","status":"ARCHIVED","tags":["read-later","dotfiles","git"],"title":"Git Tips 3: Really Large Repositories\n","url_omnivore":"https://omnivore.app/me/git-tips-3-really-large-repositories-18dbc867c96\n","url_original":"https://blog.gitbutler.com/git-tips-3-really-large-repositories/\n"}


title: How to Use the JavaScript Map and Set Objects – Explained with Code Examples
lead: # How to Use the JavaScript Map and Set Objects – Explained with Code Examples
checksum: 5ff51f88df140c6e98af0fab9f37fc3cc04f1333ec6d84607c4fdf8b53c78b36
created: 2024-09-15 00:40:58.189328664+00:00
modified: 2024-09-22 22:40:13.395511052+00:00
path:
  Omnivore/2024-02-21 - How to Use the JavaScript Map and Set Objects – Explained with Code Examples.md

sortable_path:
  Omnivore2024-02-21 - How to Use the JavaScript Map and Set Objects – Explained with Code Examples.md

body:
  # How to Use the JavaScript Map and Set Objects – Explained with Code Examples

  ## Highlights

  Under the hood, the `Map` object performs better when you need to add and remove keys, so you might consider using it when your data changes frequently.

  Also, the Map object has many useful methods for data manipulation, such as `has()` to see if the Map contains a specific key, `keys()` to get all keys defined in the `Map`, `values` to get all values, and `entries()` to get all key/value pairs. 

  [source](https://omnivore.app/me/how-to-use-the-java-script-map-and-set-objects-explained-with-co-18dcf1d24bb#9c807b39-b9c0-49de-895e-1d7f6b095ab4) 

  ---

  The `Set` object allows you to store a collection of elements, just like an Array. The differences between a `Set` and an array are:

  * A `Set` requires all elements to be unique
  * A `Set` has fewer methods for data manipulation 

  [source](https://omnivore.app/me/how-to-use-the-java-script-map-and-set-objects-explained-with-co-18dcf1d24bb#52f87526-14bc-40fb-b821-493da97dd7e3) 

  ---

  Aside from the regular methods above, `Set` also has composition methods that you can use to perform various set theory operations such as difference, union, and intersection. 

  [source](https://omnivore.app/me/how-to-use-the-java-script-map-and-set-objects-explained-with-co-18dcf1d24bb#cb2eebdd-f9f4-4a83-b298-f65c5556f842) 

  ---

  ## Original

  ![How to Use the JavaScript Map and Set Objects – Explained with Code Examples](https://proxy-prod.omnivore-image-cache.app/1280x720,sp6PB7t-iiwqHUxBcJgrDBxMVwkBEE45zHsnUKE3V87c/https://www.freecodecamp.org/news/content/images/size/w2000/2024/02/javascript-mat-and-set-objects-introduction.png) 

  Map and Set are two JavaScript data structures you can use to store a collection of values, similar to Objects and Arrays. They are specialized data structures that can help you store and manipulate related values. 

  In this tutorial, we will see how Map and Set work in detail and when to use them. We will also explore the Set object composition methods that were recently added to the JavaScript standard.

  ## Table of Contents

  * [The Map Object Explained](#the-map-object-explained)
     * [How to Create a Map Object](#how-to-create-a-map-object)
     * [Map Object Methods and Properties](#map-object-methods-and-properties)
     * [Other Ways to Create a Map Object](#other-ways-to-create-a-map-object)
     * [Iterate Over Map Object Data](#iterate-over-map-object-data)
     * [When to Use the Map Object](#when-to-use-the-map-object)
  * [Set Object Explained](#set-object-explained)
     * [How to create a Set Object](#how-to-create-a-set-object)
     * [Set Object Methods and Properties](#set-object-methods-and-properties)
     * [Set Composition Methods](#set-composition-methods)
     * [Iterate Over a Set Object](#iterate-over-a-set-object)
     * [When to Use the Set Object](#when-to-use-the-set-object)
  * [Conclusion](#conclusion)

  ## The Map Object Explained

  The `Map` object stores data in a key/value pair structure, just like an Object. The main differences between a regular object and a `Map` are:

  * A `Map` can have any type of data as the key value
  * A `Map` maintains the order of data added to the object

  ### How to Create a Map Object

  To create a `Map` object, you can call the `Map()` constructor as follows:

  ```dart
  const myMap = new Map();
  ```

  Create a Map object in JavaScript

  The code above creates a new empty `Map` object.

  ### Map Object Methods and Properties

  A `Map` object has the following methods and properties:

  * `set(key, value)` – Adds a key/value pair to a Map
  * `get(key)` – Retrieves a value from a Map (returns `undefined` if key doesn't exist)
  * `has(key)` – Checks if a Map has a specific key
  * `delete(key)` – Removes a specific key from a Map
  * `clear()` – Removes all items from a Map
  * `keys()` – Returns all keys in a Map
  * `values()` – Returns all values in a Map
  * `entries()` – Returns all keys and values in a Map
  * `size` – Returns the number of items in Map

  To insert data into the `Map` object, you can use the `set()` method:

  ```dart
  const myMap = new Map();

  myMap.set(1, 'Jack');
  myMap.set(2, 'Jill');
  myMap.set('animal', 'Elephant');
  ```

  Inserting values to the Map object

  The code above creates a `Map` object with 3 entries as follows:

  ```dart
  Map(3)
  0: {1 => "Jack"}
  1: {2 => "Jill"}
  2: {"animal" => "Elephant"}
  ```

  The Map object entries

  To retrieve a value from the `Map` object, you need to use the `get()` method and pass the key as its argument:

  ```livecodeserver
  console.log(myMap.get(1)); // Jack

  console.log(myMap.get('animal')); // Elephant


  ```

  Retrieving Map object values

   To see how many key/value pairs a `Map` has, you can access the `size` property:

  ```arduino
  myMap.size; // 3
  ```

  Accessing the Map.size property

  To see if a certain key exists in a `Map` object, you can use the `has()` method. See the example below:

  ```angelscript
  myMap.has(1); // true

  myMap.has(10); // false
  ```

  Using the Map.has() method

  To remove a key/value pair from a `Map` object, you can use the `delete()` method and pass the key of the pair you want to remove as follows:

  ```awk
  myMap.delete(1);

  console.log(myMap);
  // 0: {2 => "Jill"}
  // 1: {"animal" => "Elephant"}
  ```

  Deleting an entry from the Map object

  If you want to remove all key/value pairs, you can use the `clear()` method instead:

  ```arduino
  myMap.clear();

  console.log(myMap); // Map(0) {size: 0}
  ```

  Clearing a Map object

  ### Other Ways to Create a Map Object

  You can also create a `Map` object from an Array as follows:

  ```prolog
  const myMap = new Map([
    [1, 'Jack'],
    [2, 'Jill'],
    ['animal', 'Elephant'],
  ]);
  ```

  Creating a Map from an Array

  When creating a `Map` from an Array, you need to create a two-dimensional array and specify two elements in each array. 

  The first element will be the key, the second element will be the value. Any extra value in the array will be ignored.

  In the example below, the value 'Johnson' from the first array will be ignored by the `Map()` constructor:

  ```dart
  const myMap = new Map([
    [1, 'Jack', 'Johnson'], // the value 'Johnson' is ignored
    [2, 'Jill'],
    ['animal', 'Elephant'],
  ]);
  ```

  Creating a Map from an array with more than two values 

  Because you can create a `Map` object from an array, you can also create one from an object. You need to transform the object into an array first using the `Object.entries()` method.

  The following example shows how to use an object to create a `Map`:

  ```javascript
  const person = {
      'name': 'Jack',
      'age': 20,
  }

  const myMap = new Map(Object.entries(person));

  console.log(myMap); // Map(2) { 'name' => 'Jack', 'age' => 20 }
  ```

  Creating a Map from an object

  ### Iterate Over Map Object Data

  To iterate over a `Map` object data, you can use either the `forEach()` method or the `for .. of` loop:

  ```javascript
  const myMap = new Map([
    [1, 'Jack'],
    [2, 'Jill'],
    ['animal', 'Elephant'],
  ]);

  // iterate using the forEach() method
  myMap.forEach((value, key) => {
    console.log(`${key}: ${value}`);
  });

  // or using the for .. of loop

  for (const [key, value] of myMap) {
    console.log(`${key}: ${value}`);
  }
  ```

  Both methods give the same output:

  ```http
  1: Jack
  2: Jill
  animal: Elephant
  ```

  ### When to Use the Map Object

  You can think of the `Map` object as an upgraded version of the regular Object. It can use any type of data as the key value, while an object can only use string values as keys.

  ==Under the hood, the== `==Map==` ==object performs better when you need to add and remove keys, so you might consider using it when your data changes frequently.==

  ==Also, the Map object has many useful methods for data manipulation, such as== `==has====()==` ==to see if the Map contains a specific key,== `==keys====()==` ==to get all keys defined in the== `==Map==`==,== `==values==` ==to get all values, and== `==entries====()==` ==to get all key/value pairs.==

  But if you only want to create an object without further manipulation, then you don't need to use the `Map` object. 

  One example is when you send a network request using the `fetch()` method. You would create an object and convert it into a JSON string, so using a `Map` object won't give any benefit.

  ## Set Object Explained

  ==The== `==Set==` ==object allows you to store a collection of elements, just like an Array. The differences between a== `==Set==` ==and an array are:==

  * ==A== `==Set==` ==requires all elements to be unique==
  * ==A== `==Set==` ==has fewer methods for data manipulation==

  ### How to Create a Set Object

  To create a new `Set` object, you need to call the `Set()` constructor as follows:

  ```dart
  const mySet = new Set();
  ```

  Creating a new Set object

  The code above will create a new empty set.

  ### Set Object Methods and Properties 

  A `Set` object has the following methods and properties:

  * `add(value)` – Adds a value to a Set
  * `has(value)` – Checks if a Set contains a specific value
  * `delete(value)` – Removes a specific value from a Set
  * `clear()` – Removes all items from a Set
  * `keys()` – Returns all values in a Set
  * `values()` – Returns all values in a Set
  * `entries()` – Returns all values in a Set as `[value, value]` array
  * `size` – Returns the number of items in Set

  Note that the `keys()` and `values()` methods in a Set object return the same output.

  There's also the `entries()` method which returns an array as follows:

  ```javascript
  const mySet = new Set(['Jack', 'Jill', 'John']);

  console.log(mySet.entries());
  ```

  Running Set entries() method

  Output:

  ```prolog
  [Set Entries] {
    [ 'Jack', 'Jack' ],
    [ 'Jill', 'Jill' ],
    [ 'John', 'John' ]
  }
  ```

  Output of Set entries() method

  Notice how the values are repeated once in each array above. The `entries()` method is created to make `Set` similar to the `Map` object, but you probably don't need it.

  There are extra methods that you can use to interact with another `Set` object. We'll discuss them in the next section.

  To add an element to the Set object, you can use the add method:

  ```processing
  const mySet = new Set();

  mySet.add(1);
  mySet.add(2);
  mySet.add(3);

  console.log(mySet); // [1, 2, 3]
  ```

  Adding new elements to the Set object

  To get all values stored in a `Set`, call the `values()` method:

  ```pgsql
  mySet.values(); // [Set Iterator] { 'Jack', 'Jill', 'John' }
  ```

  Getting all values from a Set object

  To check if the `Set` has a specific value, use the `has()` method:

  ```elixir
  mySet.has('Jack'); // true

  mySet.has('Michael'); // false
  ```

  Check if a Set has a specific value

  To remove a single value, call the `delete()` method. To remove all values, use the `clear()` method:

  ```less
  mySet.delete('Jill');

  mySet.clear();
  ```

  Delete a single value or clear all from Set

  ### Set Composition Methods

  ==Aside from the regular methods above,== `==Set==` ==also has composition methods that you can use to perform various set theory operations such as difference, union, and intersection.==

  The following table is from [MDN Set documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global%5FObjects/Set#set%5Fcomposition):

  ![set-composition-methods](https://proxy-prod.omnivore-image-cache.app/1585x2050,sPVCo_5Ndwww9ovUzsJnG9IGeZKON-MOiMv_9bax5rNk/https://www.freecodecamp.org/news/content/images/2024/02/set-composition-methods.png)

  A List of Set Composition Methods

  For example, you can get a set containing the differences between two other sets as follows:

  ```angelscript
  const setA = new Set([1, 2, 3, 4, 5]);

  const setB = new Set([4, 5, 6, 7, 8]);

  const diffsA = setA.difference(setB); // Set(3) {1, 2, 3}
  const diffsB = setB.difference(setA); // Set(3) {6, 7, 8}

  ```

  Example of using the Set difference() method

  Here, the `setA.difference(setB)` returns a `Set` containing values unique to the `setA` object.

  The opposite values are returned when you run `setB.difference(setA)` method.

  Note that these methods are new additions to the JavaScript standard, and as of this writing, only Safari 17 and Chrome 122 support these methods.

  Most likely, these methods will be included in Node.js soon.

  ### Iterate Over a Set Object

  To iterate over a `Set` object, you can use either the `forEach()` method or the `for .. of` loop:

  ```pgsql
  const mySet = new Set(['Jack', 'Jill', 'John']);

  // iterate using the forEach() method
  mySet.forEach(value => {
    console.log(value);
  });

  // or using the for .. of loop

  for (const value of mySet) {
    console.log(value);
  }
  ```

  Output:

  ```mipsasm
  Jack
  Jill
  John
  ```

  ### When to Use the Set Object

  You can think of the `Set` object as the alternative version of the regular Array.

  Because a `Set` object ignores duplicate values, you can use this object to purge duplicates from an Array, then turn the `Set` object back to an Array:

  ```angelscript
  const myArray = [1, 1, 2, 2, 3, 3];

  const uniqueArray = [...new Set(myArray)];

  console.log(uniqueArray); // [ 1, 2, 3 ]
  ```

  Creating a unique array with the help of Set

  Another reason you may want to use a `Set` is when you need to compose multiple set objects using the composition methods, such as `union()` and `difference()`. These methods are not available in an Array.

  ## Conclusion

  In this article, you've learned how the Map and Set objects work and when to use them in your code.

  If you enjoyed this article and want to take your JavaScript skills to the next level, I recommend you check out my new book __Beginning Modern JavaScript_ [here](https://codewithnathan.com/beginning-modern-javascript).

  [![beginning-js-cover](https://proxy-prod.omnivore-image-cache.app/2000x1667,s6cLBb9obr-IvLwhkHZ_9YW6u9bvhxbOp3iAu4nsV6tM/https://www.freecodecamp.org/news/content/images/2024/01/beginning-js-cover.png)](https://codewithnathan.com/beginning-modern-javascript)

  The book is designed to be easy for beginners and accessible to anyone looking to learn JavaScript. It provides a step-by-step gentle guide that will help you understand how to use JavaScript to create a dynamic web application.

  Here's my promise: __You will actually feel like you understand what you're doing with JavaScript._

  See you later!

  ---

  ---

   Learn to code for free. freeCodeCamp's open source curriculum has helped more than 40,000 people get jobs as developers. [Get started](https://www.freecodecamp.org/learn/)

raw_content:
  ---
  id: 75f0d58e-d13c-11ee-abe1-23b9fd5ced9a
  title: |
    How to Use the JavaScript Map and Set Objects – Explained with Code Examples
  status: ARCHIVED
  tags:
    - read-later
    - RSS
  date_added: 2024-02-21 18:39:50
  url_omnivore: |
    https://omnivore.app/me/how-to-use-the-java-script-map-and-set-objects-explained-with-co-18dcf1d24bb
  url_original: |
    https://www.freecodecamp.org/news/javascript-map-and-set-objects-explained/
  ---

  # How to Use the JavaScript Map and Set Objects – Explained with Code Examples

  ## Highlights

  Under the hood, the `Map` object performs better when you need to add and remove keys, so you might consider using it when your data changes frequently.

  Also, the Map object has many useful methods for data manipulation, such as `has()` to see if the Map contains a specific key, `keys()` to get all keys defined in the `Map`, `values` to get all values, and `entries()` to get all key/value pairs. 

  [source](https://omnivore.app/me/how-to-use-the-java-script-map-and-set-objects-explained-with-co-18dcf1d24bb#9c807b39-b9c0-49de-895e-1d7f6b095ab4) 

  ---

  The `Set` object allows you to store a collection of elements, just like an Array. The differences between a `Set` and an array are:

  * A `Set` requires all elements to be unique
  * A `Set` has fewer methods for data manipulation 

  [source](https://omnivore.app/me/how-to-use-the-java-script-map-and-set-objects-explained-with-co-18dcf1d24bb#52f87526-14bc-40fb-b821-493da97dd7e3) 

  ---

  Aside from the regular methods above, `Set` also has composition methods that you can use to perform various set theory operations such as difference, union, and intersection. 

  [source](https://omnivore.app/me/how-to-use-the-java-script-map-and-set-objects-explained-with-co-18dcf1d24bb#cb2eebdd-f9f4-4a83-b298-f65c5556f842) 

  ---

  ## Original

  ![How to Use the JavaScript Map and Set Objects – Explained with Code Examples](https://proxy-prod.omnivore-image-cache.app/1280x720,sp6PB7t-iiwqHUxBcJgrDBxMVwkBEE45zHsnUKE3V87c/https://www.freecodecamp.org/news/content/images/size/w2000/2024/02/javascript-mat-and-set-objects-introduction.png) 

  Map and Set are two JavaScript data structures you can use to store a collection of values, similar to Objects and Arrays. They are specialized data structures that can help you store and manipulate related values. 

  In this tutorial, we will see how Map and Set work in detail and when to use them. We will also explore the Set object composition methods that were recently added to the JavaScript standard.

  ## Table of Contents

  * [The Map Object Explained](#the-map-object-explained)
     * [How to Create a Map Object](#how-to-create-a-map-object)
     * [Map Object Methods and Properties](#map-object-methods-and-properties)
     * [Other Ways to Create a Map Object](#other-ways-to-create-a-map-object)
     * [Iterate Over Map Object Data](#iterate-over-map-object-data)
     * [When to Use the Map Object](#when-to-use-the-map-object)
  * [Set Object Explained](#set-object-explained)
     * [How to create a Set Object](#how-to-create-a-set-object)
     * [Set Object Methods and Properties](#set-object-methods-and-properties)
     * [Set Composition Methods](#set-composition-methods)
     * [Iterate Over a Set Object](#iterate-over-a-set-object)
     * [When to Use the Set Object](#when-to-use-the-set-object)
  * [Conclusion](#conclusion)

  ## The Map Object Explained

  The `Map` object stores data in a key/value pair structure, just like an Object. The main differences between a regular object and a `Map` are:

  * A `Map` can have any type of data as the key value
  * A `Map` maintains the order of data added to the object

  ### How to Create a Map Object

  To create a `Map` object, you can call the `Map()` constructor as follows:

  ```dart
  const myMap = new Map();
  ```

  Create a Map object in JavaScript

  The code above creates a new empty `Map` object.

  ### Map Object Methods and Properties

  A `Map` object has the following methods and properties:

  * `set(key, value)` – Adds a key/value pair to a Map
  * `get(key)` – Retrieves a value from a Map (returns `undefined` if key doesn't exist)
  * `has(key)` – Checks if a Map has a specific key
  * `delete(key)` – Removes a specific key from a Map
  * `clear()` – Removes all items from a Map
  * `keys()` – Returns all keys in a Map
  * `values()` – Returns all values in a Map
  * `entries()` – Returns all keys and values in a Map
  * `size` – Returns the number of items in Map

  To insert data into the `Map` object, you can use the `set()` method:

  ```dart
  const myMap = new Map();

  myMap.set(1, 'Jack');
  myMap.set(2, 'Jill');
  myMap.set('animal', 'Elephant');
  ```

  Inserting values to the Map object

  The code above creates a `Map` object with 3 entries as follows:

  ```dart
  Map(3)
  0: {1 => "Jack"}
  1: {2 => "Jill"}
  2: {"animal" => "Elephant"}
  ```

  The Map object entries

  To retrieve a value from the `Map` object, you need to use the `get()` method and pass the key as its argument:

  ```livecodeserver
  console.log(myMap.get(1)); // Jack

  console.log(myMap.get('animal')); // Elephant


  ```

  Retrieving Map object values

   To see how many key/value pairs a `Map` has, you can access the `size` property:

  ```arduino
  myMap.size; // 3
  ```

  Accessing the Map.size property

  To see if a certain key exists in a `Map` object, you can use the `has()` method. See the example below:

  ```angelscript
  myMap.has(1); // true

  myMap.has(10); // false
  ```

  Using the Map.has() method

  To remove a key/value pair from a `Map` object, you can use the `delete()` method and pass the key of the pair you want to remove as follows:

  ```awk
  myMap.delete(1);

  console.log(myMap);
  // 0: {2 => "Jill"}
  // 1: {"animal" => "Elephant"}
  ```

  Deleting an entry from the Map object

  If you want to remove all key/value pairs, you can use the `clear()` method instead:

  ```arduino
  myMap.clear();

  console.log(myMap); // Map(0) {size: 0}
  ```

  Clearing a Map object

  ### Other Ways to Create a Map Object

  You can also create a `Map` object from an Array as follows:

  ```prolog
  const myMap = new Map([
    [1, 'Jack'],
    [2, 'Jill'],
    ['animal', 'Elephant'],
  ]);
  ```

  Creating a Map from an Array

  When creating a `Map` from an Array, you need to create a two-dimensional array and specify two elements in each array. 

  The first element will be the key, the second element will be the value. Any extra value in the array will be ignored.

  In the example below, the value 'Johnson' from the first array will be ignored by the `Map()` constructor:

  ```dart
  const myMap = new Map([
    [1, 'Jack', 'Johnson'], // the value 'Johnson' is ignored
    [2, 'Jill'],
    ['animal', 'Elephant'],
  ]);
  ```

  Creating a Map from an array with more than two values 

  Because you can create a `Map` object from an array, you can also create one from an object. You need to transform the object into an array first using the `Object.entries()` method.

  The following example shows how to use an object to create a `Map`:

  ```javascript
  const person = {
      'name': 'Jack',
      'age': 20,
  }

  const myMap = new Map(Object.entries(person));

  console.log(myMap); // Map(2) { 'name' => 'Jack', 'age' => 20 }
  ```

  Creating a Map from an object

  ### Iterate Over Map Object Data

  To iterate over a `Map` object data, you can use either the `forEach()` method or the `for .. of` loop:

  ```javascript
  const myMap = new Map([
    [1, 'Jack'],
    [2, 'Jill'],
    ['animal', 'Elephant'],
  ]);

  // iterate using the forEach() method
  myMap.forEach((value, key) => {
    console.log(`${key}: ${value}`);
  });

  // or using the for .. of loop

  for (const [key, value] of myMap) {
    console.log(`${key}: ${value}`);
  }
  ```

  Both methods give the same output:

  ```http
  1: Jack
  2: Jill
  animal: Elephant
  ```

  ### When to Use the Map Object

  You can think of the `Map` object as an upgraded version of the regular Object. It can use any type of data as the key value, while an object can only use string values as keys.

  ==Under the hood, the== `==Map==` ==object performs better when you need to add and remove keys, so you might consider using it when your data changes frequently.==

  ==Also, the Map object has many useful methods for data manipulation, such as== `==has====()==` ==to see if the Map contains a specific key,== `==keys====()==` ==to get all keys defined in the== `==Map==`==,== `==values==` ==to get all values, and== `==entries====()==` ==to get all key/value pairs.==

  But if you only want to create an object without further manipulation, then you don't need to use the `Map` object. 

  One example is when you send a network request using the `fetch()` method. You would create an object and convert it into a JSON string, so using a `Map` object won't give any benefit.

  ## Set Object Explained

  ==The== `==Set==` ==object allows you to store a collection of elements, just like an Array. The differences between a== `==Set==` ==and an array are:==

  * ==A== `==Set==` ==requires all elements to be unique==
  * ==A== `==Set==` ==has fewer methods for data manipulation==

  ### How to Create a Set Object

  To create a new `Set` object, you need to call the `Set()` constructor as follows:

  ```dart
  const mySet = new Set();
  ```

  Creating a new Set object

  The code above will create a new empty set.

  ### Set Object Methods and Properties 

  A `Set` object has the following methods and properties:

  * `add(value)` – Adds a value to a Set
  * `has(value)` – Checks if a Set contains a specific value
  * `delete(value)` – Removes a specific value from a Set
  * `clear()` – Removes all items from a Set
  * `keys()` – Returns all values in a Set
  * `values()` – Returns all values in a Set
  * `entries()` – Returns all values in a Set as `[value, value]` array
  * `size` – Returns the number of items in Set

  Note that the `keys()` and `values()` methods in a Set object return the same output.

  There's also the `entries()` method which returns an array as follows:

  ```javascript
  const mySet = new Set(['Jack', 'Jill', 'John']);

  console.log(mySet.entries());
  ```

  Running Set entries() method

  Output:

  ```prolog
  [Set Entries] {
    [ 'Jack', 'Jack' ],
    [ 'Jill', 'Jill' ],
    [ 'John', 'John' ]
  }
  ```

  Output of Set entries() method

  Notice how the values are repeated once in each array above. The `entries()` method is created to make `Set` similar to the `Map` object, but you probably don't need it.

  There are extra methods that you can use to interact with another `Set` object. We'll discuss them in the next section.

  To add an element to the Set object, you can use the add method:

  ```processing
  const mySet = new Set();

  mySet.add(1);
  mySet.add(2);
  mySet.add(3);

  console.log(mySet); // [1, 2, 3]
  ```

  Adding new elements to the Set object

  To get all values stored in a `Set`, call the `values()` method:

  ```pgsql
  mySet.values(); // [Set Iterator] { 'Jack', 'Jill', 'John' }
  ```

  Getting all values from a Set object

  To check if the `Set` has a specific value, use the `has()` method:

  ```elixir
  mySet.has('Jack'); // true

  mySet.has('Michael'); // false
  ```

  Check if a Set has a specific value

  To remove a single value, call the `delete()` method. To remove all values, use the `clear()` method:

  ```less
  mySet.delete('Jill');

  mySet.clear();
  ```

  Delete a single value or clear all from Set

  ### Set Composition Methods

  ==Aside from the regular methods above,== `==Set==` ==also has composition methods that you can use to perform various set theory operations such as difference, union, and intersection.==

  The following table is from [MDN Set documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global%5FObjects/Set#set%5Fcomposition):

  ![set-composition-methods](https://proxy-prod.omnivore-image-cache.app/1585x2050,sPVCo_5Ndwww9ovUzsJnG9IGeZKON-MOiMv_9bax5rNk/https://www.freecodecamp.org/news/content/images/2024/02/set-composition-methods.png)

  A List of Set Composition Methods

  For example, you can get a set containing the differences between two other sets as follows:

  ```angelscript
  const setA = new Set([1, 2, 3, 4, 5]);

  const setB = new Set([4, 5, 6, 7, 8]);

  const diffsA = setA.difference(setB); // Set(3) {1, 2, 3}
  const diffsB = setB.difference(setA); // Set(3) {6, 7, 8}

  ```

  Example of using the Set difference() method

  Here, the `setA.difference(setB)` returns a `Set` containing values unique to the `setA` object.

  The opposite values are returned when you run `setB.difference(setA)` method.

  Note that these methods are new additions to the JavaScript standard, and as of this writing, only Safari 17 and Chrome 122 support these methods.

  Most likely, these methods will be included in Node.js soon.

  ### Iterate Over a Set Object

  To iterate over a `Set` object, you can use either the `forEach()` method or the `for .. of` loop:

  ```pgsql
  const mySet = new Set(['Jack', 'Jill', 'John']);

  // iterate using the forEach() method
  mySet.forEach(value => {
    console.log(value);
  });

  // or using the for .. of loop

  for (const value of mySet) {
    console.log(value);
  }
  ```

  Output:

  ```mipsasm
  Jack
  Jill
  John
  ```

  ### When to Use the Set Object

  You can think of the `Set` object as the alternative version of the regular Array.

  Because a `Set` object ignores duplicate values, you can use this object to purge duplicates from an Array, then turn the `Set` object back to an Array:

  ```angelscript
  const myArray = [1, 1, 2, 2, 3, 3];

  const uniqueArray = [...new Set(myArray)];

  console.log(uniqueArray); // [ 1, 2, 3 ]
  ```

  Creating a unique array with the help of Set

  Another reason you may want to use a `Set` is when you need to compose multiple set objects using the composition methods, such as `union()` and `difference()`. These methods are not available in an Array.

  ## Conclusion

  In this article, you've learned how the Map and Set objects work and when to use them in your code.

  If you enjoyed this article and want to take your JavaScript skills to the next level, I recommend you check out my new book __Beginning Modern JavaScript_ [here](https://codewithnathan.com/beginning-modern-javascript).

  [![beginning-js-cover](https://proxy-prod.omnivore-image-cache.app/2000x1667,s6cLBb9obr-IvLwhkHZ_9YW6u9bvhxbOp3iAu4nsV6tM/https://www.freecodecamp.org/news/content/images/2024/01/beginning-js-cover.png)](https://codewithnathan.com/beginning-modern-javascript)

  The book is designed to be easy for beginners and accessible to anyone looking to learn JavaScript. It provides a step-by-step gentle guide that will help you understand how to use JavaScript to create a dynamic web application.

  Here's my promise: __You will actually feel like you understand what you're doing with JavaScript._

  See you later!

  ---

  ---

   Learn to code for free. freeCodeCamp's open source curriculum has helped more than 40,000 people get jobs as developers. [Get started](https://www.freecodecamp.org/learn/) 

metadata:
  {"date_added":"2024-02-21 18:39:50","id":"75f0d58e-d13c-11ee-abe1-23b9fd5ced9a","status":"ARCHIVED","tags":["read-later","RSS"],"title":"How to Use the JavaScript Map and Set Objects – Explained with Code Examples\n","url_omnivore":"https://omnivore.app/me/how-to-use-the-java-script-map-and-set-objects-explained-with-co-18dcf1d24bb\n","url_original":"https://www.freecodecamp.org/news/javascript-map-and-set-objects-explained/\n"}


path: Omnivore/2024-02-23 - The Life-Changing Magic of Tidying Up Your To-Do List.md
sortable_path: Omnivore2024-02-23 - The Life-Changing Magic of Tidying Up Your To-Do List.md
title: The Life-Changing Magic of Tidying Up Your To-Do List
lead: # The Life-Changing Magic of Tidying Up Your To-Do List
checksum: d49d6b53ff820fae2f494944fbdc6cc09e800703ff4cc29c387a89c1f49c5305
created: 2024-09-15 00:40:58.335410632+00:00
modified: 2024-09-22 22:40:13.396511065+00:00
body:
  # The Life-Changing Magic of Tidying Up Your To-Do List

  ## Notes

  Before you even start looking at your tasks, write down what having a neatly organized and prioritized to-do list would mean for your life. Maybe you want to run a successful business, get in shape, be more present with your family, have closer relationships with friends, or lead a more adventurous life.

  Find a medium that lets you truly envision the details. You can describe it in words, mind map it, draw it out, create a Pinterest board, collect YouTube videos, or brainstorm in whatever form suits you.

  Why do you want to get in shape? The answer might be "to have more energy and feel more confident."  Why do you want to have more energy and feel more confident? Maybe the answer is "to be more fully yourself and stop worrying about what other people think of you." Ask yourself "why" 3-5 times for every item in your vision.
  ## Original

  <DIV id="readability-content"><DIV data-omnivore-anchor-idx="1" class="page" id="readability-page-1"><article data-omnivore-anchor-idx="2"><div data-omnivore-anchor-idx="3"><header data-omnivore-anchor-idx="4"><p data-omnivore-anchor-idx="5">Your to-do list should spark joy, not dread. </p></header><figure data-omnivore-anchor-idx="6"><img data-omnivore-anchor-idx="7" data-omnivore-original-src="https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_2624/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2018%2F02%2FErickMRamos_Thumbnail.jpg" alt="" fetchpriority="high" width="1056" height="600" decoding="async" data-nimg="1" sizes="(max-width: 1056px) 100vw, 1056px" srcset="https://proxy-prod.omnivore-image-cache.app/360x0,s2pPzWVwDdpoMzmcla1WY3YTiuziGGtvFiaKsR9dYQho/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_360/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2018%2F02%2FErickMRamos_Thumbnail.jpg 360w,https://proxy-prod.omnivore-image-cache.app/384x0,sk3KXBW_fLMf3iAUIQLlLsS99Ia1UrigJNiZNQ5WwMqI/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_384/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2018%2F02%2FErickMRamos_Thumbnail.jpg 384w,https://proxy-prod.omnivore-image-cache.app/480x0,sNx_OBUxyxjW0FgILdJMcQE8LFI5KlWZXQxmHQ95NNUU/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_480/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2018%2F02%2FErickMRamos_Thumbnail.jpg 480w,https://proxy-prod.omnivore-image-cache.app/768x0,sZk_Wau5hexgvBE_8RYd3pAp8y_IxVDIbe4wALFiEgQY/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_768/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2018%2F02%2FErickMRamos_Thumbnail.jpg 768w,https://proxy-prod.omnivore-image-cache.app/960x0,s2RNWKFuW-d2B3vG2H5Um8pkhpAnWnnH3qIZyEZx4ls0/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_960/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2018%2F02%2FErickMRamos_Thumbnail.jpg 960w,https://proxy-prod.omnivore-image-cache.app/1120x0,s_Kwh_LE5N7dGe4E5fjB6T_UliHFavZBkOJy5C6sSXfQ/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_1120/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2018%2F02%2FErickMRamos_Thumbnail.jpg 1120w,https://proxy-prod.omnivore-image-cache.app/1536x0,snehhqjYLiPURZHBj3ln6VQ3IxHxVA-23g6yx3QGc-ks/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_1536/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2018%2F02%2FErickMRamos_Thumbnail.jpg 1536w,https://proxy-prod.omnivore-image-cache.app/2240x0,sJaL5to7RhRJhrXlDPLKfPKeb0uKJNOnEjsYHI9OYOt4/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_2240/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2018%2F02%2FErickMRamos_Thumbnail.jpg 2240w,https://proxy-prod.omnivore-image-cache.app/2624x0,sk4WpINf3s30tasmHaMd37_FtxGMQlKll5UKfizfjYOY/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_2624/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2018%2F02%2FErickMRamos_Thumbnail.jpg 2624w," src="https://proxy-prod.omnivore-image-cache.app/1056x600,suQwzWvR6LVntj5cL6lQ3l9zjBVrYKQ9sR3VVBMJZXl0/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_2624/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2018%2F02%2FErickMRamos_Thumbnail.jpg"><figcaption data-omnivore-anchor-idx="8"><span data-omnivore-anchor-idx="9">Illustration by <a data-omnivore-anchor-idx="10" href="https://www.instagram.com/erickmramos/" target="_blank" rel="noopener noreferrer">Erick M. Ramos</a></span></figcaption></figure></div><div data-omnivore-anchor-idx="11"><div data-omnivore-anchor-idx="12"><p data-omnivore-anchor-idx="13">Your to-do list is an extension of your mind. It’s the spare room where you keep tomorrow’s work tucked away so you can focus on what’s in front of you today.</p><p data-omnivore-anchor-idx="14">But just like a spare room, if you don’t regularly tidy up your list, things get cluttered. Instead of being a reliable source of to-dos, it becomes a task in itself to sort through the mess and figure out what to work on next. A tidy task list does more than just improve productivity — it benefits your mental clarity, decision-making, and even your mood.</p><p data-omnivore-anchor-idx="15">Taking a cue from Marie Kondo’s excellent <a data-omnivore-anchor-idx="16" href="http://konmari.com/" target="_blank" rel="noopener noreferrer"><em data-omnivore-anchor-idx="17">The Life-Changing Magic of Tidying Up</em></a>, you can declutter your task list in the same way she tidies physical belongings: by establishing a few simple, organizational habits.</p><p data-omnivore-anchor-idx="18">So get started by following along with Marie’s <em data-omnivore-anchor-idx="19">Konmari</em> system: The to-do list edition.</p><h2 data-omnivore-anchor-idx="20" id="1-before-you-start-visualize-your-destination">1. Before you start, visualize your destination</h2><p data-omnivore-anchor-idx="21"><button data-omnivore-anchor-idx="22"><span data-omnivore-anchor-idx="23"><figure data-omnivore-anchor-idx="24"><img data-omnivore-anchor-idx="25" data-omnivore-original-src="https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_2624/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2018%2F02%2FQuote-1_blog.png" alt="&quot;The question of what you want to own is actually the question of how you want to live your life.&quot; – Marie Kondo" loading="lazy" width="512" height="451" decoding="async" data-nimg="1" sizes="(max-width: 512px) 100vw, 512px" srcset="https://proxy-prod.omnivore-image-cache.app/360x0,sYtVB_fNdJjInbK2bMuv1K0eSiQpdkMWcijLvghKnFk8/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_360/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2018%2F02%2FQuote-1_blog.png 360w,https://proxy-prod.omnivore-image-cache.app/384x0,sp_8QKA9E6zyh35Hfz_toPfKZPnUybnCea5sjE69aLng/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_384/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2018%2F02%2FQuote-1_blog.png 384w,https://proxy-prod.omnivore-image-cache.app/480x0,s29MtbakKYQUV0yFrIKEVEf2Cj36305zQB0JyejU41PQ/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_480/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2018%2F02%2FQuote-1_blog.png 480w,https://proxy-prod.omnivore-image-cache.app/768x0,svAV0g1bGcpN3BiyrpxQ2WyW91fypAdR6ZP4_qvJZsFc/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_768/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2018%2F02%2FQuote-1_blog.png 768w,https://proxy-prod.omnivore-image-cache.app/960x0,sPCoLsvuqpLhKfuURcP7gM9J0FM7yc-ZSu7AqvzkzfqQ/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_960/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2018%2F02%2FQuote-1_blog.png 960w,https://proxy-prod.omnivore-image-cache.app/1120x0,s8lThAdKVjDYu2NWVM3LNiXMzRGXVnXLLloTpRQ7rJ7Y/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_1120/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2018%2F02%2FQuote-1_blog.png 1120w,https://proxy-prod.omnivore-image-cache.app/1536x0,sN-Geh1306ZlZD2ufBV-_jie2GSHFzCBuJ-cP-wFKH-8/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_1536/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2018%2F02%2FQuote-1_blog.png 1536w,https://proxy-prod.omnivore-image-cache.app/2240x0,sgdLE6KTBH1GJyHy5XSj6towetODbTWyO6v_Bamqfym0/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_2240/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2018%2F02%2FQuote-1_blog.png 2240w,https://proxy-prod.omnivore-image-cache.app/2624x0,sWoShwTijmof-jGvBNy0n83-Jkz2Ob-oqJL4XI8fIvq8/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_2624/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2018%2F02%2FQuote-1_blog.png 2624w," src="https://proxy-prod.omnivore-image-cache.app/512x451,sM8WI_ONTxFJTPMOzsZlJpZ1bE59mBTxeDNah1Q9UxjA/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_2624/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2018%2F02%2FQuote-1_blog.png"></figure></span></button></p><p data-omnivore-anchor-idx="26">How can you know which tasks are worth doing if you don’t know where you want to go? How will you find the motivation to keep your to-do list clutter-free if you don't know why you're decluttering in the first place?</p><p data-omnivore-anchor-idx="27">Before touching any clutter, Marie asks her clients to envision the life they want to achieve by tidying up.</p><blockquote data-omnivore-anchor-idx="28"><p data-omnivore-anchor-idx="29">Think in concrete terms so that you can vividly picture what it would be like to live in a clutter-free space.</p></blockquote><p data-omnivore-anchor-idx="30">Or in this case, a clutter-free to-do list. Before you even start looking at your tasks, write down what having a neatly organized and prioritized to-do list would mean for your life. Maybe you want to run a successful business, get in shape, be more present with your family, have closer relationships with friends, or lead a more adventurous life.</p><p data-omnivore-anchor-idx="31">Find a medium that lets you truly envision the details. You can describe it in words, mind map it, draw it out, create a Pinterest board, collect YouTube videos, or brainstorm in whatever form suits you.</p><p data-omnivore-anchor-idx="32">But don't stop there. "[T]o prevent rebound you need to move ahead properly, step by step, as you launch into this once-in-a-lifetime event," Marie says. "Your next step is to identify why you want to live like that."</p><p data-omnivore-anchor-idx="33">Why do you want to get in shape? The answer might be "to have more energy and feel more confident."&nbsp; Why do you want to have more energy and feel more confident? Maybe the answer is "to be more fully yourself and stop worrying about what other people think of you." Ask yourself "why" 3-5 times for every item in your vision. Marie explains the importance of this step to prevent a relapse into messiness:</p><blockquote data-omnivore-anchor-idx="34"><p data-omnivore-anchor-idx="35">As you continue to explore the reasons behind your ideal lifestyle, you will come to a simple realization. The whole point in both discarding and keeping things is to be happy. It may seem obvious, but it is important to experience this realization for yourself and let it sink into your heart. Before you start tidying, look at the lifestyle you aspire to and ask yourself, “Why do I want to tidy?”</p></blockquote><p data-omnivore-anchor-idx="36">Keep your "why" top-of-mind as you tidy and after by creating <a data-omnivore-anchor-idx="37" href="https://todoist.com/help/articles/get-started-with-todoist-OgNNJR#add-your-first-task" target="_blank" rel="noreferrer noopener">a task</a> in your Todoist that represents your final vision. If you have an accompanying document or image, <a data-omnivore-anchor-idx="38" href="https://todoist.com/help/articles/how-to-format-text-e5dHw9" target="_blank" rel="noreferrer noopener">link</a> to it from your task or <a data-omnivore-anchor-idx="39" href="https://todoist.com/help/articles/introduction-to-comments-and-file-uploads-CwiA50">attach</a> it to your task comments. This is the True North that will help you determine whether a task is worth doing. If you’ve written out an all-encompassing vision, break it down into <a data-omnivore-anchor-idx="40" href="https://todoist.com/inspiration/goals-todoist/" target="_blank" rel="noopener">several goals for each area of your life</a>, and create a task for each.</p><p data-omnivore-anchor-idx="41"><button data-omnivore-anchor-idx="42"><span data-omnivore-anchor-idx="43"><figure data-omnivore-anchor-idx="44"><img data-omnivore-anchor-idx="45" data-omnivore-original-src="https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_2624/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2023%2F11%2FComments%402x.png" alt="" loading="lazy" width="550" height="569" decoding="async" data-nimg="1" sizes="(max-width: 550px) 100vw, 550px" srcset="https://proxy-prod.omnivore-image-cache.app/360x0,sgGZ_AeCPQTv8XHZIxzb6qKwPVDra7KLlD1Sm84QNRJc/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_360/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2023%2F11%2FComments%402x.png 360w,https://proxy-prod.omnivore-image-cache.app/384x0,s6fshfj0V5LQ-CeWfS9XhT4tBriGcT-60MLDgXmJL_qg/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_384/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2023%2F11%2FComments%402x.png 384w,https://proxy-prod.omnivore-image-cache.app/480x0,sX_zSJwY3wFtwYBjjjWokjNuCCxgmrT7TyRgcprIU73g/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_480/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2023%2F11%2FComments%402x.png 480w,https://proxy-prod.omnivore-image-cache.app/768x0,sNrUzgRe1FXrmd3WU946E4VT7JMzHqi_uHO26LbUKcow/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_768/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2023%2F11%2FComments%402x.png 768w,https://proxy-prod.omnivore-image-cache.app/960x0,s_ErgtmwijFDXRfKc9h5weCEphxtuicErARuJX0mCVI8/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_960/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2023%2F11%2FComments%402x.png 960w,https://proxy-prod.omnivore-image-cache.app/1120x0,s1-KofsMPrnIOEMHsjcAXB5pTYgz3swUywrAbK96BdkE/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_1120/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2023%2F11%2FComments%402x.png 1120w,https://proxy-prod.omnivore-image-cache.app/1536x0,syRUFQ3fxpHOsWhokCizEsInOTPWi60tELFzfJpvmrE4/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_1536/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2023%2F11%2FComments%402x.png 1536w,https://proxy-prod.omnivore-image-cache.app/2240x0,sxUKIBgUc80wiA7VHEYLSyVSg3rtYNZlhnC1vY4Nqpac/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_2240/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2023%2F11%2FComments%402x.png 2240w,https://proxy-prod.omnivore-image-cache.app/2624x0,sOZwEEZ1aKbqdW8PZ-G_aprj6Ocu0bS2TPrc6o9fQHpQ/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_2624/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2023%2F11%2FComments%402x.png 2624w," src="https://proxy-prod.omnivore-image-cache.app/550x569,sfJqF_nANYv2rphzJ6QLAMRB-ZB0qYcYx32eeZNGet-o/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_2624/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2023%2F11%2FComments%402x.png"><figcaption data-omnivore-anchor-idx="46"><p data-omnivore-anchor-idx="47">Use your final goal to keep your tasks aimed in the right direction.</p></figcaption></figure></span></button></p><p data-omnivore-anchor-idx="48">You may want to give your task a <a data-omnivore-anchor-idx="49" href="https://todoist.com/help/articles/set-a-recurring-due-date-YUYVJJAV" target="_blank" rel="noreferrer noopener">recurring due date</a> to review the vision you set out for yourself at the start of each day.</p><p data-omnivore-anchor-idx="50">Once you're clear on <em data-omnivore-anchor-idx="51">why</em> you're tidying, you're ready to start tackling the hard decisions of what to keep on your to-do list and what to let go of.</p><h2 data-omnivore-anchor-idx="52" id="2-finish-discarding-first">2. Finish discarding first</h2><p data-omnivore-anchor-idx="53"><button data-omnivore-anchor-idx="54"><span data-omnivore-anchor-idx="55"><figure data-omnivore-anchor-idx="56"><img data-omnivore-anchor-idx="57" data-omnivore-original-src="https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_2624/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2018%2F02%2FQuote-6_blog.png" alt="Quote by Marie Kondo &quot;To truly cherish the things that are important to you, you must first discard those that have outlived their purpose.&quot;" loading="lazy" width="512" height="451" decoding="async" data-nimg="1" sizes="(max-width: 512px) 100vw, 512px" srcset="https://proxy-prod.omnivore-image-cache.app/360x0,s_QPzOUpT4f_8xqo0f0y7any8gzjLMRHF5GCywrjSgG8/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_360/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2018%2F02%2FQuote-6_blog.png 360w,https://proxy-prod.omnivore-image-cache.app/384x0,sldyCLD5Ma2tudL800GvlF35PZeJiDxEl5vpq9B1G5m0/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_384/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2018%2F02%2FQuote-6_blog.png 384w,https://proxy-prod.omnivore-image-cache.app/480x0,s47Px52UGW1PDAck4jS9Yqi5-I3XVtcAvqegSuNzu2eM/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_480/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2018%2F02%2FQuote-6_blog.png 480w,https://proxy-prod.omnivore-image-cache.app/768x0,sF-R3wPn8ekVRZEicoEgmLRB6C8yU0fiX_LkNAs8jwXo/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_768/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2018%2F02%2FQuote-6_blog.png 768w,https://proxy-prod.omnivore-image-cache.app/960x0,sXeTtbnQwNxIfXdIYfbLzILIKn7InertuydvIWLiIUXo/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_960/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2018%2F02%2FQuote-6_blog.png 960w,https://proxy-prod.omnivore-image-cache.app/1120x0,sbE6-mJ4nqFEHisCDUMP1ry6FICGYVKWvTuPcb3WGCIQ/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_1120/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2018%2F02%2FQuote-6_blog.png 1120w,https://proxy-prod.omnivore-image-cache.app/1536x0,s6-pLq62InWKsL-ZlxppuSjzNTQwD39oGYXDXMKOfl9U/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_1536/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2018%2F02%2FQuote-6_blog.png 1536w,https://proxy-prod.omnivore-image-cache.app/2240x0,sHKaHXeaX79uteFadehVQ_ey2SPAUrynsIqo2iK7ureg/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_2240/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2018%2F02%2FQuote-6_blog.png 2240w,https://proxy-prod.omnivore-image-cache.app/2624x0,sgLjm7_xEvSBdUYQ11wN2GabG-HC-NZ4P9xPEZiiUyHc/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_2624/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2018%2F02%2FQuote-6_blog.png 2624w," src="https://proxy-prod.omnivore-image-cache.app/512x451,srkQ-cyW-acfVMoEPkYIV2Ln5lxt7kINna3EngiQEgeo/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_2624/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2018%2F02%2FQuote-6_blog.png"></figure></span></button></p><p data-omnivore-anchor-idx="58">Think of your task list like a physical space: when it's crammed with random stuff, it becomes too hard to find the things that you actually need.</p><p data-omnivore-anchor-idx="59">Right now, your Todoist may be stuffed with half-baked ideas, empty projects, and tasks you forgot to check off:</p><p data-omnivore-anchor-idx="60"><button data-omnivore-anchor-idx="61"><span data-omnivore-anchor-idx="62"><figure data-omnivore-anchor-idx="63"><img data-omnivore-anchor-idx="64" data-omnivore-original-src="https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_2624/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2023%2F11%2FOverdue%402x.png" alt="" loading="lazy" width="550" height="460.5" decoding="async" data-nimg="1" sizes="(max-width: 550px) 100vw, 550px" srcset="https://proxy-prod.omnivore-image-cache.app/360x0,s_vZdeH5HeOajDzFjjJ795PO7DYAZ4bnbBWFFlJmfMPU/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_360/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2023%2F11%2FOverdue%402x.png 360w,https://proxy-prod.omnivore-image-cache.app/384x0,sBOuQBSFM-nCOOQAx-424b4COxnFvue7lEowFV0vPoJ4/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_384/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2023%2F11%2FOverdue%402x.png 384w,https://proxy-prod.omnivore-image-cache.app/480x0,sLEI0BzkI3Ydl571tFPvDBgD8MEAKpQPmLVz5GE7I5DQ/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_480/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2023%2F11%2FOverdue%402x.png 480w,https://proxy-prod.omnivore-image-cache.app/768x0,sUTKY-fFAyBIdEYTn63x1d8S5_hC4P8wu62qNMpaY7Ao/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_768/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2023%2F11%2FOverdue%402x.png 768w,https://proxy-prod.omnivore-image-cache.app/960x0,scSdVrlmLXOk1YkLTo8tyBrGj9xwbc-hf5mwSCXSPMLM/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_960/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2023%2F11%2FOverdue%402x.png 960w,https://proxy-prod.omnivore-image-cache.app/1120x0,spqlD8wDlIZXxRXozIgLShyHHOY0i2kQ5Thrpk8gjcbg/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_1120/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2023%2F11%2FOverdue%402x.png 1120w,https://proxy-prod.omnivore-image-cache.app/1536x0,sh4VbZWSJdw8geHRisy4hlGsduWOW7FKN_EypYCIKtUs/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_1536/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2023%2F11%2FOverdue%402x.png 1536w,https://proxy-prod.omnivore-image-cache.app/2240x0,sFUsPiaAOww9HLh6ZlnzVPsxHuEjG45f3suBnCA5_mzY/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_2240/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2023%2F11%2FOverdue%402x.png 2240w,https://proxy-prod.omnivore-image-cache.app/2624x0,s_48-hkH3GwhBdWkQg-uUtHMYWS5UqjDiXOxK4SkwCKg/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_2624/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2023%2F11%2FOverdue%402x.png 2624w," src="https://proxy-prod.omnivore-image-cache.app/550x0,sEBJk_XdlECWBpilyJg0I7XD_dq5ixyWIR-17GJPP1WA/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_2624/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2023%2F11%2FOverdue%402x.png"><figcaption data-omnivore-anchor-idx="65"><p data-omnivore-anchor-idx="66">Discard first, organize second.</p></figcaption></figure></span></button></p><p data-omnivore-anchor-idx="67">Following Marie’s system, it’s time to do a <em data-omnivore-anchor-idx="68">task inventory.</em></p><div data-omnivore-anchor-idx="69"><p data-omnivore-anchor-idx="70">It’s not just Marie. David Allen, the author of Gettings Things Done, <a data-omnivore-anchor-idx="71" href="https://www.fastcompany.com/3046463/the-father-of-getting-things-done-youre-getting-me-all-wrong" target="_blank" rel="noopener noreferrer">believes</a> that organizing our life is actually a search for mental space: GTD is “more of a space management system.” Learn more about <a data-omnivore-anchor-idx="72" href="https://todoist.com/productivity-methods/getting-things-done" target="_blank" rel="noopener noreferrer">how to use GTD with Todoist</a>.</p></div><h3 data-omnivore-anchor-idx="73" id="do-a-complete-task-inventory">Do a complete task inventory</h3><p data-omnivore-anchor-idx="74"><button data-omnivore-anchor-idx="75"><span data-omnivore-anchor-idx="76"><figure data-omnivore-anchor-idx="77"><img data-omnivore-anchor-idx="78" data-omnivore-original-src="https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_2624/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2018%2F02%2FQuote-2_blog.png" alt="Quote by Marie Kondo: &quot;Once you learn to choose your belongings properly, you will be left with only the amount that fits perfectly in the space you own.&quot;" loading="lazy" width="512" height="451" decoding="async" data-nimg="1" sizes="(max-width: 512px) 100vw, 512px" srcset="https://proxy-prod.omnivore-image-cache.app/360x0,s1b4ahEKW9QAYpNSCr9QPgmMFkRKSg0RExLHx6uQrg3o/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_360/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2018%2F02%2FQuote-2_blog.png 360w,https://proxy-prod.omnivore-image-cache.app/384x0,sbQtqThbohaoCZ_QQ_LoI_gKc8ZEdR9nohx1vz_ze4c0/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_384/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2018%2F02%2FQuote-2_blog.png 384w,https://proxy-prod.omnivore-image-cache.app/480x0,s9LU78XxSHviGqiOhMSFB4TsZ5D4rKKwrnXZ6fWda_Cs/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_480/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2018%2F02%2FQuote-2_blog.png 480w,https://proxy-prod.omnivore-image-cache.app/768x0,s4twFWUMjVOLPutzkLqsQmNmdmsx7JNDBiqiZ_PAfkNE/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_768/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2018%2F02%2FQuote-2_blog.png 768w,https://proxy-prod.omnivore-image-cache.app/960x0,sNdY3SmFNTDKe0aYyvzWr9fhUdxqSyVZjvOnt74U3S6I/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_960/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2018%2F02%2FQuote-2_blog.png 960w,https://proxy-prod.omnivore-image-cache.app/1120x0,sl6mlrxUa4bP9Sbmbop6TLJ--UGLxWlZR8ahvKgKVruI/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_1120/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2018%2F02%2FQuote-2_blog.png 1120w,https://proxy-prod.omnivore-image-cache.app/1536x0,s_BK4kdBgyHwMtACHELgAogZaxdtTXTurp0rLuC0syag/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_1536/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2018%2F02%2FQuote-2_blog.png 1536w,https://proxy-prod.omnivore-image-cache.app/2240x0,sr2Fcp6fyFwAOpbkGLyjiQMXK0kD98fBMKcKccJ9MOBA/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_2240/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2018%2F02%2FQuote-2_blog.png 2240w,https://proxy-prod.omnivore-image-cache.app/2624x0,sv5aDWVFsQ3Gou5CssXysKERlaPlkFw0jFx7nEPbk5Fs/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_2624/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2018%2F02%2FQuote-2_blog.png 2624w," src="https://proxy-prod.omnivore-image-cache.app/512x451,sHggQbqdFgKuYQJqORPwVFqI91_BibCJrhaHcSZ2RD68/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_2624/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2018%2F02%2FQuote-2_blog.png"></figure></span></button></p><p data-omnivore-anchor-idx="79">When Marie Kondo arrives at a house to tidy it up, she begins by kneeling on the floor in the center of the living room to show respect for all of its belongings. From there, she helps her client begin the journey, considering each and every item in turn.</p><p data-omnivore-anchor-idx="80">Take the same approach (kneeling optional) and do a full inventory of all the tasks and projects in your Todoist. Depending on how cluttered your to-do list is, you may want to dedicate a full day or even a weekend to this endeavor. Otherwise, as Marie says, "Tidy a little bit each day, and you'll be tidying forever."</p><p data-omnivore-anchor-idx="81">Remember, this exercise isn’t just about decluttering your to-do list — it’s about cutting away the nonessential so that the only tasks you have left are the ones that bring you closer to the life you want to live. Marie's famous standard is "Does it spark joy?" If the answer is yes, keep it. If not, get rid of it.</p><p data-omnivore-anchor-idx="82">For your to-do list, we recommend a slightly different criterion. As you do your inventory, ask yourself: </p><blockquote data-omnivore-anchor-idx="83"><p data-omnivore-anchor-idx="84">Does this task bring me closer to the life I want to&nbsp;live?</p></blockquote><p data-omnivore-anchor-idx="85">If the answer is yes, keep it. It not, <a data-omnivore-anchor-idx="86" href="https://todoist.com/help/articles/use-the-task-view-to-manage-tasks-in-todoist-eDeRDO0C" target="_blank" rel="noreferrer noopener">delete it</a> from your task list.</p><p data-omnivore-anchor-idx="87">You’re going to run into tasks that you <em data-omnivore-anchor-idx="88">want</em> to delete, but let’s face it, grunt work is necessary for any significant achievement. Try reframing the tasks that don’t excite you. While “run every day” may feel like a chore, “try to run a 10-minute mile today” may be a more specific and motivating challenge.</p><p data-omnivore-anchor-idx="89"><button data-omnivore-anchor-idx="90"><span data-omnivore-anchor-idx="91"><figure data-omnivore-anchor-idx="92"><img data-omnivore-anchor-idx="93" data-omnivore-original-src="https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_2624/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2023%2F11%2FMotivatingTask%402x.png" alt="" loading="lazy" width="307" height="81" decoding="async" data-nimg="1" sizes="(max-width: 307px) 100vw, 307px" srcset="https://proxy-prod.omnivore-image-cache.app/360x0,sEYW8AI-ePrQlsuwviaS0HWBYD3F5Pk9LAAEZPPo6jbk/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_360/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2023%2F11%2FMotivatingTask%402x.png 360w,https://proxy-prod.omnivore-image-cache.app/384x0,sf1ug0T4_PuPoFlBKgr7lzNn6W6MnGIzYKyf6f-HFexg/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_384/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2023%2F11%2FMotivatingTask%402x.png 384w,https://proxy-prod.omnivore-image-cache.app/480x0,sWz7aBa6HBnzO-0cmLZbjbl4oQ8COx-dmNoIU1uQCUH0/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_480/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2023%2F11%2FMotivatingTask%402x.png 480w,https://proxy-prod.omnivore-image-cache.app/768x0,sqrbxeVznQBCkjH-JPHkAByXiDG3qROiW7JS2LBahiFw/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_768/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2023%2F11%2FMotivatingTask%402x.png 768w,https://proxy-prod.omnivore-image-cache.app/960x0,scUn8ZGmnh7rs-Amb1SbTiJAsrW5SjhCdu0Ys77cvhTI/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_960/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2023%2F11%2FMotivatingTask%402x.png 960w,https://proxy-prod.omnivore-image-cache.app/1120x0,sq0wwplbLARYdZhXHlcl3ft9p1JZCoHn_F6IAAN0X9xk/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_1120/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2023%2F11%2FMotivatingTask%402x.png 1120w,https://proxy-prod.omnivore-image-cache.app/1536x0,sJ9JTmQMlRf3o5wNpaU-roePGsgZpOzx-A5vdANhNwDg/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_1536/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2023%2F11%2FMotivatingTask%402x.png 1536w,https://proxy-prod.omnivore-image-cache.app/2240x0,sbkKTIXt-WxSpGarGa9Ei5srgqTLVXp3_SyAeCVk9SQ8/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_2240/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2023%2F11%2FMotivatingTask%402x.png 2240w,https://proxy-prod.omnivore-image-cache.app/2624x0,sVpsD4lseNBL66hBuhJLqKLeTA9IB0WXB9SsJOl66jl8/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_2624/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2023%2F11%2FMotivatingTask%402x.png 2624w," src="https://proxy-prod.omnivore-image-cache.app/307x81,sXqQWYFyc2KQq8Vz-Yo1L7klw17684NRRGL-dAoSLgec/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_2624/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2023%2F11%2FMotivatingTask%402x.png"><figcaption data-omnivore-anchor-idx="94"><p data-omnivore-anchor-idx="95">Re-frame tasks in ways that make you remember why you want to do them in the first place.</p></figcaption></figure></span></button></p><p data-omnivore-anchor-idx="96">Even Marie concedes that there are items you have to keep even if they don't spark joy — like important documents.&nbsp; For work like taking out the trash or <a data-omnivore-anchor-idx="97" href="https://todoist.com/inspiration/manage-taxes-todoist" target="_blank" rel="noreferrer noopener">doing your taxes</a>, create a separate project called “responsibilities” and pare it down to the things that, while they don’t bring you joy, you just have to do anyway.</p><p data-omnivore-anchor-idx="98">This is a good exercise to check in on and see how much of your to-do list is things you <em data-omnivore-anchor-idx="99">get</em> to do vs. things you <em data-omnivore-anchor-idx="100">have</em> to do.</p><h3 data-omnivore-anchor-idx="101" id="let-things-go">Let things&nbsp;go</h3><p data-omnivore-anchor-idx="102"><button data-omnivore-anchor-idx="103"><span data-omnivore-anchor-idx="104"><figure data-omnivore-anchor-idx="105"><img data-omnivore-anchor-idx="106" data-omnivore-original-src="https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_2624/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2018%2F02%2FQuote-5_blog.png" alt="Quote by Marie Kondo: &quot;When we really delve int othe reasons for why we can't let something go, there are only two: an attachment to the past or a fear for the future.&quot;" loading="lazy" width="512" height="451" decoding="async" data-nimg="1" sizes="(max-width: 512px) 100vw, 512px" srcset="https://proxy-prod.omnivore-image-cache.app/360x0,sAv1s0zzBAon8R0IRGZ0znTmf-ncLVaDoSuNnCZs8zLA/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_360/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2018%2F02%2FQuote-5_blog.png 360w,https://proxy-prod.omnivore-image-cache.app/384x0,sir_hxaLKuGq_ENlOXhgvHHlgKrnMFMhEh_SiizN6AAc/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_384/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2018%2F02%2FQuote-5_blog.png 384w,https://proxy-prod.omnivore-image-cache.app/480x0,s8yktse9jw4BqZwZrX__zfqnpHG8PVy8voGTuWc_KVgo/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_480/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2018%2F02%2FQuote-5_blog.png 480w,https://proxy-prod.omnivore-image-cache.app/768x0,sVxuBNFvnmHm0wwQAH-WAlXl1gEV3eXVHecWvjNCJkYI/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_768/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2018%2F02%2FQuote-5_blog.png 768w,https://proxy-prod.omnivore-image-cache.app/960x0,s2KNs1RUWKA-XsIALmxOJMTP0rSC1g_vVa8Bs402NbPo/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_960/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2018%2F02%2FQuote-5_blog.png 960w,https://proxy-prod.omnivore-image-cache.app/1120x0,s2rJKOgtGSZtIxjMb6_xYWcsiurUVNbG6nyf2iIJ0AHE/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_1120/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2018%2F02%2FQuote-5_blog.png 1120w,https://proxy-prod.omnivore-image-cache.app/1536x0,sFNRjd4dbTIiEilTciM868AoFQC2hHTxYR2yxmThRLbU/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_1536/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2018%2F02%2FQuote-5_blog.png 1536w,https://proxy-prod.omnivore-image-cache.app/2240x0,s3mb_25ab-lD0cohA_KAmciUmzThKtii3eX7qSpPuiUA/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_2240/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2018%2F02%2FQuote-5_blog.png 2240w,https://proxy-prod.omnivore-image-cache.app/2624x0,su90zzCIdpdKe-nb3dQzeJbEoeoFCHZg3vlcosfwEQ5w/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_2624/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2018%2F02%2FQuote-5_blog.png 2624w," src="https://proxy-prod.omnivore-image-cache.app/512x451,sGEsJCfJ29_0xAobuDbv2M0ur6QjCSE_JAPWsXnKQZgk/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_2624/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2018%2F02%2FQuote-5_blog.png"></figure></span></button></p><p data-omnivore-anchor-idx="107">You may have a tough time letting go of long-standing tasks on your list. Maybe you always envisioned yourself finishing that home renovation project yourself. Or maybe you don’t want to let go of your novel that hasn’t made it past the first chapter (or page). It can feel like giving up on the version of yourself you wanted to be when you added that task or project in the first place.</p><p data-omnivore-anchor-idx="108">Marie explains that even unfinished tasks serve a purpose. You’ve clarified what you actually care about and why:</p><blockquote data-omnivore-anchor-idx="109"><p data-omnivore-anchor-idx="110">Not every person you meet in life will become a close friend or lover. Some you will find hard to get along with or impossible to like. But these people, too, teach you the precious lesson of who you do like, so that you will appreciate those.</p></blockquote><p data-omnivore-anchor-idx="111">Letting go of old tasks and projects teaches you how to create space for what’s important to you now. As you go through your old tasks, acknowledge that there was a purpose when you added it, but it’s no longer relevant to the life you’re striving for today.</p><p data-omnivore-anchor-idx="112"><button data-omnivore-anchor-idx="113"><span data-omnivore-anchor-idx="114"><figure data-omnivore-anchor-idx="115"><img data-omnivore-anchor-idx="116" data-omnivore-original-src="https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_2624/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2023%2F11%2FDeleteTask%402x.png" alt="" loading="lazy" width="548" height="286" decoding="async" data-nimg="1" sizes="(max-width: 548px) 100vw, 548px" srcset="https://proxy-prod.omnivore-image-cache.app/360x0,swhD0W-K02U-kKej36UdVi0E9KA_RDZEBejsPQAl7N6g/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_360/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2023%2F11%2FDeleteTask%402x.png 360w,https://proxy-prod.omnivore-image-cache.app/384x0,sggi7jDXHxWmZgT1VzTvgKTHD1FIQ3uui62jwUqY2mDY/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_384/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2023%2F11%2FDeleteTask%402x.png 384w,https://proxy-prod.omnivore-image-cache.app/480x0,sM45gUOsCf2dDBW2CeUonjKCw46HK56cyOc4lHzLdp2k/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_480/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2023%2F11%2FDeleteTask%402x.png 480w,https://proxy-prod.omnivore-image-cache.app/768x0,sLlU9pN9bRRBCeVixSO-3EvkbND7B8PlmiEtrTHfqlAc/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_768/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2023%2F11%2FDeleteTask%402x.png 768w,https://proxy-prod.omnivore-image-cache.app/960x0,sK4mKXmbE7ddhybsfYOfSS0aH4p7HSkP_G3dplLhh3Sg/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_960/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2023%2F11%2FDeleteTask%402x.png 960w,https://proxy-prod.omnivore-image-cache.app/1120x0,sfool1qkApvF88d5sKOoIyyHQYmRLi9aUXzq7MFbv49w/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_1120/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2023%2F11%2FDeleteTask%402x.png 1120w,https://proxy-prod.omnivore-image-cache.app/1536x0,sFv9WlNexyLsizbVRe0992-m7VmChbIY9sYDTkwWKDhk/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_1536/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2023%2F11%2FDeleteTask%402x.png 1536w,https://proxy-prod.omnivore-image-cache.app/2240x0,sKP8LVETpvtkWctrkg_Od47ZYIkwFXEpSggLWfDRQvNg/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_2240/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2023%2F11%2FDeleteTask%402x.png 2240w,https://proxy-prod.omnivore-image-cache.app/2624x0,sP9OE9z2LMVqb_Jvd_xDFyfNC_3p3ZWaf6-IKz__0xbQ/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_2624/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2023%2F11%2FDeleteTask%402x.png 2624w," src="https://proxy-prod.omnivore-image-cache.app/548x286,sakOhS_K1Dh3j94G42NzFWfndG9dKwEgqPQzCrLrFzCo/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_2624/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2023%2F11%2FDeleteTask%402x.png"><figcaption data-omnivore-anchor-idx="117"><p data-omnivore-anchor-idx="118">Don't be afraid to delete tasks that are no longer relevant to the life you want to live.</p></figcaption></figure></span></button></p><p data-omnivore-anchor-idx="119">If you just can’t bring yourself to hit delete on a task and banish it from your life forever, you have the option to save it in a temporary project in Todoist. (Marie would strongly disapprove: “Storage is nothing but a cosmetic solution. You must begin by discarding!” But you should do what works best for you.)</p><p data-omnivore-anchor-idx="120">If you’re intent on saving tasks, <a data-omnivore-anchor-idx="121" href="https://todoist.com/help/articles/get-started-with-todoist-OgNNJR#start-with-a-project" target="_blank" rel="noreferrer noopener">create</a> a project named “Maybe later” and hide it from view by <a data-omnivore-anchor-idx="122" href="https://todoist.com/help/articles/archive-a-project-r2KEeYV2" target="_blank" rel="noreferrer noopener">archiving it</a>. You can always come back and <a data-omnivore-anchor-idx="123" href="https://todoist.com/help/articles/unarchive-a-project-in-todoist-FHs9r6CY">unarchive it</a> later.</p><p data-omnivore-anchor-idx="124"><button data-omnivore-anchor-idx="125"><span data-omnivore-anchor-idx="126"><figure data-omnivore-anchor-idx="127"><img data-omnivore-anchor-idx="128" data-omnivore-original-src="https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_2624/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2023%2F11%2FArchiveProject%402x.png" alt="" loading="lazy" width="550" height="355" decoding="async" data-nimg="1" sizes="(max-width: 550px) 100vw, 550px" srcset="https://proxy-prod.omnivore-image-cache.app/360x0,sZYq4udJKWK_HGV-QdEeKEbaGab6Frg5164WJyJq0ICc/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_360/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2023%2F11%2FArchiveProject%402x.png 360w,https://proxy-prod.omnivore-image-cache.app/384x0,sx4EIypKmbEyDtKveH1YMIbK-U3HE5Ha9SBtKU2uFVBE/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_384/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2023%2F11%2FArchiveProject%402x.png 384w,https://proxy-prod.omnivore-image-cache.app/480x0,sOIh8TfIWLdWQ-qPwn1iHoElIEgyudCOfxPnCuy5km4o/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_480/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2023%2F11%2FArchiveProject%402x.png 480w,https://proxy-prod.omnivore-image-cache.app/768x0,sTEnZfpGuV0zWV69tTxxl-dLOQMUvTp-G5iWzB519Buk/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_768/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2023%2F11%2FArchiveProject%402x.png 768w,https://proxy-prod.omnivore-image-cache.app/960x0,sHRgldWehFQCGx3QY_K1VJFwMvk0wELvNYoyuBm8FL_M/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_960/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2023%2F11%2FArchiveProject%402x.png 960w,https://proxy-prod.omnivore-image-cache.app/1120x0,sxorlAQFsauOY3TUKV6vRZT7b_c8VCsiDhdBmG5GM0xU/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_1120/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2023%2F11%2FArchiveProject%402x.png 1120w,https://proxy-prod.omnivore-image-cache.app/1536x0,sud-Dh27c9eBhDiUCRiY1bw5KvGwBv7w8nKl6apsGZRM/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_1536/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2023%2F11%2FArchiveProject%402x.png 1536w,https://proxy-prod.omnivore-image-cache.app/2240x0,s30Jjcr7riSLuLAlNOP1U2tWMuE4of5QYqD9NMKzfAik/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_2240/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2023%2F11%2FArchiveProject%402x.png 2240w,https://proxy-prod.omnivore-image-cache.app/2624x0,szk8lHpMP346Iz5BO88iMdza4D8WVAYmkHh-LGfN3BO4/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_2624/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2023%2F11%2FArchiveProject%402x.png 2624w," src="https://proxy-prod.omnivore-image-cache.app/550x355,swJsdoEek9cPsCS_XwB-tAhsuC1i5byyaZ6cRnyeQjlc/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_2624/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2023%2F11%2FArchiveProject%402x.png"></figure></span></button><a data-omnivore-anchor-idx="129" id="place"></a></p><h2 data-omnivore-anchor-idx="130" id="3-give-every-task-a-place">3. Give every task a place</h2><p data-omnivore-anchor-idx="131"><button data-omnivore-anchor-idx="132"><span data-omnivore-anchor-idx="133"><figure data-omnivore-anchor-idx="134"><img data-omnivore-anchor-idx="135" data-omnivore-original-src="https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_2624/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2018%2F02%2FQuote-7_blog.png" alt="Quote by Marie Kondo &quot;Visible mess helps distract us from the true source of the disorder.&quot;" loading="lazy" width="512" height="451" decoding="async" data-nimg="1" sizes="(max-width: 512px) 100vw, 512px" srcset="https://proxy-prod.omnivore-image-cache.app/360x0,sL7TTyo6GOakuVJkrsahwmDIstQM4PHAS0b9E-TLWuUg/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_360/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2018%2F02%2FQuote-7_blog.png 360w,https://proxy-prod.omnivore-image-cache.app/384x0,s8vx7C8PboFDKTXR11Zmt4E3-UF9qEhNeLIhp89OP0Wc/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_384/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2018%2F02%2FQuote-7_blog.png 384w,https://proxy-prod.omnivore-image-cache.app/480x0,snnb9kw2yLmLYhHS-xX9Mc7JAwgqFYtfJo22y0T2unPE/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_480/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2018%2F02%2FQuote-7_blog.png 480w,https://proxy-prod.omnivore-image-cache.app/768x0,sCnCn-JMchRdNTL803CjBUNJaxId7i26m4SMyio5Cv6s/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_768/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2018%2F02%2FQuote-7_blog.png 768w,https://proxy-prod.omnivore-image-cache.app/960x0,siY8891-6eA-0pxMF24rWtzEVASLa03u3-AGSXJ8FXuI/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_960/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2018%2F02%2FQuote-7_blog.png 960w,https://proxy-prod.omnivore-image-cache.app/1120x0,s87jqmRVHuminAYwJEoYY_gkAUDKGjtVdXdvPksjfcm4/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_1120/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2018%2F02%2FQuote-7_blog.png 1120w,https://proxy-prod.omnivore-image-cache.app/1536x0,sIHLALRhUPO5C_HGIlmEJ3UN8yyEu4bl_NyGNZ9UtGVo/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_1536/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2018%2F02%2FQuote-7_blog.png 1536w,https://proxy-prod.omnivore-image-cache.app/2240x0,sdGZSBVggGN02S7yjDQ6OCWGi_XRh-_kRM3z0eSUzaDI/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_2240/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2018%2F02%2FQuote-7_blog.png 2240w,https://proxy-prod.omnivore-image-cache.app/2624x0,sBSRTamtU2hUs0WRK-ueBjkCqo8T2j9XaRm8x9yVYCD8/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_2624/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2018%2F02%2FQuote-7_blog.png 2624w," src="https://proxy-prod.omnivore-image-cache.app/512x451,sc8i8gXbl8DPHStqKVSUgxtOREiTV8F48bTAWPRglaSI/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_2624/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2018%2F02%2FQuote-7_blog.png"></figure></span></button></p><p data-omnivore-anchor-idx="136">Ok, you’ve got the right tasks — now it’s time to sort and organize. Similar to Marie’s rule that every physical item should have its place, every task on your to-do list should have its project. Group your tasks together in ways that feel intuitive to you.</p><p data-omnivore-anchor-idx="137">For instance, if your goal is to get in shape, you could begin with the “fitness” category and create a project with that name. Find every task related to your goal and move those tasks to the project.</p><p data-omnivore-anchor-idx="138"><button data-omnivore-anchor-idx="139"><span data-omnivore-anchor-idx="140"><figure data-omnivore-anchor-idx="141"><img data-omnivore-anchor-idx="142" data-omnivore-original-src="https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_2624/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2023%2F11%2FProject%402x.png" alt="" loading="lazy" width="550" height="384" decoding="async" data-nimg="1" sizes="(max-width: 550px) 100vw, 550px" srcset="https://proxy-prod.omnivore-image-cache.app/360x0,sgo1XIAMSBt31af5KuKhYB1X9dQUY3GJSc_h6EiJ52Lw/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_360/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2023%2F11%2FProject%402x.png 360w,https://proxy-prod.omnivore-image-cache.app/384x0,s9p8QqIMnF-mrG2sQuGUzMPmd_d59nnTSP7yjqgejVYs/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_384/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2023%2F11%2FProject%402x.png 384w,https://proxy-prod.omnivore-image-cache.app/480x0,sl1YmCfvrmGYwZrC9kjWnB53XaAJQNfTxkub4XEgDKUM/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_480/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2023%2F11%2FProject%402x.png 480w,https://proxy-prod.omnivore-image-cache.app/768x0,sTZIIuHnJ3aiv-scM4--ejJ9rIgynS_X7zBpeU5HB6Uo/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_768/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2023%2F11%2FProject%402x.png 768w,https://proxy-prod.omnivore-image-cache.app/960x0,skmHEr0_UkoaQmUdHEaaBfNd235N6v6kv-SP89FK2J1E/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_960/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2023%2F11%2FProject%402x.png 960w,https://proxy-prod.omnivore-image-cache.app/1120x0,sGBCbTZYcU6fS9bTP5vqKC7861h156m7cewLkthE1mQc/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_1120/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2023%2F11%2FProject%402x.png 1120w,https://proxy-prod.omnivore-image-cache.app/1536x0,s8RgkzmyP8hphJkkF2IjQU2pBBYji2qyMQ6ikRL9wGfA/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_1536/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2023%2F11%2FProject%402x.png 1536w,https://proxy-prod.omnivore-image-cache.app/2240x0,s5a4C0Q0Qml2XVkiL-4uJ5ynxQCER0pKYVillxQC-zA4/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_2240/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2023%2F11%2FProject%402x.png 2240w,https://proxy-prod.omnivore-image-cache.app/2624x0,seTTQ7QJRQXPwVWKR-_0GknZvnr3YW74pve2DdJux9KM/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_2624/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2023%2F11%2FProject%402x.png 2624w," src="https://proxy-prod.omnivore-image-cache.app/550x384,s8qOC_K8GNPSq-S3MJn_oFf6r0eATCqFa24oSrHoqBEo/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_2624/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2023%2F11%2FProject%402x.png"><figcaption data-omnivore-anchor-idx="143"><p data-omnivore-anchor-idx="144">Think of each project as a "room" in the life you want to build.</p></figcaption></figure></span></button></p><p data-omnivore-anchor-idx="145">Repeat this for every category until your Todoist is organized into projects. For tasks that don’t fit into any of the categories you’ve identified as important, ask yourself if it still belongs on your to-do list.</p><p data-omnivore-anchor-idx="146"><strong data-omnivore-anchor-idx="147">Keep your projects visible</strong></p><p data-omnivore-anchor-idx="148">At this point, it’s tempting to start creating a bunch of <a data-omnivore-anchor-idx="149" href="https://todoist.com/help/articles/create-a-sub-project-in-todoist-aTA15C70" target="_blank" rel="noreferrer noopener">sub-projects</a> that you can hide from view (like seasonal storage), but Marie advises her clients to keep everything visible all year round. Just as seeing every physical object you own keeps you from accumulating too much stuff, seeing every project you’ve committed to can be a helpful reminder to stay focused on what’s important and not let new tasks and projects clutter up your list.</p><p data-omnivore-anchor-idx="150"><strong data-omnivore-anchor-idx="151">Sequence your tasks</strong></p><p data-omnivore-anchor-idx="152">A great way to stay in the flow of a project is to finish one task and immediately move on to the next. Take the time to sequence your tasks in a logical order before you get to work.</p><p data-omnivore-anchor-idx="153">Rearrange tasks by dragging the handlebar to the left of each task (Web, Mac, Windows) or tapping, holding, and dragging (iOS, Android) to the right place on the list. You can do the same thing daily while <a data-omnivore-anchor-idx="154" href="https://todoist.com/inspiration/how-to-plan-your-day/" target="_blank" rel="noopener">planning your Today view</a> so that all your tasks due today are in the right order.</p><p data-omnivore-anchor-idx="155"><strong data-omnivore-anchor-idx="156">Add priorities<br data-omnivore-anchor-idx="157"></strong></p><p data-omnivore-anchor-idx="158">There are some tasks that are more essential to your goal than others. Set <a data-omnivore-anchor-idx="159" href="https://todoist.com/help/articles/introduction-to-priorities-Wy82Jp" target="_blank" rel="noreferrer noopener">task priorities</a> to keep track of which is which. In Todoist, priorities range from highest to lowest as P1 (red), P2 (orange), P3 (yellow), or P4 (no color). Here’s an example of how to evaluate a task’s priority level:</p><p data-omnivore-anchor-idx="160"><strong data-omnivore-anchor-idx="161">P1 </strong>— Must finish.</p><p data-omnivore-anchor-idx="162"><strong data-omnivore-anchor-idx="163">P2</strong> — Nice to have.</p><p data-omnivore-anchor-idx="164"><strong data-omnivore-anchor-idx="165">P3</strong> — Finish if there is time available.</p><p data-omnivore-anchor-idx="166"><strong data-omnivore-anchor-idx="167">P4 </strong>— Unnecessary. These may have snuck in through your task inventory. Delete them now.</p><p data-omnivore-anchor-idx="168"><button data-omnivore-anchor-idx="169"><span data-omnivore-anchor-idx="170"><figure data-omnivore-anchor-idx="171"><img data-omnivore-anchor-idx="172" data-omnivore-original-src="https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_2624/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2023%2F11%2FPriorities%402x-1.png" alt="" loading="lazy" width="550" height="384" decoding="async" data-nimg="1" sizes="(max-width: 550px) 100vw, 550px" srcset="https://proxy-prod.omnivore-image-cache.app/360x0,spjJLHHMm_bXVDgJ9EM7V6AwctfpS_P_u4eLmbVoSVhM/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_360/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2023%2F11%2FPriorities%402x-1.png 360w,https://proxy-prod.omnivore-image-cache.app/384x0,s2SDwSRfDGudSCc6IpflKg6mMCmBbZu4OE5muWqpPgTc/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_384/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2023%2F11%2FPriorities%402x-1.png 384w,https://proxy-prod.omnivore-image-cache.app/480x0,ssFh9dVBmvo257Zuz-NjN4q5DS0CuLYOiBgZNAAHKtws/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_480/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2023%2F11%2FPriorities%402x-1.png 480w,https://proxy-prod.omnivore-image-cache.app/768x0,ssG79iMoQ4x5rRBeMvFEdlZSOY0PY4VKGUIHFk9_6mAI/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_768/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2023%2F11%2FPriorities%402x-1.png 768w,https://proxy-prod.omnivore-image-cache.app/960x0,smho-AQjj9AoJGOpNfVXZbbgOGKTwrKAXjQppZhMWLqc/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_960/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2023%2F11%2FPriorities%402x-1.png 960w,https://proxy-prod.omnivore-image-cache.app/1120x0,sK8z2NjBM7_qJUXtd_b7-Sf-ZsgZfOAINCZMD6dp6N3I/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_1120/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2023%2F11%2FPriorities%402x-1.png 1120w,https://proxy-prod.omnivore-image-cache.app/1536x0,s4YGwg6zCwVlKxQ1ZZgcUgT8Xm8dTiVsTwOygUgxCsrk/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_1536/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2023%2F11%2FPriorities%402x-1.png 1536w,https://proxy-prod.omnivore-image-cache.app/2240x0,sIRnI2KInGJnEwfVJfGpDwkYk8bJopibi8FdE_1ifLdY/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_2240/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2023%2F11%2FPriorities%402x-1.png 2240w,https://proxy-prod.omnivore-image-cache.app/2624x0,sJzHdFeATxaewT4wpd22eutxNUlo-rhJCSipE3SJsWjc/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_2624/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2023%2F11%2FPriorities%402x-1.png 2624w," src="https://proxy-prod.omnivore-image-cache.app/550x384,sglHiKYm_7iDYMTwwQW7t0oTH4oYt8jVAegQ6n_VZZdY/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_2624/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2023%2F11%2FPriorities%402x-1.png"><figcaption data-omnivore-anchor-idx="173"><p data-omnivore-anchor-idx="174">Use priority levels to automatically order tasks from most to least important.</p></figcaption></figure></span></button></p><p data-omnivore-anchor-idx="175"><strong data-omnivore-anchor-idx="176">Give each task a due date<br data-omnivore-anchor-idx="177"></strong></p><p data-omnivore-anchor-idx="178">Finally, <a data-omnivore-anchor-idx="179" href="https://todoist.com/help/articles/introduction-to-due-dates-and-due-times-q7VobO">set a date</a> to complete each task. A handy tip is to make an estimate for how long a task will take to complete and then double it. It’s better to overestimate and finish early than to underestimate and finish late. Give each task a due date and schedule repeating tasks with a <a data-omnivore-anchor-idx="180" href="https://todoist.com/help/articles/introduction-to-due-dates-and-due-times-q7VobO" target="_blank" rel="noreferrer noopener">recurring due&nbsp;date</a>.</p><p data-omnivore-anchor-idx="181"><button data-omnivore-anchor-idx="182"><span data-omnivore-anchor-idx="183"><figure data-omnivore-anchor-idx="184"><img data-omnivore-anchor-idx="185" data-omnivore-original-src="https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_2624/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2023%2F11%2FQuickAdd%402x.png" alt="" loading="lazy" width="598" height="298" decoding="async" data-nimg="1" sizes="(max-width: 598px) 100vw, 598px" srcset="https://proxy-prod.omnivore-image-cache.app/360x0,sO11zHxEkc5HTBqxbWU0Pim1Bek4AsuO2Bm0UEHTAKLY/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_360/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2023%2F11%2FQuickAdd%402x.png 360w,https://proxy-prod.omnivore-image-cache.app/384x0,ssJBvuzXbby_Va59XBSvDr7HWdHf2ik1oExO6vPHgJ6k/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_384/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2023%2F11%2FQuickAdd%402x.png 384w,https://proxy-prod.omnivore-image-cache.app/480x0,sr7l-KKjGM3wmIEOH0rAocjn7xQ038lS3Z986lv9gbb0/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_480/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2023%2F11%2FQuickAdd%402x.png 480w,https://proxy-prod.omnivore-image-cache.app/768x0,srxJfugNT105KiuKyCLpLCKdrr_dbgKg9BGCAq2hrfGU/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_768/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2023%2F11%2FQuickAdd%402x.png 768w,https://proxy-prod.omnivore-image-cache.app/960x0,s4zOVdo59p1SxX4wA8mf9TYz-orXn09k1cfh6__VMIk0/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_960/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2023%2F11%2FQuickAdd%402x.png 960w,https://proxy-prod.omnivore-image-cache.app/1120x0,sByeaY-40LOPuvgN6wa1jwCRNNAIx87gBgImUS8Jq7_E/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_1120/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2023%2F11%2FQuickAdd%402x.png 1120w,https://proxy-prod.omnivore-image-cache.app/1536x0,sjHJwvunI3v_WG3Y6GWcaY199TOhL7XD_Q3wH5knzO2E/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_1536/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2023%2F11%2FQuickAdd%402x.png 1536w,https://proxy-prod.omnivore-image-cache.app/2240x0,syKBNwnONzlViaQotXoCUY2y0ic1cVBB0y1pcVStaPfQ/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_2240/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2023%2F11%2FQuickAdd%402x.png 2240w,https://proxy-prod.omnivore-image-cache.app/2624x0,sOz9mQw7yVkjRZ57lJME9TOCVbF44K_qL-goYLRT2olI/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_2624/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2023%2F11%2FQuickAdd%402x.png 2624w," src="https://proxy-prod.omnivore-image-cache.app/598x298,sw0vLsLYn2Ux6irOLxaCN21Gpy5GhNa-Dubu94R9Q_6A/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_2624/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2023%2F11%2FQuickAdd%402x.png"></figure></span></button></p><h3 data-omnivore-anchor-idx="186" id="make-sure-your-to-do-list-sparks-joy">Make sure your to-do list “sparks&nbsp;joy”</h3><p data-omnivore-anchor-idx="187">Aesthetics affect our mindset. When Marie does her inventory, she shows up dressed to the nines. She has carefully picked out every part of her appearance to suit the needs of the day. She takes the same approach to the space she’s reviewing:</p><blockquote data-omnivore-anchor-idx="188"><p data-omnivore-anchor-idx="189">"Imagine what it would be life to have a bookshelf filled only with books that you really love. Isn't that image spellbinding? For someone who loves books, what greater happiness could there be?"</p></blockquote><p data-omnivore-anchor-idx="190">Give Todoist a style that will put you in a positive mindset whenever you open it. To borrow Marie’s signature phrase, make your digital task space “spark joy.” Here are a few tips:</p><ul data-omnivore-anchor-idx="191">
  <li data-omnivore-anchor-idx="192">Write clear, specific, and motivating project and task titles. For example, instead of naming your task “Go for a jog,” try “Take a morning jog through the forest” or “Explore a new running route today”</li>



  <li data-omnivore-anchor-idx="193">Add <a data-omnivore-anchor-idx="194" href="https://todoist.com/help/articles/how-to-format-text-e5dHw9">text formatting and emojis</a> to give them life: “Take a morning jog through the forest 🌅🏃🌲”</li>



  <li data-omnivore-anchor-idx="195">Use a <a data-omnivore-anchor-idx="196" href="https://todoist.com/help/articles/change-color-themes-zD0N5K" target="_blank" rel="noreferrer noopener">color theme</a> that matches your style or mood</li>



  <li data-omnivore-anchor-idx="197">Arrange your projects in an intuitive way</li>



  <li data-omnivore-anchor-idx="198">Continually let go of the projects and tasks that don't excite you</li>
  </ul>
  <p data-omnivore-anchor-idx="199">Your Todoist is ready for action. Simply log in every day, and your Today view will let you know what to work on. When things get busy, you’ll have clarity on what you <del data-omnivore-anchor-idx="200">have to</del> get to focus on next.</p><h2 data-omnivore-anchor-idx="201" id="4-change-your-mindset-then-your-habits">4. Change your mindset, then your habits</h2><p data-omnivore-anchor-idx="202"><button data-omnivore-anchor-idx="203"><span data-omnivore-anchor-idx="204"><figure data-omnivore-anchor-idx="205"><img data-omnivore-anchor-idx="206" data-omnivore-original-src="https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_2624/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2018%2F02%2FMarie-Kondo-quote.png" alt="Quote by Marie Kondo &quot;People cannot change their tidying habits without first changing their way of thinking.&quot;" loading="lazy" width="512" height="451" decoding="async" data-nimg="1" sizes="(max-width: 512px) 100vw, 512px" srcset="https://proxy-prod.omnivore-image-cache.app/360x0,snXo_UpBx-50QqRI09V_HoLbSXmX9hBQQ9v6_WGe4Xnw/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_360/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2018%2F02%2FMarie-Kondo-quote.png 360w,https://proxy-prod.omnivore-image-cache.app/384x0,sKmGeViMMwE8aGoHpRGzmVn9oSGcf0ejh-19GefbouNI/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_384/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2018%2F02%2FMarie-Kondo-quote.png 384w,https://proxy-prod.omnivore-image-cache.app/480x0,soDaHRuOVVWmvkNvBMA9i03LUkk_I3aXF_bJPbr98LmE/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_480/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2018%2F02%2FMarie-Kondo-quote.png 480w,https://proxy-prod.omnivore-image-cache.app/768x0,sQ0JMVn7mMRx_VTZrz64YafVB8D0SKZ9-m5_JdIl8Tq0/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_768/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2018%2F02%2FMarie-Kondo-quote.png 768w,https://proxy-prod.omnivore-image-cache.app/960x0,s7kMxIMfjoj3xCjoWO1hO072jR_VuzbNE-e_5ECvKZAc/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_960/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2018%2F02%2FMarie-Kondo-quote.png 960w,https://proxy-prod.omnivore-image-cache.app/1120x0,s0X8KHskkXQtWYpZfZb4rGisKeW3nTRdZV9fNKMW1vok/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_1120/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2018%2F02%2FMarie-Kondo-quote.png 1120w,https://proxy-prod.omnivore-image-cache.app/1536x0,s7_n60jvbwjfPtPg8g9EU7c-SCupDHXhPheCIsvjVWEk/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_1536/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2018%2F02%2FMarie-Kondo-quote.png 1536w,https://proxy-prod.omnivore-image-cache.app/2240x0,sIn2_gHFul5Hp51PtSwzysaemtSOaSjfGZLKluVDGujc/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_2240/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2018%2F02%2FMarie-Kondo-quote.png 2240w,https://proxy-prod.omnivore-image-cache.app/2624x0,sJQ26VYH2jF5gpRmK2zFICWivUUQTP1IPpwSzuEH9OR4/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_2624/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2018%2F02%2FMarie-Kondo-quote.png 2624w," src="https://proxy-prod.omnivore-image-cache.app/512x451,siFSWtDt9govf6WdYk1qAt4mplDJqRD_hX_4eQqYdvX0/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_2624/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2018%2F02%2FMarie-Kondo-quote.png"></figure></span></button></p><p data-omnivore-anchor-idx="207">You’ve revamped your task list to be cleaner, simpler, and more aligned with your goals. But don’t expect the work to be finished overnight.</p><p data-omnivore-anchor-idx="208">At this point, Marie has noticed that many people lose faith — “I’m just a messy person!” But that’s not the case. Being tidy is an acquired mindset, she says.</p><p data-omnivore-anchor-idx="209">With your to-do list, this translates to asking that essential question for every new task coming into your Todoist: Does it lead to your vision? If not, discard it on the spot. If the answer is yes, add it to the proper spot on your list.</p><p data-omnivore-anchor-idx="210">Of course, unhelpful tasks are bound to sneak in from time to time. Weed them out with a <a data-omnivore-anchor-idx="211" href="https://todoist.com/inspiration/weekly-review/" target="_blank" rel="noopener noreferrer">weekly review,</a> so you start each week with a clearly prioritized to-do list. Discard tasks that don't bring you closer to your goals. Organize the spare tasks that have ended up in your <a data-omnivore-anchor-idx="212" href="https://todoist.com/help/articles/how-to-best-use-the-inbox-HwHvYErS" target="_blank" rel="noreferrer noopener">inbox</a> into the right projects. Have certain tasks or projects fallen out of line with your goal? Discard those, too.</p><p data-omnivore-anchor-idx="213">Finally, check in on your big-picture goals every few months. It’s natural for priorities to shift as you grow and learn more about what tasks and projects truly motivate you.</p><p data-omnivore-anchor-idx="214"><button data-omnivore-anchor-idx="215"><span data-omnivore-anchor-idx="216"><figure data-omnivore-anchor-idx="217"><img data-omnivore-anchor-idx="218" data-omnivore-original-src="https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_2624/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2018%2F02%2FQuote-3_blog.png" alt="Quote by Marie Kondo: &quot;From the moment you start tidying, you will be compelled to reset your life. As a result, your life will start to change.&quot;" loading="lazy" width="512" height="451" decoding="async" data-nimg="1" sizes="(max-width: 512px) 100vw, 512px" srcset="https://proxy-prod.omnivore-image-cache.app/360x0,skALcjcaHAdqblfxBIwouIs5eOsGmHvLWeECpxvV5VYY/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_360/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2018%2F02%2FQuote-3_blog.png 360w,https://proxy-prod.omnivore-image-cache.app/384x0,sy2Yd5mWuBHWdQjhLZsMjeKxcAdQBlV_bwdv5QtKOmew/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_384/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2018%2F02%2FQuote-3_blog.png 384w,https://proxy-prod.omnivore-image-cache.app/480x0,sWjvvHwHnTfF2IltUU-FBTfFWv30kbj9rBgF7o4f4yJk/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_480/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2018%2F02%2FQuote-3_blog.png 480w,https://proxy-prod.omnivore-image-cache.app/768x0,sB7e0KPwbEru5Yw9usaf3LcbUCmze7P2CRiar2QkKxl8/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_768/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2018%2F02%2FQuote-3_blog.png 768w,https://proxy-prod.omnivore-image-cache.app/960x0,sLgsP-Z4NoEOlW3FaQEAeAOEc0pM8ywmI2QYXYvalOk0/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_960/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2018%2F02%2FQuote-3_blog.png 960w,https://proxy-prod.omnivore-image-cache.app/1120x0,sJCr_2T01n0wtF-GSb8t3dIAkjuqrQFyP4sF7Apashg8/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_1120/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2018%2F02%2FQuote-3_blog.png 1120w,https://proxy-prod.omnivore-image-cache.app/1536x0,szAvphV1fMF7VqGSaZuqPVAy8G8GlxVxqe1YYmyxxEM4/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_1536/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2018%2F02%2FQuote-3_blog.png 1536w,https://proxy-prod.omnivore-image-cache.app/2240x0,sWSAJ_Y3WYCl22fFTPoDuBgFvTnuPnW0MxHQz3WbniO0/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_2240/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2018%2F02%2FQuote-3_blog.png 2240w,https://proxy-prod.omnivore-image-cache.app/2624x0,s1x5wMCbkH_5jOAIdTbFr1yrpN8eAt5CpcraKUqGVtUA/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_2624/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2018%2F02%2FQuote-3_blog.png 2624w," src="https://proxy-prod.omnivore-image-cache.app/512x451,sg30SjuWfbydy7rwalDcVQSETRcRmoziILNaI7RoKEmg/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_2624/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2018%2F02%2FQuote-3_blog.png"></figure></span></button></p><p data-omnivore-anchor-idx="219">If your goals change, update your "life vision" task to document and do a mini-inventory to re-tidy your Todoist. Over time, the goals that stand the test of time will be valuable to you, and now you’ll have the tools to achieve them in an organized way.</p><hr data-omnivore-anchor-idx="220" aria-orientation="horizontal"><p data-omnivore-anchor-idx="221">We spend a lot of time in digital spaces. Luckily, we can take a page from Marie Kondo’s ideas about physical space to keep our digital environment — and, by extension, our minds and lives — tidy. It’s not just a productivity boost; in a world of constant interruptions and information overload, healthy organizational habits will help you stay balanced and carve out time for the things that bring you joy, all the while making progress toward what matters to you most.</p></div><div data-omnivore-anchor-idx="222"><p data-omnivore-anchor-idx="223">Neil Vidyarthi</p><p data-omnivore-anchor-idx="224"><span data-omnivore-anchor-idx="225">Neil Vidyarthi is a product marketer and mindfulness evangelist at Doist.</span></p></div></div></article></DIV></DIV>

raw_content:
  ---
  id: f5956559-3eb2-4717-93bd-3f3a2f0c5549
  title: |
    The Life-Changing Magic of Tidying Up Your To-Do List
  status: ARCHIVED
  tags:
    - read-later
  date_added: 2024-02-23 20:22:03
  url_omnivore: |
    https://omnivore.app/me/https-todoist-com-inspiration-life-changing-magic-tidying-todois-18bf18e00a2
  url_original: |
    https://todoist.com/inspiration/life-changing-magic-tidying-todoist
  ---

  # The Life-Changing Magic of Tidying Up Your To-Do List

  ## Notes

  Before you even start looking at your tasks, write down what having a neatly organized and prioritized to-do list would mean for your life. Maybe you want to run a successful business, get in shape, be more present with your family, have closer relationships with friends, or lead a more adventurous life.

  Find a medium that lets you truly envision the details. You can describe it in words, mind map it, draw it out, create a Pinterest board, collect YouTube videos, or brainstorm in whatever form suits you.

  Why do you want to get in shape? The answer might be "to have more energy and feel more confident."  Why do you want to have more energy and feel more confident? Maybe the answer is "to be more fully yourself and stop worrying about what other people think of you." Ask yourself "why" 3-5 times for every item in your vision.
  ## Original

  <DIV id="readability-content"><DIV data-omnivore-anchor-idx="1" class="page" id="readability-page-1"><article data-omnivore-anchor-idx="2"><div data-omnivore-anchor-idx="3"><header data-omnivore-anchor-idx="4"><p data-omnivore-anchor-idx="5">Your to-do list should spark joy, not dread. </p></header><figure data-omnivore-anchor-idx="6"><img data-omnivore-anchor-idx="7" data-omnivore-original-src="https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_2624/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2018%2F02%2FErickMRamos_Thumbnail.jpg" alt="" fetchpriority="high" width="1056" height="600" decoding="async" data-nimg="1" sizes="(max-width: 1056px) 100vw, 1056px" srcset="https://proxy-prod.omnivore-image-cache.app/360x0,s2pPzWVwDdpoMzmcla1WY3YTiuziGGtvFiaKsR9dYQho/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_360/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2018%2F02%2FErickMRamos_Thumbnail.jpg 360w,https://proxy-prod.omnivore-image-cache.app/384x0,sk3KXBW_fLMf3iAUIQLlLsS99Ia1UrigJNiZNQ5WwMqI/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_384/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2018%2F02%2FErickMRamos_Thumbnail.jpg 384w,https://proxy-prod.omnivore-image-cache.app/480x0,sNx_OBUxyxjW0FgILdJMcQE8LFI5KlWZXQxmHQ95NNUU/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_480/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2018%2F02%2FErickMRamos_Thumbnail.jpg 480w,https://proxy-prod.omnivore-image-cache.app/768x0,sZk_Wau5hexgvBE_8RYd3pAp8y_IxVDIbe4wALFiEgQY/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_768/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2018%2F02%2FErickMRamos_Thumbnail.jpg 768w,https://proxy-prod.omnivore-image-cache.app/960x0,s2RNWKFuW-d2B3vG2H5Um8pkhpAnWnnH3qIZyEZx4ls0/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_960/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2018%2F02%2FErickMRamos_Thumbnail.jpg 960w,https://proxy-prod.omnivore-image-cache.app/1120x0,s_Kwh_LE5N7dGe4E5fjB6T_UliHFavZBkOJy5C6sSXfQ/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_1120/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2018%2F02%2FErickMRamos_Thumbnail.jpg 1120w,https://proxy-prod.omnivore-image-cache.app/1536x0,snehhqjYLiPURZHBj3ln6VQ3IxHxVA-23g6yx3QGc-ks/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_1536/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2018%2F02%2FErickMRamos_Thumbnail.jpg 1536w,https://proxy-prod.omnivore-image-cache.app/2240x0,sJaL5to7RhRJhrXlDPLKfPKeb0uKJNOnEjsYHI9OYOt4/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_2240/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2018%2F02%2FErickMRamos_Thumbnail.jpg 2240w,https://proxy-prod.omnivore-image-cache.app/2624x0,sk4WpINf3s30tasmHaMd37_FtxGMQlKll5UKfizfjYOY/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_2624/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2018%2F02%2FErickMRamos_Thumbnail.jpg 2624w," src="https://proxy-prod.omnivore-image-cache.app/1056x600,suQwzWvR6LVntj5cL6lQ3l9zjBVrYKQ9sR3VVBMJZXl0/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_2624/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2018%2F02%2FErickMRamos_Thumbnail.jpg"><figcaption data-omnivore-anchor-idx="8"><span data-omnivore-anchor-idx="9">Illustration by <a data-omnivore-anchor-idx="10" href="https://www.instagram.com/erickmramos/" target="_blank" rel="noopener noreferrer">Erick M. Ramos</a></span></figcaption></figure></div><div data-omnivore-anchor-idx="11"><div data-omnivore-anchor-idx="12"><p data-omnivore-anchor-idx="13">Your to-do list is an extension of your mind. It’s the spare room where you keep tomorrow’s work tucked away so you can focus on what’s in front of you today.</p><p data-omnivore-anchor-idx="14">But just like a spare room, if you don’t regularly tidy up your list, things get cluttered. Instead of being a reliable source of to-dos, it becomes a task in itself to sort through the mess and figure out what to work on next. A tidy task list does more than just improve productivity — it benefits your mental clarity, decision-making, and even your mood.</p><p data-omnivore-anchor-idx="15">Taking a cue from Marie Kondo’s excellent <a data-omnivore-anchor-idx="16" href="http://konmari.com/" target="_blank" rel="noopener noreferrer"><em data-omnivore-anchor-idx="17">The Life-Changing Magic of Tidying Up</em></a>, you can declutter your task list in the same way she tidies physical belongings: by establishing a few simple, organizational habits.</p><p data-omnivore-anchor-idx="18">So get started by following along with Marie’s <em data-omnivore-anchor-idx="19">Konmari</em> system: The to-do list edition.</p><h2 data-omnivore-anchor-idx="20" id="1-before-you-start-visualize-your-destination">1. Before you start, visualize your destination</h2><p data-omnivore-anchor-idx="21"><button data-omnivore-anchor-idx="22"><span data-omnivore-anchor-idx="23"><figure data-omnivore-anchor-idx="24"><img data-omnivore-anchor-idx="25" data-omnivore-original-src="https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_2624/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2018%2F02%2FQuote-1_blog.png" alt="&quot;The question of what you want to own is actually the question of how you want to live your life.&quot; – Marie Kondo" loading="lazy" width="512" height="451" decoding="async" data-nimg="1" sizes="(max-width: 512px) 100vw, 512px" srcset="https://proxy-prod.omnivore-image-cache.app/360x0,sYtVB_fNdJjInbK2bMuv1K0eSiQpdkMWcijLvghKnFk8/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_360/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2018%2F02%2FQuote-1_blog.png 360w,https://proxy-prod.omnivore-image-cache.app/384x0,sp_8QKA9E6zyh35Hfz_toPfKZPnUybnCea5sjE69aLng/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_384/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2018%2F02%2FQuote-1_blog.png 384w,https://proxy-prod.omnivore-image-cache.app/480x0,s29MtbakKYQUV0yFrIKEVEf2Cj36305zQB0JyejU41PQ/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_480/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2018%2F02%2FQuote-1_blog.png 480w,https://proxy-prod.omnivore-image-cache.app/768x0,svAV0g1bGcpN3BiyrpxQ2WyW91fypAdR6ZP4_qvJZsFc/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_768/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2018%2F02%2FQuote-1_blog.png 768w,https://proxy-prod.omnivore-image-cache.app/960x0,sPCoLsvuqpLhKfuURcP7gM9J0FM7yc-ZSu7AqvzkzfqQ/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_960/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2018%2F02%2FQuote-1_blog.png 960w,https://proxy-prod.omnivore-image-cache.app/1120x0,s8lThAdKVjDYu2NWVM3LNiXMzRGXVnXLLloTpRQ7rJ7Y/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_1120/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2018%2F02%2FQuote-1_blog.png 1120w,https://proxy-prod.omnivore-image-cache.app/1536x0,sN-Geh1306ZlZD2ufBV-_jie2GSHFzCBuJ-cP-wFKH-8/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_1536/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2018%2F02%2FQuote-1_blog.png 1536w,https://proxy-prod.omnivore-image-cache.app/2240x0,sgdLE6KTBH1GJyHy5XSj6towetODbTWyO6v_Bamqfym0/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_2240/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2018%2F02%2FQuote-1_blog.png 2240w,https://proxy-prod.omnivore-image-cache.app/2624x0,sWoShwTijmof-jGvBNy0n83-Jkz2Ob-oqJL4XI8fIvq8/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_2624/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2018%2F02%2FQuote-1_blog.png 2624w," src="https://proxy-prod.omnivore-image-cache.app/512x451,sM8WI_ONTxFJTPMOzsZlJpZ1bE59mBTxeDNah1Q9UxjA/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_2624/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2018%2F02%2FQuote-1_blog.png"></figure></span></button></p><p data-omnivore-anchor-idx="26">How can you know which tasks are worth doing if you don’t know where you want to go? How will you find the motivation to keep your to-do list clutter-free if you don't know why you're decluttering in the first place?</p><p data-omnivore-anchor-idx="27">Before touching any clutter, Marie asks her clients to envision the life they want to achieve by tidying up.</p><blockquote data-omnivore-anchor-idx="28"><p data-omnivore-anchor-idx="29">Think in concrete terms so that you can vividly picture what it would be like to live in a clutter-free space.</p></blockquote><p data-omnivore-anchor-idx="30">Or in this case, a clutter-free to-do list. Before you even start looking at your tasks, write down what having a neatly organized and prioritized to-do list would mean for your life. Maybe you want to run a successful business, get in shape, be more present with your family, have closer relationships with friends, or lead a more adventurous life.</p><p data-omnivore-anchor-idx="31">Find a medium that lets you truly envision the details. You can describe it in words, mind map it, draw it out, create a Pinterest board, collect YouTube videos, or brainstorm in whatever form suits you.</p><p data-omnivore-anchor-idx="32">But don't stop there. "[T]o prevent rebound you need to move ahead properly, step by step, as you launch into this once-in-a-lifetime event," Marie says. "Your next step is to identify why you want to live like that."</p><p data-omnivore-anchor-idx="33">Why do you want to get in shape? The answer might be "to have more energy and feel more confident."&nbsp; Why do you want to have more energy and feel more confident? Maybe the answer is "to be more fully yourself and stop worrying about what other people think of you." Ask yourself "why" 3-5 times for every item in your vision. Marie explains the importance of this step to prevent a relapse into messiness:</p><blockquote data-omnivore-anchor-idx="34"><p data-omnivore-anchor-idx="35">As you continue to explore the reasons behind your ideal lifestyle, you will come to a simple realization. The whole point in both discarding and keeping things is to be happy. It may seem obvious, but it is important to experience this realization for yourself and let it sink into your heart. Before you start tidying, look at the lifestyle you aspire to and ask yourself, “Why do I want to tidy?”</p></blockquote><p data-omnivore-anchor-idx="36">Keep your "why" top-of-mind as you tidy and after by creating <a data-omnivore-anchor-idx="37" href="https://todoist.com/help/articles/get-started-with-todoist-OgNNJR#add-your-first-task" target="_blank" rel="noreferrer noopener">a task</a> in your Todoist that represents your final vision. If you have an accompanying document or image, <a data-omnivore-anchor-idx="38" href="https://todoist.com/help/articles/how-to-format-text-e5dHw9" target="_blank" rel="noreferrer noopener">link</a> to it from your task or <a data-omnivore-anchor-idx="39" href="https://todoist.com/help/articles/introduction-to-comments-and-file-uploads-CwiA50">attach</a> it to your task comments. This is the True North that will help you determine whether a task is worth doing. If you’ve written out an all-encompassing vision, break it down into <a data-omnivore-anchor-idx="40" href="https://todoist.com/inspiration/goals-todoist/" target="_blank" rel="noopener">several goals for each area of your life</a>, and create a task for each.</p><p data-omnivore-anchor-idx="41"><button data-omnivore-anchor-idx="42"><span data-omnivore-anchor-idx="43"><figure data-omnivore-anchor-idx="44"><img data-omnivore-anchor-idx="45" data-omnivore-original-src="https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_2624/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2023%2F11%2FComments%402x.png" alt="" loading="lazy" width="550" height="569" decoding="async" data-nimg="1" sizes="(max-width: 550px) 100vw, 550px" srcset="https://proxy-prod.omnivore-image-cache.app/360x0,sgGZ_AeCPQTv8XHZIxzb6qKwPVDra7KLlD1Sm84QNRJc/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_360/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2023%2F11%2FComments%402x.png 360w,https://proxy-prod.omnivore-image-cache.app/384x0,s6fshfj0V5LQ-CeWfS9XhT4tBriGcT-60MLDgXmJL_qg/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_384/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2023%2F11%2FComments%402x.png 384w,https://proxy-prod.omnivore-image-cache.app/480x0,sX_zSJwY3wFtwYBjjjWokjNuCCxgmrT7TyRgcprIU73g/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_480/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2023%2F11%2FComments%402x.png 480w,https://proxy-prod.omnivore-image-cache.app/768x0,sNrUzgRe1FXrmd3WU946E4VT7JMzHqi_uHO26LbUKcow/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_768/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2023%2F11%2FComments%402x.png 768w,https://proxy-prod.omnivore-image-cache.app/960x0,s_ErgtmwijFDXRfKc9h5weCEphxtuicErARuJX0mCVI8/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_960/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2023%2F11%2FComments%402x.png 960w,https://proxy-prod.omnivore-image-cache.app/1120x0,s1-KofsMPrnIOEMHsjcAXB5pTYgz3swUywrAbK96BdkE/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_1120/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2023%2F11%2FComments%402x.png 1120w,https://proxy-prod.omnivore-image-cache.app/1536x0,syRUFQ3fxpHOsWhokCizEsInOTPWi60tELFzfJpvmrE4/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_1536/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2023%2F11%2FComments%402x.png 1536w,https://proxy-prod.omnivore-image-cache.app/2240x0,sxUKIBgUc80wiA7VHEYLSyVSg3rtYNZlhnC1vY4Nqpac/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_2240/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2023%2F11%2FComments%402x.png 2240w,https://proxy-prod.omnivore-image-cache.app/2624x0,sOZwEEZ1aKbqdW8PZ-G_aprj6Ocu0bS2TPrc6o9fQHpQ/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_2624/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2023%2F11%2FComments%402x.png 2624w," src="https://proxy-prod.omnivore-image-cache.app/550x569,sfJqF_nANYv2rphzJ6QLAMRB-ZB0qYcYx32eeZNGet-o/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_2624/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2023%2F11%2FComments%402x.png"><figcaption data-omnivore-anchor-idx="46"><p data-omnivore-anchor-idx="47">Use your final goal to keep your tasks aimed in the right direction.</p></figcaption></figure></span></button></p><p data-omnivore-anchor-idx="48">You may want to give your task a <a data-omnivore-anchor-idx="49" href="https://todoist.com/help/articles/set-a-recurring-due-date-YUYVJJAV" target="_blank" rel="noreferrer noopener">recurring due date</a> to review the vision you set out for yourself at the start of each day.</p><p data-omnivore-anchor-idx="50">Once you're clear on <em data-omnivore-anchor-idx="51">why</em> you're tidying, you're ready to start tackling the hard decisions of what to keep on your to-do list and what to let go of.</p><h2 data-omnivore-anchor-idx="52" id="2-finish-discarding-first">2. Finish discarding first</h2><p data-omnivore-anchor-idx="53"><button data-omnivore-anchor-idx="54"><span data-omnivore-anchor-idx="55"><figure data-omnivore-anchor-idx="56"><img data-omnivore-anchor-idx="57" data-omnivore-original-src="https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_2624/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2018%2F02%2FQuote-6_blog.png" alt="Quote by Marie Kondo &quot;To truly cherish the things that are important to you, you must first discard those that have outlived their purpose.&quot;" loading="lazy" width="512" height="451" decoding="async" data-nimg="1" sizes="(max-width: 512px) 100vw, 512px" srcset="https://proxy-prod.omnivore-image-cache.app/360x0,s_QPzOUpT4f_8xqo0f0y7any8gzjLMRHF5GCywrjSgG8/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_360/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2018%2F02%2FQuote-6_blog.png 360w,https://proxy-prod.omnivore-image-cache.app/384x0,sldyCLD5Ma2tudL800GvlF35PZeJiDxEl5vpq9B1G5m0/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_384/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2018%2F02%2FQuote-6_blog.png 384w,https://proxy-prod.omnivore-image-cache.app/480x0,s47Px52UGW1PDAck4jS9Yqi5-I3XVtcAvqegSuNzu2eM/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_480/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2018%2F02%2FQuote-6_blog.png 480w,https://proxy-prod.omnivore-image-cache.app/768x0,sF-R3wPn8ekVRZEicoEgmLRB6C8yU0fiX_LkNAs8jwXo/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_768/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2018%2F02%2FQuote-6_blog.png 768w,https://proxy-prod.omnivore-image-cache.app/960x0,sXeTtbnQwNxIfXdIYfbLzILIKn7InertuydvIWLiIUXo/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_960/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2018%2F02%2FQuote-6_blog.png 960w,https://proxy-prod.omnivore-image-cache.app/1120x0,sbE6-mJ4nqFEHisCDUMP1ry6FICGYVKWvTuPcb3WGCIQ/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_1120/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2018%2F02%2FQuote-6_blog.png 1120w,https://proxy-prod.omnivore-image-cache.app/1536x0,s6-pLq62InWKsL-ZlxppuSjzNTQwD39oGYXDXMKOfl9U/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_1536/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2018%2F02%2FQuote-6_blog.png 1536w,https://proxy-prod.omnivore-image-cache.app/2240x0,sHKaHXeaX79uteFadehVQ_ey2SPAUrynsIqo2iK7ureg/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_2240/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2018%2F02%2FQuote-6_blog.png 2240w,https://proxy-prod.omnivore-image-cache.app/2624x0,sgLjm7_xEvSBdUYQ11wN2GabG-HC-NZ4P9xPEZiiUyHc/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_2624/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2018%2F02%2FQuote-6_blog.png 2624w," src="https://proxy-prod.omnivore-image-cache.app/512x451,srkQ-cyW-acfVMoEPkYIV2Ln5lxt7kINna3EngiQEgeo/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_2624/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2018%2F02%2FQuote-6_blog.png"></figure></span></button></p><p data-omnivore-anchor-idx="58">Think of your task list like a physical space: when it's crammed with random stuff, it becomes too hard to find the things that you actually need.</p><p data-omnivore-anchor-idx="59">Right now, your Todoist may be stuffed with half-baked ideas, empty projects, and tasks you forgot to check off:</p><p data-omnivore-anchor-idx="60"><button data-omnivore-anchor-idx="61"><span data-omnivore-anchor-idx="62"><figure data-omnivore-anchor-idx="63"><img data-omnivore-anchor-idx="64" data-omnivore-original-src="https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_2624/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2023%2F11%2FOverdue%402x.png" alt="" loading="lazy" width="550" height="460.5" decoding="async" data-nimg="1" sizes="(max-width: 550px) 100vw, 550px" srcset="https://proxy-prod.omnivore-image-cache.app/360x0,s_vZdeH5HeOajDzFjjJ795PO7DYAZ4bnbBWFFlJmfMPU/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_360/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2023%2F11%2FOverdue%402x.png 360w,https://proxy-prod.omnivore-image-cache.app/384x0,sBOuQBSFM-nCOOQAx-424b4COxnFvue7lEowFV0vPoJ4/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_384/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2023%2F11%2FOverdue%402x.png 384w,https://proxy-prod.omnivore-image-cache.app/480x0,sLEI0BzkI3Ydl571tFPvDBgD8MEAKpQPmLVz5GE7I5DQ/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_480/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2023%2F11%2FOverdue%402x.png 480w,https://proxy-prod.omnivore-image-cache.app/768x0,sUTKY-fFAyBIdEYTn63x1d8S5_hC4P8wu62qNMpaY7Ao/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_768/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2023%2F11%2FOverdue%402x.png 768w,https://proxy-prod.omnivore-image-cache.app/960x0,scSdVrlmLXOk1YkLTo8tyBrGj9xwbc-hf5mwSCXSPMLM/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_960/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2023%2F11%2FOverdue%402x.png 960w,https://proxy-prod.omnivore-image-cache.app/1120x0,spqlD8wDlIZXxRXozIgLShyHHOY0i2kQ5Thrpk8gjcbg/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_1120/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2023%2F11%2FOverdue%402x.png 1120w,https://proxy-prod.omnivore-image-cache.app/1536x0,sh4VbZWSJdw8geHRisy4hlGsduWOW7FKN_EypYCIKtUs/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_1536/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2023%2F11%2FOverdue%402x.png 1536w,https://proxy-prod.omnivore-image-cache.app/2240x0,sFUsPiaAOww9HLh6ZlnzVPsxHuEjG45f3suBnCA5_mzY/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_2240/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2023%2F11%2FOverdue%402x.png 2240w,https://proxy-prod.omnivore-image-cache.app/2624x0,s_48-hkH3GwhBdWkQg-uUtHMYWS5UqjDiXOxK4SkwCKg/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_2624/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2023%2F11%2FOverdue%402x.png 2624w," src="https://proxy-prod.omnivore-image-cache.app/550x0,sEBJk_XdlECWBpilyJg0I7XD_dq5ixyWIR-17GJPP1WA/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_2624/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2023%2F11%2FOverdue%402x.png"><figcaption data-omnivore-anchor-idx="65"><p data-omnivore-anchor-idx="66">Discard first, organize second.</p></figcaption></figure></span></button></p><p data-omnivore-anchor-idx="67">Following Marie’s system, it’s time to do a <em data-omnivore-anchor-idx="68">task inventory.</em></p><div data-omnivore-anchor-idx="69"><p data-omnivore-anchor-idx="70">It’s not just Marie. David Allen, the author of Gettings Things Done, <a data-omnivore-anchor-idx="71" href="https://www.fastcompany.com/3046463/the-father-of-getting-things-done-youre-getting-me-all-wrong" target="_blank" rel="noopener noreferrer">believes</a> that organizing our life is actually a search for mental space: GTD is “more of a space management system.” Learn more about <a data-omnivore-anchor-idx="72" href="https://todoist.com/productivity-methods/getting-things-done" target="_blank" rel="noopener noreferrer">how to use GTD with Todoist</a>.</p></div><h3 data-omnivore-anchor-idx="73" id="do-a-complete-task-inventory">Do a complete task inventory</h3><p data-omnivore-anchor-idx="74"><button data-omnivore-anchor-idx="75"><span data-omnivore-anchor-idx="76"><figure data-omnivore-anchor-idx="77"><img data-omnivore-anchor-idx="78" data-omnivore-original-src="https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_2624/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2018%2F02%2FQuote-2_blog.png" alt="Quote by Marie Kondo: &quot;Once you learn to choose your belongings properly, you will be left with only the amount that fits perfectly in the space you own.&quot;" loading="lazy" width="512" height="451" decoding="async" data-nimg="1" sizes="(max-width: 512px) 100vw, 512px" srcset="https://proxy-prod.omnivore-image-cache.app/360x0,s1b4ahEKW9QAYpNSCr9QPgmMFkRKSg0RExLHx6uQrg3o/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_360/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2018%2F02%2FQuote-2_blog.png 360w,https://proxy-prod.omnivore-image-cache.app/384x0,sbQtqThbohaoCZ_QQ_LoI_gKc8ZEdR9nohx1vz_ze4c0/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_384/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2018%2F02%2FQuote-2_blog.png 384w,https://proxy-prod.omnivore-image-cache.app/480x0,s9LU78XxSHviGqiOhMSFB4TsZ5D4rKKwrnXZ6fWda_Cs/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_480/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2018%2F02%2FQuote-2_blog.png 480w,https://proxy-prod.omnivore-image-cache.app/768x0,s4twFWUMjVOLPutzkLqsQmNmdmsx7JNDBiqiZ_PAfkNE/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_768/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2018%2F02%2FQuote-2_blog.png 768w,https://proxy-prod.omnivore-image-cache.app/960x0,sNdY3SmFNTDKe0aYyvzWr9fhUdxqSyVZjvOnt74U3S6I/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_960/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2018%2F02%2FQuote-2_blog.png 960w,https://proxy-prod.omnivore-image-cache.app/1120x0,sl6mlrxUa4bP9Sbmbop6TLJ--UGLxWlZR8ahvKgKVruI/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_1120/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2018%2F02%2FQuote-2_blog.png 1120w,https://proxy-prod.omnivore-image-cache.app/1536x0,s_BK4kdBgyHwMtACHELgAogZaxdtTXTurp0rLuC0syag/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_1536/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2018%2F02%2FQuote-2_blog.png 1536w,https://proxy-prod.omnivore-image-cache.app/2240x0,sr2Fcp6fyFwAOpbkGLyjiQMXK0kD98fBMKcKccJ9MOBA/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_2240/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2018%2F02%2FQuote-2_blog.png 2240w,https://proxy-prod.omnivore-image-cache.app/2624x0,sv5aDWVFsQ3Gou5CssXysKERlaPlkFw0jFx7nEPbk5Fs/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_2624/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2018%2F02%2FQuote-2_blog.png 2624w," src="https://proxy-prod.omnivore-image-cache.app/512x451,sHggQbqdFgKuYQJqORPwVFqI91_BibCJrhaHcSZ2RD68/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_2624/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2018%2F02%2FQuote-2_blog.png"></figure></span></button></p><p data-omnivore-anchor-idx="79">When Marie Kondo arrives at a house to tidy it up, she begins by kneeling on the floor in the center of the living room to show respect for all of its belongings. From there, she helps her client begin the journey, considering each and every item in turn.</p><p data-omnivore-anchor-idx="80">Take the same approach (kneeling optional) and do a full inventory of all the tasks and projects in your Todoist. Depending on how cluttered your to-do list is, you may want to dedicate a full day or even a weekend to this endeavor. Otherwise, as Marie says, "Tidy a little bit each day, and you'll be tidying forever."</p><p data-omnivore-anchor-idx="81">Remember, this exercise isn’t just about decluttering your to-do list — it’s about cutting away the nonessential so that the only tasks you have left are the ones that bring you closer to the life you want to live. Marie's famous standard is "Does it spark joy?" If the answer is yes, keep it. If not, get rid of it.</p><p data-omnivore-anchor-idx="82">For your to-do list, we recommend a slightly different criterion. As you do your inventory, ask yourself: </p><blockquote data-omnivore-anchor-idx="83"><p data-omnivore-anchor-idx="84">Does this task bring me closer to the life I want to&nbsp;live?</p></blockquote><p data-omnivore-anchor-idx="85">If the answer is yes, keep it. It not, <a data-omnivore-anchor-idx="86" href="https://todoist.com/help/articles/use-the-task-view-to-manage-tasks-in-todoist-eDeRDO0C" target="_blank" rel="noreferrer noopener">delete it</a> from your task list.</p><p data-omnivore-anchor-idx="87">You’re going to run into tasks that you <em data-omnivore-anchor-idx="88">want</em> to delete, but let’s face it, grunt work is necessary for any significant achievement. Try reframing the tasks that don’t excite you. While “run every day” may feel like a chore, “try to run a 10-minute mile today” may be a more specific and motivating challenge.</p><p data-omnivore-anchor-idx="89"><button data-omnivore-anchor-idx="90"><span data-omnivore-anchor-idx="91"><figure data-omnivore-anchor-idx="92"><img data-omnivore-anchor-idx="93" data-omnivore-original-src="https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_2624/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2023%2F11%2FMotivatingTask%402x.png" alt="" loading="lazy" width="307" height="81" decoding="async" data-nimg="1" sizes="(max-width: 307px) 100vw, 307px" srcset="https://proxy-prod.omnivore-image-cache.app/360x0,sEYW8AI-ePrQlsuwviaS0HWBYD3F5Pk9LAAEZPPo6jbk/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_360/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2023%2F11%2FMotivatingTask%402x.png 360w,https://proxy-prod.omnivore-image-cache.app/384x0,sf1ug0T4_PuPoFlBKgr7lzNn6W6MnGIzYKyf6f-HFexg/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_384/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2023%2F11%2FMotivatingTask%402x.png 384w,https://proxy-prod.omnivore-image-cache.app/480x0,sWz7aBa6HBnzO-0cmLZbjbl4oQ8COx-dmNoIU1uQCUH0/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_480/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2023%2F11%2FMotivatingTask%402x.png 480w,https://proxy-prod.omnivore-image-cache.app/768x0,sqrbxeVznQBCkjH-JPHkAByXiDG3qROiW7JS2LBahiFw/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_768/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2023%2F11%2FMotivatingTask%402x.png 768w,https://proxy-prod.omnivore-image-cache.app/960x0,scUn8ZGmnh7rs-Amb1SbTiJAsrW5SjhCdu0Ys77cvhTI/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_960/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2023%2F11%2FMotivatingTask%402x.png 960w,https://proxy-prod.omnivore-image-cache.app/1120x0,sq0wwplbLARYdZhXHlcl3ft9p1JZCoHn_F6IAAN0X9xk/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_1120/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2023%2F11%2FMotivatingTask%402x.png 1120w,https://proxy-prod.omnivore-image-cache.app/1536x0,sJ9JTmQMlRf3o5wNpaU-roePGsgZpOzx-A5vdANhNwDg/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_1536/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2023%2F11%2FMotivatingTask%402x.png 1536w,https://proxy-prod.omnivore-image-cache.app/2240x0,sbkKTIXt-WxSpGarGa9Ei5srgqTLVXp3_SyAeCVk9SQ8/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_2240/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2023%2F11%2FMotivatingTask%402x.png 2240w,https://proxy-prod.omnivore-image-cache.app/2624x0,sVpsD4lseNBL66hBuhJLqKLeTA9IB0WXB9SsJOl66jl8/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_2624/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2023%2F11%2FMotivatingTask%402x.png 2624w," src="https://proxy-prod.omnivore-image-cache.app/307x81,sXqQWYFyc2KQq8Vz-Yo1L7klw17684NRRGL-dAoSLgec/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_2624/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2023%2F11%2FMotivatingTask%402x.png"><figcaption data-omnivore-anchor-idx="94"><p data-omnivore-anchor-idx="95">Re-frame tasks in ways that make you remember why you want to do them in the first place.</p></figcaption></figure></span></button></p><p data-omnivore-anchor-idx="96">Even Marie concedes that there are items you have to keep even if they don't spark joy — like important documents.&nbsp; For work like taking out the trash or <a data-omnivore-anchor-idx="97" href="https://todoist.com/inspiration/manage-taxes-todoist" target="_blank" rel="noreferrer noopener">doing your taxes</a>, create a separate project called “responsibilities” and pare it down to the things that, while they don’t bring you joy, you just have to do anyway.</p><p data-omnivore-anchor-idx="98">This is a good exercise to check in on and see how much of your to-do list is things you <em data-omnivore-anchor-idx="99">get</em> to do vs. things you <em data-omnivore-anchor-idx="100">have</em> to do.</p><h3 data-omnivore-anchor-idx="101" id="let-things-go">Let things&nbsp;go</h3><p data-omnivore-anchor-idx="102"><button data-omnivore-anchor-idx="103"><span data-omnivore-anchor-idx="104"><figure data-omnivore-anchor-idx="105"><img data-omnivore-anchor-idx="106" data-omnivore-original-src="https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_2624/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2018%2F02%2FQuote-5_blog.png" alt="Quote by Marie Kondo: &quot;When we really delve int othe reasons for why we can't let something go, there are only two: an attachment to the past or a fear for the future.&quot;" loading="lazy" width="512" height="451" decoding="async" data-nimg="1" sizes="(max-width: 512px) 100vw, 512px" srcset="https://proxy-prod.omnivore-image-cache.app/360x0,sAv1s0zzBAon8R0IRGZ0znTmf-ncLVaDoSuNnCZs8zLA/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_360/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2018%2F02%2FQuote-5_blog.png 360w,https://proxy-prod.omnivore-image-cache.app/384x0,sir_hxaLKuGq_ENlOXhgvHHlgKrnMFMhEh_SiizN6AAc/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_384/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2018%2F02%2FQuote-5_blog.png 384w,https://proxy-prod.omnivore-image-cache.app/480x0,s8yktse9jw4BqZwZrX__zfqnpHG8PVy8voGTuWc_KVgo/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_480/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2018%2F02%2FQuote-5_blog.png 480w,https://proxy-prod.omnivore-image-cache.app/768x0,sVxuBNFvnmHm0wwQAH-WAlXl1gEV3eXVHecWvjNCJkYI/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_768/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2018%2F02%2FQuote-5_blog.png 768w,https://proxy-prod.omnivore-image-cache.app/960x0,s2KNs1RUWKA-XsIALmxOJMTP0rSC1g_vVa8Bs402NbPo/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_960/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2018%2F02%2FQuote-5_blog.png 960w,https://proxy-prod.omnivore-image-cache.app/1120x0,s2rJKOgtGSZtIxjMb6_xYWcsiurUVNbG6nyf2iIJ0AHE/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_1120/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2018%2F02%2FQuote-5_blog.png 1120w,https://proxy-prod.omnivore-image-cache.app/1536x0,sFNRjd4dbTIiEilTciM868AoFQC2hHTxYR2yxmThRLbU/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_1536/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2018%2F02%2FQuote-5_blog.png 1536w,https://proxy-prod.omnivore-image-cache.app/2240x0,s3mb_25ab-lD0cohA_KAmciUmzThKtii3eX7qSpPuiUA/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_2240/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2018%2F02%2FQuote-5_blog.png 2240w,https://proxy-prod.omnivore-image-cache.app/2624x0,su90zzCIdpdKe-nb3dQzeJbEoeoFCHZg3vlcosfwEQ5w/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_2624/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2018%2F02%2FQuote-5_blog.png 2624w," src="https://proxy-prod.omnivore-image-cache.app/512x451,sGEsJCfJ29_0xAobuDbv2M0ur6QjCSE_JAPWsXnKQZgk/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_2624/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2018%2F02%2FQuote-5_blog.png"></figure></span></button></p><p data-omnivore-anchor-idx="107">You may have a tough time letting go of long-standing tasks on your list. Maybe you always envisioned yourself finishing that home renovation project yourself. Or maybe you don’t want to let go of your novel that hasn’t made it past the first chapter (or page). It can feel like giving up on the version of yourself you wanted to be when you added that task or project in the first place.</p><p data-omnivore-anchor-idx="108">Marie explains that even unfinished tasks serve a purpose. You’ve clarified what you actually care about and why:</p><blockquote data-omnivore-anchor-idx="109"><p data-omnivore-anchor-idx="110">Not every person you meet in life will become a close friend or lover. Some you will find hard to get along with or impossible to like. But these people, too, teach you the precious lesson of who you do like, so that you will appreciate those.</p></blockquote><p data-omnivore-anchor-idx="111">Letting go of old tasks and projects teaches you how to create space for what’s important to you now. As you go through your old tasks, acknowledge that there was a purpose when you added it, but it’s no longer relevant to the life you’re striving for today.</p><p data-omnivore-anchor-idx="112"><button data-omnivore-anchor-idx="113"><span data-omnivore-anchor-idx="114"><figure data-omnivore-anchor-idx="115"><img data-omnivore-anchor-idx="116" data-omnivore-original-src="https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_2624/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2023%2F11%2FDeleteTask%402x.png" alt="" loading="lazy" width="548" height="286" decoding="async" data-nimg="1" sizes="(max-width: 548px) 100vw, 548px" srcset="https://proxy-prod.omnivore-image-cache.app/360x0,swhD0W-K02U-kKej36UdVi0E9KA_RDZEBejsPQAl7N6g/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_360/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2023%2F11%2FDeleteTask%402x.png 360w,https://proxy-prod.omnivore-image-cache.app/384x0,sggi7jDXHxWmZgT1VzTvgKTHD1FIQ3uui62jwUqY2mDY/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_384/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2023%2F11%2FDeleteTask%402x.png 384w,https://proxy-prod.omnivore-image-cache.app/480x0,sM45gUOsCf2dDBW2CeUonjKCw46HK56cyOc4lHzLdp2k/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_480/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2023%2F11%2FDeleteTask%402x.png 480w,https://proxy-prod.omnivore-image-cache.app/768x0,sLlU9pN9bRRBCeVixSO-3EvkbND7B8PlmiEtrTHfqlAc/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_768/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2023%2F11%2FDeleteTask%402x.png 768w,https://proxy-prod.omnivore-image-cache.app/960x0,sK4mKXmbE7ddhybsfYOfSS0aH4p7HSkP_G3dplLhh3Sg/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_960/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2023%2F11%2FDeleteTask%402x.png 960w,https://proxy-prod.omnivore-image-cache.app/1120x0,sfool1qkApvF88d5sKOoIyyHQYmRLi9aUXzq7MFbv49w/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_1120/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2023%2F11%2FDeleteTask%402x.png 1120w,https://proxy-prod.omnivore-image-cache.app/1536x0,sFv9WlNexyLsizbVRe0992-m7VmChbIY9sYDTkwWKDhk/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_1536/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2023%2F11%2FDeleteTask%402x.png 1536w,https://proxy-prod.omnivore-image-cache.app/2240x0,sKP8LVETpvtkWctrkg_Od47ZYIkwFXEpSggLWfDRQvNg/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_2240/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2023%2F11%2FDeleteTask%402x.png 2240w,https://proxy-prod.omnivore-image-cache.app/2624x0,sP9OE9z2LMVqb_Jvd_xDFyfNC_3p3ZWaf6-IKz__0xbQ/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_2624/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2023%2F11%2FDeleteTask%402x.png 2624w," src="https://proxy-prod.omnivore-image-cache.app/548x286,sakOhS_K1Dh3j94G42NzFWfndG9dKwEgqPQzCrLrFzCo/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_2624/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2023%2F11%2FDeleteTask%402x.png"><figcaption data-omnivore-anchor-idx="117"><p data-omnivore-anchor-idx="118">Don't be afraid to delete tasks that are no longer relevant to the life you want to live.</p></figcaption></figure></span></button></p><p data-omnivore-anchor-idx="119">If you just can’t bring yourself to hit delete on a task and banish it from your life forever, you have the option to save it in a temporary project in Todoist. (Marie would strongly disapprove: “Storage is nothing but a cosmetic solution. You must begin by discarding!” But you should do what works best for you.)</p><p data-omnivore-anchor-idx="120">If you’re intent on saving tasks, <a data-omnivore-anchor-idx="121" href="https://todoist.com/help/articles/get-started-with-todoist-OgNNJR#start-with-a-project" target="_blank" rel="noreferrer noopener">create</a> a project named “Maybe later” and hide it from view by <a data-omnivore-anchor-idx="122" href="https://todoist.com/help/articles/archive-a-project-r2KEeYV2" target="_blank" rel="noreferrer noopener">archiving it</a>. You can always come back and <a data-omnivore-anchor-idx="123" href="https://todoist.com/help/articles/unarchive-a-project-in-todoist-FHs9r6CY">unarchive it</a> later.</p><p data-omnivore-anchor-idx="124"><button data-omnivore-anchor-idx="125"><span data-omnivore-anchor-idx="126"><figure data-omnivore-anchor-idx="127"><img data-omnivore-anchor-idx="128" data-omnivore-original-src="https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_2624/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2023%2F11%2FArchiveProject%402x.png" alt="" loading="lazy" width="550" height="355" decoding="async" data-nimg="1" sizes="(max-width: 550px) 100vw, 550px" srcset="https://proxy-prod.omnivore-image-cache.app/360x0,sZYq4udJKWK_HGV-QdEeKEbaGab6Frg5164WJyJq0ICc/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_360/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2023%2F11%2FArchiveProject%402x.png 360w,https://proxy-prod.omnivore-image-cache.app/384x0,sx4EIypKmbEyDtKveH1YMIbK-U3HE5Ha9SBtKU2uFVBE/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_384/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2023%2F11%2FArchiveProject%402x.png 384w,https://proxy-prod.omnivore-image-cache.app/480x0,sOIh8TfIWLdWQ-qPwn1iHoElIEgyudCOfxPnCuy5km4o/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_480/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2023%2F11%2FArchiveProject%402x.png 480w,https://proxy-prod.omnivore-image-cache.app/768x0,sTEnZfpGuV0zWV69tTxxl-dLOQMUvTp-G5iWzB519Buk/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_768/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2023%2F11%2FArchiveProject%402x.png 768w,https://proxy-prod.omnivore-image-cache.app/960x0,sHRgldWehFQCGx3QY_K1VJFwMvk0wELvNYoyuBm8FL_M/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_960/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2023%2F11%2FArchiveProject%402x.png 960w,https://proxy-prod.omnivore-image-cache.app/1120x0,sxorlAQFsauOY3TUKV6vRZT7b_c8VCsiDhdBmG5GM0xU/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_1120/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2023%2F11%2FArchiveProject%402x.png 1120w,https://proxy-prod.omnivore-image-cache.app/1536x0,sud-Dh27c9eBhDiUCRiY1bw5KvGwBv7w8nKl6apsGZRM/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_1536/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2023%2F11%2FArchiveProject%402x.png 1536w,https://proxy-prod.omnivore-image-cache.app/2240x0,s30Jjcr7riSLuLAlNOP1U2tWMuE4of5QYqD9NMKzfAik/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_2240/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2023%2F11%2FArchiveProject%402x.png 2240w,https://proxy-prod.omnivore-image-cache.app/2624x0,szk8lHpMP346Iz5BO88iMdza4D8WVAYmkHh-LGfN3BO4/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_2624/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2023%2F11%2FArchiveProject%402x.png 2624w," src="https://proxy-prod.omnivore-image-cache.app/550x355,swJsdoEek9cPsCS_XwB-tAhsuC1i5byyaZ6cRnyeQjlc/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_2624/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2023%2F11%2FArchiveProject%402x.png"></figure></span></button><a data-omnivore-anchor-idx="129" id="place"></a></p><h2 data-omnivore-anchor-idx="130" id="3-give-every-task-a-place">3. Give every task a place</h2><p data-omnivore-anchor-idx="131"><button data-omnivore-anchor-idx="132"><span data-omnivore-anchor-idx="133"><figure data-omnivore-anchor-idx="134"><img data-omnivore-anchor-idx="135" data-omnivore-original-src="https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_2624/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2018%2F02%2FQuote-7_blog.png" alt="Quote by Marie Kondo &quot;Visible mess helps distract us from the true source of the disorder.&quot;" loading="lazy" width="512" height="451" decoding="async" data-nimg="1" sizes="(max-width: 512px) 100vw, 512px" srcset="https://proxy-prod.omnivore-image-cache.app/360x0,sL7TTyo6GOakuVJkrsahwmDIstQM4PHAS0b9E-TLWuUg/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_360/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2018%2F02%2FQuote-7_blog.png 360w,https://proxy-prod.omnivore-image-cache.app/384x0,s8vx7C8PboFDKTXR11Zmt4E3-UF9qEhNeLIhp89OP0Wc/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_384/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2018%2F02%2FQuote-7_blog.png 384w,https://proxy-prod.omnivore-image-cache.app/480x0,snnb9kw2yLmLYhHS-xX9Mc7JAwgqFYtfJo22y0T2unPE/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_480/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2018%2F02%2FQuote-7_blog.png 480w,https://proxy-prod.omnivore-image-cache.app/768x0,sCnCn-JMchRdNTL803CjBUNJaxId7i26m4SMyio5Cv6s/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_768/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2018%2F02%2FQuote-7_blog.png 768w,https://proxy-prod.omnivore-image-cache.app/960x0,siY8891-6eA-0pxMF24rWtzEVASLa03u3-AGSXJ8FXuI/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_960/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2018%2F02%2FQuote-7_blog.png 960w,https://proxy-prod.omnivore-image-cache.app/1120x0,s87jqmRVHuminAYwJEoYY_gkAUDKGjtVdXdvPksjfcm4/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_1120/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2018%2F02%2FQuote-7_blog.png 1120w,https://proxy-prod.omnivore-image-cache.app/1536x0,sIHLALRhUPO5C_HGIlmEJ3UN8yyEu4bl_NyGNZ9UtGVo/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_1536/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2018%2F02%2FQuote-7_blog.png 1536w,https://proxy-prod.omnivore-image-cache.app/2240x0,sdGZSBVggGN02S7yjDQ6OCWGi_XRh-_kRM3z0eSUzaDI/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_2240/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2018%2F02%2FQuote-7_blog.png 2240w,https://proxy-prod.omnivore-image-cache.app/2624x0,sBSRTamtU2hUs0WRK-ueBjkCqo8T2j9XaRm8x9yVYCD8/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_2624/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2018%2F02%2FQuote-7_blog.png 2624w," src="https://proxy-prod.omnivore-image-cache.app/512x451,sc8i8gXbl8DPHStqKVSUgxtOREiTV8F48bTAWPRglaSI/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_2624/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2018%2F02%2FQuote-7_blog.png"></figure></span></button></p><p data-omnivore-anchor-idx="136">Ok, you’ve got the right tasks — now it’s time to sort and organize. Similar to Marie’s rule that every physical item should have its place, every task on your to-do list should have its project. Group your tasks together in ways that feel intuitive to you.</p><p data-omnivore-anchor-idx="137">For instance, if your goal is to get in shape, you could begin with the “fitness” category and create a project with that name. Find every task related to your goal and move those tasks to the project.</p><p data-omnivore-anchor-idx="138"><button data-omnivore-anchor-idx="139"><span data-omnivore-anchor-idx="140"><figure data-omnivore-anchor-idx="141"><img data-omnivore-anchor-idx="142" data-omnivore-original-src="https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_2624/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2023%2F11%2FProject%402x.png" alt="" loading="lazy" width="550" height="384" decoding="async" data-nimg="1" sizes="(max-width: 550px) 100vw, 550px" srcset="https://proxy-prod.omnivore-image-cache.app/360x0,sgo1XIAMSBt31af5KuKhYB1X9dQUY3GJSc_h6EiJ52Lw/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_360/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2023%2F11%2FProject%402x.png 360w,https://proxy-prod.omnivore-image-cache.app/384x0,s9p8QqIMnF-mrG2sQuGUzMPmd_d59nnTSP7yjqgejVYs/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_384/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2023%2F11%2FProject%402x.png 384w,https://proxy-prod.omnivore-image-cache.app/480x0,sl1YmCfvrmGYwZrC9kjWnB53XaAJQNfTxkub4XEgDKUM/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_480/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2023%2F11%2FProject%402x.png 480w,https://proxy-prod.omnivore-image-cache.app/768x0,sTZIIuHnJ3aiv-scM4--ejJ9rIgynS_X7zBpeU5HB6Uo/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_768/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2023%2F11%2FProject%402x.png 768w,https://proxy-prod.omnivore-image-cache.app/960x0,skmHEr0_UkoaQmUdHEaaBfNd235N6v6kv-SP89FK2J1E/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_960/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2023%2F11%2FProject%402x.png 960w,https://proxy-prod.omnivore-image-cache.app/1120x0,sGBCbTZYcU6fS9bTP5vqKC7861h156m7cewLkthE1mQc/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_1120/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2023%2F11%2FProject%402x.png 1120w,https://proxy-prod.omnivore-image-cache.app/1536x0,s8RgkzmyP8hphJkkF2IjQU2pBBYji2qyMQ6ikRL9wGfA/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_1536/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2023%2F11%2FProject%402x.png 1536w,https://proxy-prod.omnivore-image-cache.app/2240x0,s5a4C0Q0Qml2XVkiL-4uJ5ynxQCER0pKYVillxQC-zA4/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_2240/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2023%2F11%2FProject%402x.png 2240w,https://proxy-prod.omnivore-image-cache.app/2624x0,seTTQ7QJRQXPwVWKR-_0GknZvnr3YW74pve2DdJux9KM/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_2624/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2023%2F11%2FProject%402x.png 2624w," src="https://proxy-prod.omnivore-image-cache.app/550x384,s8qOC_K8GNPSq-S3MJn_oFf6r0eATCqFa24oSrHoqBEo/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_2624/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2023%2F11%2FProject%402x.png"><figcaption data-omnivore-anchor-idx="143"><p data-omnivore-anchor-idx="144">Think of each project as a "room" in the life you want to build.</p></figcaption></figure></span></button></p><p data-omnivore-anchor-idx="145">Repeat this for every category until your Todoist is organized into projects. For tasks that don’t fit into any of the categories you’ve identified as important, ask yourself if it still belongs on your to-do list.</p><p data-omnivore-anchor-idx="146"><strong data-omnivore-anchor-idx="147">Keep your projects visible</strong></p><p data-omnivore-anchor-idx="148">At this point, it’s tempting to start creating a bunch of <a data-omnivore-anchor-idx="149" href="https://todoist.com/help/articles/create-a-sub-project-in-todoist-aTA15C70" target="_blank" rel="noreferrer noopener">sub-projects</a> that you can hide from view (like seasonal storage), but Marie advises her clients to keep everything visible all year round. Just as seeing every physical object you own keeps you from accumulating too much stuff, seeing every project you’ve committed to can be a helpful reminder to stay focused on what’s important and not let new tasks and projects clutter up your list.</p><p data-omnivore-anchor-idx="150"><strong data-omnivore-anchor-idx="151">Sequence your tasks</strong></p><p data-omnivore-anchor-idx="152">A great way to stay in the flow of a project is to finish one task and immediately move on to the next. Take the time to sequence your tasks in a logical order before you get to work.</p><p data-omnivore-anchor-idx="153">Rearrange tasks by dragging the handlebar to the left of each task (Web, Mac, Windows) or tapping, holding, and dragging (iOS, Android) to the right place on the list. You can do the same thing daily while <a data-omnivore-anchor-idx="154" href="https://todoist.com/inspiration/how-to-plan-your-day/" target="_blank" rel="noopener">planning your Today view</a> so that all your tasks due today are in the right order.</p><p data-omnivore-anchor-idx="155"><strong data-omnivore-anchor-idx="156">Add priorities<br data-omnivore-anchor-idx="157"></strong></p><p data-omnivore-anchor-idx="158">There are some tasks that are more essential to your goal than others. Set <a data-omnivore-anchor-idx="159" href="https://todoist.com/help/articles/introduction-to-priorities-Wy82Jp" target="_blank" rel="noreferrer noopener">task priorities</a> to keep track of which is which. In Todoist, priorities range from highest to lowest as P1 (red), P2 (orange), P3 (yellow), or P4 (no color). Here’s an example of how to evaluate a task’s priority level:</p><p data-omnivore-anchor-idx="160"><strong data-omnivore-anchor-idx="161">P1 </strong>— Must finish.</p><p data-omnivore-anchor-idx="162"><strong data-omnivore-anchor-idx="163">P2</strong> — Nice to have.</p><p data-omnivore-anchor-idx="164"><strong data-omnivore-anchor-idx="165">P3</strong> — Finish if there is time available.</p><p data-omnivore-anchor-idx="166"><strong data-omnivore-anchor-idx="167">P4 </strong>— Unnecessary. These may have snuck in through your task inventory. Delete them now.</p><p data-omnivore-anchor-idx="168"><button data-omnivore-anchor-idx="169"><span data-omnivore-anchor-idx="170"><figure data-omnivore-anchor-idx="171"><img data-omnivore-anchor-idx="172" data-omnivore-original-src="https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_2624/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2023%2F11%2FPriorities%402x-1.png" alt="" loading="lazy" width="550" height="384" decoding="async" data-nimg="1" sizes="(max-width: 550px) 100vw, 550px" srcset="https://proxy-prod.omnivore-image-cache.app/360x0,spjJLHHMm_bXVDgJ9EM7V6AwctfpS_P_u4eLmbVoSVhM/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_360/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2023%2F11%2FPriorities%402x-1.png 360w,https://proxy-prod.omnivore-image-cache.app/384x0,s2SDwSRfDGudSCc6IpflKg6mMCmBbZu4OE5muWqpPgTc/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_384/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2023%2F11%2FPriorities%402x-1.png 384w,https://proxy-prod.omnivore-image-cache.app/480x0,ssFh9dVBmvo257Zuz-NjN4q5DS0CuLYOiBgZNAAHKtws/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_480/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2023%2F11%2FPriorities%402x-1.png 480w,https://proxy-prod.omnivore-image-cache.app/768x0,ssG79iMoQ4x5rRBeMvFEdlZSOY0PY4VKGUIHFk9_6mAI/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_768/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2023%2F11%2FPriorities%402x-1.png 768w,https://proxy-prod.omnivore-image-cache.app/960x0,smho-AQjj9AoJGOpNfVXZbbgOGKTwrKAXjQppZhMWLqc/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_960/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2023%2F11%2FPriorities%402x-1.png 960w,https://proxy-prod.omnivore-image-cache.app/1120x0,sK8z2NjBM7_qJUXtd_b7-Sf-ZsgZfOAINCZMD6dp6N3I/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_1120/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2023%2F11%2FPriorities%402x-1.png 1120w,https://proxy-prod.omnivore-image-cache.app/1536x0,s4YGwg6zCwVlKxQ1ZZgcUgT8Xm8dTiVsTwOygUgxCsrk/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_1536/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2023%2F11%2FPriorities%402x-1.png 1536w,https://proxy-prod.omnivore-image-cache.app/2240x0,sIRnI2KInGJnEwfVJfGpDwkYk8bJopibi8FdE_1ifLdY/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_2240/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2023%2F11%2FPriorities%402x-1.png 2240w,https://proxy-prod.omnivore-image-cache.app/2624x0,sJzHdFeATxaewT4wpd22eutxNUlo-rhJCSipE3SJsWjc/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_2624/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2023%2F11%2FPriorities%402x-1.png 2624w," src="https://proxy-prod.omnivore-image-cache.app/550x384,sglHiKYm_7iDYMTwwQW7t0oTH4oYt8jVAegQ6n_VZZdY/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_2624/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2023%2F11%2FPriorities%402x-1.png"><figcaption data-omnivore-anchor-idx="173"><p data-omnivore-anchor-idx="174">Use priority levels to automatically order tasks from most to least important.</p></figcaption></figure></span></button></p><p data-omnivore-anchor-idx="175"><strong data-omnivore-anchor-idx="176">Give each task a due date<br data-omnivore-anchor-idx="177"></strong></p><p data-omnivore-anchor-idx="178">Finally, <a data-omnivore-anchor-idx="179" href="https://todoist.com/help/articles/introduction-to-due-dates-and-due-times-q7VobO">set a date</a> to complete each task. A handy tip is to make an estimate for how long a task will take to complete and then double it. It’s better to overestimate and finish early than to underestimate and finish late. Give each task a due date and schedule repeating tasks with a <a data-omnivore-anchor-idx="180" href="https://todoist.com/help/articles/introduction-to-due-dates-and-due-times-q7VobO" target="_blank" rel="noreferrer noopener">recurring due&nbsp;date</a>.</p><p data-omnivore-anchor-idx="181"><button data-omnivore-anchor-idx="182"><span data-omnivore-anchor-idx="183"><figure data-omnivore-anchor-idx="184"><img data-omnivore-anchor-idx="185" data-omnivore-original-src="https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_2624/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2023%2F11%2FQuickAdd%402x.png" alt="" loading="lazy" width="598" height="298" decoding="async" data-nimg="1" sizes="(max-width: 598px) 100vw, 598px" srcset="https://proxy-prod.omnivore-image-cache.app/360x0,sO11zHxEkc5HTBqxbWU0Pim1Bek4AsuO2Bm0UEHTAKLY/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_360/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2023%2F11%2FQuickAdd%402x.png 360w,https://proxy-prod.omnivore-image-cache.app/384x0,ssJBvuzXbby_Va59XBSvDr7HWdHf2ik1oExO6vPHgJ6k/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_384/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2023%2F11%2FQuickAdd%402x.png 384w,https://proxy-prod.omnivore-image-cache.app/480x0,sr7l-KKjGM3wmIEOH0rAocjn7xQ038lS3Z986lv9gbb0/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_480/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2023%2F11%2FQuickAdd%402x.png 480w,https://proxy-prod.omnivore-image-cache.app/768x0,srxJfugNT105KiuKyCLpLCKdrr_dbgKg9BGCAq2hrfGU/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_768/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2023%2F11%2FQuickAdd%402x.png 768w,https://proxy-prod.omnivore-image-cache.app/960x0,s4zOVdo59p1SxX4wA8mf9TYz-orXn09k1cfh6__VMIk0/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_960/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2023%2F11%2FQuickAdd%402x.png 960w,https://proxy-prod.omnivore-image-cache.app/1120x0,sByeaY-40LOPuvgN6wa1jwCRNNAIx87gBgImUS8Jq7_E/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_1120/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2023%2F11%2FQuickAdd%402x.png 1120w,https://proxy-prod.omnivore-image-cache.app/1536x0,sjHJwvunI3v_WG3Y6GWcaY199TOhL7XD_Q3wH5knzO2E/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_1536/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2023%2F11%2FQuickAdd%402x.png 1536w,https://proxy-prod.omnivore-image-cache.app/2240x0,syKBNwnONzlViaQotXoCUY2y0ic1cVBB0y1pcVStaPfQ/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_2240/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2023%2F11%2FQuickAdd%402x.png 2240w,https://proxy-prod.omnivore-image-cache.app/2624x0,sOz9mQw7yVkjRZ57lJME9TOCVbF44K_qL-goYLRT2olI/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_2624/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2023%2F11%2FQuickAdd%402x.png 2624w," src="https://proxy-prod.omnivore-image-cache.app/598x298,sw0vLsLYn2Ux6irOLxaCN21Gpy5GhNa-Dubu94R9Q_6A/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_2624/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2023%2F11%2FQuickAdd%402x.png"></figure></span></button></p><h3 data-omnivore-anchor-idx="186" id="make-sure-your-to-do-list-sparks-joy">Make sure your to-do list “sparks&nbsp;joy”</h3><p data-omnivore-anchor-idx="187">Aesthetics affect our mindset. When Marie does her inventory, she shows up dressed to the nines. She has carefully picked out every part of her appearance to suit the needs of the day. She takes the same approach to the space she’s reviewing:</p><blockquote data-omnivore-anchor-idx="188"><p data-omnivore-anchor-idx="189">"Imagine what it would be life to have a bookshelf filled only with books that you really love. Isn't that image spellbinding? For someone who loves books, what greater happiness could there be?"</p></blockquote><p data-omnivore-anchor-idx="190">Give Todoist a style that will put you in a positive mindset whenever you open it. To borrow Marie’s signature phrase, make your digital task space “spark joy.” Here are a few tips:</p><ul data-omnivore-anchor-idx="191">
  <li data-omnivore-anchor-idx="192">Write clear, specific, and motivating project and task titles. For example, instead of naming your task “Go for a jog,” try “Take a morning jog through the forest” or “Explore a new running route today”</li>



  <li data-omnivore-anchor-idx="193">Add <a data-omnivore-anchor-idx="194" href="https://todoist.com/help/articles/how-to-format-text-e5dHw9">text formatting and emojis</a> to give them life: “Take a morning jog through the forest 🌅🏃🌲”</li>



  <li data-omnivore-anchor-idx="195">Use a <a data-omnivore-anchor-idx="196" href="https://todoist.com/help/articles/change-color-themes-zD0N5K" target="_blank" rel="noreferrer noopener">color theme</a> that matches your style or mood</li>



  <li data-omnivore-anchor-idx="197">Arrange your projects in an intuitive way</li>



  <li data-omnivore-anchor-idx="198">Continually let go of the projects and tasks that don't excite you</li>
  </ul>
  <p data-omnivore-anchor-idx="199">Your Todoist is ready for action. Simply log in every day, and your Today view will let you know what to work on. When things get busy, you’ll have clarity on what you <del data-omnivore-anchor-idx="200">have to</del> get to focus on next.</p><h2 data-omnivore-anchor-idx="201" id="4-change-your-mindset-then-your-habits">4. Change your mindset, then your habits</h2><p data-omnivore-anchor-idx="202"><button data-omnivore-anchor-idx="203"><span data-omnivore-anchor-idx="204"><figure data-omnivore-anchor-idx="205"><img data-omnivore-anchor-idx="206" data-omnivore-original-src="https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_2624/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2018%2F02%2FMarie-Kondo-quote.png" alt="Quote by Marie Kondo &quot;People cannot change their tidying habits without first changing their way of thinking.&quot;" loading="lazy" width="512" height="451" decoding="async" data-nimg="1" sizes="(max-width: 512px) 100vw, 512px" srcset="https://proxy-prod.omnivore-image-cache.app/360x0,snXo_UpBx-50QqRI09V_HoLbSXmX9hBQQ9v6_WGe4Xnw/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_360/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2018%2F02%2FMarie-Kondo-quote.png 360w,https://proxy-prod.omnivore-image-cache.app/384x0,sKmGeViMMwE8aGoHpRGzmVn9oSGcf0ejh-19GefbouNI/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_384/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2018%2F02%2FMarie-Kondo-quote.png 384w,https://proxy-prod.omnivore-image-cache.app/480x0,soDaHRuOVVWmvkNvBMA9i03LUkk_I3aXF_bJPbr98LmE/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_480/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2018%2F02%2FMarie-Kondo-quote.png 480w,https://proxy-prod.omnivore-image-cache.app/768x0,sQ0JMVn7mMRx_VTZrz64YafVB8D0SKZ9-m5_JdIl8Tq0/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_768/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2018%2F02%2FMarie-Kondo-quote.png 768w,https://proxy-prod.omnivore-image-cache.app/960x0,s7kMxIMfjoj3xCjoWO1hO072jR_VuzbNE-e_5ECvKZAc/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_960/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2018%2F02%2FMarie-Kondo-quote.png 960w,https://proxy-prod.omnivore-image-cache.app/1120x0,s0X8KHskkXQtWYpZfZb4rGisKeW3nTRdZV9fNKMW1vok/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_1120/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2018%2F02%2FMarie-Kondo-quote.png 1120w,https://proxy-prod.omnivore-image-cache.app/1536x0,s7_n60jvbwjfPtPg8g9EU7c-SCupDHXhPheCIsvjVWEk/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_1536/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2018%2F02%2FMarie-Kondo-quote.png 1536w,https://proxy-prod.omnivore-image-cache.app/2240x0,sIn2_gHFul5Hp51PtSwzysaemtSOaSjfGZLKluVDGujc/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_2240/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2018%2F02%2FMarie-Kondo-quote.png 2240w,https://proxy-prod.omnivore-image-cache.app/2624x0,sJQ26VYH2jF5gpRmK2zFICWivUUQTP1IPpwSzuEH9OR4/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_2624/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2018%2F02%2FMarie-Kondo-quote.png 2624w," src="https://proxy-prod.omnivore-image-cache.app/512x451,siFSWtDt9govf6WdYk1qAt4mplDJqRD_hX_4eQqYdvX0/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_2624/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2018%2F02%2FMarie-Kondo-quote.png"></figure></span></button></p><p data-omnivore-anchor-idx="207">You’ve revamped your task list to be cleaner, simpler, and more aligned with your goals. But don’t expect the work to be finished overnight.</p><p data-omnivore-anchor-idx="208">At this point, Marie has noticed that many people lose faith — “I’m just a messy person!” But that’s not the case. Being tidy is an acquired mindset, she says.</p><p data-omnivore-anchor-idx="209">With your to-do list, this translates to asking that essential question for every new task coming into your Todoist: Does it lead to your vision? If not, discard it on the spot. If the answer is yes, add it to the proper spot on your list.</p><p data-omnivore-anchor-idx="210">Of course, unhelpful tasks are bound to sneak in from time to time. Weed them out with a <a data-omnivore-anchor-idx="211" href="https://todoist.com/inspiration/weekly-review/" target="_blank" rel="noopener noreferrer">weekly review,</a> so you start each week with a clearly prioritized to-do list. Discard tasks that don't bring you closer to your goals. Organize the spare tasks that have ended up in your <a data-omnivore-anchor-idx="212" href="https://todoist.com/help/articles/how-to-best-use-the-inbox-HwHvYErS" target="_blank" rel="noreferrer noopener">inbox</a> into the right projects. Have certain tasks or projects fallen out of line with your goal? Discard those, too.</p><p data-omnivore-anchor-idx="213">Finally, check in on your big-picture goals every few months. It’s natural for priorities to shift as you grow and learn more about what tasks and projects truly motivate you.</p><p data-omnivore-anchor-idx="214"><button data-omnivore-anchor-idx="215"><span data-omnivore-anchor-idx="216"><figure data-omnivore-anchor-idx="217"><img data-omnivore-anchor-idx="218" data-omnivore-original-src="https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_2624/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2018%2F02%2FQuote-3_blog.png" alt="Quote by Marie Kondo: &quot;From the moment you start tidying, you will be compelled to reset your life. As a result, your life will start to change.&quot;" loading="lazy" width="512" height="451" decoding="async" data-nimg="1" sizes="(max-width: 512px) 100vw, 512px" srcset="https://proxy-prod.omnivore-image-cache.app/360x0,skALcjcaHAdqblfxBIwouIs5eOsGmHvLWeECpxvV5VYY/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_360/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2018%2F02%2FQuote-3_blog.png 360w,https://proxy-prod.omnivore-image-cache.app/384x0,sy2Yd5mWuBHWdQjhLZsMjeKxcAdQBlV_bwdv5QtKOmew/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_384/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2018%2F02%2FQuote-3_blog.png 384w,https://proxy-prod.omnivore-image-cache.app/480x0,sWjvvHwHnTfF2IltUU-FBTfFWv30kbj9rBgF7o4f4yJk/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_480/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2018%2F02%2FQuote-3_blog.png 480w,https://proxy-prod.omnivore-image-cache.app/768x0,sB7e0KPwbEru5Yw9usaf3LcbUCmze7P2CRiar2QkKxl8/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_768/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2018%2F02%2FQuote-3_blog.png 768w,https://proxy-prod.omnivore-image-cache.app/960x0,sLgsP-Z4NoEOlW3FaQEAeAOEc0pM8ywmI2QYXYvalOk0/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_960/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2018%2F02%2FQuote-3_blog.png 960w,https://proxy-prod.omnivore-image-cache.app/1120x0,sJCr_2T01n0wtF-GSb8t3dIAkjuqrQFyP4sF7Apashg8/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_1120/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2018%2F02%2FQuote-3_blog.png 1120w,https://proxy-prod.omnivore-image-cache.app/1536x0,szAvphV1fMF7VqGSaZuqPVAy8G8GlxVxqe1YYmyxxEM4/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_1536/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2018%2F02%2FQuote-3_blog.png 1536w,https://proxy-prod.omnivore-image-cache.app/2240x0,sWSAJ_Y3WYCl22fFTPoDuBgFvTnuPnW0MxHQz3WbniO0/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_2240/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2018%2F02%2FQuote-3_blog.png 2240w,https://proxy-prod.omnivore-image-cache.app/2624x0,s1x5wMCbkH_5jOAIdTbFr1yrpN8eAt5CpcraKUqGVtUA/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_2624/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2018%2F02%2FQuote-3_blog.png 2624w," src="https://proxy-prod.omnivore-image-cache.app/512x451,sg30SjuWfbydy7rwalDcVQSETRcRmoziILNaI7RoKEmg/https://res.cloudinary.com/imagist/image/fetch/q_auto,f_auto,c_scale,w_2624/https%3A%2F%2Ftdinspiration.wpengine.com%2Fwp-content%2Fuploads%2F2018%2F02%2FQuote-3_blog.png"></figure></span></button></p><p data-omnivore-anchor-idx="219">If your goals change, update your "life vision" task to document and do a mini-inventory to re-tidy your Todoist. Over time, the goals that stand the test of time will be valuable to you, and now you’ll have the tools to achieve them in an organized way.</p><hr data-omnivore-anchor-idx="220" aria-orientation="horizontal"><p data-omnivore-anchor-idx="221">We spend a lot of time in digital spaces. Luckily, we can take a page from Marie Kondo’s ideas about physical space to keep our digital environment — and, by extension, our minds and lives — tidy. It’s not just a productivity boost; in a world of constant interruptions and information overload, healthy organizational habits will help you stay balanced and carve out time for the things that bring you joy, all the while making progress toward what matters to you most.</p></div><div data-omnivore-anchor-idx="222"><p data-omnivore-anchor-idx="223">Neil Vidyarthi</p><p data-omnivore-anchor-idx="224"><span data-omnivore-anchor-idx="225">Neil Vidyarthi is a product marketer and mindfulness evangelist at Doist.</span></p></div></div></article></DIV></DIV>

metadata:
  {"date_added":"2024-02-23 20:22:03","id":"f5956559-3eb2-4717-93bd-3f3a2f0c5549","status":"ARCHIVED","tags":["read-later"],"title":"The Life-Changing Magic of Tidying Up Your To-Do List\n","url_omnivore":"https://omnivore.app/me/https-todoist-com-inspiration-life-changing-magic-tidying-todois-18bf18e00a2\n","url_original":"https://todoist.com/inspiration/life-changing-magic-tidying-todoist\n"}


path: Omnivore/2024-02-26 - How to Learn the Hard Parts of React – and Tips to Conquer Them.md
sortable_path: Omnivore2024-02-26 - How to Learn the Hard Parts of React – and Tips to Conquer Them.md
title: How to Learn the Hard Parts of React – and Tips to Conquer Them
lead: # How to Learn the Hard Parts of React – and Tips to Conquer Them
checksum: 713cb67e0eac063f0a0d31e2cbc7cd30160b7dc10a6c756743c709a768935102
created: 2024-09-15 00:40:58.372250035+00:00
modified: 2024-09-22 22:40:13.396511065+00:00
body:
  # How to Learn the Hard Parts of React – and Tips to Conquer Them

  ## Highlights

  The first instinct for many developers when faced with creating dynamic lists is to use the index property as the key. It seems like a convenient solution, as the index provides a unique identifier for each element in the array – but it isn’t the best approach for the following reasons:

  * **Non-Persistent**: If the order or number of items changes, React may get confused. For example, if an item is added or removed from the beginning of the list, all the subsequent indices change, causing potential re-rendering issues.
  * **Array Mutations**: Operations like sorting or filtering can alter the order of items, breaking the association between the index and the actual item.
  * **Performance Concerns**: React relies on keys for efficient updates. Using the index as a key might impact performance when dealing with large lists or frequent updates.

  Some of the better alternatives include:

  * **Use a Unique ID**: If each item in your array has a unique identifier, such as an `id` property, use that as the key. 

  [source](https://omnivore.app/me/how-to-learn-the-hard-parts-of-react-and-tips-to-conquer-them-18de8db4244#e912d65e-4c82-41f1-94d4-56c151254c3e) 

  ---

  Generate a Unique Key: In cases where items lack a natural unique identifier, consider using a function like `crypto.randomUUID()` to generate a unique key. 

  [source](https://omnivore.app/me/how-to-learn-the-hard-parts-of-react-and-tips-to-conquer-them-18de8db4244#9074fe2d-d95d-4fc6-af45-be052bb24de5) 

  ---

  To ensure your component behaves as expected and follows React's principles, always use the setter function (`setNames`) to update the state. 

  [source](https://omnivore.app/me/how-to-learn-the-hard-parts-of-react-and-tips-to-conquer-them-18de8db4244#a42adf04-e7ec-4612-a7ea-c179bfce9163) 

  ---

  To safeguard your component from unexpected errors, incorporate optional chaining (`?.`) when accessing nested properties in API data. 

  [source](https://omnivore.app/me/how-to-learn-the-hard-parts-of-react-and-tips-to-conquer-them-18de8db4244#7ef6781d-7b8b-496d-bd2d-2974995be502) 

  ---

  * **Put data outside components**: Move things like lists and groups of information outside the main part of a component when possible. This helps avoid extra updates and makes it simpler to handle data without using special functions like `useCallback`.
  * **Be careful with `React.memo`**: Using `React.memo` can help your components run better, but it's not always needed. If a component changes a lot with new information, using `React.memo` might not be as helpful. Use it wisely.
  * **Create your own custom React hooks**: I also like making my own special tools with custom React hooks. It's a bit advanced, but it helps keep my code neat and organized. 

  [source](https://omnivore.app/me/how-to-learn-the-hard-parts-of-react-and-tips-to-conquer-them-18de8db4244#eb5d0b4b-a153-4551-a3a4-522a590854b5) 

  ---

  ## Original

  ![How to Learn the Hard Parts of React – and Tips to Conquer Them](https://proxy-prod.omnivore-image-cache.app/1540x800,s0Sf0yjj2JnhltmKR9CwuUoWXE6WKbqnS0xaYjUco-u4/https://www.freecodecamp.org/news/content/images/size/w2000/2024/02/Article-Cover.png) 

  Have you started learning React, only to face bugs that made you contemplate a career in goat herding? Don't worry – we've all been there. 

  In this guide, you'll join me on a quest through the quirky wonders of React. I'll help you navigate the perplexing moments, ensuring you never have to ask yourself, "What’s up with React?"

  Whether you're a seasoned React adventurer or unearthing the mysteries of virtual DOMs, fear not. I'm here to share the tales of my early struggles, demystify the enigmatic bugs, and pave the way for a smoother journey.

  ### Prerequisites

  * Fundamentals of HTML and CSS
  * Fundamentals of ES6 JavaScript and React

  ## ****What We'll Cover:**

  1. [Quick Recap of React Fundamentals](#what-we-ll-cover-)  
  – [Components: The Web Building Blocks](#components-the-web-building-blocks)  
  – [JSX: Where HTML Meets JavaScript](#jsx-where-html-meets-javascript)  
  – [State and Props: The Dynamic Duo](#state-and-props-the-dynamic-duo)
  2. [The Good, the Bad, and the Challenging Parts of React](#the-good-the-bad-and-the-challenging-parts-of-react)  
  – [The Good Parts of React](#the-good-parts-of-react)  
  – [The Bad Parts of React](#the-bad-parts-of-react)  
  – [The Challenging Parts of React](#the-challenging-parts-of-react)  
   – [Key Prop Mishaps](#key-prop-mishaps)  
   – [Mutating States Directly](#mutating-states-directly)  
   – [Mysterious Bugs with Conditional Rendering](#mysterious-bugs-with-conditional-rendering)  
   – [Ignoring Dependency Arrays in React Hooks](#ignoring-dependency-arrays-in-react-hooks)  
   – [Neglecting Optional Chaining for API Data](#neglecting-optional-chaining-for-api-data)  
   – [Ignoring React Fragments for Grouping JSX Elements](#ignoring-react-fragments-for-grouping-jsx-elements)
  3. [Opinionated Approaches to React](#opinionated-approaches-to-react)
  4. [Wrapping Up the Quirky Journey with React](#wrapping-up-the-quirky-journey-with-react)

  ## Quick Recap of React Fundamentals

  The React library revolves around 3 building blocks: Components, JSX, and State & Props.

  ### Components: The Web Building Blocks

  Imagine components as the LEGO bricks of your user interface—a single, reusable piece that contributes to the grand structure. They encapsulate functionality, styling, and behavior, making your UI both modular and scalable. 

  From a simple button to an elaborate sidebar, components are the heart and soul of React development.

  ### JSX: Where HTML Meets JavaScript

  JSX, or JavaScript XML, may seem like an odd fusion of HTML and JavaScript at first, but it’s quite straightforward. It's the secret sauce that makes React's syntax so expressive and dynamic. 

  With JSX, you write your UI components using a syntax that resembles HTML, but underneath, it's pure JavaScript.

  ### State and Props: The Dynamic Duo

  The dynamic duo of state and props bring React pages to life as they add interactivity to your web applications.

  #### State: Granting Memory to Components

  State provides memory to components, allowing them to remember past events and alter their behavior over time. It's the key to making your UI responsive and dynamic. 

  Picture a form that remembers the user's input or a counter that increments with each click. That's the magic of state.

  #### Props: Enabling Communication

  Props (short for properties) facilitate communication between components. They allow parent components to pass data down to their children, creating a seamless flow of information. 

  Think of props as messengers, ensuring that each component knows its role and receives the necessary information to perform it.

  ## The Good, the Bad, and the Puzzling Parts of React

  Before we delve into the puzzling aspects of React, it's essential to shine a spotlight on the treasures that make React a true hero in your arsenal.

  ### The Good Parts of React

  #### Virtual DOM and its Advantages

  The virtual DOM is a revolutionary concept that gives React its speed and efficiency. 

  When changes occur in your app, React doesn't immediately update the actual DOM. Instead, it works with a lightweight copy, the Virtual DOM, making minimal, lightning-fast adjustments. This not only optimizes performance but also provides a smoother user experience.

  ```reasonml
  ReactDOM.createRoot(document.getElementById("root")).render(
      <App />
   );

  ```

  This process leverages [React's diffing algorithm](https://legacy.reactjs.org/docs/reconciliation.html) in the Virtual DOM. It identifies the minimal set of changes needed in the actual DOM to reflect the updated state.

  ![00--Explaing-how-react-updates-the-UI-using-the-virtual-DOM](https://proxy-prod.omnivore-image-cache.app/800x500,sN6hiHQDh5G5Z1y11CUFB0OTNaafhqk2tzE4i9f1vAFA/https://www.freecodecamp.org/news/content/images/2024/02/00--Explaing-how-react-updates-the-UI-using-the-virtual-DOM.png)

  Explaining how React updates the UI using the virtual DOM

  #### Reusable Components

  In React, the guiding principle is reusability. Components, the fundamental building blocks we discussed above, can be crafted and employed across your application. This not only fosters a modular and organized code structure but also frees you from the burden of reinventing the wheel.

  ```hsp
  // Reusable Button Component
  const Button = ({ label, onClick }) => (
    <button onClick={onClick}>{label}</button>
  );

  // Usage
  <Button label="Click me" onClick={() => console.log("Button Clicked")} />

  ```

  #### One-way Data Binding for a Predictable Flow

  React enforces a unidirectional data flow, ensuring predictability and maintainability. 

  Parent components convey data down to their children through props, and any modifications are overseen by the parent component. This one-way street prevents the chaos with 2-way data binding seen in other frameworks.

  ```kotlin
  const ParentComponent = () => {
    const [data, setData] = useState("Hello from Parent!");

    return <ChildComponent data={data} />;
  };

  const ChildComponent = ({ data }) => <div>{data}</div>;

  ```

  ### The Bad Parts of React

  There are some parts of React that aren't ideal, though. Let's go through them briefly now so you can be aware of them.

  #### Steep Learning Curve for Beginners

  Starting with React can be tough, especially if you're new to web development. Concepts like JSX, components, and state management might seem like a maze. But don't worry! With some practice and patience, it gets easier, and React becomes more familiar.

  #### JSX Might Puzzle You at First

  JSX, the special mix of HTML and JavaScript, can be a bit confusing at the beginning. It's like learning a new language that blends the two. But as you get the hang of it, you'll see how it makes your code shorter and clearer.

  #### State Management Challenges

  Using state in React is powerful, but it can also be tricky. Handling state across lots of different pieces, especially in big projects, can create complex setups and potential problems. Luckily, tools like [Redux](https://redux.js.org/) exist to help manage this complexity.

  ## The Challenging Parts of React

  ### Key Prop Mishaps

  When building your applications, you may often have repeating elements which show similar information or share the same styles. The logical step would be to loop over them to create a list of elements.

  ```xquery
  function ListComponent() {
    const people = [{ name: "Mitchelle" }, { name: "July" }, { name: "David" }];
    return (
      <ul>
        {/ Looping over the people array to create list items /}
        {people.map((person) => (
          <li>{person.name}</li>
        ))}
      </ul>
    );
  }

  ```

  Everything seems fine until you notice a warning in your console or, worse, strange behaviour in how your list renders.

  ![02--The-console-an-error-due-to-missing-key-prop](https://proxy-prod.omnivore-image-cache.app/507x241,szg5e19g4RV8xImWmAIoG9B9jWTUW46xjwi9dZUe0yxg/https://www.freecodecamp.org/news/content/images/2024/02/02--The-console-an-error-due-to-missing-key-prop.png)

  The console an error due to missing key prop

  React uses keys to update and reorder elements in a list. When you forget to provide a key prop or if the keys are not unique, React gets a bit lost. It's like trying to keep track of items in the array without any specific identifiers – things get mixed up, and you might end up with unexpected bugs in your UI.

  #### How to solve it

  ==The first instinct for many developers when faced with creating dynamic lists is to use the index property as the key. It seems like a convenient solution, as the index provides a unique identifier for each element in the array== ==– but it isn’t the best approach for the following reasons:==

  * **==Non-Persistent==**==: If the order or number of items changes, React may get confused. For example, if an item is added or removed from the beginning of the list, all the subsequent indices change, causing potential re-rendering issues.==
  * **==Array Mutations==**==: Operations like sorting or filtering can alter the order of items, breaking the association between the index and the actual item.==
  * **==Performance Concerns==**==: React relies on keys for efficient updates. Using the index as a key might impact performance when dealing with large lists or frequent updates.==

  ==Some of the better alternatives include:==

  * **==Use a Unique ID==**==: If each item in your array has a unique identifier, such as an== `==id==` ==property, use that as the key.==

  ```clojure
  {people.map((person) => (
    <li key={person.id}>{person.name}</li>
  ))}

  ```

  * ==Generate a Unique Key: In cases where items lack a natural unique identifier, consider using a function like== `==crypto====.randomUUID====()==` ==to generate a unique key.==

  ```clojure
   {people.map((person) => (
          <li key={crypto.randomUUID()}>{person.name}</li>
   ))}

  ```

  By choosing one of these alternatives, you provide React with stable and unique keys, helping it manage and update your dynamic lists,

  **Note**: You may be thinking “If `crypto.randomUUID` generates a unique ID, (`Math.random()` \* some big number) would work the same, right”?

  ![Nope](https://proxy-prod.omnivore-image-cache.app/600x352,sXLy_99RHiGL8JMMYJE4TwrOh9N5fiwyxhggWsEqrMDM/https://www.freecodecamp.org/news/content/images/2024/02/Nope.gif)

  Nope gif

  `Math.random()` could also suffice as a key, but it's a bad idea because the generated keys won't be stable across re-renders, leading to potential performance issues and rendering inconsistencies.

  ### Mutating States Directly

  Imagine you're working on a component that manages an array of names. Rather than using the appropriate setter method to update the state, you decide to directly mutate the state.

  ```javascript
  const MutableStateComponent = () => {
    const [names, setNames] = useState(["David", "John", "Steph", "Anthony"]);

    const removeLastName = () => {
      console.log(names);
      // Direct mutation of state using pop()
      names.pop();
      setNames(names); // This won't trigger a re-render
    };

    return (
      <div>
        <p>Names: {names.join(", ")}</p>
        <button onClick={removeLastName}>Remove Last Name</button>
      </div>
    );
  };

  ```

  To your surprise, the UI doesn't update as expected, and you find yourself stuck in a scenario where the list of names seems frozen. Make no mistake, the array is getting updated as seen below:

  ![yey1I5L7W43d8vcNl7kEUZaRHGZw90xZfviK3rhfFHiqwXv3gsCjHqcs9nhgdWoQlbPEGAj2A_7qHcoeRI9xPtsD0JCiPJdzT4MNRrQ91GfUjdwvW4hmlHGE_LtdG49FzO1buO0yT9tzMRtO95MgvYI](https://proxy-prod.omnivore-image-cache.app/600x185,sHZ7BRzMS5mQWhPWL8g4Fy71wvaWXfxrGi1DkSLA2QRg/https://lh7-us.googleusercontent.com/yey1I5L7W43d8vcNl7kEUZaRHGZw90xZfviK3rhfFHiqwXv3gsCjHqcs9nhgdWoQlbPEGAj2A_7qHcoeRI9xPtsD0JCiPJdzT4MNRrQ91GfUjdwvW4hmlHGE_LtdG49FzO1buO0yT9tzMRtO95MgvYI)

  Array getting mutated with UI being updated

  #### What's the Problem?

  React relies on an immutable state for efficient updates, and when you bypass this mechanism, it disrupts the unidirectional data flow. 

  In this case, using `pop()` mutates the original array in place, and React loses track of the changes. This leads to an inaccurate rendering of the component.

  #### How to Solve it

  ==To ensure your component behaves as expected and follows React's principles, always use the setter function (==`==setNames==`==) to update the state.==

  ```javascript
  const MutableStateComponent = () => {
    const [names, setNames] = useState(["David", "John", "Steph", "Anthony"]);

    const removeLastName = () => {
      // Use setNames to update state
      setNames((prevNames) => prevNames.slice(0, -1));
      console.log(names);
    };

    return (
      <div>
        <p>Names: {names.join(", ")}</p>
        <button onClick={removeLastName}>Remove Last Name</button>
      </div>
    );
  };

  ```

  By using `setNames` and creating a new array with the desired changes (in this case, using `slice` to remove the last element), you ensure that React can accurately track and update the state, resulting in the expected UI behavior.

  ![09--Result-of-Mutating-States-with-the-correct-method](https://proxy-prod.omnivore-image-cache.app/600x166,sSC4S47mv-qIsZHrIUJJJ-RcTuPQbIN2sInkN4pMqPJ0/https://www.freecodecamp.org/news/content/images/2024/02/09--Result-of-Mutating-States-with-the-correct-method.gif)

  Result of mutating states with the correct method

  ### Mysterious Bugs with Conditional Rendering

  Conditional rendering, while powerful, can introduce subtle bugs when not handled with care. Understanding common pitfalls, particularly those related to truthy and falsy evaluations, is crucial for preventing mysterious rendering behaviour.

  Consider the following example:

  ```javascript
  const IncorrectConditionalComponent = ({ showContent }) => (
    {showContent && <div>Show me if true!</div>}
  );

  ```

  #### The Bug: Unexpected Rendering with Falsy Values

  In this code snippet, if `showContent` happens to be a falsy value, such as `0`, the component will render an unexpected result. Instead of gracefully not rendering the content, it will display `0` on the screen due to the direct inclusion of curly braces.

  ![Gotcha](https://proxy-prod.omnivore-image-cache.app/500x281,slcS6xZX3T1h2Kyhm2ik9SCftGek8Bv30z5clC0Il8fk/https://www.freecodecamp.org/news/content/images/2024/02/Gotcha.gif)

  I gotcha gif

  #### What's the Problem?

  The issue lies in the mismanagement of truthy and falsy values. The direct use of curly braces creates an object wrapper (`[object Object]`), causing the component to render whatever value is present, even if it's falsy.

  #### How to Solve it

  To catch rendering bugs related to truthy and falsy values, use a more explicit conditional check.

  ```javascript
  const CorrectConditionalComponent = ({ showContent }) => (
    showContent ? <div>Show me if true!</div> : null
  );

  ```

  In this corrected version, the ternary operator ensures a clear check for truthiness, preventing unexpected rendering issues. By explicitly handling truthy and falsy values, you build robust components that behave predictably in various scenarios.

  ### Ignoring Dependency Arrays in React Hooks

  Imagine working on a component that relies on an effect to perform some logic when a certain state, let's say `count`, changes. But even though you're incrementing the count, the effect doesn't seem to run, and you're left wondering why your logic isn't taking effect.

  ```javascript
  const Counter = () => {
    const [count, setCount] = useState(0);

    const handleClick = () => {
     
      setCount((count) => count + 1);
    };

    useEffect(() => {
      console.log("The current count value is ", count);
    }, []);

    return (
      <div>
        <p>Count: {count}</p>
        <button onClick={handleClick}>Increment</button>
      </div>
    );
  };

  ```

  ![03--testing-the-count-component-without-fixing-the-useEffect-dependency-array](https://proxy-prod.omnivore-image-cache.app/600x207,sclaHzwd3J6Ir6gJjzyGYaoim1IkPzaLN3QTxNHzYMf4/https://www.freecodecamp.org/news/content/images/2024/02/03--testing-the-count-component-without-fixing-the-useEffect-dependency-array.gif)

  Testing the count component without fixing the useEffect dependency array

  #### What's the Problem?

  The issue lies in neglecting the dependency array in your `useEffect`. When you omit the dependencies, React might not recognize that the effect is tied to a specific piece of state, leading to stale data and unexpected behavior.

  #### How to Solve it

  To get your effect back on track, include the relevant dependencies in the dependency array. It's like setting up triggers – you're telling React, "Hey, run this effect whenever these specific pieces of data change."

  ```coffeescript
  useEffect(() => {
      console.log("The current count value is ", count);
    }, [count]);

  ```

  Which now fires the `useEffect` hook:

  ![04--testing-the-count-component-after-fixing-the-useEffect-dependency-array](https://proxy-prod.omnivore-image-cache.app/600x162,seLpHSsOeC0rY6uLCrbDj68pQbCzZ-wZ8McJAd7xlxSc/https://www.freecodecamp.org/news/content/images/2024/02/04--testing-the-count-component-after-fixing-the-useEffect-dependency-array.gif)

  Testing the count component after fixing the useEffect dependency array

  ### Neglecting Optional Chaining for API Data

  You're working on a component that displays user data fetched from an API. Everything seems fine until you encounter an unexpected runtime error. The culprit? A missing optional chaining operator.

  #### What's the Problem?

  API responses can be unpredictable, and not all data structures match your expectations. Neglecting optional chaining, especially when accessing deeply nested properties (looking at you Strapi response data 👀) can lead to runtime errors if a property is undefined.

  #### How to Solve it

  ==To safeguard your component from unexpected errors, incorporate optional chaining (==`==?.==`==) when accessing nested properties in API data.==

  As an example, say you want to read a deeply nested property (label) from this data:

  ```dts
  const data = {
      id: 1,
      title: "First Item",
      content: "Content for the first item",
      category: {
        id: 101,
        name: "Category A",
        description: "Description of Category A",
        tags: [
          {
            id: 1001,
            label: "Tag 1",
          },
          {
            id: 1002,
            label: "Tag 2",
          },
        ],
      },
      author: {
        id: 201,
        name: "John Doe",
        email: "john.doe@example.com",
      },
    };

  ```

  The correct way would be to use optional chaining to retrieve that data:

  ```ebnf
   const firstLabel = data?.category?.tags?.[0]?.label;

  ```

  Rather than accessing those properties directly:

  ```angelscript
  const firstLabel = data.category.tags[0].label;

  ```

  This prevents you from seeing a white screen error and a flooded console if the data structure changes. It's like putting on a safety net – if a property is missing, your app won't come crashing down like so:

  ![05--Error-occuring-when-optional-chaining-isn-t-applied](https://proxy-prod.omnivore-image-cache.app/1588x727,sgwJjdFdMroS9C8ajyVYXPFExl3EaNWv9vbpl-AfLfYk/https://www.freecodecamp.org/news/content/images/2024/02/05--Error-occuring-when-optional-chaining-isn-t-applied.png)

  Error occurring when optional chaining isn't applied

  ### Ignoring React Fragments for Grouping JSX Elements

  When working with React components, you may encounter a scenario where you want to return multiple JSX elements from a function, only to be met with a syntax error.

  #### What's the Problem?

  This is due to a limitation in JavaScript, as it doesn't allow the return of adjacent elements without a common parent.

  Consider the following problematic code:

  ```javascript
  function User() {
    return <div> David Jaja</div>
           <div>Twitter: https://twitter.com/JajaDavid8</div>;
  }

  ```

  This code results in an error: “Adjacent JSX elements must be wrapped in an enclosing tag.”

  ![06--Error-occuring-when-JSX-returns-2-direct-adjacent-elements](https://proxy-prod.omnivore-image-cache.app/1483x544,sfPaIFNuG9axWWmq6yZXVZ-ZwIa9PqA7yMHZZSz0zFAA/https://www.freecodecamp.org/news/content/images/2024/02/06--Error-occuring-when-JSX-returns-2-direct-adjacent-elements.png)

  Error occurring when JSX returns 2 direct adjacent elements

  #### How to Solve it

  I know what you might be thinking—why not simply wrap the elements in a div and move on?

  ![sponge-bob-bored](https://proxy-prod.omnivore-image-cache.app/320x174,sxPXM63m9c5aUHt7caKrHlLe6GEQ0rRGQxJIX0zxEBg8/https://www.freecodecamp.org/news/content/images/2024/02/sponge-bob-bored.gif)

  Spongebob bored gif

  While this seems like a quick fix, it introduces a potential downside. By adding a div, you create an unnecessary parent element in the DOM. 

  This additional markup, though resolving the immediate error, can lead to unintended consequences, such as affecting styles or layout, and may not align with optimal coding practices. 

  And I’m sure you don’t want to end up with a "divpocalipse". 

  ![07--Divpocalpse](https://proxy-prod.omnivore-image-cache.app/658x598,stqxWkWd8N7Td4JGVinc5-ysByAEwhC7_RfMt9hhaoHk/https://www.freecodecamp.org/news/content/images/2024/02/07--Divpocalpse.png)

  A divpocalpse

  To overcome both the syntax error and the unnecessary DOM markup, React introduced an optimized solution: React Fragments.

  React Fragments are used to address the need for returning multiple JSX elements without introducing unnecessary parent elements in the DOM.

  Here's how you can utilize React Fragments:

  ```javascript
  import React from "react";
  function User() {
    return (
      <React.Fragment>
        <div> David Jaja</div>
        <div>Twitter: https://twitter.com/JajaDavid8</div>
      </React.Fragment>
    );
  }

  ```

  Or using the shorthand syntax:

  ```javascript
  function User() {
    return (
      <>
        <div> David Jaja</div>
        <div>Twitter: https://twitter.com/JajaDavid8</div>
      </>
    );
  }


  ```

  By using React Fragments, you maintain clean and concise JSX code without introducing unnecessary elements to the DOM, enhancing code readability.

  ![Showing-the-DOM-tree-after-using-fragments-without-any-extra-elements](https://proxy-prod.omnivore-image-cache.app/521x218,sqbUBL83eWVIxHkxByP9ivVd484cYuA_oCvZVMM_V_pw/https://www.freecodecamp.org/news/content/images/2024/02/Showing-the-DOM-tree-after-using-fragments-without-any-extra-elements.png)

  Showing the DOM tree after using fragments without any extra elements

  ## Opinionated Approaches to React

  I've found some handy ways to make working with React more enjoyable. Instead of strict rules, think of these as my personal choices to make code easier to read, improve how it works, and make sure it stays in good shape.

  1. **==Put data outside components==**==: Move things like lists and groups of information outside the main part of a component when possible. This helps avoid extra updates and makes it simpler to handle data without using special functions like== `==useCallback==`==.==
  2. **==Be careful with== `==React====.====memo==`**==: Using== `==React====.====memo==` ==can help your components run better, but it's not always needed. If a component changes a lot with new information, using== `==React====.====memo==` ==might not be as helpful. Use it wisely.==
  3. **==Create your own custom React hooks==**==: I also like making my own special tools with custom React hooks. It's a bit advanced, but it helps keep my code neat and organized.==

  ![but-thats-just-my-opinion-just-what-i-think](https://proxy-prod.omnivore-image-cache.app/498x280,st7PfcgBzDoANQmhoVH50NeoEVnO5TcYT-qsL2rwjg8E/https://www.freecodecamp.org/news/content/images/2024/02/but-thats-just-my-opinion-just-what-i-think.gif)

  Just my opinion gif

  ## Wrapping Up the Quirky Journey with React

  React's journey is a blend of smooth sailing and bumpy rides. We've seen the strength of reusable components and virtual DOM and tackled puzzling moments like missing key props and conditional rendering bugs and so on.

  As you continue your journey with React, may your code be clean, your components reusable, and your "What's Up with React?" moments turn into "Aha!" revelations. Happy coding! 🚀

  ### **Contact Information**

  Want to connect or contact me? Feel free to hit me up on the following:

  * Twitter: [@jajadavid8](https://twitter.com/JajaDavid8)
  * LinkedIn: [David Jaja](https://www.linkedin.com/in/david-jaja-8084251b4/)
  * Email: Jajadavidjid@gmail.com

  ---

  ---

   Learn to code for free. freeCodeCamp's open source curriculum has helped more than 40,000 people get jobs as developers. [Get started](https://www.freecodecamp.org/learn/)

raw_content:
  ---
  id: 085bfd7c-d52a-11ee-bfc7-b34a261d031c
  title: |
    How to Learn the Hard Parts of React – and Tips to Conquer Them
  status: ARCHIVED
  tags:
    - read-later
    - RSS
  date_added: 2024-02-26 18:07:53
  url_omnivore: |
    https://omnivore.app/me/how-to-learn-the-hard-parts-of-react-and-tips-to-conquer-them-18de8db4244
  url_original: |
    https://www.freecodecamp.org/news/hard-parts-of-react/
  ---

  # How to Learn the Hard Parts of React – and Tips to Conquer Them

  ## Highlights

  The first instinct for many developers when faced with creating dynamic lists is to use the index property as the key. It seems like a convenient solution, as the index provides a unique identifier for each element in the array – but it isn’t the best approach for the following reasons:

  * **Non-Persistent**: If the order or number of items changes, React may get confused. For example, if an item is added or removed from the beginning of the list, all the subsequent indices change, causing potential re-rendering issues.
  * **Array Mutations**: Operations like sorting or filtering can alter the order of items, breaking the association between the index and the actual item.
  * **Performance Concerns**: React relies on keys for efficient updates. Using the index as a key might impact performance when dealing with large lists or frequent updates.

  Some of the better alternatives include:

  * **Use a Unique ID**: If each item in your array has a unique identifier, such as an `id` property, use that as the key. 

  [source](https://omnivore.app/me/how-to-learn-the-hard-parts-of-react-and-tips-to-conquer-them-18de8db4244#e912d65e-4c82-41f1-94d4-56c151254c3e) 

  ---

  Generate a Unique Key: In cases where items lack a natural unique identifier, consider using a function like `crypto.randomUUID()` to generate a unique key. 

  [source](https://omnivore.app/me/how-to-learn-the-hard-parts-of-react-and-tips-to-conquer-them-18de8db4244#9074fe2d-d95d-4fc6-af45-be052bb24de5) 

  ---

  To ensure your component behaves as expected and follows React's principles, always use the setter function (`setNames`) to update the state. 

  [source](https://omnivore.app/me/how-to-learn-the-hard-parts-of-react-and-tips-to-conquer-them-18de8db4244#a42adf04-e7ec-4612-a7ea-c179bfce9163) 

  ---

  To safeguard your component from unexpected errors, incorporate optional chaining (`?.`) when accessing nested properties in API data. 

  [source](https://omnivore.app/me/how-to-learn-the-hard-parts-of-react-and-tips-to-conquer-them-18de8db4244#7ef6781d-7b8b-496d-bd2d-2974995be502) 

  ---

  * **Put data outside components**: Move things like lists and groups of information outside the main part of a component when possible. This helps avoid extra updates and makes it simpler to handle data without using special functions like `useCallback`.
  * **Be careful with `React.memo`**: Using `React.memo` can help your components run better, but it's not always needed. If a component changes a lot with new information, using `React.memo` might not be as helpful. Use it wisely.
  * **Create your own custom React hooks**: I also like making my own special tools with custom React hooks. It's a bit advanced, but it helps keep my code neat and organized. 

  [source](https://omnivore.app/me/how-to-learn-the-hard-parts-of-react-and-tips-to-conquer-them-18de8db4244#eb5d0b4b-a153-4551-a3a4-522a590854b5) 

  ---

  ## Original

  ![How to Learn the Hard Parts of React – and Tips to Conquer Them](https://proxy-prod.omnivore-image-cache.app/1540x800,s0Sf0yjj2JnhltmKR9CwuUoWXE6WKbqnS0xaYjUco-u4/https://www.freecodecamp.org/news/content/images/size/w2000/2024/02/Article-Cover.png) 

  Have you started learning React, only to face bugs that made you contemplate a career in goat herding? Don't worry – we've all been there. 

  In this guide, you'll join me on a quest through the quirky wonders of React. I'll help you navigate the perplexing moments, ensuring you never have to ask yourself, "What’s up with React?"

  Whether you're a seasoned React adventurer or unearthing the mysteries of virtual DOMs, fear not. I'm here to share the tales of my early struggles, demystify the enigmatic bugs, and pave the way for a smoother journey.

  ### Prerequisites

  * Fundamentals of HTML and CSS
  * Fundamentals of ES6 JavaScript and React

  ## ****What We'll Cover:**

  1. [Quick Recap of React Fundamentals](#what-we-ll-cover-)  
  – [Components: The Web Building Blocks](#components-the-web-building-blocks)  
  – [JSX: Where HTML Meets JavaScript](#jsx-where-html-meets-javascript)  
  – [State and Props: The Dynamic Duo](#state-and-props-the-dynamic-duo)
  2. [The Good, the Bad, and the Challenging Parts of React](#the-good-the-bad-and-the-challenging-parts-of-react)  
  – [The Good Parts of React](#the-good-parts-of-react)  
  – [The Bad Parts of React](#the-bad-parts-of-react)  
  – [The Challenging Parts of React](#the-challenging-parts-of-react)  
   – [Key Prop Mishaps](#key-prop-mishaps)  
   – [Mutating States Directly](#mutating-states-directly)  
   – [Mysterious Bugs with Conditional Rendering](#mysterious-bugs-with-conditional-rendering)  
   – [Ignoring Dependency Arrays in React Hooks](#ignoring-dependency-arrays-in-react-hooks)  
   – [Neglecting Optional Chaining for API Data](#neglecting-optional-chaining-for-api-data)  
   – [Ignoring React Fragments for Grouping JSX Elements](#ignoring-react-fragments-for-grouping-jsx-elements)
  3. [Opinionated Approaches to React](#opinionated-approaches-to-react)
  4. [Wrapping Up the Quirky Journey with React](#wrapping-up-the-quirky-journey-with-react)

  ## Quick Recap of React Fundamentals

  The React library revolves around 3 building blocks: Components, JSX, and State & Props.

  ### Components: The Web Building Blocks

  Imagine components as the LEGO bricks of your user interface—a single, reusable piece that contributes to the grand structure. They encapsulate functionality, styling, and behavior, making your UI both modular and scalable. 

  From a simple button to an elaborate sidebar, components are the heart and soul of React development.

  ### JSX: Where HTML Meets JavaScript

  JSX, or JavaScript XML, may seem like an odd fusion of HTML and JavaScript at first, but it’s quite straightforward. It's the secret sauce that makes React's syntax so expressive and dynamic. 

  With JSX, you write your UI components using a syntax that resembles HTML, but underneath, it's pure JavaScript.

  ### State and Props: The Dynamic Duo

  The dynamic duo of state and props bring React pages to life as they add interactivity to your web applications.

  #### State: Granting Memory to Components

  State provides memory to components, allowing them to remember past events and alter their behavior over time. It's the key to making your UI responsive and dynamic. 

  Picture a form that remembers the user's input or a counter that increments with each click. That's the magic of state.

  #### Props: Enabling Communication

  Props (short for properties) facilitate communication between components. They allow parent components to pass data down to their children, creating a seamless flow of information. 

  Think of props as messengers, ensuring that each component knows its role and receives the necessary information to perform it.

  ## The Good, the Bad, and the Puzzling Parts of React

  Before we delve into the puzzling aspects of React, it's essential to shine a spotlight on the treasures that make React a true hero in your arsenal.

  ### The Good Parts of React

  #### Virtual DOM and its Advantages

  The virtual DOM is a revolutionary concept that gives React its speed and efficiency. 

  When changes occur in your app, React doesn't immediately update the actual DOM. Instead, it works with a lightweight copy, the Virtual DOM, making minimal, lightning-fast adjustments. This not only optimizes performance but also provides a smoother user experience.

  ```reasonml
  ReactDOM.createRoot(document.getElementById("root")).render(
      <App />
   );

  ```

  This process leverages [React's diffing algorithm](https://legacy.reactjs.org/docs/reconciliation.html) in the Virtual DOM. It identifies the minimal set of changes needed in the actual DOM to reflect the updated state.

  ![00--Explaing-how-react-updates-the-UI-using-the-virtual-DOM](https://proxy-prod.omnivore-image-cache.app/800x500,sN6hiHQDh5G5Z1y11CUFB0OTNaafhqk2tzE4i9f1vAFA/https://www.freecodecamp.org/news/content/images/2024/02/00--Explaing-how-react-updates-the-UI-using-the-virtual-DOM.png)

  Explaining how React updates the UI using the virtual DOM

  #### Reusable Components

  In React, the guiding principle is reusability. Components, the fundamental building blocks we discussed above, can be crafted and employed across your application. This not only fosters a modular and organized code structure but also frees you from the burden of reinventing the wheel.

  ```hsp
  // Reusable Button Component
  const Button = ({ label, onClick }) => (
    <button onClick={onClick}>{label}</button>
  );

  // Usage
  <Button label="Click me" onClick={() => console.log("Button Clicked")} />

  ```

  #### One-way Data Binding for a Predictable Flow

  React enforces a unidirectional data flow, ensuring predictability and maintainability. 

  Parent components convey data down to their children through props, and any modifications are overseen by the parent component. This one-way street prevents the chaos with 2-way data binding seen in other frameworks.

  ```kotlin
  const ParentComponent = () => {
    const [data, setData] = useState("Hello from Parent!");

    return <ChildComponent data={data} />;
  };

  const ChildComponent = ({ data }) => <div>{data}</div>;

  ```

  ### The Bad Parts of React

  There are some parts of React that aren't ideal, though. Let's go through them briefly now so you can be aware of them.

  #### Steep Learning Curve for Beginners

  Starting with React can be tough, especially if you're new to web development. Concepts like JSX, components, and state management might seem like a maze. But don't worry! With some practice and patience, it gets easier, and React becomes more familiar.

  #### JSX Might Puzzle You at First

  JSX, the special mix of HTML and JavaScript, can be a bit confusing at the beginning. It's like learning a new language that blends the two. But as you get the hang of it, you'll see how it makes your code shorter and clearer.

  #### State Management Challenges

  Using state in React is powerful, but it can also be tricky. Handling state across lots of different pieces, especially in big projects, can create complex setups and potential problems. Luckily, tools like [Redux](https://redux.js.org/) exist to help manage this complexity.

  ## The Challenging Parts of React

  ### Key Prop Mishaps

  When building your applications, you may often have repeating elements which show similar information or share the same styles. The logical step would be to loop over them to create a list of elements.

  ```xquery
  function ListComponent() {
    const people = [{ name: "Mitchelle" }, { name: "July" }, { name: "David" }];
    return (
      <ul>
        {/ Looping over the people array to create list items /}
        {people.map((person) => (
          <li>{person.name}</li>
        ))}
      </ul>
    );
  }

  ```

  Everything seems fine until you notice a warning in your console or, worse, strange behaviour in how your list renders.

  ![02--The-console-an-error-due-to-missing-key-prop](https://proxy-prod.omnivore-image-cache.app/507x241,szg5e19g4RV8xImWmAIoG9B9jWTUW46xjwi9dZUe0yxg/https://www.freecodecamp.org/news/content/images/2024/02/02--The-console-an-error-due-to-missing-key-prop.png)

  The console an error due to missing key prop

  React uses keys to update and reorder elements in a list. When you forget to provide a key prop or if the keys are not unique, React gets a bit lost. It's like trying to keep track of items in the array without any specific identifiers – things get mixed up, and you might end up with unexpected bugs in your UI.

  #### How to solve it

  ==The first instinct for many developers when faced with creating dynamic lists is to use the index property as the key. It seems like a convenient solution, as the index provides a unique identifier for each element in the array== ==– but it isn’t the best approach for the following reasons:==

  * **==Non-Persistent==**==: If the order or number of items changes, React may get confused. For example, if an item is added or removed from the beginning of the list, all the subsequent indices change, causing potential re-rendering issues.==
  * **==Array Mutations==**==: Operations like sorting or filtering can alter the order of items, breaking the association between the index and the actual item.==
  * **==Performance Concerns==**==: React relies on keys for efficient updates. Using the index as a key might impact performance when dealing with large lists or frequent updates.==

  ==Some of the better alternatives include:==

  * **==Use a Unique ID==**==: If each item in your array has a unique identifier, such as an== `==id==` ==property, use that as the key.==

  ```clojure
  {people.map((person) => (
    <li key={person.id}>{person.name}</li>
  ))}

  ```

  * ==Generate a Unique Key: In cases where items lack a natural unique identifier, consider using a function like== `==crypto====.randomUUID====()==` ==to generate a unique key.==

  ```clojure
   {people.map((person) => (
          <li key={crypto.randomUUID()}>{person.name}</li>
   ))}

  ```

  By choosing one of these alternatives, you provide React with stable and unique keys, helping it manage and update your dynamic lists,

  **Note**: You may be thinking “If `crypto.randomUUID` generates a unique ID, (`Math.random()` \* some big number) would work the same, right”?

  ![Nope](https://proxy-prod.omnivore-image-cache.app/600x352,sXLy_99RHiGL8JMMYJE4TwrOh9N5fiwyxhggWsEqrMDM/https://www.freecodecamp.org/news/content/images/2024/02/Nope.gif)

  Nope gif

  `Math.random()` could also suffice as a key, but it's a bad idea because the generated keys won't be stable across re-renders, leading to potential performance issues and rendering inconsistencies.

  ### Mutating States Directly

  Imagine you're working on a component that manages an array of names. Rather than using the appropriate setter method to update the state, you decide to directly mutate the state.

  ```javascript
  const MutableStateComponent = () => {
    const [names, setNames] = useState(["David", "John", "Steph", "Anthony"]);

    const removeLastName = () => {
      console.log(names);
      // Direct mutation of state using pop()
      names.pop();
      setNames(names); // This won't trigger a re-render
    };

    return (
      <div>
        <p>Names: {names.join(", ")}</p>
        <button onClick={removeLastName}>Remove Last Name</button>
      </div>
    );
  };

  ```

  To your surprise, the UI doesn't update as expected, and you find yourself stuck in a scenario where the list of names seems frozen. Make no mistake, the array is getting updated as seen below:

  ![yey1I5L7W43d8vcNl7kEUZaRHGZw90xZfviK3rhfFHiqwXv3gsCjHqcs9nhgdWoQlbPEGAj2A_7qHcoeRI9xPtsD0JCiPJdzT4MNRrQ91GfUjdwvW4hmlHGE_LtdG49FzO1buO0yT9tzMRtO95MgvYI](https://proxy-prod.omnivore-image-cache.app/600x185,sHZ7BRzMS5mQWhPWL8g4Fy71wvaWXfxrGi1DkSLA2QRg/https://lh7-us.googleusercontent.com/yey1I5L7W43d8vcNl7kEUZaRHGZw90xZfviK3rhfFHiqwXv3gsCjHqcs9nhgdWoQlbPEGAj2A_7qHcoeRI9xPtsD0JCiPJdzT4MNRrQ91GfUjdwvW4hmlHGE_LtdG49FzO1buO0yT9tzMRtO95MgvYI)

  Array getting mutated with UI being updated

  #### What's the Problem?

  React relies on an immutable state for efficient updates, and when you bypass this mechanism, it disrupts the unidirectional data flow. 

  In this case, using `pop()` mutates the original array in place, and React loses track of the changes. This leads to an inaccurate rendering of the component.

  #### How to Solve it

  ==To ensure your component behaves as expected and follows React's principles, always use the setter function (==`==setNames==`==) to update the state.==

  ```javascript
  const MutableStateComponent = () => {
    const [names, setNames] = useState(["David", "John", "Steph", "Anthony"]);

    const removeLastName = () => {
      // Use setNames to update state
      setNames((prevNames) => prevNames.slice(0, -1));
      console.log(names);
    };

    return (
      <div>
        <p>Names: {names.join(", ")}</p>
        <button onClick={removeLastName}>Remove Last Name</button>
      </div>
    );
  };

  ```

  By using `setNames` and creating a new array with the desired changes (in this case, using `slice` to remove the last element), you ensure that React can accurately track and update the state, resulting in the expected UI behavior.

  ![09--Result-of-Mutating-States-with-the-correct-method](https://proxy-prod.omnivore-image-cache.app/600x166,sSC4S47mv-qIsZHrIUJJJ-RcTuPQbIN2sInkN4pMqPJ0/https://www.freecodecamp.org/news/content/images/2024/02/09--Result-of-Mutating-States-with-the-correct-method.gif)

  Result of mutating states with the correct method

  ### Mysterious Bugs with Conditional Rendering

  Conditional rendering, while powerful, can introduce subtle bugs when not handled with care. Understanding common pitfalls, particularly those related to truthy and falsy evaluations, is crucial for preventing mysterious rendering behaviour.

  Consider the following example:

  ```javascript
  const IncorrectConditionalComponent = ({ showContent }) => (
    {showContent && <div>Show me if true!</div>}
  );

  ```

  #### The Bug: Unexpected Rendering with Falsy Values

  In this code snippet, if `showContent` happens to be a falsy value, such as `0`, the component will render an unexpected result. Instead of gracefully not rendering the content, it will display `0` on the screen due to the direct inclusion of curly braces.

  ![Gotcha](https://proxy-prod.omnivore-image-cache.app/500x281,slcS6xZX3T1h2Kyhm2ik9SCftGek8Bv30z5clC0Il8fk/https://www.freecodecamp.org/news/content/images/2024/02/Gotcha.gif)

  I gotcha gif

  #### What's the Problem?

  The issue lies in the mismanagement of truthy and falsy values. The direct use of curly braces creates an object wrapper (`[object Object]`), causing the component to render whatever value is present, even if it's falsy.

  #### How to Solve it

  To catch rendering bugs related to truthy and falsy values, use a more explicit conditional check.

  ```javascript
  const CorrectConditionalComponent = ({ showContent }) => (
    showContent ? <div>Show me if true!</div> : null
  );

  ```

  In this corrected version, the ternary operator ensures a clear check for truthiness, preventing unexpected rendering issues. By explicitly handling truthy and falsy values, you build robust components that behave predictably in various scenarios.

  ### Ignoring Dependency Arrays in React Hooks

  Imagine working on a component that relies on an effect to perform some logic when a certain state, let's say `count`, changes. But even though you're incrementing the count, the effect doesn't seem to run, and you're left wondering why your logic isn't taking effect.

  ```javascript
  const Counter = () => {
    const [count, setCount] = useState(0);

    const handleClick = () => {
     
      setCount((count) => count + 1);
    };

    useEffect(() => {
      console.log("The current count value is ", count);
    }, []);

    return (
      <div>
        <p>Count: {count}</p>
        <button onClick={handleClick}>Increment</button>
      </div>
    );
  };

  ```

  ![03--testing-the-count-component-without-fixing-the-useEffect-dependency-array](https://proxy-prod.omnivore-image-cache.app/600x207,sclaHzwd3J6Ir6gJjzyGYaoim1IkPzaLN3QTxNHzYMf4/https://www.freecodecamp.org/news/content/images/2024/02/03--testing-the-count-component-without-fixing-the-useEffect-dependency-array.gif)

  Testing the count component without fixing the useEffect dependency array

  #### What's the Problem?

  The issue lies in neglecting the dependency array in your `useEffect`. When you omit the dependencies, React might not recognize that the effect is tied to a specific piece of state, leading to stale data and unexpected behavior.

  #### How to Solve it

  To get your effect back on track, include the relevant dependencies in the dependency array. It's like setting up triggers – you're telling React, "Hey, run this effect whenever these specific pieces of data change."

  ```coffeescript
  useEffect(() => {
      console.log("The current count value is ", count);
    }, [count]);

  ```

  Which now fires the `useEffect` hook:

  ![04--testing-the-count-component-after-fixing-the-useEffect-dependency-array](https://proxy-prod.omnivore-image-cache.app/600x162,seLpHSsOeC0rY6uLCrbDj68pQbCzZ-wZ8McJAd7xlxSc/https://www.freecodecamp.org/news/content/images/2024/02/04--testing-the-count-component-after-fixing-the-useEffect-dependency-array.gif)

  Testing the count component after fixing the useEffect dependency array

  ### Neglecting Optional Chaining for API Data

  You're working on a component that displays user data fetched from an API. Everything seems fine until you encounter an unexpected runtime error. The culprit? A missing optional chaining operator.

  #### What's the Problem?

  API responses can be unpredictable, and not all data structures match your expectations. Neglecting optional chaining, especially when accessing deeply nested properties (looking at you Strapi response data 👀) can lead to runtime errors if a property is undefined.

  #### How to Solve it

  ==To safeguard your component from unexpected errors, incorporate optional chaining (==`==?.==`==) when accessing nested properties in API data.==

  As an example, say you want to read a deeply nested property (label) from this data:

  ```dts
  const data = {
      id: 1,
      title: "First Item",
      content: "Content for the first item",
      category: {
        id: 101,
        name: "Category A",
        description: "Description of Category A",
        tags: [
          {
            id: 1001,
            label: "Tag 1",
          },
          {
            id: 1002,
            label: "Tag 2",
          },
        ],
      },
      author: {
        id: 201,
        name: "John Doe",
        email: "john.doe@example.com",
      },
    };

  ```

  The correct way would be to use optional chaining to retrieve that data:

  ```ebnf
   const firstLabel = data?.category?.tags?.[0]?.label;

  ```

  Rather than accessing those properties directly:

  ```angelscript
  const firstLabel = data.category.tags[0].label;

  ```

  This prevents you from seeing a white screen error and a flooded console if the data structure changes. It's like putting on a safety net – if a property is missing, your app won't come crashing down like so:

  ![05--Error-occuring-when-optional-chaining-isn-t-applied](https://proxy-prod.omnivore-image-cache.app/1588x727,sgwJjdFdMroS9C8ajyVYXPFExl3EaNWv9vbpl-AfLfYk/https://www.freecodecamp.org/news/content/images/2024/02/05--Error-occuring-when-optional-chaining-isn-t-applied.png)

  Error occurring when optional chaining isn't applied

  ### Ignoring React Fragments for Grouping JSX Elements

  When working with React components, you may encounter a scenario where you want to return multiple JSX elements from a function, only to be met with a syntax error.

  #### What's the Problem?

  This is due to a limitation in JavaScript, as it doesn't allow the return of adjacent elements without a common parent.

  Consider the following problematic code:

  ```javascript
  function User() {
    return <div> David Jaja</div>
           <div>Twitter: https://twitter.com/JajaDavid8</div>;
  }

  ```

  This code results in an error: “Adjacent JSX elements must be wrapped in an enclosing tag.”

  ![06--Error-occuring-when-JSX-returns-2-direct-adjacent-elements](https://proxy-prod.omnivore-image-cache.app/1483x544,sfPaIFNuG9axWWmq6yZXVZ-ZwIa9PqA7yMHZZSz0zFAA/https://www.freecodecamp.org/news/content/images/2024/02/06--Error-occuring-when-JSX-returns-2-direct-adjacent-elements.png)

  Error occurring when JSX returns 2 direct adjacent elements

  #### How to Solve it

  I know what you might be thinking—why not simply wrap the elements in a div and move on?

  ![sponge-bob-bored](https://proxy-prod.omnivore-image-cache.app/320x174,sxPXM63m9c5aUHt7caKrHlLe6GEQ0rRGQxJIX0zxEBg8/https://www.freecodecamp.org/news/content/images/2024/02/sponge-bob-bored.gif)

  Spongebob bored gif

  While this seems like a quick fix, it introduces a potential downside. By adding a div, you create an unnecessary parent element in the DOM. 

  This additional markup, though resolving the immediate error, can lead to unintended consequences, such as affecting styles or layout, and may not align with optimal coding practices. 

  And I’m sure you don’t want to end up with a "divpocalipse". 

  ![07--Divpocalpse](https://proxy-prod.omnivore-image-cache.app/658x598,stqxWkWd8N7Td4JGVinc5-ysByAEwhC7_RfMt9hhaoHk/https://www.freecodecamp.org/news/content/images/2024/02/07--Divpocalpse.png)

  A divpocalpse

  To overcome both the syntax error and the unnecessary DOM markup, React introduced an optimized solution: React Fragments.

  React Fragments are used to address the need for returning multiple JSX elements without introducing unnecessary parent elements in the DOM.

  Here's how you can utilize React Fragments:

  ```javascript
  import React from "react";
  function User() {
    return (
      <React.Fragment>
        <div> David Jaja</div>
        <div>Twitter: https://twitter.com/JajaDavid8</div>
      </React.Fragment>
    );
  }

  ```

  Or using the shorthand syntax:

  ```javascript
  function User() {
    return (
      <>
        <div> David Jaja</div>
        <div>Twitter: https://twitter.com/JajaDavid8</div>
      </>
    );
  }


  ```

  By using React Fragments, you maintain clean and concise JSX code without introducing unnecessary elements to the DOM, enhancing code readability.

  ![Showing-the-DOM-tree-after-using-fragments-without-any-extra-elements](https://proxy-prod.omnivore-image-cache.app/521x218,sqbUBL83eWVIxHkxByP9ivVd484cYuA_oCvZVMM_V_pw/https://www.freecodecamp.org/news/content/images/2024/02/Showing-the-DOM-tree-after-using-fragments-without-any-extra-elements.png)

  Showing the DOM tree after using fragments without any extra elements

  ## Opinionated Approaches to React

  I've found some handy ways to make working with React more enjoyable. Instead of strict rules, think of these as my personal choices to make code easier to read, improve how it works, and make sure it stays in good shape.

  1. **==Put data outside components==**==: Move things like lists and groups of information outside the main part of a component when possible. This helps avoid extra updates and makes it simpler to handle data without using special functions like== `==useCallback==`==.==
  2. **==Be careful with== `==React====.====memo==`**==: Using== `==React====.====memo==` ==can help your components run better, but it's not always needed. If a component changes a lot with new information, using== `==React====.====memo==` ==might not be as helpful. Use it wisely.==
  3. **==Create your own custom React hooks==**==: I also like making my own special tools with custom React hooks. It's a bit advanced, but it helps keep my code neat and organized.==

  ![but-thats-just-my-opinion-just-what-i-think](https://proxy-prod.omnivore-image-cache.app/498x280,st7PfcgBzDoANQmhoVH50NeoEVnO5TcYT-qsL2rwjg8E/https://www.freecodecamp.org/news/content/images/2024/02/but-thats-just-my-opinion-just-what-i-think.gif)

  Just my opinion gif

  ## Wrapping Up the Quirky Journey with React

  React's journey is a blend of smooth sailing and bumpy rides. We've seen the strength of reusable components and virtual DOM and tackled puzzling moments like missing key props and conditional rendering bugs and so on.

  As you continue your journey with React, may your code be clean, your components reusable, and your "What's Up with React?" moments turn into "Aha!" revelations. Happy coding! 🚀

  ### **Contact Information**

  Want to connect or contact me? Feel free to hit me up on the following:

  * Twitter: [@jajadavid8](https://twitter.com/JajaDavid8)
  * LinkedIn: [David Jaja](https://www.linkedin.com/in/david-jaja-8084251b4/)
  * Email: Jajadavidjid@gmail.com

  ---

  ---

   Learn to code for free. freeCodeCamp's open source curriculum has helped more than 40,000 people get jobs as developers. [Get started](https://www.freecodecamp.org/learn/) 

metadata:
  {"date_added":"2024-02-26 18:07:53","id":"085bfd7c-d52a-11ee-bfc7-b34a261d031c","status":"ARCHIVED","tags":["read-later","RSS"],"title":"How to Learn the Hard Parts of React – and Tips to Conquer Them\n","url_omnivore":"https://omnivore.app/me/how-to-learn-the-hard-parts-of-react-and-tips-to-conquer-them-18de8db4244\n","url_original":"https://www.freecodecamp.org/news/hard-parts-of-react/\n"}


path: Omnivore/2024-03-06 - How to Build a Basic CMS with Google Sheets and React.md
sortable_path: Omnivore2024-03-06 - How to Build a Basic CMS with Google Sheets and React.md
title: How to Build a Basic CMS with Google Sheets and React
lead: # How to Build a Basic CMS with Google Sheets and React
checksum: db0efa04a0fa6db5ea62eeb579073ac846b882ffdb9124a9d67686e659380cc7
created: 2024-09-15 00:40:58.500747371+00:00
modified: 2024-09-22 22:40:13.396511065+00:00
body:
  # How to Build a Basic CMS with Google Sheets and React

  ## Highlights

  ### Step 1: Set Up Your Google Sheets

  1. Go to your Google Sheets
  2. Open the sheet you want to use or create a new one
  3. Click on `Extensions` in the menu
  4. Then click on `Apps Script`

  In the Apps Script editor, you can write a script to serve as your endpoint. Here's a script that returns the contents of a Google Sheet in JSON format:

  ```kotlin
  function convertRangeToJson(data) {
    var jsonArray = [];

    // Check if data is empty or doesn't contain enough rows for headers and at least one data row
    if (!data || data.length < 2) {
      // Return an empty array or a meaningful message as needed
      return jsonArray; // or return 'No data available';
    }

    var headers = data[0];
    for (var i = 1, length = data.length; i < length; i++) {
      var row = data[i];
      var record = {};

      for (var j = 0; j < row.length; j++) {
        record[headers[j]] = row[j];
      }

      jsonArray.push(record);
    }

    return jsonArray;
  }
  ```

  Then:

  1. Click `File` \> `Save`, and give your project a name
  2. Click on `Deploy` \> `New deployment`.
  3. Click on `Select type` and choose `Web app`.
  4. Fill in the details for your deployment. Under `Execute as`, choose whether the script should run as your account or as the user accessing the web app. Under `Who has access`, choose who can access your web app.
  5. Click `Deploy`. 

  [source](https://omnivore.app/me/how-to-build-a-basic-cms-with-google-sheets-and-react-18e158f0d8c#d5dee3e3-c455-4623-952d-2b11f076c3fa) 

  ---

  ## Original

  ![How to Build a Basic CMS with Google Sheets and React](https://proxy-prod.omnivore-image-cache.app/1640x924,siWfmlLH465K-bpxtdWL3BNzIim_TyPG4_WhZ94OLwBk/https://www.freecodecamp.org/news/content/images/size/w2000/2024/03/--1.png) 

  In today's digital landscape, creating a content management system (CMS) that is both cost-effective and easy to maintain can be difficult, especially if you're operating on a tight budget. 

  This tutorial will show you a solution that leverages Google Sheets as a makeshift database and React to build the frontend. This will let you effectively bypass the need for a dedicated server or traditional database system. 

  This approach not only reduces the overhead costs associated with web development, but also simplifies content updates and management. It's an ideal solution if you're looking to launch your own simple CMS without substantial investment.

  This solution is suitable for freelancers at the beginning of their career and for clients who cannot invest much in their website.

  ## Why Google Sheets?

  Opting for Google Sheets as the backbone of your CMS comes down to its simplicity, flexibility, and cost-effectiveness.

  Traditional web development requires a backend server to process data, a database to store information, and a frontend to display content. But each layer adds complexity and cost. 

  Google Sheets, on the other hand, acts as a highly accessible and intuitive interface that eliminates the need for a server and a database. It lets your users update content in real-time, much like any CMS, but without the usual setup and maintenance costs. This makes it an excellent choice for individuals, small businesses, or anyone looking to deploy a web application quickly and with minimal expense. 

  ## Getting Started

  Before diving into the code, ensure you have Node.js and npm installed on your system. These tools will allow us to create a React application and manage its dependencies. 

  Let's start with Google Sheets now.

  ### ==Step 1: Set Up Your Google Sheets==

  1. ==Go to your Google Sheets==
  2. ==Open the sheet you want to use or create a new one==
  3. ==Click on== `==Extensions==` ==in the menu==
  4. ==Then click on== `==Apps== ==Script==`

  ==In the Apps Script editor, you can write a script to serve as your endpoint. Here's a script that returns the contents of a Google Sheet in JSON format:==

  ```kotlin
  function convertRangeToJson(data) {
    var jsonArray = [];

    // Check if data is empty or doesn't contain enough rows for headers and at least one data row
    if (!data || data.length < 2) {
      // Return an empty array or a meaningful message as needed
      return jsonArray; // or return 'No data available';
    }

    var headers = data[0];
    for (var i = 1, length = data.length; i < length; i++) {
      var row = data[i];
      var record = {};

      for (var j = 0; j < row.length; j++) {
        record[headers[j]] = row[j];
      }

      jsonArray.push(record);
    }

    return jsonArray;
  }
  ```

  ==Then:==

  1. ==Click== `==File==` ==&gt;== `==Save==`==, and give your project a name==
  2. ==Click on== `==Deploy==` ==&gt;== `==New== ==deployment==`==.==
  3. ==Click on== `==Select== ==type==` ==and choose== `==Web app==`==.==
  4. ==Fill in the details for your deployment. Under== `==Execute== ==as==`==, choose whether the script should run as your account or as the user accessing the web app. Under== `==Who has== ==access==`==, choose who can access your web app.==
  5. ==Click== `==Deploy==`==.==

  You may be asked to authorize the script to access your Google Sheets. Follow the prompts to do so.

  After deploying, you'll be given a URL for your web app. This is your API endpoint.

  To give you an idea of what you have done so far, this is your sheet structure:

  ![Schermata-2024-03-04-alle-16.49.37](https://proxy-prod.omnivore-image-cache.app/2000x526,smPUKAPAEuUJbzcsC9y_OcXJLBnSw4Uxv4SK--sY8BIk/https://www.freecodecamp.org/news/content/images/2024/03/Schermata-2024-03-04-alle-16.49.37.png)

  How your sheet should currently look

  And this is the JSON you get when you call the endpoint:

  ![postman_I](https://proxy-prod.omnivore-image-cache.app/2000x994,sR4WRCZpp3k8lz8LREev-BkSixXwiwIQ0OvBZbhT-3o4/https://www.freecodecamp.org/news/content/images/2024/03/postman_I.png)

  JSON

  ### Step 2: Create Your React App

  With your Google Sheets API ready, it's time to create the React app that will fetch and display this data.

  First, go ahead and create a React app. Run the following command in your terminal to create a new React application:

  ```dsconfig
  npx create-react-app google-sheets-cards
  cd google-sheets-cards
  npm start
  ```

  You can also [use modern build tools like Vite](https://www.freecodecamp.org/news/get-started-with-vite/) for this purpose, as CRA is no longer the recommended way of building a React app.

  Next, create the card component. Inside the `src` directory, create a file named `Card.js`. This component will be responsible for displaying each data record:

  ```javascript
  // src/Card.js
  function Card({ title, content }) {
    return (
      <div className="card">
        <h1>{title}</h1>
        <p>{content}</p>
      </div>
    );
  }

  export default Card;
  ```

  Now it's time to fetch and display your data in App.js. Modify the `App.js` file to include logic for fetching the data from your Google Sheets API and using the Card component to display it:

  ```javascript
  // src/App.js
  import React, { useEffect, useState } from 'react';
  import Card from './Card';
  import './App.css'; // Make sure to create some basic styles for the cards in App.css

  function App() {
    const [data, setData] = useState([]);

    useEffect(() => {
      fetch('YOUR_ENDPOINT_URL') // Replace with your actual endpoint URL
        .then(response => response.json())
        .then(data => setData(data))
        .catch(error => console.error('Error fetching data:', error));
    }, []);

    return (
      <div className="App">
        <h1>Data from Google Sheets</h1>
        <div className="cards-container">
          {data.map((item, index) => (
            <Card key={index} title={item.Title} content={item.Content} />
          ))}
        </div>
      </div>
    );
  }

  export default App;
  ```

  Next, you can style your cards. Go ahead and add the below CSS in `App.css` for basic card styling:

  ```css
  .card {
    box-shadow: 0 4px 8px rgba(0, 0, 0, 0.2);
    margin: 10px;
    padding: 10px;
    display: inline-block;
    background: #f9f9f9;
  }

  .cards-container {
    display: flex;
    flex-wrap: wrap;
    justify-content: center;
  }
  ```

  ### Step 3: Run Your React App

  With everything set up, you can now run your React application and see the data from Google Sheets displayed in your browser. To do this, follow these steps:

  First, start the React app. In your terminal, navigate to the root directory of your React app if you're not already there. Run the following command to start the development server:

  ```coffeescript
  npm start
  ```

  This command compiles your React application and opens it in your default web browser. You should see a webpage with a title "Data from Google Sheets", and below that, a series of cards, each displaying a title and content fetched from your Google Sheets data. 

  Here's, in fact, what we get:

  ![Schermata-2024-03-04-alle-16.52.22](https://proxy-prod.omnivore-image-cache.app/2000x412,sYriejk47X_q9wHSncPygJqjh7czNfP7109TVVFRq0vY/https://www.freecodecamp.org/news/content/images/2024/03/Schermata-2024-03-04-alle-16.52.22.png)

  Data from Google Sheets and Card 1, Card 2, and Card 3 displayed on the screen

  Now you can view your data. Each card on the page corresponds to a row in your Google Sheets, with the title and content fields displayed as specified in your Card component. If you make any updates to your Google Sheets data, you can refresh the web page to see the changes reflected immediately.

  You can deploy your React app to one of the many services you can find online such as Github Actions or Netlify. This is a simple and effective way to host your frontend application for free with significant performance. 

  ## Conclusion

  Congratulations! You've created a dynamic web application that fetches data from a Google Sheet and displays it using React. 

  This approach offers a flexible and straightforward way to manage your application's content without needing a backend server or database.

  Google Sheets serves as an accessible and collaborative platform for managing data, while React allows you to build a responsive and interactive user interface. Together, they provide a powerful combination for creating web applications that can be quickly updated and easily maintained.

  ---

  ---

   Learn to code for free. freeCodeCamp's open source curriculum has helped more than 40,000 people get jobs as developers. [Get started](https://www.freecodecamp.org/learn/)

raw_content:
  ---
  id: 39278362-dbfc-11ee-8a2b-139ebfa11748
  title: |
    How to Build a Basic CMS with Google Sheets and React
  status: ARCHIVED
  tags:
    - read-later
    - RSS
  date_added: 2024-03-06 14:55:48
  url_omnivore: |
    https://omnivore.app/me/how-to-build-a-basic-cms-with-google-sheets-and-react-18e158f0d8c
  url_original: |
    https://www.freecodecamp.org/news/how-to-build-a-basic-cms-with-google-sheets-and-reactjs/
  ---

  # How to Build a Basic CMS with Google Sheets and React

  ## Highlights

  ### Step 1: Set Up Your Google Sheets

  1. Go to your Google Sheets
  2. Open the sheet you want to use or create a new one
  3. Click on `Extensions` in the menu
  4. Then click on `Apps Script`

  In the Apps Script editor, you can write a script to serve as your endpoint. Here's a script that returns the contents of a Google Sheet in JSON format:

  ```kotlin
  function convertRangeToJson(data) {
    var jsonArray = [];

    // Check if data is empty or doesn't contain enough rows for headers and at least one data row
    if (!data || data.length < 2) {
      // Return an empty array or a meaningful message as needed
      return jsonArray; // or return 'No data available';
    }

    var headers = data[0];
    for (var i = 1, length = data.length; i < length; i++) {
      var row = data[i];
      var record = {};

      for (var j = 0; j < row.length; j++) {
        record[headers[j]] = row[j];
      }

      jsonArray.push(record);
    }

    return jsonArray;
  }
  ```

  Then:

  1. Click `File` \> `Save`, and give your project a name
  2. Click on `Deploy` \> `New deployment`.
  3. Click on `Select type` and choose `Web app`.
  4. Fill in the details for your deployment. Under `Execute as`, choose whether the script should run as your account or as the user accessing the web app. Under `Who has access`, choose who can access your web app.
  5. Click `Deploy`. 

  [source](https://omnivore.app/me/how-to-build-a-basic-cms-with-google-sheets-and-react-18e158f0d8c#d5dee3e3-c455-4623-952d-2b11f076c3fa) 

  ---

  ## Original

  ![How to Build a Basic CMS with Google Sheets and React](https://proxy-prod.omnivore-image-cache.app/1640x924,siWfmlLH465K-bpxtdWL3BNzIim_TyPG4_WhZ94OLwBk/https://www.freecodecamp.org/news/content/images/size/w2000/2024/03/--1.png) 

  In today's digital landscape, creating a content management system (CMS) that is both cost-effective and easy to maintain can be difficult, especially if you're operating on a tight budget. 

  This tutorial will show you a solution that leverages Google Sheets as a makeshift database and React to build the frontend. This will let you effectively bypass the need for a dedicated server or traditional database system. 

  This approach not only reduces the overhead costs associated with web development, but also simplifies content updates and management. It's an ideal solution if you're looking to launch your own simple CMS without substantial investment.

  This solution is suitable for freelancers at the beginning of their career and for clients who cannot invest much in their website.

  ## Why Google Sheets?

  Opting for Google Sheets as the backbone of your CMS comes down to its simplicity, flexibility, and cost-effectiveness.

  Traditional web development requires a backend server to process data, a database to store information, and a frontend to display content. But each layer adds complexity and cost. 

  Google Sheets, on the other hand, acts as a highly accessible and intuitive interface that eliminates the need for a server and a database. It lets your users update content in real-time, much like any CMS, but without the usual setup and maintenance costs. This makes it an excellent choice for individuals, small businesses, or anyone looking to deploy a web application quickly and with minimal expense. 

  ## Getting Started

  Before diving into the code, ensure you have Node.js and npm installed on your system. These tools will allow us to create a React application and manage its dependencies. 

  Let's start with Google Sheets now.

  ### ==Step 1: Set Up Your Google Sheets==

  1. ==Go to your Google Sheets==
  2. ==Open the sheet you want to use or create a new one==
  3. ==Click on== `==Extensions==` ==in the menu==
  4. ==Then click on== `==Apps== ==Script==`

  ==In the Apps Script editor, you can write a script to serve as your endpoint. Here's a script that returns the contents of a Google Sheet in JSON format:==

  ```kotlin
  function convertRangeToJson(data) {
    var jsonArray = [];

    // Check if data is empty or doesn't contain enough rows for headers and at least one data row
    if (!data || data.length < 2) {
      // Return an empty array or a meaningful message as needed
      return jsonArray; // or return 'No data available';
    }

    var headers = data[0];
    for (var i = 1, length = data.length; i < length; i++) {
      var row = data[i];
      var record = {};

      for (var j = 0; j < row.length; j++) {
        record[headers[j]] = row[j];
      }

      jsonArray.push(record);
    }

    return jsonArray;
  }
  ```

  ==Then:==

  1. ==Click== `==File==` ==&gt;== `==Save==`==, and give your project a name==
  2. ==Click on== `==Deploy==` ==&gt;== `==New== ==deployment==`==.==
  3. ==Click on== `==Select== ==type==` ==and choose== `==Web app==`==.==
  4. ==Fill in the details for your deployment. Under== `==Execute== ==as==`==, choose whether the script should run as your account or as the user accessing the web app. Under== `==Who has== ==access==`==, choose who can access your web app.==
  5. ==Click== `==Deploy==`==.==

  You may be asked to authorize the script to access your Google Sheets. Follow the prompts to do so.

  After deploying, you'll be given a URL for your web app. This is your API endpoint.

  To give you an idea of what you have done so far, this is your sheet structure:

  ![Schermata-2024-03-04-alle-16.49.37](https://proxy-prod.omnivore-image-cache.app/2000x526,smPUKAPAEuUJbzcsC9y_OcXJLBnSw4Uxv4SK--sY8BIk/https://www.freecodecamp.org/news/content/images/2024/03/Schermata-2024-03-04-alle-16.49.37.png)

  How your sheet should currently look

  And this is the JSON you get when you call the endpoint:

  ![postman_I](https://proxy-prod.omnivore-image-cache.app/2000x994,sR4WRCZpp3k8lz8LREev-BkSixXwiwIQ0OvBZbhT-3o4/https://www.freecodecamp.org/news/content/images/2024/03/postman_I.png)

  JSON

  ### Step 2: Create Your React App

  With your Google Sheets API ready, it's time to create the React app that will fetch and display this data.

  First, go ahead and create a React app. Run the following command in your terminal to create a new React application:

  ```dsconfig
  npx create-react-app google-sheets-cards
  cd google-sheets-cards
  npm start
  ```

  You can also [use modern build tools like Vite](https://www.freecodecamp.org/news/get-started-with-vite/) for this purpose, as CRA is no longer the recommended way of building a React app.

  Next, create the card component. Inside the `src` directory, create a file named `Card.js`. This component will be responsible for displaying each data record:

  ```javascript
  // src/Card.js
  function Card({ title, content }) {
    return (
      <div className="card">
        <h1>{title}</h1>
        <p>{content}</p>
      </div>
    );
  }

  export default Card;
  ```

  Now it's time to fetch and display your data in App.js. Modify the `App.js` file to include logic for fetching the data from your Google Sheets API and using the Card component to display it:

  ```javascript
  // src/App.js
  import React, { useEffect, useState } from 'react';
  import Card from './Card';
  import './App.css'; // Make sure to create some basic styles for the cards in App.css

  function App() {
    const [data, setData] = useState([]);

    useEffect(() => {
      fetch('YOUR_ENDPOINT_URL') // Replace with your actual endpoint URL
        .then(response => response.json())
        .then(data => setData(data))
        .catch(error => console.error('Error fetching data:', error));
    }, []);

    return (
      <div className="App">
        <h1>Data from Google Sheets</h1>
        <div className="cards-container">
          {data.map((item, index) => (
            <Card key={index} title={item.Title} content={item.Content} />
          ))}
        </div>
      </div>
    );
  }

  export default App;
  ```

  Next, you can style your cards. Go ahead and add the below CSS in `App.css` for basic card styling:

  ```css
  .card {
    box-shadow: 0 4px 8px rgba(0, 0, 0, 0.2);
    margin: 10px;
    padding: 10px;
    display: inline-block;
    background: #f9f9f9;
  }

  .cards-container {
    display: flex;
    flex-wrap: wrap;
    justify-content: center;
  }
  ```

  ### Step 3: Run Your React App

  With everything set up, you can now run your React application and see the data from Google Sheets displayed in your browser. To do this, follow these steps:

  First, start the React app. In your terminal, navigate to the root directory of your React app if you're not already there. Run the following command to start the development server:

  ```coffeescript
  npm start
  ```

  This command compiles your React application and opens it in your default web browser. You should see a webpage with a title "Data from Google Sheets", and below that, a series of cards, each displaying a title and content fetched from your Google Sheets data. 

  Here's, in fact, what we get:

  ![Schermata-2024-03-04-alle-16.52.22](https://proxy-prod.omnivore-image-cache.app/2000x412,sYriejk47X_q9wHSncPygJqjh7czNfP7109TVVFRq0vY/https://www.freecodecamp.org/news/content/images/2024/03/Schermata-2024-03-04-alle-16.52.22.png)

  Data from Google Sheets and Card 1, Card 2, and Card 3 displayed on the screen

  Now you can view your data. Each card on the page corresponds to a row in your Google Sheets, with the title and content fields displayed as specified in your Card component. If you make any updates to your Google Sheets data, you can refresh the web page to see the changes reflected immediately.

  You can deploy your React app to one of the many services you can find online such as Github Actions or Netlify. This is a simple and effective way to host your frontend application for free with significant performance. 

  ## Conclusion

  Congratulations! You've created a dynamic web application that fetches data from a Google Sheet and displays it using React. 

  This approach offers a flexible and straightforward way to manage your application's content without needing a backend server or database.

  Google Sheets serves as an accessible and collaborative platform for managing data, while React allows you to build a responsive and interactive user interface. Together, they provide a powerful combination for creating web applications that can be quickly updated and easily maintained.

  ---

  ---

   Learn to code for free. freeCodeCamp's open source curriculum has helped more than 40,000 people get jobs as developers. [Get started](https://www.freecodecamp.org/learn/) 

metadata:
  {"date_added":"2024-03-06 14:55:48","id":"39278362-dbfc-11ee-8a2b-139ebfa11748","status":"ARCHIVED","tags":["read-later","RSS"],"title":"How to Build a Basic CMS with Google Sheets and React\n","url_omnivore":"https://omnivore.app/me/how-to-build-a-basic-cms-with-google-sheets-and-react-18e158f0d8c\n","url_original":"https://www.freecodecamp.org/news/how-to-build-a-basic-cms-with-google-sheets-and-reactjs/\n"}


path: Omnivore/2024-03-11 - How to Do a Digital Detox - Everyday Health.md
sortable_path: Omnivore2024-03-11 - How to Do a Digital Detox - Everyday Health.md
title: How to Do a Digital Detox | Everyday Health
lead: # How to Do a Digital Detox | Everyday Health
checksum: 0bd2df4d65f76f5db5752c5994ba14ba9d5d84b47a9d4a13f1278cb9e67249bf
created: 2024-09-15 00:40:58.537336446+00:00
modified: 2024-09-22 22:40:13.396511065+00:00
body:
  # How to Do a Digital Detox | Everyday Health

  ## Highlights

  “When something is consuming a lot of your thoughts and conditioning your behaviors, and when it is interfering with your life — like your job or schoolwork or your relationships — it may be time to consider cutting back on its use,” 

  [source](https://omnivore.app/me/https-www-everydayhealth-com-emotional-health-how-to-do-a-digita-18e2d8fec8e#e757b03d-61d5-413d-b9b9-47019876445c) 

  ---

  cutting back on anything that makes you feel worse or stressed, or that takes away from your life rather than adding to it. 

  [source](https://omnivore.app/me/https-www-everydayhealth-com-emotional-health-how-to-do-a-digita-18e2d8fec8e#07a0c2b4-39f7-43bd-a39c-9f4da9933354) 

  ---

  “There’s no magic amount of screen time that is good or bad,” 

  [source](https://omnivore.app/me/https-www-everydayhealth-com-emotional-health-how-to-do-a-digita-18e2d8fec8e#0614f527-dd2d-4377-aac5-e2fce661ef85) 

  ---

  Set up time in your calendar or with an alarm on your phone to remind you to go for a walk or to eat lunch away from your desk, Becker says. And remember to leave your phone behind. 

  [source](https://omnivore.app/me/https-www-everydayhealth-com-emotional-health-how-to-do-a-digita-18e2d8fec8e#81332fd1-2e6c-4292-97c1-42077bdaddd9) 

  ---

  “If the Facebook app is something that you click on often and find yourself scrolling through for long periods of time, getting rid of the app and having to go through the search browser takes an extra step and allows for a moment to pause and decide if it is a good time to engage in this activity,” 

  [source](https://omnivore.app/me/https-www-everydayhealth-com-emotional-health-how-to-do-a-digita-18e2d8fec8e#3ff32057-315b-4fb7-8a34-8db8528990d8) 

  ---

  eliminate the distractions by replacing your smartphone with a simple cell phone that cannot support apps. 

  [source](https://omnivore.app/me/https-www-everydayhealth-com-emotional-health-how-to-do-a-digita-18e2d8fec8e#d64ced03-c9fb-4217-abc0-090512cb6b07) 

  ---

  Try powering down before dinner and until the next morning. 

  [source](https://omnivore.app/me/https-www-everydayhealth-com-emotional-health-how-to-do-a-digita-18e2d8fec8e#5cc985b9-75ac-4988-8637-c5d11336e657) 

  ---

  Apple iPhone users can set limits with [Screen Time](https://support.apple.com/en-us/HT208982) (find it in your phone’s settings) and schedule Downtime, when only phone calls or specific apps are allowed and specified apps have a time limit. [Digital Wellbeing](https://play.google.com/store/apps/details?id=com.google.android.apps.wellbeing&hl=en%5FUS&gl=US) works similarly for Google devices. 

  [source](https://omnivore.app/me/https-www-everydayhealth-com-emotional-health-how-to-do-a-digita-18e2d8fec8e#8d60c80d-2d5f-410a-a901-435de882e3c6) 

  ---

  setting limits on certain apps doesn’t always work. Instead, she suggests removing yourself from device use completely. 

  [source](https://omnivore.app/me/https-www-everydayhealth-com-emotional-health-how-to-do-a-digita-18e2d8fec8e#7ca00f44-692d-4435-bed2-8d742e634aed) 

  ---

  ## Original

  ![cell phone locked-up](https://proxy-prod.omnivore-image-cache.app/1440x810,stHUY_5ZmxmIh30H5cSj2AXoG-1sy9gBdYTEww5cuvmw/https://images.everydayhealth.com/images/emotional-health/how-to-do-a-digital-detox-1440x810.jpg?sfvrsn=cf289190_5)

  Your phone doesn’t have to be on lockdown for you to preserve your peace of mind.Adobe Stock

  Life during the most connected era in human history has many positives — faraway family members are just a FaceTime session away, and the answer to nearly any question that pops into your mind is at your fingertips.

  But too much technology — whether it’s time spent on smartphones, social media, or in front of other digital screens — can have unintended consequences. That may signal the need for a digital [detox](https://www.everydayhealth.com/diet-and-nutrition/diet/detox-cleanses-most-popular-types-what-know/).

  “Excessive technology use can take away time from activities such as sleep, exercise, and socializing, which are all important for well-being,” says [Carol Vidal, MD, PhD, MPH](https://www.hopkinsmedicine.org/profiles/details/carolina-vidal), an assistant professor of psychiatry and behavioral sciences at the Johns Hopkins University School of Medicine in Baltimore.

  A [research review](https://www.ncbi.nlm.nih.gov/pmc/articles/PMC7366948/) noted that frequent technology use has been linked to heightened attention-deficit symptoms, impaired emotional and social intelligence, technology addiction, social isolation, impaired brain development, and disrupted sleep in some cases.

  **RELATED:** [**Are the Stresses of Social Media Too Much for Teens and Young Adults?**](https://www.everydayhealth.com/emotional-health/under-pressure/are-the-stresses-of-social-media-too-much-for-teens-and-young-adults/)

  Technology is not inherently bad, says [Madeleine George, PhD](https://www.rti.org/expert/madeleine-george), a public health research analyst at RTI International, a nonprofit research institute, in Durham, North Carolina. “Technology and social media can have positive or negative effects, depending on what someone is doing online and who they are.”

  Other research suggests, for example, that social media use can help you build and maintain connections when you’re more actively interacting with others, but tends to have the opposite effect when people use it more passively, such as when scrolling through an Instagram or Facebook feed without interacting with the content, [according to research](https://journals.sagepub.com/doi/full/10.1177/0963721417730833#%5Fi5%20%5Fi6)_._

  You’ll know you’re overdoing it and may need a digital detox if technology interferes with your work, relationships, mental and physical health, or finances, according to [Brittany Becker](https://thedorm.com/team/brittany-becker/), a licensed mental health counselor based in New York City and the director of the Dorm, a holistic treatment center for mental health.

  **RELATED:** [**Are the Virtual Interactions of Social Media Busting or Boosting Your Stress?**](https://www.everydayhealth.com/wellness/united-states-of-stress/social-media-busting-boosting-your-stress/)

  Dr. Vidal agrees. ==“When something is consuming a lot of your thoughts and conditioning your behaviors, and when it is interfering with your life — like your job or schoolwork or your relationships — it may be time to consider cutting back on its use,”== Vidal says.

  Scaling back through a digital detox may have positive effects.

  A [study from 2021](https://www.ncbi.nlm.nih.gov/pmc/articles/PMC7717533/) found that students who completed a social media detox reported positive changes to their mood, sleep, and anxiety. And [another study](https://pubmed.ncbi.nlm.nih.gov/31851833/) found that women who quit Instagram reported higher life satisfaction and more positive effects than women who continued using the social media app. (It should be noted that both studies were small, with 68 and 80 participants, respectively.)

  ## **7 Ways to** Do a Digital Detox **(Without Pulling the Plug Entirely)**

  For most people, ditching technology altogether isn’t going to happen. “Cutting down seems like a more realistic approach,” Vidal says.

  To do this, make a plan, Becker says. Pinpoint your unhealthy habits and then decide which ones you want to change. “I think it is really helpful to get a clear picture of your tech use and review the time spent on your phone,” Becker says. “How that time is divided up with different applications is a great place to start, and then you can identify which areas to begin to limit.”

  Dr. George suggests ==cutting back on anything that makes you feel worse or stressed, or that takes away from your life rather than adding to it.== And remember, what constitutes healthy technology use varies from person to person. “There’s no magic amount of screen time that is good or bad,” George says. “You have to find out what works for you and your family.”

  Here are seven strategies to help you manage your technology use and experiment with your own personal digital detox.

  ### **1\. Schedule Time Away From Screens Throughout the Day**

  If you work at a computer, it’s hard to avoid screens, which means it’s all the more important to prioritize breaking away. ==Set up time in your calendar or with an alarm on your phone to remind you to go for a walk or to eat lunch away from your desk, Becker says. And remember to leave your phone behind.==

  ### **2\. Take Periodic Breaks From Technology**

  Breaks can reduce stress, particularly among heavy users, Vidal says. She says more research is needed on digital abstinence before there can be specific recommendations on what this looks like and how long it should last. But it could mean joining others who are committed to disconnecting through events like those run by [Digital Detox](https://www.digitaldetox.com/) (a company that leads tech-free retreats) or deleting problematic apps from your phone, temporarily or for good.

  ==“If the Facebook app is something that you click on often and find yourself scrolling through for long periods of time, getting rid of the app and having to go through the search browser takes an extra step and allows for a moment to pause and decide if it is a good time to engage in this activity,”== Becker says.

  ### **3\. Downgrade Your Phone**

  If you’re having trouble staying present, ==eliminate the distractions by replacing your smartphone with a simple cell phone that cannot support apps.== “It can absolutely be helpful to downgrade from a smartphone if that is possible,” says [Jennifer Kelman, LCSW](https://www.jenniferkelman.com/bio.html), a social worker based in Boca Raton, Florida. In fact, this is what she uses with her own children. “They have simple call or text features and that’s it,” she says.

  ### **4\. Turn Off Your Phone at a Specific Time**

  ==Try powering down  before dinner and until the next morning.== Apple and Android users can enable do-not-disturb settings that can silence alerts, notifications, and calls. Becker says it’s a good idea to take advantage of the tools that are built into your devices.

  ### **5\. Adjust Your Phone Settings to Limit Certain Apps**

  ==Apple iPhone users can set limits with== ==[Screen Time](https://support.apple.com/en-us/HT208982)== ==(find it in your phone’s settings) and schedule Downtime, when only phone calls or specific apps are allowed and specified apps have a time limit.== ==[Digital Wellbeing](https://play.google.com/store/apps/details?id=com.google.android.apps.wellbeing&hl=en%5FUS&gl=US)== ==works similarly for Google devices.== People who didn’t use these features were more likely to experience problematic smartphone use and worse well-being than those who did use them, according to a [research analysis](https://pubmed.ncbi.nlm.nih.gov/32354288/)_._ 

  **RELATED:** [**How to Recognize When a Self-Care Practice Is No Longer Self-Care**](https://www.everydayhealth.com/self-care/how-to-recognize-when-a-self-care-practice-is-no-longer-self-care/)

  ### **6\.** **Create No-Phone Areas**

  Kelman believes that ==setting limits on certain apps doesn’t always work. Instead, she suggests removing yourself from device use completely.== Banning phones and screens from the bedroom, for instance, can keep screens from interfering with your sleep, Becker says. And if you have to go into a different room or part of your home to use a device, it may deter you from mindlessly scrolling.

  ### **7\. Consider Reaching Out to a Mental Health Professional**

  “We are all using technology constantly, and therefore it can be hard to always know the difference between having a problem or not,” Becker says. If your behaviors with or feelings regarding technology or certain apps and sites begin to interfere with your daily functioning, it may be time to seek professional help, Becker says. Kelman adds that if your self-esteem plummets or you find yourself dealing with anxiety or depression, it’s time to talk to someone.

  ## Editorial Sources and Fact-Checking

  Everyday Health follows strict sourcing guidelines to ensure the accuracy of its content, outlined in our [editorial policy](https://www.everydayhealth.com/editorial-policies/). We use only trustworthy sources, including peer-reviewed studies, board-certified medical experts, patients with lived experience, and information from top institutions.

  #### Resources

  * Small GW, Lee J, Kaufman A, et al. Brain Health Consequences of Digital Technology Use. [_Dialogues in Clinical Neuroscience_](https://www.ncbi.nlm.nih.gov/pmc/articles/PMC7366948/). June 2020.
  * Clark JL, Algoe SB, Green MC. Social Network Sites and Well-Being: The Role of Social Connection. [_Current Directions in Psychological Science_](https://journals.sagepub.com/doi/full/10.1177/0963721417730833#%5Fi5%20%5Fi6). February 2018.
  * El-Khoury J, Haidar R, Kanj RR, et al. Characteristics of Social Media ‘Detoxification’ in University Students. [_Libyan Journal of Medicine_](https://www.ncbi.nlm.nih.gov/pmc/articles/PMC7717533/). December 2021.
  * Fioravanti G, Prostamo A, Casale S. Taking a Short Break From Instagram: The Effects on Subjective Well-Being. [_Cyberpsychology, Behavior, and Social Networking_](https://pubmed.ncbi.nlm.nih.gov/31851833/). February 2020.
  * Schmuck D. Does Digital Detox Work? Exploring the Role of Digital Detox Applications for Problematic Smartphone Use and Well-Being of Young Adults Using Multigroup Analysis. [_Cyberpsychology, Behavior, and Social Networking_](https://pubmed.ncbi.nlm.nih.gov/32354288/). August 2020.

raw_content:
  ---
  id: b342d646-2ec3-4e27-a72d-dac0d46219d3
  title: |
    How to Do a Digital Detox | Everyday Health
  status: ARCHIVED
  tags:
    - read-later
  date_added: 2024-03-11 09:49:55
  url_omnivore: |
    https://omnivore.app/me/https-www-everydayhealth-com-emotional-health-how-to-do-a-digita-18e2d8fec8e
  url_original: |
    https://www.everydayhealth.com/emotional-health/how-to-do-a-digital-detox-without-unplugging-completely/
  ---

  # How to Do a Digital Detox | Everyday Health

  ## Highlights

  “When something is consuming a lot of your thoughts and conditioning your behaviors, and when it is interfering with your life — like your job or schoolwork or your relationships — it may be time to consider cutting back on its use,” 

  [source](https://omnivore.app/me/https-www-everydayhealth-com-emotional-health-how-to-do-a-digita-18e2d8fec8e#e757b03d-61d5-413d-b9b9-47019876445c) 

  ---

  cutting back on anything that makes you feel worse or stressed, or that takes away from your life rather than adding to it. 

  [source](https://omnivore.app/me/https-www-everydayhealth-com-emotional-health-how-to-do-a-digita-18e2d8fec8e#07a0c2b4-39f7-43bd-a39c-9f4da9933354) 

  ---

  “There’s no magic amount of screen time that is good or bad,” 

  [source](https://omnivore.app/me/https-www-everydayhealth-com-emotional-health-how-to-do-a-digita-18e2d8fec8e#0614f527-dd2d-4377-aac5-e2fce661ef85) 

  ---

  Set up time in your calendar or with an alarm on your phone to remind you to go for a walk or to eat lunch away from your desk, Becker says. And remember to leave your phone behind. 

  [source](https://omnivore.app/me/https-www-everydayhealth-com-emotional-health-how-to-do-a-digita-18e2d8fec8e#81332fd1-2e6c-4292-97c1-42077bdaddd9) 

  ---

  “If the Facebook app is something that you click on often and find yourself scrolling through for long periods of time, getting rid of the app and having to go through the search browser takes an extra step and allows for a moment to pause and decide if it is a good time to engage in this activity,” 

  [source](https://omnivore.app/me/https-www-everydayhealth-com-emotional-health-how-to-do-a-digita-18e2d8fec8e#3ff32057-315b-4fb7-8a34-8db8528990d8) 

  ---

  eliminate the distractions by replacing your smartphone with a simple cell phone that cannot support apps. 

  [source](https://omnivore.app/me/https-www-everydayhealth-com-emotional-health-how-to-do-a-digita-18e2d8fec8e#d64ced03-c9fb-4217-abc0-090512cb6b07) 

  ---

  Try powering down before dinner and until the next morning. 

  [source](https://omnivore.app/me/https-www-everydayhealth-com-emotional-health-how-to-do-a-digita-18e2d8fec8e#5cc985b9-75ac-4988-8637-c5d11336e657) 

  ---

  Apple iPhone users can set limits with [Screen Time](https://support.apple.com/en-us/HT208982) (find it in your phone’s settings) and schedule Downtime, when only phone calls or specific apps are allowed and specified apps have a time limit. [Digital Wellbeing](https://play.google.com/store/apps/details?id=com.google.android.apps.wellbeing&hl=en%5FUS&gl=US) works similarly for Google devices. 

  [source](https://omnivore.app/me/https-www-everydayhealth-com-emotional-health-how-to-do-a-digita-18e2d8fec8e#8d60c80d-2d5f-410a-a901-435de882e3c6) 

  ---

  setting limits on certain apps doesn’t always work. Instead, she suggests removing yourself from device use completely. 

  [source](https://omnivore.app/me/https-www-everydayhealth-com-emotional-health-how-to-do-a-digita-18e2d8fec8e#7ca00f44-692d-4435-bed2-8d742e634aed) 

  ---

  ## Original

  ![cell phone locked-up](https://proxy-prod.omnivore-image-cache.app/1440x810,stHUY_5ZmxmIh30H5cSj2AXoG-1sy9gBdYTEww5cuvmw/https://images.everydayhealth.com/images/emotional-health/how-to-do-a-digital-detox-1440x810.jpg?sfvrsn=cf289190_5)

  Your phone doesn’t have to be on lockdown for you to preserve your peace of mind.Adobe Stock

  Life during the most connected era in human history has many positives — faraway family members are just a FaceTime session away, and the answer to nearly any question that pops into your mind is at your fingertips.

  But too much technology — whether it’s time spent on smartphones, social media, or in front of other digital screens — can have unintended consequences. That may signal the need for a digital [detox](https://www.everydayhealth.com/diet-and-nutrition/diet/detox-cleanses-most-popular-types-what-know/).

  “Excessive technology use can take away time from activities such as sleep, exercise, and socializing, which are all important for well-being,” says [Carol Vidal, MD, PhD, MPH](https://www.hopkinsmedicine.org/profiles/details/carolina-vidal), an assistant professor of psychiatry and behavioral sciences at the Johns Hopkins University School of Medicine in Baltimore.

  A [research review](https://www.ncbi.nlm.nih.gov/pmc/articles/PMC7366948/) noted that frequent technology use has been linked to heightened attention-deficit symptoms, impaired emotional and social intelligence, technology addiction, social isolation, impaired brain development, and disrupted sleep in some cases.

  **RELATED:** [**Are the Stresses of Social Media Too Much for Teens and Young Adults?**](https://www.everydayhealth.com/emotional-health/under-pressure/are-the-stresses-of-social-media-too-much-for-teens-and-young-adults/)

  Technology is not inherently bad, says [Madeleine George, PhD](https://www.rti.org/expert/madeleine-george), a public health research analyst at RTI International, a nonprofit research institute, in Durham, North Carolina. “Technology and social media can have positive or negative effects, depending on what someone is doing online and who they are.”

  Other research suggests, for example, that social media use can help you build and maintain connections when you’re more actively interacting with others, but tends to have the opposite effect when people use it more passively, such as when scrolling through an Instagram or Facebook feed without interacting with the content, [according to research](https://journals.sagepub.com/doi/full/10.1177/0963721417730833#%5Fi5%20%5Fi6)_._

  You’ll know you’re overdoing it and may need a digital detox if technology interferes with your work, relationships, mental and physical health, or finances, according to [Brittany Becker](https://thedorm.com/team/brittany-becker/), a licensed mental health counselor based in New York City and the director of the Dorm, a holistic treatment center for mental health.

  **RELATED:** [**Are the Virtual Interactions of Social Media Busting or Boosting Your Stress?**](https://www.everydayhealth.com/wellness/united-states-of-stress/social-media-busting-boosting-your-stress/)

  Dr. Vidal agrees. ==“When something is consuming a lot of your thoughts and conditioning your behaviors, and when it is interfering with your life — like your job or schoolwork or your relationships — it may be time to consider cutting back on its use,”== Vidal says.

  Scaling back through a digital detox may have positive effects.

  A [study from 2021](https://www.ncbi.nlm.nih.gov/pmc/articles/PMC7717533/) found that students who completed a social media detox reported positive changes to their mood, sleep, and anxiety. And [another study](https://pubmed.ncbi.nlm.nih.gov/31851833/) found that women who quit Instagram reported higher life satisfaction and more positive effects than women who continued using the social media app. (It should be noted that both studies were small, with 68 and 80 participants, respectively.)

  ## **7 Ways to** Do a Digital Detox **(Without Pulling the Plug Entirely)**

  For most people, ditching technology altogether isn’t going to happen. “Cutting down seems like a more realistic approach,” Vidal says.

  To do this, make a plan, Becker says. Pinpoint your unhealthy habits and then decide which ones you want to change. “I think it is really helpful to get a clear picture of your tech use and review the time spent on your phone,” Becker says. “How that time is divided up with different applications is a great place to start, and then you can identify which areas to begin to limit.”

  Dr. George suggests ==cutting back on anything that makes you feel worse or stressed, or that takes away from your life rather than adding to it.== And remember, what constitutes healthy technology use varies from person to person. “There’s no magic amount of screen time that is good or bad,” George says. “You have to find out what works for you and your family.”

  Here are seven strategies to help you manage your technology use and experiment with your own personal digital detox.

  ### **1\. Schedule Time Away From Screens Throughout the Day**

  If you work at a computer, it’s hard to avoid screens, which means it’s all the more important to prioritize breaking away. ==Set up time in your calendar or with an alarm on your phone to remind you to go for a walk or to eat lunch away from your desk, Becker says. And remember to leave your phone behind.==

  ### **2\. Take Periodic Breaks From Technology**

  Breaks can reduce stress, particularly among heavy users, Vidal says. She says more research is needed on digital abstinence before there can be specific recommendations on what this looks like and how long it should last. But it could mean joining others who are committed to disconnecting through events like those run by [Digital Detox](https://www.digitaldetox.com/) (a company that leads tech-free retreats) or deleting problematic apps from your phone, temporarily or for good.

  ==“If the Facebook app is something that you click on often and find yourself scrolling through for long periods of time, getting rid of the app and having to go through the search browser takes an extra step and allows for a moment to pause and decide if it is a good time to engage in this activity,”== Becker says.

  ### **3\. Downgrade Your Phone**

  If you’re having trouble staying present, ==eliminate the distractions by replacing your smartphone with a simple cell phone that cannot support apps.== “It can absolutely be helpful to downgrade from a smartphone if that is possible,” says [Jennifer Kelman, LCSW](https://www.jenniferkelman.com/bio.html), a social worker based in Boca Raton, Florida. In fact, this is what she uses with her own children. “They have simple call or text features and that’s it,” she says.

  ### **4\. Turn Off Your Phone at a Specific Time**

  ==Try powering down  before dinner and until the next morning.== Apple and Android users can enable do-not-disturb settings that can silence alerts, notifications, and calls. Becker says it’s a good idea to take advantage of the tools that are built into your devices.

  ### **5\. Adjust Your Phone Settings to Limit Certain Apps**

  ==Apple iPhone users can set limits with== ==[Screen Time](https://support.apple.com/en-us/HT208982)== ==(find it in your phone’s settings) and schedule Downtime, when only phone calls or specific apps are allowed and specified apps have a time limit.== ==[Digital Wellbeing](https://play.google.com/store/apps/details?id=com.google.android.apps.wellbeing&hl=en%5FUS&gl=US)== ==works similarly for Google devices.== People who didn’t use these features were more likely to experience problematic smartphone use and worse well-being than those who did use them, according to a [research analysis](https://pubmed.ncbi.nlm.nih.gov/32354288/)_._ 

  **RELATED:** [**How to Recognize When a Self-Care Practice Is No Longer Self-Care**](https://www.everydayhealth.com/self-care/how-to-recognize-when-a-self-care-practice-is-no-longer-self-care/)

  ### **6\.** **Create No-Phone Areas**

  Kelman believes that ==setting limits on certain apps doesn’t always work. Instead, she suggests removing yourself from device use completely.== Banning phones and screens from the bedroom, for instance, can keep screens from interfering with your sleep, Becker says. And if you have to go into a different room or part of your home to use a device, it may deter you from mindlessly scrolling.

  ### **7\. Consider Reaching Out to a Mental Health Professional**

  “We are all using technology constantly, and therefore it can be hard to always know the difference between having a problem or not,” Becker says. If your behaviors with or feelings regarding technology or certain apps and sites begin to interfere with your daily functioning, it may be time to seek professional help, Becker says. Kelman adds that if your self-esteem plummets or you find yourself dealing with anxiety or depression, it’s time to talk to someone.

  ## Editorial Sources and Fact-Checking

  Everyday Health follows strict sourcing guidelines to ensure the accuracy of its content, outlined in our [editorial policy](https://www.everydayhealth.com/editorial-policies/). We use only trustworthy sources, including peer-reviewed studies, board-certified medical experts, patients with lived experience, and information from top institutions.

  #### Resources

  * Small GW, Lee J, Kaufman A, et al. Brain Health Consequences of Digital Technology Use. [_Dialogues in Clinical Neuroscience_](https://www.ncbi.nlm.nih.gov/pmc/articles/PMC7366948/). June 2020.
  * Clark JL, Algoe SB, Green MC. Social Network Sites and Well-Being: The Role of Social Connection. [_Current Directions in Psychological Science_](https://journals.sagepub.com/doi/full/10.1177/0963721417730833#%5Fi5%20%5Fi6). February 2018.
  * El-Khoury J, Haidar R, Kanj RR, et al. Characteristics of Social Media ‘Detoxification’ in University Students. [_Libyan Journal of Medicine_](https://www.ncbi.nlm.nih.gov/pmc/articles/PMC7717533/). December 2021.
  * Fioravanti G, Prostamo A, Casale S. Taking a Short Break From Instagram: The Effects on Subjective Well-Being. [_Cyberpsychology, Behavior, and Social Networking_](https://pubmed.ncbi.nlm.nih.gov/31851833/). February 2020.
  * Schmuck D. Does Digital Detox Work? Exploring the Role of Digital Detox Applications for Problematic Smartphone Use and Well-Being of Young Adults Using Multigroup Analysis. [_Cyberpsychology, Behavior, and Social Networking_](https://pubmed.ncbi.nlm.nih.gov/32354288/). August 2020.

metadata:
  {"date_added":"2024-03-11 09:49:55","id":"b342d646-2ec3-4e27-a72d-dac0d46219d3","status":"ARCHIVED","tags":["read-later"],"title":"How to Do a Digital Detox | Everyday Health\n","url_omnivore":"https://omnivore.app/me/https-www-everydayhealth-com-emotional-health-how-to-do-a-digita-18e2d8fec8e\n","url_original":"https://www.everydayhealth.com/emotional-health/how-to-do-a-digital-detox-without-unplugging-completely/\n"}


path: Omnivore/2024-03-22 - How to Create a Great Personal Portfolio Page – a Handbook for Beginners.md
sortable_path: Omnivore2024-03-22 - How to Create a Great Personal Portfolio Page – a Handbook for Beginners.md
title: How to Create a Great Personal Portfolio Page – a Handbook for Beginners
lead: # How to Create a Great Personal Portfolio Page – a Handbook for Beginners
checksum: 4954103b60ac8d1192eaf33e2767d08b6516fd10d6b23dcf23a0ae9eebab0cf8
created: 2024-09-15 00:40:58.577924474+00:00
modified: 2024-09-22 22:40:13.397511078+00:00
body:
  # How to Create a Great Personal Portfolio Page – a Handbook for Beginners

  ## Highlights

  ### Tips for Choosing the Perfect Domain Name

  * **Keep It Simple**: Opt for a domain name that is easy to remember and type.
  * **Include Keywords**: If possible, incorporate relevant keywords related to your industry or profession.
  * **Consider Your Niche**: Ensure your domain name aligns with the type of work showcased on your portfolio.
  * **Avoid Numbers and Hyphens**: Numbers and hyphens can be confusing and are often forgotten when typing a domain name.
  * **Check Availability**: Verify that the domain name you want is not already taken and is available for purchase. You can use [namecheap.com](https://www.namecheap.com/), [godaddy.com](https://www.godaddy.com/nl-nl) and many other online hosting websites. 

  [source](https://omnivore.app/me/how-to-create-a-great-personal-portfolio-page-a-handbook-for-beg-18e6a73ea11#1c688bb9-5b3e-41e4-8529-5902e0533fb7) 

  ---

  **Research Design Options**: Explore various design templates on platforms like Envato, ThemeForest, and Figma. These resources offer a wide array of designs suited to different professions, aiding in finding one that matches your vision. 

  [source](https://omnivore.app/me/how-to-create-a-great-personal-portfolio-page-a-handbook-for-beg-18e6a73ea11#596a42c0-8fce-4a08-9a50-1278c860e160) 

  ---

  Showcase any recognitions, certifications, or contributions to open-source projects. 

  [source](https://omnivore.app/me/how-to-create-a-great-personal-portfolio-page-a-handbook-for-beg-18e6a73ea11#478f7449-f350-4fab-8b67-cc05ad413267) 

  ---

  #### For Developers Seeking Employment

  If your primary goal is to attract potential employers, your portfolio needs to emphasize your technical skills, projects, and the professional value you bring. Here's how to tailor your site:

  * **Highlight Relevant Projects**: Showcase a selection of projects that are most relevant to the types of roles you're seeking. Include detailed case studies that walk through your problem-solving process, technologies used, and the outcomes achieved.
  * **Professional Narrative**: Use the "About Me" section to narrate your professional journey, emphasizing experiences and skills that align with your career aspirations. Mention any collaborative projects to demonstrate teamwork and communication skills.
  * **Testimonials from Colleagues**: Including endorsements from past colleagues, supervisors, or collaborators can add credibility and provide insight into your working style and contributions to a team.
  * **Technical Blog**: If you maintain a blog, focus on posts that highlight your expertise, insights into technology trends, and solutions to common problems in your field. This not only showcases your knowledge but also your ability to communicate complex ideas clearly. 

  [source](https://omnivore.app/me/how-to-create-a-great-personal-portfolio-page-a-handbook-for-beg-18e6a73ea11#3549ac1f-0104-40fd-8981-85cce3d04184) 

  ---

  The tone of your brand voice can vary depending on the context and the platform, but it should always reflect your brand's personality. 

  Whether it's confident and authoritative, friendly and conversational, or inspirational and aspirational, the tone should be consistent across all channels to maintain brand recognition and loyalty. 

  [source](https://omnivore.app/me/how-to-create-a-great-personal-portfolio-page-a-handbook-for-beg-18e6a73ea11#12b06926-57b3-41b5-9e1b-492f82c163fe) 

  ---

  Incorporate feedback from previous clients or colleagues to highlight your skills and professionalism. Testimonials lend authenticity and foster trust in your portfolio. 

  [source](https://omnivore.app/me/how-to-create-a-great-personal-portfolio-page-a-handbook-for-beg-18e6a73ea11#75d7bf6c-2a2a-44fb-a958-0c595a4a77ca) 

  ---

  Showcase your standout projects with comprehensive case studies. These narratives offer a deep dive into your creative process, problem-solving abilities, and the impact of your work. 

  [source](https://omnivore.app/me/how-to-create-a-great-personal-portfolio-page-a-handbook-for-beg-18e6a73ea11#efeda449-8965-46a0-8884-c9fadb8f0f07) 

  ---

  A blog section can serve as a platform for sharing your expertise, industry insights, or personal reflections. It reflects your dedication to your craft and ensures your site remains vibrant with new content. 

  [source](https://omnivore.app/me/how-to-create-a-great-personal-portfolio-page-a-handbook-for-beg-18e6a73ea11#c2a0e123-fd91-4e08-8509-55877613c299) 

  ---

  Offer a look into your creative journey through behind-the-scenes content like sketches, mood boards, or early designs. This transparency into your process can fascinate visitors and add depth to your work presentation. 

  [source](https://omnivore.app/me/how-to-create-a-great-personal-portfolio-page-a-handbook-for-beg-18e6a73ea11#65a1c40b-4c6b-4d07-b581-5e8335064bf4) 

  ---

  Highlight any accolades or recognitions you've received. Showcasing your achievements adds prestige to your portfolio and distinguishes you from your peers. 

  [source](https://omnivore.app/me/how-to-create-a-great-personal-portfolio-page-a-handbook-for-beg-18e6a73ea11#9a595a7c-8027-497f-89e5-f02166883e35) 

  ---

  For those whose work involves data, adding infographics or visualizations can compellingly present complex information. This not only showcases your ability to simplify intricate data but also your creative approach to visual communication. 

  [source](https://omnivore.app/me/how-to-create-a-great-personal-portfolio-page-a-handbook-for-beg-18e6a73ea11#f421ea17-4988-4bf0-a817-18d653f3beae) 

  ---

  ### Home Page: The Gateway to Your Professional Universe

  The home page serves as the initial welcome to your professional domain, providing a brief yet impactful overview of your identity and offerings. This first impression is vital, setting the tone for the visitor's experience on your site. 

  ![image-101](https://proxy-prod.omnivore-image-cache.app/1468x917,s3q8eO-xelF9-X-CYPdsvtfxGJOtzIMna5j9kcAB158w/https://www.freecodecamp.org/news/content/images/2024/03/image-101.png)

  My home page

  Your home page should emphasize:

  * **Engaging Introduction**: Introduce yourself with a quick mention of your professional designation and expertise.
  * **Visual Elements**: Incorporate captivating visuals or a portfolio reel to immediately draw attention to your work.
  * **Navigation Tips**: Direct visitors smoothly to different site sections with clear navigation aids. 

  [source](https://omnivore.app/me/how-to-create-a-great-personal-portfolio-page-a-handbook-for-beg-18e6a73ea11#4b08a99c-131f-4d34-b7ff-fb992c2851ad) 

  ---

  ### Portfolio Section: A Display of Your Expertise

  This core section is where you showcase your finest work. Organizing this area thoughtfully ensures that visitors can easily navigate through your projects. You should include:

  * **Organization by Category**: Group projects by theme, type, or sector for straightforward browsing.

  ![image-93](https://proxy-prod.omnivore-image-cache.app/1430x932,sm8Xc0-1Mt_0zU4bra5QIqpbB1CbHie3vIJsCbQ9N8lM/https://www.freecodecamp.org/news/content/images/2024/03/image-93.png)

  Projects organized by category on my personal portfolio page - Python, Statistics, Machine Learning, and NLP

  * **Project Summaries**: Provide a concise description of each project, outlining your role, the methodology, and the results.

  ![image-94](https://proxy-prod.omnivore-image-cache.app/1450x753,sXU_bGfvLDSeR86OFH8ha87Onokvo-YgWxyu1rZNLSNs/https://www.freecodecamp.org/news/content/images/2024/03/image-94.png)

  Example project summary on my portfolio

  * **High-Resolution Media**: Present your work with high-quality images or videos to fully convey its quality.

  ![image-95](https://proxy-prod.omnivore-image-cache.app/1458x914,szuRqwh4X_p_Lf9lNnlC1qEGrhGM1sK0chdZiwfpyXH8/https://www.freecodecamp.org/news/content/images/2024/03/image-95.png) 

  [source](https://omnivore.app/me/how-to-create-a-great-personal-portfolio-page-a-handbook-for-beg-18e6a73ea11#50fc8ae9-03ea-4158-b0e9-9ab7baa63555) 

  ---

  ### About Me Page: Your Professional Narrative

  This page allows you to forge a deeper connection with your audience by sharing your story, ambitions, and what makes you unique. It should cover:

  * **Professional Background**: Share your career path, educational achievements, and significant milestones.

  ![image-97](https://proxy-prod.omnivore-image-cache.app/1452x773,sjB_AuG9eMME61y1f5xTWPeW40BYAPN4EyG3fNsX_q0w/https://www.freecodecamp.org/news/content/images/2024/03/image-97.png)

  Some of my personal milestones

  * **Skills and Expertise**: Spotlight the abilities that distinguish you in your field.

  ![image-96](https://proxy-prod.omnivore-image-cache.app/1449x699,ssJDqK7Fbp1W9PwyzQjAo8yqz-014s0RG7ekDqwMo7uo/https://www.freecodecamp.org/news/content/images/2024/03/image-96.png)

  A page on my portfolio showing my "digital DNA" - the skills I'd like to showcase

  * **Personal Insights**: Offering a peek into your personal hobbies or interests can make you more approachable and relatable. 

  [source](https://omnivore.app/me/how-to-create-a-great-personal-portfolio-page-a-handbook-for-beg-18e6a73ea11#26922385-6eda-4cc1-9885-70a965d69303) 

  ---

  ### Contact Information: Simplifying Communication

  For potential collaborations, it’s essential to make reaching out as simple as possible. Your contact page should include:

  * **Various Contact Methods**: Provide a contact form, email, and possibly a phone number for easy communication.

  ![image-99](https://proxy-prod.omnivore-image-cache.app/1451x855,sP3g3ley_Uhu0duZbckP0jOEC35DJl1rw8IBcEEMfn4k/https://www.freecodecamp.org/news/content/images/2024/03/image-99.png)

  My contact information page on my personal portfolio site

  * **Social Media Profiles**: Guide visitors to your professional social media pages.
  * **Geographic Details**: If applicable, mention your location or time zone. 

  [source](https://omnivore.app/me/how-to-create-a-great-personal-portfolio-page-a-handbook-for-beg-18e6a73ea11#82e27144-7f5b-4906-ba60-cd5b785a3797) 

  ---

  ### Do's for a Captivating Homepage

  * **Be Concise**: Ensure your message is clear and to the point.
  * **Use Endorsement Logos**: Incorporate logos of companies you've appeared on to build trust.
  * **Display Technical Stack Logos**: Show the technologies you're proficient in using their logos.
  * **Showcase a Case Study Gallery**: Highlight your best work in an easily navigable gallery.
  * **Include a Dynamic Header**: Use an engaging hero section to make a strong first impression.
  * **Highlight Recent Work**: Give visitors a glimpse of your latest projects to show you're active and relevant.
  * **Use Testimonials Strategically**: Place client testimonials where they'll have the most impact, showcasing your reliability and skill.

  ### Don'ts for Your Homepage

  * **Avoid Random Placement**: Structure your content logically – don't place information haphazardly.
  * **Steer Clear of Long Paragraphs**: Keep your homepage breezy and easy to read with short, impactful statements.
  * **Don't Overwhelm with Content**: Your homepage isn't the place to squeeze in every detail of your portfolio.
  * **Avoid Image Neglect**: Images are crucial for visual engagement, so don't omit them.
  * **Resist Clutter**: Keep the design clean and focused to improve user experience.
  * **Avoid Technical Jargon**: Use language that's accessible to all visitors, not just industry insiders.
  * **Skip the Hard Sell**: Present your skills and achievements without being overly aggressive. 

  [source](https://omnivore.app/me/how-to-create-a-great-personal-portfolio-page-a-handbook-for-beg-18e6a73ea11#111959c1-8fee-47cb-a0e6-9088462bf6ac) 

  ---

  ## Original

  ![How to Create a Great Personal Portfolio Page – a Handbook for Beginners](https://proxy-prod.omnivore-image-cache.app/1280x720,sEagJT3mw15_lRdem2144h-RqnDE5JTJZSZ2rPP_Logg/https://www.freecodecamp.org/news/content/images/size/w2000/2024/03/How-to-Create-a-Great-Personal-Portfolio-Page-Cover--1-.png) 

  As a developer, you'll want to create a digital space that mirrors your unique skills and persona. And a stellar personal portfolio website can help you make your mark in the digital universe. 

  Imagine a space that not only highlights your finest achievements but also attracts potential clients and makes a memorable impact on every visitor.

  This guide will help you navigate creating an outstanding personal portfolio. We'll dissect the process from choosing an eye-catching layout to crafting content that tells your story. It'll all be aimed at building a page that resonates with who you are and the value you bring. 

  But the journey doesn't end here. Diving deeper, you'll learn more strategies and insights to help you elevate your portfolio beyond the ordinary. Are you ready? Let's step into the realm of crafting a portfolio that's not just seen but remembered.

  ## Table Of Contents

  1. [The Importance of a Personal Portfolio Website](#why-is-a-personal-portfolio-website-important)
  2. [How to Choose the Right Domain Name](#how-to-choose-the-right-domain-name)
  3. [How to Design Your Portfolio Site](#how-to-design-your-portfolio-site)
  4. [How to Pick the Right Tools](#how-to-pick-the-right-tools)
  5. [How to Showcase Your Best Work](#how-to-showcase-your-best-work)
  6. [How to Craft Your Brand Story and Unique Voice](#how-to-craft-your-brand-story-and-unique-voice)
  7. [How to Add Additional Content](#how-to-add-additional-content)
  8. [Essential Pages for Your Portfolio](#what-pages-you-need-in-your-portfolio)
  9. [How to Organize the Home Page](#how-to-organize-the-home-page)
  10. [How to Keep Your Portfolio Fresh](#how-to-keep-your-portfolio-fresh)
  11. [Conclusion](#11-conclusion)

  ### Short Summary

  1. Building a great personal portfolio page is crucial for showcasing your skills and personality in the digital realm.
  2. This step-by-step guide will help you overcome common challenges like starting, structuring, and designing your portfolio effectively.
  3. Learn how to choose the right domain, design your site, showcase your best work, and craft a unique voice to make a lasting impression.
  4. Discover the essential elements, additional content options, social media strategies, and SEO techniques to maximize your portfolio's impact.

  ![image-56](https://proxy-prod.omnivore-image-cache.app/1792x1024,sirF1uD9HJwN1iCPcQ7O2LA81HvSafx6_saIKQbZeB2A/https://www.freecodecamp.org/news/content/images/2024/03/image-56.png)

  Set against Doha's futuristic skyline, this image symbolizes the critical role of a personal portfolio in distinguishing yourself in the tech landscape - [lunartech.ai](https://lunartech.ai/)

  ## Why is a Personal Portfolio Website Important?

  Your portfolio, much like a shop's facade or what you wear, communicates your personal style and standards, offering a reflection of your professional identity. 

  The structure of your website, the projects you spotlight, and the narrative you weave about your journey play a pivotal role in this representation.

  While some have navigated their way to impressive careers without a digital footprint, these days it's become more and more important to have a solid personal portfolio. This is particularly true for tech professionals—ranging from software engineers to data scientists and AI experts.

  This digital domain gives you a place to show what sets you apart, embodying the core of your unique value proposition. Without this platform, you leave your professional narrative to chance, permitting others to assemble a fragmented view of your persona.

  Not having an online personal portfolio could well dictate whether you secure your dream position and successfully establish a strong personal brand, versus fading into the background. In the digital-first era we navigate, a personal portfolio transcends mere benefit—it emerges as an [essential instrument for personal branding](https://www.freecodecamp.org/news/personal-branding-for-devs-handbook/).

  ### How a Personal Portfolio Helps You

  For engineers seeking to carve out a distinctive identity in the tech landscape, the quest to showcase what makes you unique is paramount. While GitHub serves as a testament to your technical abilities, it often speaks a language too specialized for a broader audience.

  Similarly, YouTube offers a platform for personality-driven exposure, but the prospect of speaking to a camera for hours may not align with your preferred mode of expression. Herein lies the unparalleled value of a personal portfolio page: it stands as one of the most effective mediums to represent yourself.

  When you're creating your personal portfolio, it's crucial to demonstrate your expertise and establish your credibility. This demands clear and concise communication, directly engaging potential clients or employers, showcasing your skills, and fostering an online presence.

  These are not mere suggestions but critical measures for contemporary professionals. By crafting a portfolio that not only displays your work but propels your career forward, you assert a distinctive presence in the competitive realm of technology, ensuring your unique contributions are both seen and valued.

  ![image-58](https://proxy-prod.omnivore-image-cache.app/1792x1024,sqocV4piUnzrNwSgMN56QSau9hrq2wUy5oIlqB9zRld8/https://www.freecodecamp.org/news/content/images/2024/03/image-58.png)

  Choose the Right Domain Name - [lunartech.ai](https://lunartech.ai/)

  ## How to Choose the Right Domain Name

  When setting up your personal portfolio website, selecting the perfect domain name is a crucial decision that can impact your online presence significantly. 

  Your domain name is essentially your online identity, so it's important to choose wisely to make a lasting impression on your visitors and potential clients. 

  ![image-73](https://proxy-prod.omnivore-image-cache.app/1061x567,sl3UFOlIXKcvUZ7OjhW3oRj-0CURFTCb7FRTRUnM_1Z0/https://www.freecodecamp.org/news/content/images/2024/03/image-73.png)

  Choosing my domain name - vaheaslanyan.com

  For my personal portfolio page, I like to keep it simple: firstname+lastname.com or just firstname.com. So for me it is: [vaheaslanyan.com](http://vaheaslanyan.com/). (My firstname + lastname.com) 

  ### Other examples are

  1. **JohnDoe.com**: This is the most direct approach, using both your first and last name. It's professional and clear for anyone looking for your work.
  2. **AlexJohnson.dev**: For those in the tech industry, using a domain extension like .dev can highlight your area of expertise.
  3. **MichaelRoberts.design**: Similar to the .dev extension, using .design can be a great choice for professionals in fields like graphic design, UX/UI, or related areas.
  4. **Elena.co**: If your first name is unique enough, or if you prefer a shorter URL, you might use just your first name with a less common extension like .co.
  5. **MaxCreates.com**: If "Max" is your nickname and you're in a creative industry, this domain clearly indicates what you do and who you are.

  ![image-74](https://proxy-prod.omnivore-image-cache.app/602x805,sbI0AY6T3-r85iG8q_2UT_nAooExTnYqNJ2Sbc4VcLAw/https://www.freecodecamp.org/news/content/images/2024/03/image-74.png)

  My name coming up in Google search results

  ### Importance of a Domain Name

  Your domain name is the first thing users see when they land on your website, so it should be memorable, easy to spell, and reflect your brand identity. 

  Here's why it's critical:

  * **It Reflects Your Brand**: A well-chosen domain name can effectively convey your unique voice and what you have to offer. If it is your project portfolio website, then something that reflects your name or nickname is a great way to accomplish this.
  * **It Improves Search Engine Ranking**: Having relevant keywords in your domain name can positively impact your website's SEO.
  * **It Attracts Potential Clients**: A professional and catchy domain name can pique the interest of potential clients and make your website stand out.

  ### ==Tips for Choosing the Perfect Domain Name==

  * **==Keep It Simple==**==: Opt for a domain name that is easy to remember and type.==
  * **==Include Keywords==**==: If possible, incorporate relevant keywords related to your industry or profession.==
  * **==Consider Your Niche==**==: Ensure your domain name aligns with the type of work showcased on your portfolio.==
  * **==Avoid Numbers and Hyphens==**==: Numbers and hyphens can be confusing and are often forgotten when typing a domain name.==
  * **==Check Availability==**==: Verify that the domain name you want is not already taken and is available for purchase. You can use== ==[namecheap.com](https://www.namecheap.com/)====,== ==[godaddy.com](https://www.godaddy.com/nl-nl)== ==and many other online hosting websites.==

  ![image-59](https://proxy-prod.omnivore-image-cache.app/1792x1024,sfR_6mj13IOtCt_px7eQ9cyMOy6cmPFAyw1tv2zjEEoo/https://www.freecodecamp.org/news/content/images/2024/03/image-59.png)

  Here's a visual representation capturing a web designer in their workspace -[ lunartech.ai](https://lunartech.ai/)

  ## How to Design Your Portfolio Site

  When selecting a design for your portfolio website, it’s important that the theme reflects your professional brand. For example, lawyers typically want a theme that suggests reliability and authority, while educators might choose a Learning Management System (LMS) to share courses. 

  To find the right design, websites like Envato, ThemeForest, and Figma templates are useful. It's helpful to plan what you want on each page before deciding on a design.

  Here's how to approach this process:

  **Understand Your Brand**: First, define what your brand represents and the impression you want to make. Whether your style is modern and sleek or more traditional and professional, your website's design should align with this.

  ![image-75](https://proxy-prod.omnivore-image-cache.app/1494x929,sVEfTnugco6jTctlcH9RYkpQBvkMZr1z8lvzYcqVuc5Y/https://www.freecodecamp.org/news/content/images/2024/03/image-75.png)

  My personal portfolio homepage

  **==Research Design Options==**==: Explore various design templates on platforms like Envato, ThemeForest, and Figma. These resources offer a wide array of designs suited to different professions, aiding in finding one that matches your vision.==

  ![image-76](https://proxy-prod.omnivore-image-cache.app/1447x936,swhVjfoKHTKGAgTJRzlqYXarOSU1D-L8A-JXHMerqNx0/https://www.freecodecamp.org/news/content/images/2024/03/image-76.png)

  Different site design options 

  **Functionality and Features Needs**: Consider the features essential for showcasing your work effectively. For a digital artist, high-resolution galleries might be key, while a developer might need support for embedding code snippets.

  ![image-77](https://proxy-prod.omnivore-image-cache.app/1453x933,sC8fYnZdJRArqnPQZPmXH4hE9oJAmLwqIWJN7MntBRr8/https://www.freecodecamp.org/news/content/images/2024/03/image-77.png)

  Press releases on my site

  **Sketch Your Layouts**: Draft a basic layout for each page of your website before committing to a design. This helps visualize how the design will accommodate your content.

  ![image-78](https://proxy-prod.omnivore-image-cache.app/1200x609,srgwgSJ2N1Bq-StTTOTB0iw_aeB6_giOrj3O7o3goMHw/https://www.freecodecamp.org/news/content/images/2024/03/image-78.png)

  Example wireframes for creating a personal portfolio

  **Prioritize Simplicity and User Experience**: A design that's easy to navigate and not overly complicated will keep the focus on your portfolio and provide a better experience for your visitors.

  ![image-79](https://proxy-prod.omnivore-image-cache.app/1600x1200,sKQXUVvTtUXswOhIO154SoPtTfdgu0_hjcaJFN3_p5Vw/https://www.freecodecamp.org/news/content/images/2024/03/image-79.png)

  An example of a simple website design

  **Ensure Compatibility and Responsiveness**: The design should look good and function well across all devices and browsers. Responsiveness ensures your website adapts to any screen size.

  ![image-80](https://proxy-prod.omnivore-image-cache.app/720x720,sKehidmYdrmiZEqi3hGoq_2LWVaDCcS7lGjXLH33W4h4/https://www.freecodecamp.org/news/content/images/2024/03/image-80.png)

  An example of a responsive site that looks good on both desktop and mobile

  **Customization Flexibility**: Look for a design that offers customization. Being able to adjust elements like colors, fonts, and layout means you can tailor the design to fit your brand perfectly.

  ![image-81](https://proxy-prod.omnivore-image-cache.app/931x580,sqtUUH638YAty00HUCK0ZMMg65dyfkJH0-9u_6BMhD9s/https://www.freecodecamp.org/news/content/images/2024/03/image-81.png)

  An example of a flexible design

  **Test and Gather Feedback**: If possible, test the design with some of your content and ask for feedback from colleagues or mentors. Their insights can help you gauge the design's effectiveness in presenting your work.

  By carefully choosing a design that represents your professional brand, you create a strong foundation for a portfolio website that effectively showcases your skills and communicates your unique value to visitors.

  ![image-60](https://proxy-prod.omnivore-image-cache.app/1792x1024,swSuSeeO6sFLuL0KUopfd3PWWkfoDIxIPFQOM0BWS-o4/https://www.freecodecamp.org/news/content/images/2024/03/image-60.png)

  Here's the visual representation capturing a tech professional in their early morning coding session - [lunartech.ai](https://lunartech.ai/)

  Choosing the right tools to build your portfolio involves understanding your needs, evaluating available options, and selecting solutions that align with your skills and goals. 

  This chapter guides you through this process, from deciding between coding your own site vs using a no-code platform to selecting the perfect hosting provider.

  ### Understand Your Needs

  First, it's important to identify your field: are you in the tech industry, or are you in some other line of work?

  Your field of work significantly influences your choice of portfolio tools. Tech professionals might lean towards custom-coded sites to showcase their coding prowess, while those in non-tech fields may prefer no-code builders for their convenience and ease of use.

  Next, you'll want to evaluate your skills to decide how to actually create the site. Do you want to code your own portfolio, or choose a no-code solution? 

  Assess your skills honestly. If you're comfortable with coding, a custom-built site might be the best way to showcase your technical abilities. For those without coding skills or a desire to learn, no-code platforms offer a practical and efficient alternative.

  Then you'll want to set your website goals and objectives. Define what you want your portfolio to achieve. Are you looking to attract freelance clients, land a full-time job, or simply showcase your work? Your goals can influence the choice of platform, design, and content of your portfolio.

  ### Options for Tech Professionals

  Coding your own portfolio from scratch offers complete control over design and functionality, allowing you to create a unique and personalized online presence. It also showcases what you can do with code.

  #### Benefits of Custom Coding

  * Customization: Tailor every aspect of your site to fit your personal brand.
  * Skill Demonstration: Showcase your coding ability to potential employers or clients.

  #### Recommended Technologies and Frameworks

  * **HTML, CSS, and JavaScript Basics**: The foundation of web development, essential for any custom-built portfolio.
  * **Advanced Frameworks**: Utilize React, Angular, or Vue to create dynamic and responsive sites.

  #### Hosting Solutions for Coders

  * **GitHub Pages**: A free option for hosting simple, static sites.
  * **Netlify and Vercel**: Provide more flexibility and support for dynamic sites built with advanced frameworks.

  ### No-Code Solutions for Non-Tech Professionals

  No-code platforms have democratized web design, enabling anyone to create beautiful, functional websites without writing a single line of code.

  #### Comparing Popular No-Code Platforms

  * **WordPress**: Versatile and widely used, with extensive themes and plugins.
  * **Webflow**: Offers unparalleled customization and flexibility without requiring coding knowledge.
  * **Squarespace**: Known for its ease of use and stunning, design-forward templates.

  ### How to Choose the Right Hosting Option

  Your hosting provider impacts your site's loading speed, uptime, and overall user experience, making it a crucial factor in your portfolio's success.

  #### Some Common Hosting Providers

  * **Namecheap**: Offers affordable, reliable hosting with excellent customer support.
  * **Alternative Options**: Explore other reputable providers like Bluehost and SiteGround based on your specific needs.

  Choosing the right tools for your personal portfolio requires a thoughtful evaluation of your needs, skills, and goals. Whether through custom coding or no-code platforms, the perfect portfolio is within reach. 

  By carefully selecting the right tools and platforms, you can create a portfolio that not only showcases your work but also helps you achieve your career aspirations.

  ![image-61](https://proxy-prod.omnivore-image-cache.app/1792x1024,sVZBOvutqlAhsU-wpcRWTWpkxE14VIOnEr88JFQ8W9GE/https://www.freecodecamp.org/news/content/images/2024/03/image-61.png)

  Here's a visual representation capturing a software engineer as they organize their portfolio - [lunartech.ai](https://lunartech.ai/)

  ## How to Showcase Your Best Work

  When setting up your portfolio page, it's essential to showcase projects that reflect your current focus in software engineering, data science, AI, or whatever area of tech you call home. 

  Select projects that are recent and demonstrate your skills and interests in these areas, ensuring your portfolio aligns with the professional direction you're aiming for.

  ### Categorize Your Projects

  Divide your projects into categories like software development, data analysis, or artificial intelligence to help visitors navigate your portfolio more easily. 

  ![image-82](https://proxy-prod.omnivore-image-cache.app/1453x839,sAMWRM0laO9WYBvqBfoFmBPjjIy251OUc5Eq-nEJ5M_M/https://www.freecodecamp.org/news/content/images/2024/03/image-82.png)

  The project section on my personal portfolio site with clear sections for different topics

  This organization allows you to display a broad skill set, making it clear you're well-versed in multiple aspects of tech. It also helps visitors quickly find projects that align with their specific interests or needs.

  ### Provide Detailed Project Descriptions

  For each project, write a brief description that outlines the project's goals, your role in its development, and the technology used. Highlight any unique challenges you encountered and how you overcame them, showcasing your problem-solving skills. 

  ![image-86](https://proxy-prod.omnivore-image-cache.app/1458x911,se4tQkcZ3aNxiloifazgzTlnrPgsiYNSt8HP1J7nR25o/https://www.freecodecamp.org/news/content/images/2024/03/image-86.png)

  Example of some project descriptions listing the challenge, goal, technologies used, etc.

  These descriptions give context to your work and help visitors understand the depth of your technical expertise and creativity.

  ### Use High-Quality Visuals and Code Snippets

  Incorporate clear screenshots of your projects or UI designs, and consider including code snippets to illustrate the quality of your coding practices. 

  ![image-85](https://proxy-prod.omnivore-image-cache.app/1447x930,s92Q4n9P6JEJuKUbTee3KrF6_ykxjK7XlCudnNeI2wUg/https://www.freecodecamp.org/news/content/images/2024/03/image-85.png)

  A high quality visual

  Visuals help convey the complexity and functionality of your projects, while code snippets can give fellow tech professionals insight into your technical approach. Together, they provide a comprehensive view of your capabilities.

  ### Include Client or Collaborator Testimonials

  Testimonials from clients, colleagues, or collaborators can add credibility to your portfolio. Positive feedback on your technical skills, work ethic, and ability to deliver solutions can significantly enhance your professional image. 

  ![image-87](https://proxy-prod.omnivore-image-cache.app/1437x845,sjIIzA_Otixhxooev5nZyDOxbip2m0DnCtKFJ2pGeSac/https://www.freecodecamp.org/news/content/images/2024/03/image-87.png)

  Examples from my testimonials page

  These testimonials act as a form of social proof, validating your expertise in your field.

  ### Highlight Achievements and Contributions

  ==Showcase any recognitions, certifications, or contributions to open-source projects.== 

  For example, if you've received a "Developer of the Month" award from a well-known tech community, obtained a certification in Advanced Machine Learning from a reputable online platform, or contributed to open-source projects on GitHub like TensorFlow or Apache Spark, make sure these are prominently featured.

  ![image-88](https://proxy-prod.omnivore-image-cache.app/1457x614,sLU6Hmb1gTinmZu_DuI2adPm_Li_VQAxvn52T6dugVSg/https://www.freecodecamp.org/news/content/images/2024/03/image-88.png)

  Some of my own milestones throughout my career

  Highlighting such achievements, like winning a hackathon or being part of a team that developed a widely used software tool, showcases your commitment and active engagement in the tech community. 

  It also positions you as a dedicated and accomplished professional, underlining your contributions and achievements within the fields of software engineering, data science, and AI.

  ### Feature Interactive Demos

  Where possible, include interactive demos of your projects or links to live sites where visitors can see your work in action. This not only makes your portfolio more engaging but also lets visitors experience the usability and functionality of your creations firsthand. 

  Interactive demos can be particularly compelling for projects in AI and data science, where results and data visualizations play a crucial role.

  To effectively include interactive demos or links to live sites in your portfolio, consider these approaches:

  1. **Embed Project Videos**: Create short video demonstrations of your projects and embed them directly into your portfolio. These videos can guide viewers through the functionality and features of your creations, providing a dynamic way to showcase your work.
  2. **Use GitHub Pages**: For software engineering projects, deploy your web applications or tools on [GitHub Pages](https://pages.github.com/), providing a direct link in your portfolio. This free hosting service allows you to present live versions of your projects, making them accessible to anyone.
  3. **Interactive Data Visualization Tools**: For data science projects, utilize tools like [Tableau Public](https://public.tableau.com/app/discover) or [D3.js](https://d3js.org/) to create interactive visualizations of your data analyses. Embed these visualizations in your portfolio to let visitors interact with the data, understand your analytical skills, and appreciate the insights you've uncovered.
  4. **Host on Cloud Platforms**: Use cloud platforms like [Heroku](https://www.heroku.com/) or [Netlify](https://www.netlify.com/) to deploy your projects and include the live links in your portfolio. These platforms support a wide range of programming languages and frameworks, making them suitable for showcasing both frontend and backend projects.
  5. **Demo Notebooks for AI Models**: Share Jupyter notebooks via platforms like GitHub or NBViewer that demonstrate the workings of your AI models. These notebooks can include code, visualizations, and explanations, offering a comprehensive view of your project's development process and results.
  6. **Create an Interactive Portfolio Section**: Design a specific area of your portfolio dedicated to interactive demos. This section can include thumbnails or icons representing each project, which visitors can click on to explore the demo or live site.
  7. **Use Code Sandboxes**: For smaller projects or code snippets, use online code editors like [CodePen](https://codepen.io/) or [JSFiddle](https://jsfiddle.net/) to create live previews. These platforms allow you to write HTML, CSS, and JavaScript in the browser and share interactive versions of your work.

  By incorporating these methods, you can make your portfolio more engaging and provide potential employers or clients with a hands-on understanding of your projects' usability, functionality, and the innovative solutions you bring to the table in software engineering, data science, and AI.

  ### Regularly Update Your Portfolio

  Keep adding new projects and updating your portfolio to reflect your latest work and ongoing learning in the tech field. This demonstrates your commitment to staying current with technological advancements and your continuous professional development. An up-to-date portfolio shows you're actively involved in your field and passionate about your work.

  By tailoring your portfolio with these considerations in mind, you ensure it effectively showcases your expertise in software engineering, data science, and AI. This approach not only highlights your technical skills but also your adaptability and ongoing growth in these rapidly evolving fields.

  ![image-62](https://proxy-prod.omnivore-image-cache.app/1792x1024,seq-58wdwa5SAC8TnbGwAEFyrg2GSDcIIB9zzjPKMZ5k/https://www.freecodecamp.org/news/content/images/2024/03/image-62.png)

  A marketing team brainstorming session - [lunartech.ai](https://lunartech.ai/)

  ## **How to Craft Your Brand Story and Unique Voice**

  Crafting your brand's voice is a vital aspect of the brand's identity, serving as the embodiment of its personality across all forms of communication. A well-defined brand voice not only distinguishes a brand in a crowded market but also establishes a consistent and relatable presence that resonates with its target audience. 

  This chapter delves into the intricate process of sculpting your brand's unique voice and narrative, ensuring it aligns with its core values, mission, and the expectations of its audience.

  ### **Understanding Your Brand's Core**

  The journey to crafting your brand's voice begins with a deep dive into its essence. This involves clarifying your brand's mission, values, and the unique proposition it offers to its audience. 

  A brand voice that is in harmony with these core aspects will not only be authentic but also compelling to your target audience.

  ### **Identify Your Audience**

  Understanding and identifying your target audience as a developer is pivotal to creating a personal portfolio website that resonates with the right people, whether they are potential employers, clients, students for your courses, or collaborators. Here's how to refine your approach based on who you're speaking to most often:

  #### For Educators and Course Creators

  If analytics or feedback suggests that a significant portion of your visitors (like the 90% in the example) are potential students interested in your courses, your portfolio should position you as a subject matter expert and a capable educator. Here's how:

  * **Showcase Educational Content**: Highlight courses you've created, workshops you've conducted, and any educational materials you offer. Use clear, engaging descriptions and include student testimonials to underscore the value of your courses.
  * **Demonstrate Expertise**: Include a detailed "About Me" section that outlines your credentials, experience, and any awards or recognitions you've received in your field. This helps build trust and establish your authority.
  * **Provide Free Resources**: Offering free tutorials, blog posts, or downloadable resources can be a great way to showcase your knowledge and teaching style, encouraging visitors to engage with your paid courses.
  * **Engage with Interactive Demos**: Use interactive elements or demos related to your courses to engage visitors and give them a taste of what you offer, making your site and courses more memorable.

  #### ==For Developers Seeking Employment==

  ==If your primary goal is to attract potential employers, your portfolio needs to emphasize your technical skills, projects, and the professional value you bring. Here's how to tailor your site:==

  * **==Highlight Relevant Projects==**==: Showcase a selection of projects that are most relevant to the types of roles you're seeking. Include detailed case studies that walk through your problem-solving process, technologies used, and the outcomes achieved.==
  * **==Professional Narrative==**==: Use the "About Me" section to narrate your professional journey, emphasizing experiences and skills that align with your career aspirations. Mention any collaborative projects to demonstrate teamwork and communication skills.==
  * **==Testimonials from Colleagues==**==: Including endorsements from past colleagues, supervisors, or collaborators can add credibility and provide insight into your working style and contributions to a team.==
  * **==Technical Blog==**==: If you maintain a blog, focus on posts that highlight your expertise, insights into technology trends, and solutions to common problems in your field. This not only showcases your knowledge but also your ability to communicate complex ideas clearly.==

  ### General Tips for Identifying Your Audience

  * **Survey Your Visitors**: Simple surveys or feedback forms on your website can provide direct insights into who your visitors are and what they're looking for.
  * **Analyze Website Analytics**: Use tools like Google Analytics to understand the demographics, interests, and behavior of your site's visitors. Look for patterns in the pages visited, the content engaged with, and the referral sources.
  * **Social Media Insights**: If you use social media to share your work or insights, platforms like Twitter, LinkedIn, and Instagram provide analytics that can help you understand your followers' profiles and preferences.
  * **Competitor Analysis**: Look at the portfolios of peers in your field. Notice who their target audience seems to be and how they engage with them. This can offer clues about your own audience.

  Identifying and understanding your target audience allows you to craft a portfolio that speaks directly to their needs and interests. Whether you're teaching, seeking employment, or offering freelance services, a focused approach ensures that your portfolio resonates with the right people, making it a powerful tool in achieving your professional goals.

  ### **Craft Your Brand Narrative**

  Once you have a clear understanding of your brand's core and its audience, the next step is to weave your brand narrative. 

  This narrative should tell the story of your brand—where it comes from, what it stands for, and where it is headed. 

  The narrative becomes the foundation upon which your brand voice is built, ensuring that every message you convey is coherent and aligned with your brand's story.

  ### **Be Aware of the Tone of Your Voice**

  ==The tone of your brand voice can vary depending on the context and the platform, but it should always reflect your brand's personality.== 

  ==Whether it's confident and authoritative, friendly and conversational, or inspirational and aspirational, the tone should be consistent across all channels to maintain brand recognition and loyalty.==

  ### **Consistency Is Key**

  Maintaining consistency in your brand voice across all platforms and touchpoints is crucial. This consistency helps in building trust and credibility with your audience. It ensures that no matter where or how your audience encounters your brand, they receive the same experience and message.

  ### **Evolve Your Voice**

  While consistency is essential, it's also important to allow your brand voice to evolve with your audience and the market. Stay open to feedback and be willing to adjust your voice as needed to ensure it remains relevant and engaging to your audience.

  Crafting your brand story and unique voice is not a one-time effort but an ongoing process of refinement and evolution. 

  By staying true to your brand's core, understanding your audience, and being consistent yet flexible in your approach, you can create a brand voice that not only defines your brand's identity but also builds lasting connections with your audience.

  ![image-63](https://proxy-prod.omnivore-image-cache.app/1792x1024,s91WPC2v95W5Cj4TyTmYG-OLTGGjNWWxEaYqtSH-T0t0/https://www.freecodecamp.org/news/content/images/2024/03/image-63.png)

  A web designer enhancing their portfolio website with a variety of content to showcase their capabilities - [lunartech.ai](https://lunartech.ai/)

  ## How to Add Additional Content

  Enhancing your personal portfolio website with a variety of content not only enriches the visitor's experience but also showcases the breadth of your capabilities. Here are some key additions that can transform your site:

  ### Client Testimonials and Peer Reviews

  ==Incorporate feedback from previous clients or colleagues to highlight your skills and professionalism. Testimonials lend authenticity and foster trust in your portfolio.== 

  **Example:** a section titled "What People Are Saying" can feature a carousel of quotes from past clients, such as: "Alex transformed our brand's vision into reality with exceptional design and attention to detail. Working with them was a game-changer!" – Jamie, Brand Manager 

  ### Detailed Case Studies

  ==Showcase your standout projects with comprehensive case studies. These narratives offer a deep dive into your creative process, problem-solving abilities, and the impact of your work.== 

  **Example:** a page dedicated to a rebranding project for a local café, including the challenge ("Revitalizing a beloved local brand"), the process (from initial sketches to final design choices), and the impact (increased customer engagement and sales).

  ### Blog Insights

  ==A blog section can serve as a platform for sharing your expertise, industry insights, or personal reflections. It reflects your dedication to your craft and ensures your site remains vibrant with new content.== 

  **Example:** a series of posts under "Design Insights," with entries like "The Future of Web Design: Trends to Watch" or "My Creative Process: From Concept to Completion," providing readers with valuable knowledge and a peek into your creative world.

  ### Behind-the-Scenes Glimpses

  ==Offer a look into your creative journey through behind-the-scenes content like sketches, mood boards, or early designs. This transparency into your process can fascinate visitors and add depth to your work presentation.== 

  **Example:** a gallery called "The Making of a Logo," featuring early sketches, revisions, and commentary on the thought process behind each stage, culminating in the final design.

  ### Engaging Interactive Elements

  Incorporate dynamic features such as sliders, animations, or interactive galleries. These elements can make your portfolio more engaging and leave a lasting impression on visitors. 

  **Example:** an interactive gallery for a photography portfolio, where visitors can filter images by theme or color. Hovering over an image reveals the project name and details, while clicking enlarges the photo with a detailed caption. 

  ### Awards and Honors

  ==Highlight any accolades or recognitions you've received. Showcasing your achievements adds prestige to your portfolio and distinguishes you from your peers.== 

  **Example:** a "Recognition" section displaying badges or trophies from design competitions, accompanied by a brief description of the award and the project that won it, such as "Winner of the 2023 Design Innovation Award for the Eco-Friendly Packaging Series."

  ### Video Demonstrations

  Embedding video content, whether project walkthroughs or client feedback, can provide an immersive experience. Videos add a dynamic layer to your presentation, making your work more relatable and memorable. 

  **Example:** a video walkthrough of a mobile app design process, starting from wireframes to the finished product, with voiceover explaining design choices, challenges overcome, and user feedback incorporated into the final version.

  ### Infographics and Data Visualizations

  ==For those whose work involves data, adding infographics or visualizations can compellingly present complex information. This not only showcases your ability to simplify intricate data but also your creative approach to visual communication.== 

  **Example:** an infographic titled "The Impact of Good Design on User Engagement," showcasing statistics on user retention, satisfaction, and conversion rates before and after a website redesign, highlighting your ability to drive results through design.

  Diversifying the content on your personal portfolio website with additions like testimonials, in-depth case studies, and interactive elements enriches your online presence. Such enhancements not only amplify the appeal and credibility of your portfolio but also demonstrate your comprehensive skill set and creativity.

  ![image-65](https://proxy-prod.omnivore-image-cache.app/1792x1024,suJhldaH1LyVXvrFJIdMr3n4PcCA7-s3JhSwVkRUhtWc/https://www.freecodecamp.org/news/content/images/2024/03/image-65.png)

  A web developer planning for personal portfolio website - [lunartech.ai](https://lunartech.ai/)

  ## What Pages You Need in Your Portfolio

  To make your personal portfolio website truly unforgettable, paying close attention to its structure and content is paramount. 

  The goal is to showcase not just your work and abilities, but to establish a holistic online platform that mirrors your professional identity. Integrating specific essential pages is critical for a detailed presentation of your competencies to prospective employers or clients. 

  Here’s a detailed guide on the essential pages that are fundamental to a standout personal portfolio:

  ### ==Home Page: The Gateway to Your Professional Universe==

  ==The home page serves as the initial welcome to your professional domain, providing a brief yet impactful overview of your identity and offerings. This first impression is vital, setting the tone for the visitor's experience on your site.== 

  ![image-101](https://proxy-prod.omnivore-image-cache.app/1468x917,s3q8eO-xelF9-X-CYPdsvtfxGJOtzIMna5j9kcAB158w/https://www.freecodecamp.org/news/content/images/2024/03/image-101.png)

  ==My home page==

  ==Your home page should emphasize:==

  * **==Engaging Introduction==**==: Introduce yourself with a quick mention of your professional designation and expertise.==
  * **==Visual Elements==**==: Incorporate captivating visuals or a portfolio reel to immediately draw attention to your work.==
  * **==Navigation Tips==**==: Direct visitors smoothly to different site sections with clear navigation aids.==

  ### ==Portfolio Section: A Display of Your Expertise==

  ==This core section is where you showcase your finest work. Organizing this area thoughtfully ensures that visitors can easily navigate through your projects. You should include:==

  * **==Organization by Category==**==: Group projects by theme, type, or sector for straightforward browsing.==

  ![image-93](https://proxy-prod.omnivore-image-cache.app/1430x932,sm8Xc0-1Mt_0zU4bra5QIqpbB1CbHie3vIJsCbQ9N8lM/https://www.freecodecamp.org/news/content/images/2024/03/image-93.png)

  ==Projects organized by category on my personal portfolio page - Python, Statistics, Machine Learning, and NLP==

  * **==Project Summaries==**==: Provide a concise description of each project, outlining your role, the methodology, and the results.==

  ![image-94](https://proxy-prod.omnivore-image-cache.app/1450x753,sXU_bGfvLDSeR86OFH8ha87Onokvo-YgWxyu1rZNLSNs/https://www.freecodecamp.org/news/content/images/2024/03/image-94.png)

  ==Example project summary on my portfolio==

  * **==High-Resolution Media==**==: Present your work with high-quality images or videos to fully convey its quality.==

  ![image-95](https://proxy-prod.omnivore-image-cache.app/1458x914,szuRqwh4X_p_Lf9lNnlC1qEGrhGM1sK0chdZiwfpyXH8/https://www.freecodecamp.org/news/content/images/2024/03/image-95.png)

  ### ==About Me Page: Your Professional Narrative==

  ==This page allows you to forge a deeper connection with your audience by sharing your story, ambitions, and what makes you unique. It should cover:==

  * **==Professional Background==**==: Share your career path, educational achievements, and significant milestones.==

  ![image-97](https://proxy-prod.omnivore-image-cache.app/1452x773,sjB_AuG9eMME61y1f5xTWPeW40BYAPN4EyG3fNsX_q0w/https://www.freecodecamp.org/news/content/images/2024/03/image-97.png)

  ==Some of my personal milestones==

  * **==Skills and Expertise==**==: Spotlight the abilities that distinguish you in your field.==

  ![image-96](https://proxy-prod.omnivore-image-cache.app/1449x699,ssJDqK7Fbp1W9PwyzQjAo8yqz-014s0RG7ekDqwMo7uo/https://www.freecodecamp.org/news/content/images/2024/03/image-96.png)

  ==A page on my portfolio showing my "digital DNA" - the skills I'd like to showcase==

  * **==Personal Insights==**==: Offering a peek into your personal hobbies or interests can make you more approachable and relatable.==

  ### Services Offered: How You Can Assist Clients

  If your portfolio is meant to attract freelance or consulting work, clearly detail the services you provide. This section should convey:

  * **Services List**: Enumerate the services you offer, such as design, consulting, or writing.

  ![image-98](https://proxy-prod.omnivore-image-cache.app/1453x948,sDzclqRqt7UqBvOdZ3xnyum0JaJoZOdYg8Vp0AZ8yyo4/https://www.freecodecamp.org/news/content/images/2024/03/image-98.png)

  A section on my site describing the courses I offer/topics I teach about

  * **Unique Advantages**: Describe what sets your services apart from the competition.
  * **Workflow Description**: Outline your process from the initial contact to project completion, offering potential clients a glimpse into your working style.

  ### ==Contact Information: Simplifying Communication==

  ==For potential collaborations, it’s essential to make reaching out as simple as possible. Your contact page should include:==

  * **==Various Contact Methods==**==: Provide a contact form, email, and possibly a phone number for easy communication.==

  ![image-99](https://proxy-prod.omnivore-image-cache.app/1451x855,sP3g3ley_Uhu0duZbckP0jOEC35DJl1rw8IBcEEMfn4k/https://www.freecodecamp.org/news/content/images/2024/03/image-99.png)

  ==My contact information page on my personal portfolio site==

  * **==Social Media Profiles==**==: Guide visitors to your professional social media pages.==
  * **==Geographic Details==**==: If applicable, mention your location or time zone.==

  ### Client Testimonials: Evidence of Your Expertise

  Testimonials from previous clients or colleagues act as a strong endorsement of your skills and dependability. Consider featuring:

  * **Client Feedback**: Include concise, meaningful quotes from clients about their satisfaction with your work.

  ![image-100](https://proxy-prod.omnivore-image-cache.app/1459x921,szS8qnjs7QrgRUXtX_ZhUrrmBf2k65YUd8-9imN2Vq3M/https://www.freecodecamp.org/news/content/images/2024/03/image-100.png)

  Some of my client's testimonials

  * **Project Links**: Optionally, connect these testimonials to specific projects they refer to.
  * **Client Images or Logos**: Adding photos or logos of the client's company can add credibility to each testimonial.

  Incorporating these key pages into your personal portfolio website not only effectively showcases your skills but also offers a complete picture of your professional sphere. 

  By meticulously designing each section, you can cultivate a digital presence that draws in potential clients or employers, showcases your proficiency, and distinguishes you in your industry.

  ![image-67](https://proxy-prod.omnivore-image-cache.app/1792x1024,sbGFwPKaR_Qg3k5u-KTPlv51uqRHUrexDYYEDdKTaRNU/https://www.freecodecamp.org/news/content/images/2024/03/image-67.png)

  This illustration emphasizes a modern and inviting atmosphere, designed to pique the curiosity of visitors and encourage exploration of the portfolio. - [lunartech.ai](https://lunartech.ai/)

  ## How to Organize the Home Page

  Now let's talk about how to strategically organize the homepage of your personal portfolio website. The essence of the homepage is to succinctly represent you and ignite the curiosity of visitors to delve into your portfolio page. Essential sections include:

  ### 1\. Navigation Bar

  A well-designed navigation bar is your visitor's roadmap to your website. It should be intuitive and straightforward, guiding them through your site with ease. 

  ![image-102](https://proxy-prod.omnivore-image-cache.app/1455x84,srzf7NRoupmzDty-rUR77udILXV7AVXyIZva65nt0gw8/https://www.freecodecamp.org/news/content/images/2024/03/image-102.png)

  Navigation section of my site

  Include links to your portfolio, about page, services, and contact information. Ensure it's accessible from every page, providing a seamless browsing experience.

  Your header hero acts as the first impression and the hook that draws visitors in. This section should feature a striking, high-quality image or a dynamic slider that represents your work or persona. 

  Accompany this visual with a bold, concise statement about who you are and what you do. This is your chance to make an impact, so choose words and images that resonate with your professional identity and goals.

  ![image-103](https://proxy-prod.omnivore-image-cache.app/1468x917,sqlQmfDBrxeJ3BVHvUZH3QQzLmWDbW2tjCUne_LhARf8/https://www.freecodecamp.org/news/content/images/2024/03/image-103.png)

  Homepage displaying the header hero image on my site

  My hero image has my name in large print, and informs viewers that I specialize in compter science, data science, and AI.

  ### 3\. Your Skills

  Highlighting your skills is crucial in showcasing your competencies to potential clients or employers. 

  Create a visually engaging section where you list your primary skills, perhaps using icons or progress bars for a more dynamic presentation. Focus on the skills that set you apart and are most relevant to the work you want to attract.

  ![image-109](https://proxy-prod.omnivore-image-cache.app/1443x734,s5OkphOEHm9JmkpeKUzXuL8pRH6ZI6KnITgFXexspeOg/https://www.freecodecamp.org/news/content/images/2024/03/image-109.png)

  Some of my skills listed on my site

  On my site, I emphasize that I've had experience managing teams, optimizing performance, and building AI-driven products, for example.

  ### 4\. Your Case Studies

  Case studies are powerful testimonials of your work history and success stories. Dedicate a section to showcase selected projects that highlight your problem-solving skills, creativity, and the value you’ve brought to previous engagements. 

  For each case study, provide context, your role, challenges, solutions, and results. Including impactful visuals or links to the projects can greatly enhance this section.

  ### 5\. Your Milestones

  This section is a timeline or a list of significant achievements, awards, recognitions, or other milestones in your career. It's a narrative of your professional journey and successes. 

  Presenting this information in a chronological timeline or a visually engaging infographic can help tell your story compellingly and succinctly. 

  You can list achievements such as starting a company, graduating from a degree program, reaching a certain number of followers on social media, and so on.

  ### 6\. Testimonials (What others say about you)

  Testimonials from past clients, colleagues, or employers lend credibility and trust to your professional image. Select quotes that reflect your work ethic, impact, and personality. 

  Displaying these testimonials with the name, title, and, if possible, a photo of the person providing them adds authenticity and a personal touch.

  ### 7\. Technical Skills

  In addition to your general skills, it's important to specifically highlight your technical skills. This section should detail the tools, technologies, software, and programming languages you are proficient in. 

  Using logos or icons of these technologies can make this section more visually appealing and easier to scan for visitors who are quickly trying to gauge your technical capabilities.

  ![image-104](https://proxy-prod.omnivore-image-cache.app/1448x848,scNyxmSjE2Pgi1bzoHfdbTinITeGAgipws6w_Yk24quc/https://www.freecodecamp.org/news/content/images/2024/03/image-104.png)

  My "digital DNA"

  For example, my "digital DNA" is made up of C++, Java, JavaScript, Python, React, and other popular technologies.

  Beyond these, your homepage doesn't require additional content. It's vital to capture the visitor's attention quickly with compelling visuals and effective copywriting, given the short window to make an impact.

  ### ==Do's for a Captivating Homepage==

  * **==Be Concise==**==: Ensure your message is clear and to the point.==
  * **==Use Endorsement Logos==**==: Incorporate logos of companies you've appeared on to build trust.==
  * **==Display Technical Stack Logos==**==: Show the technologies you're proficient in using their logos.==
  * **==Showcase a Case Study Gallery==**==: Highlight your best work in an easily navigable gallery.==
  * **==Include a Dynamic Header==**==: Use an engaging hero section to make a strong first impression.==
  * **==Highlight Recent Work==**==: Give visitors a glimpse of your latest projects to show you're active and relevant.==
  * **==Use Testimonials Strategically==**==: Place client testimonials where they'll have the most impact, showcasing your reliability and skill.==

  ### ==Don'ts for Your Homepage==

  * **==Avoid Random Placement==**==: Structure your content logically – don't place information haphazardly.==
  * **==Steer Clear of Long Paragraphs==**==: Keep your homepage breezy and easy to read with short, impactful statements.==
  * **==Don't Overwhelm with Content==**==: Your homepage isn't the place to squeeze in every detail of your portfolio.==
  * **==Avoid Image Neglect==**==: Images are crucial for visual engagement, so don't omit them.==
  * **==Resist Clutter==**==: Keep the design clean and focused to improve user experience.==
  * **==Avoid Technical Jargon==**==: Use language that's accessible to all visitors, not just industry insiders.==
  * **==Skip the Hard Sell==**==: Present your skills and achievements without being overly aggressive.==

  Effective organization of your homepage is key to creating a memorable and professional personal portfolio website. 

  By following these guidelines, you ensure that your homepage not only accurately represents your professional persona but also encourages further exploration of your portfolio, opening up new opportunities for engagement and collaboration.

  ![image-68](https://proxy-prod.omnivore-image-cache.app/1792x1024,seP8EM8SXRG6hspNPrz0erpEhohZ2tm5l77ABJalD69s/https://www.freecodecamp.org/news/content/images/2024/03/image-68.png)

  Here's a visual representation of a designer actively updating their online portfolio, highlighting their commitment to showcasing evolving skills and staying current. - <https://lunartech.ai/>

  ## How to Keep Your Portfolio Fresh

  Keeping your portfolio updated is crucial for reflecting your evolving skills, expertise, and experiences. An engaging and current portfolio not only captivates potential clients and visitors but also illustrates your dedication to your profession. Here are strategies to ensure your portfolio remains fresh and appealing:

  ### Continuously Update with New Work

  Regularly add your latest and greatest projects to your portfolio. This demonstrates your active involvement in your field and your commitment to quality and innovation. It's a way to showcase your growth and adaptability over time.

  ### Revamp Your Portfolio's Design

  Periodically rejuvenating the design of your portfolio website can keep it looking modern and fresh. An updated design can better engage visitors and reflect your ability to stay in tune with the latest trends and technologies in design.

  ### Showcase Testimonials and Recognitions

  Incorporate new testimonials from clients or colleagues, as well as any recent awards or honors you've received. This external validation of your work adds credibility and can significantly influence potential clients' perceptions of your expertise.

  ### Maintain an Active Blog

  A blog can be a dynamic component of your portfolio, offering insights into your work process, industry observations, or detailed project breakdowns. Regular posts keep your site content fresh and can help establish you as a thought leader in your field.

  Use social media platforms to highlight recent projects, achievements, and updates from your portfolio. A robust social media presence can extend your reach, attract a broader audience, and keep your work in the spotlight.

  ### Incorporate Interactive Elements

  Adding interactive elements, such as animations or interactive galleries, can refresh the user experience on your site. These elements can make your portfolio more memorable and engaging.

  ### Feedback Loop

  Invite feedback on your work and website from peers and mentors. Implementing constructive feedback can improve your portfolio's effectiveness and demonstrate your commitment to excellence and continuous improvement.

  ### Diversify Your Content

  Show a range of projects and skills, including collaborative works, to display the breadth of your capabilities. This diversity can attract a wider array of clients interested in different aspects of your expertise.

  ### Stay Relevant with Trends

  Keep abreast of the latest trends in your industry and incorporate them into your work and portfolio presentation. This shows that you are forward-thinking and capable of adapting to change.

  By employing these strategies, you can ensure that your portfolio remains an accurate, engaging representation of your professional journey and capabilities. Regular updates and a proactive approach to showcasing your achievements can significantly enhance your portfolio's appeal, making it a powerful tool for attracting new opportunities and clients.

  ## Conclusion

  When it comes to crafting a standout personal portfolio page, remember that simplicity and showcasing your best work are key. By following the step-by-step guide outlined in this blog, you can create a compelling portfolio that effectively highlights your skills and talents.

  Start by organizing your projects in a clean and visually appealing layout. Use high-quality images and concise descriptions to provide visitors with a clear understanding of your work. Remember, your portfolio is a reflection of you and your brand.

  Don't forget to include a call to action that prompts visitors to take the next step, whether it's contacting you for collaborations or viewing more of your work. Engage your audience with a clear message and encourage them to explore further. Ready to elevate your online presence? Take the first step and build that portfolio.

  ### ****Resources**

  Kickstart your journey in technology with our specialized program that dives into Artificial Intelligence (AI) and machine learning. This initiative is crafted to build your programming expertise, supplemented with dedicated mentorship and career guidance to pave your way in the tech industry.

  ### Propel your career forward with this curated list of resources, focused on tangible outcomes:

  * [How to Enter Gen AI in 2024:](https://downloads.tatevaslanyan.com/six-figure-data-science-ebook) This guide breaks down the essentials of emerging AI technologies and prepares you for future trends.
  * [Land Your Software Engineering Internship:](https://join.lunartech.ai/software-engineering-internship) This resource provides step-by-step instructions for finding and landing a valuable internship in software engineering, giving you a competitive edge.
  * [Machine Learning Fundamentals eBook:](https://join.lunartech.ai/machine-learning-fundamentals--3f64f) Begin your exploration of machine learning with this eBook, which provides a concise overview of its core principles and techniques.

  For access to these resources and detailed information about our program, visit [LunarTech's ](https://lunartech.ai/)website. Embark on your tech career path with the right tools and support from [LunarTech](https://lunartech.ai/).

  ### ****Connect with Me:**

  * [Follow me on LinkedIn for a ton of Free Resources in CS, ML and AI](https://ca.linkedin.com/in/vahe-aslanyan)
  * [Visit my Personal Website](https://vaheaslanyan.com/)
  * Subscribe to my [The Data Science and AI Newsletter](https://tatevaslanyan.substack.com/)

  ### ****About the Author**

  I'm Vahe Aslanyan, specializing in the world of computer science, data science, and artificial intelligence. Explore my work at [vaheaslanyan.com](https://www.vaheaslanyan.com/). My expertise encompasses robust full-stack development and the strategic enhancement of AI products, with a focus on inventive problem-solving.

  [Vahe Aslanyan - Crafting Code, Shaping FuturesDive into Vahe Aslanyan’s digital world, where each endeavor offers new insights and every hurdle paves the way for growth.Crafting Code, Shaping Futures![Ntarl3h](https://proxy-prod.omnivore-image-cache.app/896x896,sG8IE-beCANKZXtyz_6GNcDfHh1eMevmJCfWKnqBm7_M/https://i.imgur.com/Ntarl3h.png)](https://www.vaheaslanyan.com/)

  I've consistently aimed to revolutionize technical education, striving to set a new, universal standard. As we wrap up this handbook, I want to say a big thank you for spending time with it. Sharing what I've learned has made me think more about my work. I hope what we've gone through together helps you move forward in tech.

  ---

  ---

   Learn to code for free. freeCodeCamp's open source curriculum has helped more than 40,000 people get jobs as developers. [Get started](https://www.freecodecamp.org/learn/)

raw_content:
  ---
  id: 63939b9e-e8f0-11ee-8320-63f36465eb6d
  title: |
    How to Create a Great Personal Portfolio Page – a Handbook for Beginners
  status: ARCHIVED
  tags:
    - read-later
    - RSS
  date_added: 2024-03-22 18:40:39
  url_omnivore: |
    https://omnivore.app/me/how-to-create-a-great-personal-portfolio-page-a-handbook-for-beg-18e6a73ea11
  url_original: |
    https://www.freecodecamp.org/news/how-to-create-a-great-personal-portfolio-page-a-step-by-step-guide/
  ---

  # How to Create a Great Personal Portfolio Page – a Handbook for Beginners

  ## Highlights

  ### Tips for Choosing the Perfect Domain Name

  * **Keep It Simple**: Opt for a domain name that is easy to remember and type.
  * **Include Keywords**: If possible, incorporate relevant keywords related to your industry or profession.
  * **Consider Your Niche**: Ensure your domain name aligns with the type of work showcased on your portfolio.
  * **Avoid Numbers and Hyphens**: Numbers and hyphens can be confusing and are often forgotten when typing a domain name.
  * **Check Availability**: Verify that the domain name you want is not already taken and is available for purchase. You can use [namecheap.com](https://www.namecheap.com/), [godaddy.com](https://www.godaddy.com/nl-nl) and many other online hosting websites. 

  [source](https://omnivore.app/me/how-to-create-a-great-personal-portfolio-page-a-handbook-for-beg-18e6a73ea11#1c688bb9-5b3e-41e4-8529-5902e0533fb7) 

  ---

  **Research Design Options**: Explore various design templates on platforms like Envato, ThemeForest, and Figma. These resources offer a wide array of designs suited to different professions, aiding in finding one that matches your vision. 

  [source](https://omnivore.app/me/how-to-create-a-great-personal-portfolio-page-a-handbook-for-beg-18e6a73ea11#596a42c0-8fce-4a08-9a50-1278c860e160) 

  ---

  Showcase any recognitions, certifications, or contributions to open-source projects. 

  [source](https://omnivore.app/me/how-to-create-a-great-personal-portfolio-page-a-handbook-for-beg-18e6a73ea11#478f7449-f350-4fab-8b67-cc05ad413267) 

  ---

  #### For Developers Seeking Employment

  If your primary goal is to attract potential employers, your portfolio needs to emphasize your technical skills, projects, and the professional value you bring. Here's how to tailor your site:

  * **Highlight Relevant Projects**: Showcase a selection of projects that are most relevant to the types of roles you're seeking. Include detailed case studies that walk through your problem-solving process, technologies used, and the outcomes achieved.
  * **Professional Narrative**: Use the "About Me" section to narrate your professional journey, emphasizing experiences and skills that align with your career aspirations. Mention any collaborative projects to demonstrate teamwork and communication skills.
  * **Testimonials from Colleagues**: Including endorsements from past colleagues, supervisors, or collaborators can add credibility and provide insight into your working style and contributions to a team.
  * **Technical Blog**: If you maintain a blog, focus on posts that highlight your expertise, insights into technology trends, and solutions to common problems in your field. This not only showcases your knowledge but also your ability to communicate complex ideas clearly. 

  [source](https://omnivore.app/me/how-to-create-a-great-personal-portfolio-page-a-handbook-for-beg-18e6a73ea11#3549ac1f-0104-40fd-8981-85cce3d04184) 

  ---

  The tone of your brand voice can vary depending on the context and the platform, but it should always reflect your brand's personality. 

  Whether it's confident and authoritative, friendly and conversational, or inspirational and aspirational, the tone should be consistent across all channels to maintain brand recognition and loyalty. 

  [source](https://omnivore.app/me/how-to-create-a-great-personal-portfolio-page-a-handbook-for-beg-18e6a73ea11#12b06926-57b3-41b5-9e1b-492f82c163fe) 

  ---

  Incorporate feedback from previous clients or colleagues to highlight your skills and professionalism. Testimonials lend authenticity and foster trust in your portfolio. 

  [source](https://omnivore.app/me/how-to-create-a-great-personal-portfolio-page-a-handbook-for-beg-18e6a73ea11#75d7bf6c-2a2a-44fb-a958-0c595a4a77ca) 

  ---

  Showcase your standout projects with comprehensive case studies. These narratives offer a deep dive into your creative process, problem-solving abilities, and the impact of your work. 

  [source](https://omnivore.app/me/how-to-create-a-great-personal-portfolio-page-a-handbook-for-beg-18e6a73ea11#efeda449-8965-46a0-8884-c9fadb8f0f07) 

  ---

  A blog section can serve as a platform for sharing your expertise, industry insights, or personal reflections. It reflects your dedication to your craft and ensures your site remains vibrant with new content. 

  [source](https://omnivore.app/me/how-to-create-a-great-personal-portfolio-page-a-handbook-for-beg-18e6a73ea11#c2a0e123-fd91-4e08-8509-55877613c299) 

  ---

  Offer a look into your creative journey through behind-the-scenes content like sketches, mood boards, or early designs. This transparency into your process can fascinate visitors and add depth to your work presentation. 

  [source](https://omnivore.app/me/how-to-create-a-great-personal-portfolio-page-a-handbook-for-beg-18e6a73ea11#65a1c40b-4c6b-4d07-b581-5e8335064bf4) 

  ---

  Highlight any accolades or recognitions you've received. Showcasing your achievements adds prestige to your portfolio and distinguishes you from your peers. 

  [source](https://omnivore.app/me/how-to-create-a-great-personal-portfolio-page-a-handbook-for-beg-18e6a73ea11#9a595a7c-8027-497f-89e5-f02166883e35) 

  ---

  For those whose work involves data, adding infographics or visualizations can compellingly present complex information. This not only showcases your ability to simplify intricate data but also your creative approach to visual communication. 

  [source](https://omnivore.app/me/how-to-create-a-great-personal-portfolio-page-a-handbook-for-beg-18e6a73ea11#f421ea17-4988-4bf0-a817-18d653f3beae) 

  ---

  ### Home Page: The Gateway to Your Professional Universe

  The home page serves as the initial welcome to your professional domain, providing a brief yet impactful overview of your identity and offerings. This first impression is vital, setting the tone for the visitor's experience on your site. 

  ![image-101](https://proxy-prod.omnivore-image-cache.app/1468x917,s3q8eO-xelF9-X-CYPdsvtfxGJOtzIMna5j9kcAB158w/https://www.freecodecamp.org/news/content/images/2024/03/image-101.png)

  My home page

  Your home page should emphasize:

  * **Engaging Introduction**: Introduce yourself with a quick mention of your professional designation and expertise.
  * **Visual Elements**: Incorporate captivating visuals or a portfolio reel to immediately draw attention to your work.
  * **Navigation Tips**: Direct visitors smoothly to different site sections with clear navigation aids. 

  [source](https://omnivore.app/me/how-to-create-a-great-personal-portfolio-page-a-handbook-for-beg-18e6a73ea11#4b08a99c-131f-4d34-b7ff-fb992c2851ad) 

  ---

  ### Portfolio Section: A Display of Your Expertise

  This core section is where you showcase your finest work. Organizing this area thoughtfully ensures that visitors can easily navigate through your projects. You should include:

  * **Organization by Category**: Group projects by theme, type, or sector for straightforward browsing.

  ![image-93](https://proxy-prod.omnivore-image-cache.app/1430x932,sm8Xc0-1Mt_0zU4bra5QIqpbB1CbHie3vIJsCbQ9N8lM/https://www.freecodecamp.org/news/content/images/2024/03/image-93.png)

  Projects organized by category on my personal portfolio page - Python, Statistics, Machine Learning, and NLP

  * **Project Summaries**: Provide a concise description of each project, outlining your role, the methodology, and the results.

  ![image-94](https://proxy-prod.omnivore-image-cache.app/1450x753,sXU_bGfvLDSeR86OFH8ha87Onokvo-YgWxyu1rZNLSNs/https://www.freecodecamp.org/news/content/images/2024/03/image-94.png)

  Example project summary on my portfolio

  * **High-Resolution Media**: Present your work with high-quality images or videos to fully convey its quality.

  ![image-95](https://proxy-prod.omnivore-image-cache.app/1458x914,szuRqwh4X_p_Lf9lNnlC1qEGrhGM1sK0chdZiwfpyXH8/https://www.freecodecamp.org/news/content/images/2024/03/image-95.png) 

  [source](https://omnivore.app/me/how-to-create-a-great-personal-portfolio-page-a-handbook-for-beg-18e6a73ea11#50fc8ae9-03ea-4158-b0e9-9ab7baa63555) 

  ---

  ### About Me Page: Your Professional Narrative

  This page allows you to forge a deeper connection with your audience by sharing your story, ambitions, and what makes you unique. It should cover:

  * **Professional Background**: Share your career path, educational achievements, and significant milestones.

  ![image-97](https://proxy-prod.omnivore-image-cache.app/1452x773,sjB_AuG9eMME61y1f5xTWPeW40BYAPN4EyG3fNsX_q0w/https://www.freecodecamp.org/news/content/images/2024/03/image-97.png)

  Some of my personal milestones

  * **Skills and Expertise**: Spotlight the abilities that distinguish you in your field.

  ![image-96](https://proxy-prod.omnivore-image-cache.app/1449x699,ssJDqK7Fbp1W9PwyzQjAo8yqz-014s0RG7ekDqwMo7uo/https://www.freecodecamp.org/news/content/images/2024/03/image-96.png)

  A page on my portfolio showing my "digital DNA" - the skills I'd like to showcase

  * **Personal Insights**: Offering a peek into your personal hobbies or interests can make you more approachable and relatable. 

  [source](https://omnivore.app/me/how-to-create-a-great-personal-portfolio-page-a-handbook-for-beg-18e6a73ea11#26922385-6eda-4cc1-9885-70a965d69303) 

  ---

  ### Contact Information: Simplifying Communication

  For potential collaborations, it’s essential to make reaching out as simple as possible. Your contact page should include:

  * **Various Contact Methods**: Provide a contact form, email, and possibly a phone number for easy communication.

  ![image-99](https://proxy-prod.omnivore-image-cache.app/1451x855,sP3g3ley_Uhu0duZbckP0jOEC35DJl1rw8IBcEEMfn4k/https://www.freecodecamp.org/news/content/images/2024/03/image-99.png)

  My contact information page on my personal portfolio site

  * **Social Media Profiles**: Guide visitors to your professional social media pages.
  * **Geographic Details**: If applicable, mention your location or time zone. 

  [source](https://omnivore.app/me/how-to-create-a-great-personal-portfolio-page-a-handbook-for-beg-18e6a73ea11#82e27144-7f5b-4906-ba60-cd5b785a3797) 

  ---

  ### Do's for a Captivating Homepage

  * **Be Concise**: Ensure your message is clear and to the point.
  * **Use Endorsement Logos**: Incorporate logos of companies you've appeared on to build trust.
  * **Display Technical Stack Logos**: Show the technologies you're proficient in using their logos.
  * **Showcase a Case Study Gallery**: Highlight your best work in an easily navigable gallery.
  * **Include a Dynamic Header**: Use an engaging hero section to make a strong first impression.
  * **Highlight Recent Work**: Give visitors a glimpse of your latest projects to show you're active and relevant.
  * **Use Testimonials Strategically**: Place client testimonials where they'll have the most impact, showcasing your reliability and skill.

  ### Don'ts for Your Homepage

  * **Avoid Random Placement**: Structure your content logically – don't place information haphazardly.
  * **Steer Clear of Long Paragraphs**: Keep your homepage breezy and easy to read with short, impactful statements.
  * **Don't Overwhelm with Content**: Your homepage isn't the place to squeeze in every detail of your portfolio.
  * **Avoid Image Neglect**: Images are crucial for visual engagement, so don't omit them.
  * **Resist Clutter**: Keep the design clean and focused to improve user experience.
  * **Avoid Technical Jargon**: Use language that's accessible to all visitors, not just industry insiders.
  * **Skip the Hard Sell**: Present your skills and achievements without being overly aggressive. 

  [source](https://omnivore.app/me/how-to-create-a-great-personal-portfolio-page-a-handbook-for-beg-18e6a73ea11#111959c1-8fee-47cb-a0e6-9088462bf6ac) 

  ---

  ## Original

  ![How to Create a Great Personal Portfolio Page – a Handbook for Beginners](https://proxy-prod.omnivore-image-cache.app/1280x720,sEagJT3mw15_lRdem2144h-RqnDE5JTJZSZ2rPP_Logg/https://www.freecodecamp.org/news/content/images/size/w2000/2024/03/How-to-Create-a-Great-Personal-Portfolio-Page-Cover--1-.png) 

  As a developer, you'll want to create a digital space that mirrors your unique skills and persona. And a stellar personal portfolio website can help you make your mark in the digital universe. 

  Imagine a space that not only highlights your finest achievements but also attracts potential clients and makes a memorable impact on every visitor.

  This guide will help you navigate creating an outstanding personal portfolio. We'll dissect the process from choosing an eye-catching layout to crafting content that tells your story. It'll all be aimed at building a page that resonates with who you are and the value you bring. 

  But the journey doesn't end here. Diving deeper, you'll learn more strategies and insights to help you elevate your portfolio beyond the ordinary. Are you ready? Let's step into the realm of crafting a portfolio that's not just seen but remembered.

  ## Table Of Contents

  1. [The Importance of a Personal Portfolio Website](#why-is-a-personal-portfolio-website-important)
  2. [How to Choose the Right Domain Name](#how-to-choose-the-right-domain-name)
  3. [How to Design Your Portfolio Site](#how-to-design-your-portfolio-site)
  4. [How to Pick the Right Tools](#how-to-pick-the-right-tools)
  5. [How to Showcase Your Best Work](#how-to-showcase-your-best-work)
  6. [How to Craft Your Brand Story and Unique Voice](#how-to-craft-your-brand-story-and-unique-voice)
  7. [How to Add Additional Content](#how-to-add-additional-content)
  8. [Essential Pages for Your Portfolio](#what-pages-you-need-in-your-portfolio)
  9. [How to Organize the Home Page](#how-to-organize-the-home-page)
  10. [How to Keep Your Portfolio Fresh](#how-to-keep-your-portfolio-fresh)
  11. [Conclusion](#11-conclusion)

  ### Short Summary

  1. Building a great personal portfolio page is crucial for showcasing your skills and personality in the digital realm.
  2. This step-by-step guide will help you overcome common challenges like starting, structuring, and designing your portfolio effectively.
  3. Learn how to choose the right domain, design your site, showcase your best work, and craft a unique voice to make a lasting impression.
  4. Discover the essential elements, additional content options, social media strategies, and SEO techniques to maximize your portfolio's impact.

  ![image-56](https://proxy-prod.omnivore-image-cache.app/1792x1024,sirF1uD9HJwN1iCPcQ7O2LA81HvSafx6_saIKQbZeB2A/https://www.freecodecamp.org/news/content/images/2024/03/image-56.png)

  Set against Doha's futuristic skyline, this image symbolizes the critical role of a personal portfolio in distinguishing yourself in the tech landscape - [lunartech.ai](https://lunartech.ai/)

  ## Why is a Personal Portfolio Website Important?

  Your portfolio, much like a shop's facade or what you wear, communicates your personal style and standards, offering a reflection of your professional identity. 

  The structure of your website, the projects you spotlight, and the narrative you weave about your journey play a pivotal role in this representation.

  While some have navigated their way to impressive careers without a digital footprint, these days it's become more and more important to have a solid personal portfolio. This is particularly true for tech professionals—ranging from software engineers to data scientists and AI experts.

  This digital domain gives you a place to show what sets you apart, embodying the core of your unique value proposition. Without this platform, you leave your professional narrative to chance, permitting others to assemble a fragmented view of your persona.

  Not having an online personal portfolio could well dictate whether you secure your dream position and successfully establish a strong personal brand, versus fading into the background. In the digital-first era we navigate, a personal portfolio transcends mere benefit—it emerges as an [essential instrument for personal branding](https://www.freecodecamp.org/news/personal-branding-for-devs-handbook/).

  ### How a Personal Portfolio Helps You

  For engineers seeking to carve out a distinctive identity in the tech landscape, the quest to showcase what makes you unique is paramount. While GitHub serves as a testament to your technical abilities, it often speaks a language too specialized for a broader audience.

  Similarly, YouTube offers a platform for personality-driven exposure, but the prospect of speaking to a camera for hours may not align with your preferred mode of expression. Herein lies the unparalleled value of a personal portfolio page: it stands as one of the most effective mediums to represent yourself.

  When you're creating your personal portfolio, it's crucial to demonstrate your expertise and establish your credibility. This demands clear and concise communication, directly engaging potential clients or employers, showcasing your skills, and fostering an online presence.

  These are not mere suggestions but critical measures for contemporary professionals. By crafting a portfolio that not only displays your work but propels your career forward, you assert a distinctive presence in the competitive realm of technology, ensuring your unique contributions are both seen and valued.

  ![image-58](https://proxy-prod.omnivore-image-cache.app/1792x1024,sqocV4piUnzrNwSgMN56QSau9hrq2wUy5oIlqB9zRld8/https://www.freecodecamp.org/news/content/images/2024/03/image-58.png)

  Choose the Right Domain Name - [lunartech.ai](https://lunartech.ai/)

  ## How to Choose the Right Domain Name

  When setting up your personal portfolio website, selecting the perfect domain name is a crucial decision that can impact your online presence significantly. 

  Your domain name is essentially your online identity, so it's important to choose wisely to make a lasting impression on your visitors and potential clients. 

  ![image-73](https://proxy-prod.omnivore-image-cache.app/1061x567,sl3UFOlIXKcvUZ7OjhW3oRj-0CURFTCb7FRTRUnM_1Z0/https://www.freecodecamp.org/news/content/images/2024/03/image-73.png)

  Choosing my domain name - vaheaslanyan.com

  For my personal portfolio page, I like to keep it simple: firstname+lastname.com or just firstname.com. So for me it is: [vaheaslanyan.com](http://vaheaslanyan.com/). (My firstname + lastname.com) 

  ### Other examples are

  1. **JohnDoe.com**: This is the most direct approach, using both your first and last name. It's professional and clear for anyone looking for your work.
  2. **AlexJohnson.dev**: For those in the tech industry, using a domain extension like .dev can highlight your area of expertise.
  3. **MichaelRoberts.design**: Similar to the .dev extension, using .design can be a great choice for professionals in fields like graphic design, UX/UI, or related areas.
  4. **Elena.co**: If your first name is unique enough, or if you prefer a shorter URL, you might use just your first name with a less common extension like .co.
  5. **MaxCreates.com**: If "Max" is your nickname and you're in a creative industry, this domain clearly indicates what you do and who you are.

  ![image-74](https://proxy-prod.omnivore-image-cache.app/602x805,sbI0AY6T3-r85iG8q_2UT_nAooExTnYqNJ2Sbc4VcLAw/https://www.freecodecamp.org/news/content/images/2024/03/image-74.png)

  My name coming up in Google search results

  ### Importance of a Domain Name

  Your domain name is the first thing users see when they land on your website, so it should be memorable, easy to spell, and reflect your brand identity. 

  Here's why it's critical:

  * **It Reflects Your Brand**: A well-chosen domain name can effectively convey your unique voice and what you have to offer. If it is your project portfolio website, then something that reflects your name or nickname is a great way to accomplish this.
  * **It Improves Search Engine Ranking**: Having relevant keywords in your domain name can positively impact your website's SEO.
  * **It Attracts Potential Clients**: A professional and catchy domain name can pique the interest of potential clients and make your website stand out.

  ### ==Tips for Choosing the Perfect Domain Name==

  * **==Keep It Simple==**==: Opt for a domain name that is easy to remember and type.==
  * **==Include Keywords==**==: If possible, incorporate relevant keywords related to your industry or profession.==
  * **==Consider Your Niche==**==: Ensure your domain name aligns with the type of work showcased on your portfolio.==
  * **==Avoid Numbers and Hyphens==**==: Numbers and hyphens can be confusing and are often forgotten when typing a domain name.==
  * **==Check Availability==**==: Verify that the domain name you want is not already taken and is available for purchase. You can use== ==[namecheap.com](https://www.namecheap.com/)====,== ==[godaddy.com](https://www.godaddy.com/nl-nl)== ==and many other online hosting websites.==

  ![image-59](https://proxy-prod.omnivore-image-cache.app/1792x1024,sfR_6mj13IOtCt_px7eQ9cyMOy6cmPFAyw1tv2zjEEoo/https://www.freecodecamp.org/news/content/images/2024/03/image-59.png)

  Here's a visual representation capturing a web designer in their workspace -[ lunartech.ai](https://lunartech.ai/)

  ## How to Design Your Portfolio Site

  When selecting a design for your portfolio website, it’s important that the theme reflects your professional brand. For example, lawyers typically want a theme that suggests reliability and authority, while educators might choose a Learning Management System (LMS) to share courses. 

  To find the right design, websites like Envato, ThemeForest, and Figma templates are useful. It's helpful to plan what you want on each page before deciding on a design.

  Here's how to approach this process:

  **Understand Your Brand**: First, define what your brand represents and the impression you want to make. Whether your style is modern and sleek or more traditional and professional, your website's design should align with this.

  ![image-75](https://proxy-prod.omnivore-image-cache.app/1494x929,sVEfTnugco6jTctlcH9RYkpQBvkMZr1z8lvzYcqVuc5Y/https://www.freecodecamp.org/news/content/images/2024/03/image-75.png)

  My personal portfolio homepage

  **==Research Design Options==**==: Explore various design templates on platforms like Envato, ThemeForest, and Figma. These resources offer a wide array of designs suited to different professions, aiding in finding one that matches your vision.==

  ![image-76](https://proxy-prod.omnivore-image-cache.app/1447x936,swhVjfoKHTKGAgTJRzlqYXarOSU1D-L8A-JXHMerqNx0/https://www.freecodecamp.org/news/content/images/2024/03/image-76.png)

  Different site design options 

  **Functionality and Features Needs**: Consider the features essential for showcasing your work effectively. For a digital artist, high-resolution galleries might be key, while a developer might need support for embedding code snippets.

  ![image-77](https://proxy-prod.omnivore-image-cache.app/1453x933,sC8fYnZdJRArqnPQZPmXH4hE9oJAmLwqIWJN7MntBRr8/https://www.freecodecamp.org/news/content/images/2024/03/image-77.png)

  Press releases on my site

  **Sketch Your Layouts**: Draft a basic layout for each page of your website before committing to a design. This helps visualize how the design will accommodate your content.

  ![image-78](https://proxy-prod.omnivore-image-cache.app/1200x609,srgwgSJ2N1Bq-StTTOTB0iw_aeB6_giOrj3O7o3goMHw/https://www.freecodecamp.org/news/content/images/2024/03/image-78.png)

  Example wireframes for creating a personal portfolio

  **Prioritize Simplicity and User Experience**: A design that's easy to navigate and not overly complicated will keep the focus on your portfolio and provide a better experience for your visitors.

  ![image-79](https://proxy-prod.omnivore-image-cache.app/1600x1200,sKQXUVvTtUXswOhIO154SoPtTfdgu0_hjcaJFN3_p5Vw/https://www.freecodecamp.org/news/content/images/2024/03/image-79.png)

  An example of a simple website design

  **Ensure Compatibility and Responsiveness**: The design should look good and function well across all devices and browsers. Responsiveness ensures your website adapts to any screen size.

  ![image-80](https://proxy-prod.omnivore-image-cache.app/720x720,sKehidmYdrmiZEqi3hGoq_2LWVaDCcS7lGjXLH33W4h4/https://www.freecodecamp.org/news/content/images/2024/03/image-80.png)

  An example of a responsive site that looks good on both desktop and mobile

  **Customization Flexibility**: Look for a design that offers customization. Being able to adjust elements like colors, fonts, and layout means you can tailor the design to fit your brand perfectly.

  ![image-81](https://proxy-prod.omnivore-image-cache.app/931x580,sqtUUH638YAty00HUCK0ZMMg65dyfkJH0-9u_6BMhD9s/https://www.freecodecamp.org/news/content/images/2024/03/image-81.png)

  An example of a flexible design

  **Test and Gather Feedback**: If possible, test the design with some of your content and ask for feedback from colleagues or mentors. Their insights can help you gauge the design's effectiveness in presenting your work.

  By carefully choosing a design that represents your professional brand, you create a strong foundation for a portfolio website that effectively showcases your skills and communicates your unique value to visitors.

  ![image-60](https://proxy-prod.omnivore-image-cache.app/1792x1024,swSuSeeO6sFLuL0KUopfd3PWWkfoDIxIPFQOM0BWS-o4/https://www.freecodecamp.org/news/content/images/2024/03/image-60.png)

  Here's the visual representation capturing a tech professional in their early morning coding session - [lunartech.ai](https://lunartech.ai/)

  Choosing the right tools to build your portfolio involves understanding your needs, evaluating available options, and selecting solutions that align with your skills and goals. 

  This chapter guides you through this process, from deciding between coding your own site vs using a no-code platform to selecting the perfect hosting provider.

  ### Understand Your Needs

  First, it's important to identify your field: are you in the tech industry, or are you in some other line of work?

  Your field of work significantly influences your choice of portfolio tools. Tech professionals might lean towards custom-coded sites to showcase their coding prowess, while those in non-tech fields may prefer no-code builders for their convenience and ease of use.

  Next, you'll want to evaluate your skills to decide how to actually create the site. Do you want to code your own portfolio, or choose a no-code solution? 

  Assess your skills honestly. If you're comfortable with coding, a custom-built site might be the best way to showcase your technical abilities. For those without coding skills or a desire to learn, no-code platforms offer a practical and efficient alternative.

  Then you'll want to set your website goals and objectives. Define what you want your portfolio to achieve. Are you looking to attract freelance clients, land a full-time job, or simply showcase your work? Your goals can influence the choice of platform, design, and content of your portfolio.

  ### Options for Tech Professionals

  Coding your own portfolio from scratch offers complete control over design and functionality, allowing you to create a unique and personalized online presence. It also showcases what you can do with code.

  #### Benefits of Custom Coding

  * Customization: Tailor every aspect of your site to fit your personal brand.
  * Skill Demonstration: Showcase your coding ability to potential employers or clients.

  #### Recommended Technologies and Frameworks

  * **HTML, CSS, and JavaScript Basics**: The foundation of web development, essential for any custom-built portfolio.
  * **Advanced Frameworks**: Utilize React, Angular, or Vue to create dynamic and responsive sites.

  #### Hosting Solutions for Coders

  * **GitHub Pages**: A free option for hosting simple, static sites.
  * **Netlify and Vercel**: Provide more flexibility and support for dynamic sites built with advanced frameworks.

  ### No-Code Solutions for Non-Tech Professionals

  No-code platforms have democratized web design, enabling anyone to create beautiful, functional websites without writing a single line of code.

  #### Comparing Popular No-Code Platforms

  * **WordPress**: Versatile and widely used, with extensive themes and plugins.
  * **Webflow**: Offers unparalleled customization and flexibility without requiring coding knowledge.
  * **Squarespace**: Known for its ease of use and stunning, design-forward templates.

  ### How to Choose the Right Hosting Option

  Your hosting provider impacts your site's loading speed, uptime, and overall user experience, making it a crucial factor in your portfolio's success.

  #### Some Common Hosting Providers

  * **Namecheap**: Offers affordable, reliable hosting with excellent customer support.
  * **Alternative Options**: Explore other reputable providers like Bluehost and SiteGround based on your specific needs.

  Choosing the right tools for your personal portfolio requires a thoughtful evaluation of your needs, skills, and goals. Whether through custom coding or no-code platforms, the perfect portfolio is within reach. 

  By carefully selecting the right tools and platforms, you can create a portfolio that not only showcases your work but also helps you achieve your career aspirations.

  ![image-61](https://proxy-prod.omnivore-image-cache.app/1792x1024,sVZBOvutqlAhsU-wpcRWTWpkxE14VIOnEr88JFQ8W9GE/https://www.freecodecamp.org/news/content/images/2024/03/image-61.png)

  Here's a visual representation capturing a software engineer as they organize their portfolio - [lunartech.ai](https://lunartech.ai/)

  ## How to Showcase Your Best Work

  When setting up your portfolio page, it's essential to showcase projects that reflect your current focus in software engineering, data science, AI, or whatever area of tech you call home. 

  Select projects that are recent and demonstrate your skills and interests in these areas, ensuring your portfolio aligns with the professional direction you're aiming for.

  ### Categorize Your Projects

  Divide your projects into categories like software development, data analysis, or artificial intelligence to help visitors navigate your portfolio more easily. 

  ![image-82](https://proxy-prod.omnivore-image-cache.app/1453x839,sAMWRM0laO9WYBvqBfoFmBPjjIy251OUc5Eq-nEJ5M_M/https://www.freecodecamp.org/news/content/images/2024/03/image-82.png)

  The project section on my personal portfolio site with clear sections for different topics

  This organization allows you to display a broad skill set, making it clear you're well-versed in multiple aspects of tech. It also helps visitors quickly find projects that align with their specific interests or needs.

  ### Provide Detailed Project Descriptions

  For each project, write a brief description that outlines the project's goals, your role in its development, and the technology used. Highlight any unique challenges you encountered and how you overcame them, showcasing your problem-solving skills. 

  ![image-86](https://proxy-prod.omnivore-image-cache.app/1458x911,se4tQkcZ3aNxiloifazgzTlnrPgsiYNSt8HP1J7nR25o/https://www.freecodecamp.org/news/content/images/2024/03/image-86.png)

  Example of some project descriptions listing the challenge, goal, technologies used, etc.

  These descriptions give context to your work and help visitors understand the depth of your technical expertise and creativity.

  ### Use High-Quality Visuals and Code Snippets

  Incorporate clear screenshots of your projects or UI designs, and consider including code snippets to illustrate the quality of your coding practices. 

  ![image-85](https://proxy-prod.omnivore-image-cache.app/1447x930,s92Q4n9P6JEJuKUbTee3KrF6_ykxjK7XlCudnNeI2wUg/https://www.freecodecamp.org/news/content/images/2024/03/image-85.png)

  A high quality visual

  Visuals help convey the complexity and functionality of your projects, while code snippets can give fellow tech professionals insight into your technical approach. Together, they provide a comprehensive view of your capabilities.

  ### Include Client or Collaborator Testimonials

  Testimonials from clients, colleagues, or collaborators can add credibility to your portfolio. Positive feedback on your technical skills, work ethic, and ability to deliver solutions can significantly enhance your professional image. 

  ![image-87](https://proxy-prod.omnivore-image-cache.app/1437x845,sjIIzA_Otixhxooev5nZyDOxbip2m0DnCtKFJ2pGeSac/https://www.freecodecamp.org/news/content/images/2024/03/image-87.png)

  Examples from my testimonials page

  These testimonials act as a form of social proof, validating your expertise in your field.

  ### Highlight Achievements and Contributions

  ==Showcase any recognitions, certifications, or contributions to open-source projects.== 

  For example, if you've received a "Developer of the Month" award from a well-known tech community, obtained a certification in Advanced Machine Learning from a reputable online platform, or contributed to open-source projects on GitHub like TensorFlow or Apache Spark, make sure these are prominently featured.

  ![image-88](https://proxy-prod.omnivore-image-cache.app/1457x614,sLU6Hmb1gTinmZu_DuI2adPm_Li_VQAxvn52T6dugVSg/https://www.freecodecamp.org/news/content/images/2024/03/image-88.png)

  Some of my own milestones throughout my career

  Highlighting such achievements, like winning a hackathon or being part of a team that developed a widely used software tool, showcases your commitment and active engagement in the tech community. 

  It also positions you as a dedicated and accomplished professional, underlining your contributions and achievements within the fields of software engineering, data science, and AI.

  ### Feature Interactive Demos

  Where possible, include interactive demos of your projects or links to live sites where visitors can see your work in action. This not only makes your portfolio more engaging but also lets visitors experience the usability and functionality of your creations firsthand. 

  Interactive demos can be particularly compelling for projects in AI and data science, where results and data visualizations play a crucial role.

  To effectively include interactive demos or links to live sites in your portfolio, consider these approaches:

  1. **Embed Project Videos**: Create short video demonstrations of your projects and embed them directly into your portfolio. These videos can guide viewers through the functionality and features of your creations, providing a dynamic way to showcase your work.
  2. **Use GitHub Pages**: For software engineering projects, deploy your web applications or tools on [GitHub Pages](https://pages.github.com/), providing a direct link in your portfolio. This free hosting service allows you to present live versions of your projects, making them accessible to anyone.
  3. **Interactive Data Visualization Tools**: For data science projects, utilize tools like [Tableau Public](https://public.tableau.com/app/discover) or [D3.js](https://d3js.org/) to create interactive visualizations of your data analyses. Embed these visualizations in your portfolio to let visitors interact with the data, understand your analytical skills, and appreciate the insights you've uncovered.
  4. **Host on Cloud Platforms**: Use cloud platforms like [Heroku](https://www.heroku.com/) or [Netlify](https://www.netlify.com/) to deploy your projects and include the live links in your portfolio. These platforms support a wide range of programming languages and frameworks, making them suitable for showcasing both frontend and backend projects.
  5. **Demo Notebooks for AI Models**: Share Jupyter notebooks via platforms like GitHub or NBViewer that demonstrate the workings of your AI models. These notebooks can include code, visualizations, and explanations, offering a comprehensive view of your project's development process and results.
  6. **Create an Interactive Portfolio Section**: Design a specific area of your portfolio dedicated to interactive demos. This section can include thumbnails or icons representing each project, which visitors can click on to explore the demo or live site.
  7. **Use Code Sandboxes**: For smaller projects or code snippets, use online code editors like [CodePen](https://codepen.io/) or [JSFiddle](https://jsfiddle.net/) to create live previews. These platforms allow you to write HTML, CSS, and JavaScript in the browser and share interactive versions of your work.

  By incorporating these methods, you can make your portfolio more engaging and provide potential employers or clients with a hands-on understanding of your projects' usability, functionality, and the innovative solutions you bring to the table in software engineering, data science, and AI.

  ### Regularly Update Your Portfolio

  Keep adding new projects and updating your portfolio to reflect your latest work and ongoing learning in the tech field. This demonstrates your commitment to staying current with technological advancements and your continuous professional development. An up-to-date portfolio shows you're actively involved in your field and passionate about your work.

  By tailoring your portfolio with these considerations in mind, you ensure it effectively showcases your expertise in software engineering, data science, and AI. This approach not only highlights your technical skills but also your adaptability and ongoing growth in these rapidly evolving fields.

  ![image-62](https://proxy-prod.omnivore-image-cache.app/1792x1024,seq-58wdwa5SAC8TnbGwAEFyrg2GSDcIIB9zzjPKMZ5k/https://www.freecodecamp.org/news/content/images/2024/03/image-62.png)

  A marketing team brainstorming session - [lunartech.ai](https://lunartech.ai/)

  ## **How to Craft Your Brand Story and Unique Voice**

  Crafting your brand's voice is a vital aspect of the brand's identity, serving as the embodiment of its personality across all forms of communication. A well-defined brand voice not only distinguishes a brand in a crowded market but also establishes a consistent and relatable presence that resonates with its target audience. 

  This chapter delves into the intricate process of sculpting your brand's unique voice and narrative, ensuring it aligns with its core values, mission, and the expectations of its audience.

  ### **Understanding Your Brand's Core**

  The journey to crafting your brand's voice begins with a deep dive into its essence. This involves clarifying your brand's mission, values, and the unique proposition it offers to its audience. 

  A brand voice that is in harmony with these core aspects will not only be authentic but also compelling to your target audience.

  ### **Identify Your Audience**

  Understanding and identifying your target audience as a developer is pivotal to creating a personal portfolio website that resonates with the right people, whether they are potential employers, clients, students for your courses, or collaborators. Here's how to refine your approach based on who you're speaking to most often:

  #### For Educators and Course Creators

  If analytics or feedback suggests that a significant portion of your visitors (like the 90% in the example) are potential students interested in your courses, your portfolio should position you as a subject matter expert and a capable educator. Here's how:

  * **Showcase Educational Content**: Highlight courses you've created, workshops you've conducted, and any educational materials you offer. Use clear, engaging descriptions and include student testimonials to underscore the value of your courses.
  * **Demonstrate Expertise**: Include a detailed "About Me" section that outlines your credentials, experience, and any awards or recognitions you've received in your field. This helps build trust and establish your authority.
  * **Provide Free Resources**: Offering free tutorials, blog posts, or downloadable resources can be a great way to showcase your knowledge and teaching style, encouraging visitors to engage with your paid courses.
  * **Engage with Interactive Demos**: Use interactive elements or demos related to your courses to engage visitors and give them a taste of what you offer, making your site and courses more memorable.

  #### ==For Developers Seeking Employment==

  ==If your primary goal is to attract potential employers, your portfolio needs to emphasize your technical skills, projects, and the professional value you bring. Here's how to tailor your site:==

  * **==Highlight Relevant Projects==**==: Showcase a selection of projects that are most relevant to the types of roles you're seeking. Include detailed case studies that walk through your problem-solving process, technologies used, and the outcomes achieved.==
  * **==Professional Narrative==**==: Use the "About Me" section to narrate your professional journey, emphasizing experiences and skills that align with your career aspirations. Mention any collaborative projects to demonstrate teamwork and communication skills.==
  * **==Testimonials from Colleagues==**==: Including endorsements from past colleagues, supervisors, or collaborators can add credibility and provide insight into your working style and contributions to a team.==
  * **==Technical Blog==**==: If you maintain a blog, focus on posts that highlight your expertise, insights into technology trends, and solutions to common problems in your field. This not only showcases your knowledge but also your ability to communicate complex ideas clearly.==

  ### General Tips for Identifying Your Audience

  * **Survey Your Visitors**: Simple surveys or feedback forms on your website can provide direct insights into who your visitors are and what they're looking for.
  * **Analyze Website Analytics**: Use tools like Google Analytics to understand the demographics, interests, and behavior of your site's visitors. Look for patterns in the pages visited, the content engaged with, and the referral sources.
  * **Social Media Insights**: If you use social media to share your work or insights, platforms like Twitter, LinkedIn, and Instagram provide analytics that can help you understand your followers' profiles and preferences.
  * **Competitor Analysis**: Look at the portfolios of peers in your field. Notice who their target audience seems to be and how they engage with them. This can offer clues about your own audience.

  Identifying and understanding your target audience allows you to craft a portfolio that speaks directly to their needs and interests. Whether you're teaching, seeking employment, or offering freelance services, a focused approach ensures that your portfolio resonates with the right people, making it a powerful tool in achieving your professional goals.

  ### **Craft Your Brand Narrative**

  Once you have a clear understanding of your brand's core and its audience, the next step is to weave your brand narrative. 

  This narrative should tell the story of your brand—where it comes from, what it stands for, and where it is headed. 

  The narrative becomes the foundation upon which your brand voice is built, ensuring that every message you convey is coherent and aligned with your brand's story.

  ### **Be Aware of the Tone of Your Voice**

  ==The tone of your brand voice can vary depending on the context and the platform, but it should always reflect your brand's personality.== 

  ==Whether it's confident and authoritative, friendly and conversational, or inspirational and aspirational, the tone should be consistent across all channels to maintain brand recognition and loyalty.==

  ### **Consistency Is Key**

  Maintaining consistency in your brand voice across all platforms and touchpoints is crucial. This consistency helps in building trust and credibility with your audience. It ensures that no matter where or how your audience encounters your brand, they receive the same experience and message.

  ### **Evolve Your Voice**

  While consistency is essential, it's also important to allow your brand voice to evolve with your audience and the market. Stay open to feedback and be willing to adjust your voice as needed to ensure it remains relevant and engaging to your audience.

  Crafting your brand story and unique voice is not a one-time effort but an ongoing process of refinement and evolution. 

  By staying true to your brand's core, understanding your audience, and being consistent yet flexible in your approach, you can create a brand voice that not only defines your brand's identity but also builds lasting connections with your audience.

  ![image-63](https://proxy-prod.omnivore-image-cache.app/1792x1024,s91WPC2v95W5Cj4TyTmYG-OLTGGjNWWxEaYqtSH-T0t0/https://www.freecodecamp.org/news/content/images/2024/03/image-63.png)

  A web designer enhancing their portfolio website with a variety of content to showcase their capabilities - [lunartech.ai](https://lunartech.ai/)

  ## How to Add Additional Content

  Enhancing your personal portfolio website with a variety of content not only enriches the visitor's experience but also showcases the breadth of your capabilities. Here are some key additions that can transform your site:

  ### Client Testimonials and Peer Reviews

  ==Incorporate feedback from previous clients or colleagues to highlight your skills and professionalism. Testimonials lend authenticity and foster trust in your portfolio.== 

  **Example:** a section titled "What People Are Saying" can feature a carousel of quotes from past clients, such as: "Alex transformed our brand's vision into reality with exceptional design and attention to detail. Working with them was a game-changer!" – Jamie, Brand Manager 

  ### Detailed Case Studies

  ==Showcase your standout projects with comprehensive case studies. These narratives offer a deep dive into your creative process, problem-solving abilities, and the impact of your work.== 

  **Example:** a page dedicated to a rebranding project for a local café, including the challenge ("Revitalizing a beloved local brand"), the process (from initial sketches to final design choices), and the impact (increased customer engagement and sales).

  ### Blog Insights

  ==A blog section can serve as a platform for sharing your expertise, industry insights, or personal reflections. It reflects your dedication to your craft and ensures your site remains vibrant with new content.== 

  **Example:** a series of posts under "Design Insights," with entries like "The Future of Web Design: Trends to Watch" or "My Creative Process: From Concept to Completion," providing readers with valuable knowledge and a peek into your creative world.

  ### Behind-the-Scenes Glimpses

  ==Offer a look into your creative journey through behind-the-scenes content like sketches, mood boards, or early designs. This transparency into your process can fascinate visitors and add depth to your work presentation.== 

  **Example:** a gallery called "The Making of a Logo," featuring early sketches, revisions, and commentary on the thought process behind each stage, culminating in the final design.

  ### Engaging Interactive Elements

  Incorporate dynamic features such as sliders, animations, or interactive galleries. These elements can make your portfolio more engaging and leave a lasting impression on visitors. 

  **Example:** an interactive gallery for a photography portfolio, where visitors can filter images by theme or color. Hovering over an image reveals the project name and details, while clicking enlarges the photo with a detailed caption. 

  ### Awards and Honors

  ==Highlight any accolades or recognitions you've received. Showcasing your achievements adds prestige to your portfolio and distinguishes you from your peers.== 

  **Example:** a "Recognition" section displaying badges or trophies from design competitions, accompanied by a brief description of the award and the project that won it, such as "Winner of the 2023 Design Innovation Award for the Eco-Friendly Packaging Series."

  ### Video Demonstrations

  Embedding video content, whether project walkthroughs or client feedback, can provide an immersive experience. Videos add a dynamic layer to your presentation, making your work more relatable and memorable. 

  **Example:** a video walkthrough of a mobile app design process, starting from wireframes to the finished product, with voiceover explaining design choices, challenges overcome, and user feedback incorporated into the final version.

  ### Infographics and Data Visualizations

  ==For those whose work involves data, adding infographics or visualizations can compellingly present complex information. This not only showcases your ability to simplify intricate data but also your creative approach to visual communication.== 

  **Example:** an infographic titled "The Impact of Good Design on User Engagement," showcasing statistics on user retention, satisfaction, and conversion rates before and after a website redesign, highlighting your ability to drive results through design.

  Diversifying the content on your personal portfolio website with additions like testimonials, in-depth case studies, and interactive elements enriches your online presence. Such enhancements not only amplify the appeal and credibility of your portfolio but also demonstrate your comprehensive skill set and creativity.

  ![image-65](https://proxy-prod.omnivore-image-cache.app/1792x1024,suJhldaH1LyVXvrFJIdMr3n4PcCA7-s3JhSwVkRUhtWc/https://www.freecodecamp.org/news/content/images/2024/03/image-65.png)

  A web developer planning for personal portfolio website - [lunartech.ai](https://lunartech.ai/)

  ## What Pages You Need in Your Portfolio

  To make your personal portfolio website truly unforgettable, paying close attention to its structure and content is paramount. 

  The goal is to showcase not just your work and abilities, but to establish a holistic online platform that mirrors your professional identity. Integrating specific essential pages is critical for a detailed presentation of your competencies to prospective employers or clients. 

  Here’s a detailed guide on the essential pages that are fundamental to a standout personal portfolio:

  ### ==Home Page: The Gateway to Your Professional Universe==

  ==The home page serves as the initial welcome to your professional domain, providing a brief yet impactful overview of your identity and offerings. This first impression is vital, setting the tone for the visitor's experience on your site.== 

  ![image-101](https://proxy-prod.omnivore-image-cache.app/1468x917,s3q8eO-xelF9-X-CYPdsvtfxGJOtzIMna5j9kcAB158w/https://www.freecodecamp.org/news/content/images/2024/03/image-101.png)

  ==My home page==

  ==Your home page should emphasize:==

  * **==Engaging Introduction==**==: Introduce yourself with a quick mention of your professional designation and expertise.==
  * **==Visual Elements==**==: Incorporate captivating visuals or a portfolio reel to immediately draw attention to your work.==
  * **==Navigation Tips==**==: Direct visitors smoothly to different site sections with clear navigation aids.==

  ### ==Portfolio Section: A Display of Your Expertise==

  ==This core section is where you showcase your finest work. Organizing this area thoughtfully ensures that visitors can easily navigate through your projects. You should include:==

  * **==Organization by Category==**==: Group projects by theme, type, or sector for straightforward browsing.==

  ![image-93](https://proxy-prod.omnivore-image-cache.app/1430x932,sm8Xc0-1Mt_0zU4bra5QIqpbB1CbHie3vIJsCbQ9N8lM/https://www.freecodecamp.org/news/content/images/2024/03/image-93.png)

  ==Projects organized by category on my personal portfolio page - Python, Statistics, Machine Learning, and NLP==

  * **==Project Summaries==**==: Provide a concise description of each project, outlining your role, the methodology, and the results.==

  ![image-94](https://proxy-prod.omnivore-image-cache.app/1450x753,sXU_bGfvLDSeR86OFH8ha87Onokvo-YgWxyu1rZNLSNs/https://www.freecodecamp.org/news/content/images/2024/03/image-94.png)

  ==Example project summary on my portfolio==

  * **==High-Resolution Media==**==: Present your work with high-quality images or videos to fully convey its quality.==

  ![image-95](https://proxy-prod.omnivore-image-cache.app/1458x914,szuRqwh4X_p_Lf9lNnlC1qEGrhGM1sK0chdZiwfpyXH8/https://www.freecodecamp.org/news/content/images/2024/03/image-95.png)

  ### ==About Me Page: Your Professional Narrative==

  ==This page allows you to forge a deeper connection with your audience by sharing your story, ambitions, and what makes you unique. It should cover:==

  * **==Professional Background==**==: Share your career path, educational achievements, and significant milestones.==

  ![image-97](https://proxy-prod.omnivore-image-cache.app/1452x773,sjB_AuG9eMME61y1f5xTWPeW40BYAPN4EyG3fNsX_q0w/https://www.freecodecamp.org/news/content/images/2024/03/image-97.png)

  ==Some of my personal milestones==

  * **==Skills and Expertise==**==: Spotlight the abilities that distinguish you in your field.==

  ![image-96](https://proxy-prod.omnivore-image-cache.app/1449x699,ssJDqK7Fbp1W9PwyzQjAo8yqz-014s0RG7ekDqwMo7uo/https://www.freecodecamp.org/news/content/images/2024/03/image-96.png)

  ==A page on my portfolio showing my "digital DNA" - the skills I'd like to showcase==

  * **==Personal Insights==**==: Offering a peek into your personal hobbies or interests can make you more approachable and relatable.==

  ### Services Offered: How You Can Assist Clients

  If your portfolio is meant to attract freelance or consulting work, clearly detail the services you provide. This section should convey:

  * **Services List**: Enumerate the services you offer, such as design, consulting, or writing.

  ![image-98](https://proxy-prod.omnivore-image-cache.app/1453x948,sDzclqRqt7UqBvOdZ3xnyum0JaJoZOdYg8Vp0AZ8yyo4/https://www.freecodecamp.org/news/content/images/2024/03/image-98.png)

  A section on my site describing the courses I offer/topics I teach about

  * **Unique Advantages**: Describe what sets your services apart from the competition.
  * **Workflow Description**: Outline your process from the initial contact to project completion, offering potential clients a glimpse into your working style.

  ### ==Contact Information: Simplifying Communication==

  ==For potential collaborations, it’s essential to make reaching out as simple as possible. Your contact page should include:==

  * **==Various Contact Methods==**==: Provide a contact form, email, and possibly a phone number for easy communication.==

  ![image-99](https://proxy-prod.omnivore-image-cache.app/1451x855,sP3g3ley_Uhu0duZbckP0jOEC35DJl1rw8IBcEEMfn4k/https://www.freecodecamp.org/news/content/images/2024/03/image-99.png)

  ==My contact information page on my personal portfolio site==

  * **==Social Media Profiles==**==: Guide visitors to your professional social media pages.==
  * **==Geographic Details==**==: If applicable, mention your location or time zone.==

  ### Client Testimonials: Evidence of Your Expertise

  Testimonials from previous clients or colleagues act as a strong endorsement of your skills and dependability. Consider featuring:

  * **Client Feedback**: Include concise, meaningful quotes from clients about their satisfaction with your work.

  ![image-100](https://proxy-prod.omnivore-image-cache.app/1459x921,szS8qnjs7QrgRUXtX_ZhUrrmBf2k65YUd8-9imN2Vq3M/https://www.freecodecamp.org/news/content/images/2024/03/image-100.png)

  Some of my client's testimonials

  * **Project Links**: Optionally, connect these testimonials to specific projects they refer to.
  * **Client Images or Logos**: Adding photos or logos of the client's company can add credibility to each testimonial.

  Incorporating these key pages into your personal portfolio website not only effectively showcases your skills but also offers a complete picture of your professional sphere. 

  By meticulously designing each section, you can cultivate a digital presence that draws in potential clients or employers, showcases your proficiency, and distinguishes you in your industry.

  ![image-67](https://proxy-prod.omnivore-image-cache.app/1792x1024,sbGFwPKaR_Qg3k5u-KTPlv51uqRHUrexDYYEDdKTaRNU/https://www.freecodecamp.org/news/content/images/2024/03/image-67.png)

  This illustration emphasizes a modern and inviting atmosphere, designed to pique the curiosity of visitors and encourage exploration of the portfolio. - [lunartech.ai](https://lunartech.ai/)

  ## How to Organize the Home Page

  Now let's talk about how to strategically organize the homepage of your personal portfolio website. The essence of the homepage is to succinctly represent you and ignite the curiosity of visitors to delve into your portfolio page. Essential sections include:

  ### 1\. Navigation Bar

  A well-designed navigation bar is your visitor's roadmap to your website. It should be intuitive and straightforward, guiding them through your site with ease. 

  ![image-102](https://proxy-prod.omnivore-image-cache.app/1455x84,srzf7NRoupmzDty-rUR77udILXV7AVXyIZva65nt0gw8/https://www.freecodecamp.org/news/content/images/2024/03/image-102.png)

  Navigation section of my site

  Include links to your portfolio, about page, services, and contact information. Ensure it's accessible from every page, providing a seamless browsing experience.

  Your header hero acts as the first impression and the hook that draws visitors in. This section should feature a striking, high-quality image or a dynamic slider that represents your work or persona. 

  Accompany this visual with a bold, concise statement about who you are and what you do. This is your chance to make an impact, so choose words and images that resonate with your professional identity and goals.

  ![image-103](https://proxy-prod.omnivore-image-cache.app/1468x917,sqlQmfDBrxeJ3BVHvUZH3QQzLmWDbW2tjCUne_LhARf8/https://www.freecodecamp.org/news/content/images/2024/03/image-103.png)

  Homepage displaying the header hero image on my site

  My hero image has my name in large print, and informs viewers that I specialize in compter science, data science, and AI.

  ### 3\. Your Skills

  Highlighting your skills is crucial in showcasing your competencies to potential clients or employers. 

  Create a visually engaging section where you list your primary skills, perhaps using icons or progress bars for a more dynamic presentation. Focus on the skills that set you apart and are most relevant to the work you want to attract.

  ![image-109](https://proxy-prod.omnivore-image-cache.app/1443x734,s5OkphOEHm9JmkpeKUzXuL8pRH6ZI6KnITgFXexspeOg/https://www.freecodecamp.org/news/content/images/2024/03/image-109.png)

  Some of my skills listed on my site

  On my site, I emphasize that I've had experience managing teams, optimizing performance, and building AI-driven products, for example.

  ### 4\. Your Case Studies

  Case studies are powerful testimonials of your work history and success stories. Dedicate a section to showcase selected projects that highlight your problem-solving skills, creativity, and the value you’ve brought to previous engagements. 

  For each case study, provide context, your role, challenges, solutions, and results. Including impactful visuals or links to the projects can greatly enhance this section.

  ### 5\. Your Milestones

  This section is a timeline or a list of significant achievements, awards, recognitions, or other milestones in your career. It's a narrative of your professional journey and successes. 

  Presenting this information in a chronological timeline or a visually engaging infographic can help tell your story compellingly and succinctly. 

  You can list achievements such as starting a company, graduating from a degree program, reaching a certain number of followers on social media, and so on.

  ### 6\. Testimonials (What others say about you)

  Testimonials from past clients, colleagues, or employers lend credibility and trust to your professional image. Select quotes that reflect your work ethic, impact, and personality. 

  Displaying these testimonials with the name, title, and, if possible, a photo of the person providing them adds authenticity and a personal touch.

  ### 7\. Technical Skills

  In addition to your general skills, it's important to specifically highlight your technical skills. This section should detail the tools, technologies, software, and programming languages you are proficient in. 

  Using logos or icons of these technologies can make this section more visually appealing and easier to scan for visitors who are quickly trying to gauge your technical capabilities.

  ![image-104](https://proxy-prod.omnivore-image-cache.app/1448x848,scNyxmSjE2Pgi1bzoHfdbTinITeGAgipws6w_Yk24quc/https://www.freecodecamp.org/news/content/images/2024/03/image-104.png)

  My "digital DNA"

  For example, my "digital DNA" is made up of C++, Java, JavaScript, Python, React, and other popular technologies.

  Beyond these, your homepage doesn't require additional content. It's vital to capture the visitor's attention quickly with compelling visuals and effective copywriting, given the short window to make an impact.

  ### ==Do's for a Captivating Homepage==

  * **==Be Concise==**==: Ensure your message is clear and to the point.==
  * **==Use Endorsement Logos==**==: Incorporate logos of companies you've appeared on to build trust.==
  * **==Display Technical Stack Logos==**==: Show the technologies you're proficient in using their logos.==
  * **==Showcase a Case Study Gallery==**==: Highlight your best work in an easily navigable gallery.==
  * **==Include a Dynamic Header==**==: Use an engaging hero section to make a strong first impression.==
  * **==Highlight Recent Work==**==: Give visitors a glimpse of your latest projects to show you're active and relevant.==
  * **==Use Testimonials Strategically==**==: Place client testimonials where they'll have the most impact, showcasing your reliability and skill.==

  ### ==Don'ts for Your Homepage==

  * **==Avoid Random Placement==**==: Structure your content logically – don't place information haphazardly.==
  * **==Steer Clear of Long Paragraphs==**==: Keep your homepage breezy and easy to read with short, impactful statements.==
  * **==Don't Overwhelm with Content==**==: Your homepage isn't the place to squeeze in every detail of your portfolio.==
  * **==Avoid Image Neglect==**==: Images are crucial for visual engagement, so don't omit them.==
  * **==Resist Clutter==**==: Keep the design clean and focused to improve user experience.==
  * **==Avoid Technical Jargon==**==: Use language that's accessible to all visitors, not just industry insiders.==
  * **==Skip the Hard Sell==**==: Present your skills and achievements without being overly aggressive.==

  Effective organization of your homepage is key to creating a memorable and professional personal portfolio website. 

  By following these guidelines, you ensure that your homepage not only accurately represents your professional persona but also encourages further exploration of your portfolio, opening up new opportunities for engagement and collaboration.

  ![image-68](https://proxy-prod.omnivore-image-cache.app/1792x1024,seP8EM8SXRG6hspNPrz0erpEhohZ2tm5l77ABJalD69s/https://www.freecodecamp.org/news/content/images/2024/03/image-68.png)

  Here's a visual representation of a designer actively updating their online portfolio, highlighting their commitment to showcasing evolving skills and staying current. - <https://lunartech.ai/>

  ## How to Keep Your Portfolio Fresh

  Keeping your portfolio updated is crucial for reflecting your evolving skills, expertise, and experiences. An engaging and current portfolio not only captivates potential clients and visitors but also illustrates your dedication to your profession. Here are strategies to ensure your portfolio remains fresh and appealing:

  ### Continuously Update with New Work

  Regularly add your latest and greatest projects to your portfolio. This demonstrates your active involvement in your field and your commitment to quality and innovation. It's a way to showcase your growth and adaptability over time.

  ### Revamp Your Portfolio's Design

  Periodically rejuvenating the design of your portfolio website can keep it looking modern and fresh. An updated design can better engage visitors and reflect your ability to stay in tune with the latest trends and technologies in design.

  ### Showcase Testimonials and Recognitions

  Incorporate new testimonials from clients or colleagues, as well as any recent awards or honors you've received. This external validation of your work adds credibility and can significantly influence potential clients' perceptions of your expertise.

  ### Maintain an Active Blog

  A blog can be a dynamic component of your portfolio, offering insights into your work process, industry observations, or detailed project breakdowns. Regular posts keep your site content fresh and can help establish you as a thought leader in your field.

  Use social media platforms to highlight recent projects, achievements, and updates from your portfolio. A robust social media presence can extend your reach, attract a broader audience, and keep your work in the spotlight.

  ### Incorporate Interactive Elements

  Adding interactive elements, such as animations or interactive galleries, can refresh the user experience on your site. These elements can make your portfolio more memorable and engaging.

  ### Feedback Loop

  Invite feedback on your work and website from peers and mentors. Implementing constructive feedback can improve your portfolio's effectiveness and demonstrate your commitment to excellence and continuous improvement.

  ### Diversify Your Content

  Show a range of projects and skills, including collaborative works, to display the breadth of your capabilities. This diversity can attract a wider array of clients interested in different aspects of your expertise.

  ### Stay Relevant with Trends

  Keep abreast of the latest trends in your industry and incorporate them into your work and portfolio presentation. This shows that you are forward-thinking and capable of adapting to change.

  By employing these strategies, you can ensure that your portfolio remains an accurate, engaging representation of your professional journey and capabilities. Regular updates and a proactive approach to showcasing your achievements can significantly enhance your portfolio's appeal, making it a powerful tool for attracting new opportunities and clients.

  ## Conclusion

  When it comes to crafting a standout personal portfolio page, remember that simplicity and showcasing your best work are key. By following the step-by-step guide outlined in this blog, you can create a compelling portfolio that effectively highlights your skills and talents.

  Start by organizing your projects in a clean and visually appealing layout. Use high-quality images and concise descriptions to provide visitors with a clear understanding of your work. Remember, your portfolio is a reflection of you and your brand.

  Don't forget to include a call to action that prompts visitors to take the next step, whether it's contacting you for collaborations or viewing more of your work. Engage your audience with a clear message and encourage them to explore further. Ready to elevate your online presence? Take the first step and build that portfolio.

  ### ****Resources**

  Kickstart your journey in technology with our specialized program that dives into Artificial Intelligence (AI) and machine learning. This initiative is crafted to build your programming expertise, supplemented with dedicated mentorship and career guidance to pave your way in the tech industry.

  ### Propel your career forward with this curated list of resources, focused on tangible outcomes:

  * [How to Enter Gen AI in 2024:](https://downloads.tatevaslanyan.com/six-figure-data-science-ebook) This guide breaks down the essentials of emerging AI technologies and prepares you for future trends.
  * [Land Your Software Engineering Internship:](https://join.lunartech.ai/software-engineering-internship) This resource provides step-by-step instructions for finding and landing a valuable internship in software engineering, giving you a competitive edge.
  * [Machine Learning Fundamentals eBook:](https://join.lunartech.ai/machine-learning-fundamentals--3f64f) Begin your exploration of machine learning with this eBook, which provides a concise overview of its core principles and techniques.

  For access to these resources and detailed information about our program, visit [LunarTech's ](https://lunartech.ai/)website. Embark on your tech career path with the right tools and support from [LunarTech](https://lunartech.ai/).

  ### ****Connect with Me:**

  * [Follow me on LinkedIn for a ton of Free Resources in CS, ML and AI](https://ca.linkedin.com/in/vahe-aslanyan)
  * [Visit my Personal Website](https://vaheaslanyan.com/)
  * Subscribe to my [The Data Science and AI Newsletter](https://tatevaslanyan.substack.com/)

  ### ****About the Author**

  I'm Vahe Aslanyan, specializing in the world of computer science, data science, and artificial intelligence. Explore my work at [vaheaslanyan.com](https://www.vaheaslanyan.com/). My expertise encompasses robust full-stack development and the strategic enhancement of AI products, with a focus on inventive problem-solving.

  [Vahe Aslanyan - Crafting Code, Shaping FuturesDive into Vahe Aslanyan’s digital world, where each endeavor offers new insights and every hurdle paves the way for growth.Crafting Code, Shaping Futures![Ntarl3h](https://proxy-prod.omnivore-image-cache.app/896x896,sG8IE-beCANKZXtyz_6GNcDfHh1eMevmJCfWKnqBm7_M/https://i.imgur.com/Ntarl3h.png)](https://www.vaheaslanyan.com/)

  I've consistently aimed to revolutionize technical education, striving to set a new, universal standard. As we wrap up this handbook, I want to say a big thank you for spending time with it. Sharing what I've learned has made me think more about my work. I hope what we've gone through together helps you move forward in tech.

  ---

  ---

   Learn to code for free. freeCodeCamp's open source curriculum has helped more than 40,000 people get jobs as developers. [Get started](https://www.freecodecamp.org/learn/) 

metadata:
  {"date_added":"2024-03-22 18:40:39","id":"63939b9e-e8f0-11ee-8320-63f36465eb6d","status":"ARCHIVED","tags":["read-later","RSS"],"title":"How to Create a Great Personal Portfolio Page – a Handbook for Beginners\n","url_omnivore":"https://omnivore.app/me/how-to-create-a-great-personal-portfolio-page-a-handbook-for-beg-18e6a73ea11\n","url_original":"https://www.freecodecamp.org/news/how-to-create-a-great-personal-portfolio-page-a-step-by-step-guide/\n"}


