+
+
diff --git a/CONFIGURATION.md b/CONFIGURATION.md
new file mode 100644
index 0000000000..2506f9ef95
--- /dev/null
+++ b/CONFIGURATION.md
@@ -0,0 +1,58 @@
+# Configuration Overview
+
+Beyond the default configuration settings, you can configure a rich array of options to suit your workflow. Here are areas that are commonly configured when using Jupyter Notebook:
+
+Jupyter’s common configuration system
+
+Notebook server
+
+Notebook front-end client
+
+Notebook extensions
+
+Let’s look at highlights of each area.
+
+Jupyter’s Common Configuration system
+Jupyter applications, from the Notebook to JupyterHub to nbgrader, share a common configuration system. The process for creating a configuration file and editing settings is similar for all the Jupyter applications.
+
+# Jupyter’s Common Configuration Approach
+
+Common Directories and File Locations
+
+Language kernels
+
+traitlets provide a low-level architecture for configuration.
+
+# Notebook server
+
+The Notebook server runs the language kernel and communicates with the front-end Notebook client (i.e. the familiar notebook interface).
+
+Configuring the Notebook server
+
+To create a jupyter_notebook_config.py file in the .jupyter directory, with all the defaults commented out, use the following command:
+
+```
+$ jupyter notebook --generate-config
+```
+
+:ref:`Command line arguments for configuration ` settings are
+documented in the configuration file and the user documentation.
+Running a Notebook server
+
+Related: Configuring a language kernel to run in the Notebook server enables your server to run other languages, like R or Julia.
+
+# Notebook front-end client
+
+Configuring the notebook frontend
+How front end configuration works
+Example - Changing the notebook’s default indentation
+Example - Restoring the notebook’s default indentation
+Persisting configuration settings
+
+# Notebook extensions
+
+Distributing Jupyter Extensions as Python Packages
+
+Extending the Notebook
+
+Security in Jupyter notebooks: Since security policies vary from organization to organization, we encourage you to consult with your security team on settings that would be best for your use cases. Our documentation offers some responsible security practices, and we recommend becoming familiar with the practices.
diff --git a/docs/source/contributor.rst b/docs/source/contributor.rst
index cba95d0246..85bdb9c0f4 100644
--- a/docs/source/contributor.rst
+++ b/docs/source/contributor.rst
@@ -1,10 +1,158 @@
-===========
-Contributor
-===========
+.. _contributing:
-.. toctree::
- :maxdepth: 1
- :caption: Contributor Documentation
+Contributing to Jupyter Notebook
+======================
- contributing
- development_faq
+Thanks for contributing to Jupyter Notebook!
+
+Make sure to follow [Project Jupyter's Code of Conduct](https://github.com/jupyter/governance/blob/master/conduct/code_of_conduct.md)
+for a friendly and welcoming collaborative environment.
+
+Setting up a development environment
+-------------------------------------
+
+Note: You will need NodeJS to build the extension package.
+
+The `jlpm` command is JupyterLab's pinned version of [yarn](https://yarnpkg.com/) that is installed with JupyterLab. You may use
+`yarn` or `npm` in lieu of `jlpm` below.
+
+**Note**: we recomment using `mamba` to speed the creating of the environment.
+
+```bash
+# create a new environment
+mamba create -n notebook -c conda-forge python nodejs -y
+
+Activate the environment
+-------------------------------------
+
+ mamba activate notebook
+
+Install package in development mode
+-------------------------------------
+
+ pip install -e ".[dev,test]"
+
+Link the notebook extension and @jupyter-notebook schemas
+-------------------------------------
+
+ jlpm develop
+
+Enable the server extension
+-------------------------------------
+
+ jupyter server extension enable notebook
+ ```
+
+`notebook` follows a monorepo structure. To build all the packages at once:
+
+```bash
+jlpm build
+```
+
+There is also a `watch` script to watch for changes and rebuild the app automatically:
+
+```bash
+jlpm watch
+```
+
+To make sure the `notebook` server extension is installed:
+
+```bash
+$ jupyter server extension list
+Config dir: /home/username/.jupyter
+
+Config dir: /home/username/miniforge3/envs/notebook/etc/jupyter
+ jupyterlab enabled
+ - Validating jupyterlab...
+ jupyterlab 3.0.0 OK
+ notebook enabled
+ - Validating notebook...
+ notebook 7.0.0a0 OK
+
+Config dir: /usr/local/etc/jupyter
+```
+
+Then start Jupyter Notebook with:
+
+```bash
+jupyter notebook
+```
+
+Running Tests
+-------------------------------------
+
+To run the tests:
+
+```bash
+jlpm run build:test
+jlpm run test
+```
+
+There are also end to end tests to cover higher level user interactions, located in the `ui-tests` folder. To run these tests:
+
+```bash
+cd ui-tests
+# start a new Jupyter server in a terminal
+jlpm start
+
+In a new terminal, run the tests
+-------------------------------------
+
+jlpm test
+```
+
+The `test` script calls the Playwright test runner. You can pass additional arguments to `playwright` by appending parameters to the command. For example to run the test in headed mode, `jlpm test --headed`.
+
+Checkout the [Playwright Command Line Reference](https://playwright.dev/docs/test-cli/) for more information about the available command line options.
+
+Running the end to end tests in headful mode will trigger something like the following:
+
+![playwight-headed-demo](https://user-images.githubusercontent.com/591645/141274633-ca9f9c2f-eef6-430e-9228-a35827f8133d.gif)
+
+Code Styling
+-------------------------------------
+
+All non-python source code is formatted using [prettier](https://prettier.io) and python source code is formatted using [black](https://github.com/psf/black)s
+When code is modified and committed, all staged files will be
+automatically formatted using pre-commit git hooks (with help from
+[pre-commit](https://github.com/pre-commit/pre-commit). The benefit of
+using a code formatters like `prettier` and `black` is that it removes the topic of
+code style from the conversation when reviewing pull requests, thereby
+speeding up the review process.
+
+As long as your code is valid,
+the pre-commit hook should take care of how it should look.
+`pre-commit` and its associated hooks will automatically be installed when
+you run `pip install -e ".[dev,test]"`
+
+To install `pre-commit` manually, run the following:
+
+```shell
+pip install pre-commit
+pre-commit install
+```
+
+You can invoke the pre-commit hook by hand at any time with:
+
+```shell
+pre-commit run
+```
+
+which should run any autoformatting on your code
+and tell you about any errors it couldn't fix automatically.
+You may also install [black integration](https://github.com/psf/black#editor-integration)
+into your text editor to format code automatically.
+
+If you have already committed files before setting up the pre-commit
+hook with `pre-commit install`, you can fix everything up using
+`pre-commit run --all-files`. You need to make the fixing commit
+yourself after that.
+
+You may also use the prettier npm script (e.g. `npm run prettier` or
+`yarn prettier` or `jlpm prettier`) to format the entire code base.
+We recommend installing a prettier extension for your code editor and
+configuring it to format your code with a keyboard shortcut or
+automatically on save.
+
+Some of the hooks only run on CI by default, but you can invoke them by
+running with the `--hook-stage manual` argument.