*swh-webAPI(https://archive.softwareheritage.org/api): enables to query the content of the archive through HTTP requests and get responses in JSON or YAML.
*swh-webbrowse(https://archive.softwareheritage.org/browse): graphical interface that eases the navigation in the archive.
*lintingofcustomjavascriptcode(through[eslint](https://eslint.org/)) and stylesheets (through [stylelint](https://stylelint.io/))
*useof[es6](http://es6-features.org) syntax and advanced javascript feature like [async/await](https://javascript.info/async-await) or [fetch](https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API) thanks to [babel](https://babeljs.io/) (es6 to es5 transpiler and polyfills provider)
*assetsminification(using[terser](https://github.com/terser-js/terser) and [cssnano](http://cssnano.co/)) but also dead code elimination for production use
##Howtobuild,runandtest
###Backendrequirements
Firstyouwillneed[Python3](https://www.python.org) and a complete [swh development environment](https://forge.softwareheritage.org/source/swh-environment/) installed.
Tocompilethefrontendassets,youneedtohave[nodejs](https://nodejs.org/en/) >= 12.0.0 and [yarn](https://yarnpkg.com/en/) installed. If you are on Debian, you can easily install an up to date nodejs from the [nodesource](https://github.com/nodesource/distributions/blob/master/README.md) repository.
***run-django-webpack-devserver**:Compileandservenotoptimized(withoutmignificationanddeadcodeelimination)frontendstaticassetsusing[webpack-dev-server](https://github.com/webpack/webpack-dev-server) and run django server with development settings. This is the recommended target to use when developing swh-web as it enables automatic reloading of backend and frontend part of the applications when modifying source files (*.py, *.js, *.css, *.html).
***run-django-webpack-prod**:Compileoptimized(withminificationanddeadcodeelimination)frontendstaticassetsusingwebpackandrundjangoserverwithproductionsettings.Thisisusefultotesttheapplicationsinproductionmode(withthedifferencethatstaticassetsareservedbydjango).Productionsettingsnotablyenableadvanceddjangocachingandyouwillneedtohave[memcached](https://memcached.org/) installed for that feature to work.
***run-gunicorn-server**:Runthewebapplicationswithproductionsettingsina[gunicorn](http://gunicorn.org/) worker as they will be in real production environment.
Thebackendtestsarepoweredbythe[pytest](https://docs.pytest.org/en/latest/) and [hypothesis](https://hypothesis.readthedocs.io/en/latest/) frameworks while the frontend ones rely on the use of the [cypress](https://www.cypress.io/) tool.