OSAT is a collection of tools created help you in your quest for a better website. All of these tools have been grouped into a single web app.
I've grown tired of SEO agencies making us pay hundreds of euros for simple tools. I decided to develop OSAT to help users find issues on their website and increase their SEO for free.
Go to demo.primates.dev
Login: demo
Password: demodemo
Admin part is api.primates.dev/admin
Bash
git clone https://github.com/StanGirard/seo-audits-toolkit
cd seo-audits-toolkit
docker-compose pull ## docker-compose build if you want to build it on your own
docker-compose --env-file .env-example up -d
Init the project
Bash
docker exec -it osat-server python manage.py flush
docker exec -it osat-server python manage.py loaddata init_data.json
You can access the dashboard by going to localhost:3000
Login: admin Password: admin
If needed create a .env
file with information that you would like to change
You need to go to Org -> Organization
and create a new organization. You can create as many as you want. Organization are used in order to implement RBAC in the project and only display information about an organization to users of this organization. Here is a quicklinkg to access it http://localhost:8000/admin/org/website/
Once your organization is created. You need to add your users to this organization.
Go to Organizations -> Organizations Users
and add your users to the organization you want. http://localhost:8000/admin/organizations/organizationuser/
Please feel free to add any contribution. If you've been working on a script that could be integrated in this app. Please feel free to do it. Don't hesitate to open issues to ask questions. I've tried to document the code as much as I could to ease the integration
You can just add a django module and I'll take care of intregrating it in the front.
I've used React Admin to build the front-end. If you want to help me improve the UI or add new functionnalites. Please feel free to contribute.
I'm not a python nor a frontend developer.
Starting the project "as is", without modifications to the admin module/part, I get a blank screen on http://localhost:3000/
js
react-dom.production.min.js:216 TypeError: Cannot read properties of null (reading 'breakpoints')
at Button.js:48:22
at c (useMediaQuery.js:19:50)
at b (Button.js:47:20)
at oi (react-dom.production.min.js:157:137)
at Wc (react-dom.production.min.js:267:460)
at kl (react-dom.production.min.js:250:347)
at Sl (react-dom.production.min.js:250:278)
at xl (react-dom.production.min.js:250:138)
at bl (react-dom.production.min.js:243:163)
at fl (react-dom.production.min.js:237:175)
cc @ react-dom.production.min.js:216
react-dom.production.min.js:216 TypeError: Cannot read properties of null (reading 'breakpoints')
at AppBar.js:78:22
at c (useMediaQuery.js:19:50)
at Z (AppBar.js:77:20)
at oi (react-dom.production.min.js:157:137)
at Wc (react-dom.production.min.js:267:460)
at kl (react-dom.production.min.js:250:347)
at Sl (react-dom.production.min.js:250:278)
at xl (react-dom.production.min.js:250:138)
at bl (react-dom.production.min.js:243:163)
at fl (react-dom.production.min.js:237:175)
cc @ react-dom.production.min.js:216
react-dom.production.min.js:216 TypeError: Cannot read properties of null (reading 'breakpoints')
at Sidebar.js:36:22
at c (useMediaQuery.js:19:50)
at _ (Sidebar.js:35:20)
at oi (react-dom.production.min.js:157:137)
at Wc (react-dom.production.min.js:267:460)
at kl (react-dom.production.min.js:250:347)
at Sl (react-dom.production.min.js:250:278)
at xl (react-dom.production.min.js:250:138)
at bl (react-dom.production.min.js:243:163)
at fl (react-dom.production.min.js:237:175)
cc @ react-dom.production.min.js:216
react-dom.production.min.js:216 TypeError: Cannot read properties of null (reading 'breakpoints')
at Dashboard.js:31:15
at c (useMediaQuery.js:19:50)
at Mt (Dashboard.js:30:22)
at oi (react-dom.production.min.js:157:137)
at Wc (react-dom.production.min.js:267:460)
at kl (react-dom.production.min.js:250:347)
at Sl (react-dom.production.min.js:250:278)
at xl (react-dom.production.min.js:250:138)
at bl (react-dom.production.min.js:243:163)
at fl (react-dom.production.min.js:237:175)
cc @ react-dom.production.min.js:216
react-dom.production.min.js:216 TypeError: Cannot read properties of null (reading 'breakpoints')
at Button.js:48:22
at c (useMediaQuery.js:19:50)
at b (Button.js:47:20)
at oi (react-dom.production.min.js:157:137)
at Wc (react-dom.production.min.js:267:460)
at kl (react-dom.production.min.js:250:347)
at Sl (react-dom.production.min.js:250:278)
at xl (react-dom.production.min.js:250:138)
at bl (react-dom.production.min.js:243:163)
at react-dom.production.min.js:123:115
cc @ react-dom.production.min.js:216
react-dom.production.min.js:216 TypeError: Cannot read properties of null (reading 'breakpoints')
at AppBar.js:78:22
at c (useMediaQuery.js:19:50)
at Z (AppBar.js:77:20)
at oi (react-dom.production.min.js:157:137)
at Wc (react-dom.production.min.js:267:460)
at kl (react-dom.production.min.js:250:347)
at Sl (react-dom.production.min.js:250:278)
at xl (react-dom.production.min.js:250:138)
at bl (react-dom.production.min.js:243:163)
at react-dom.production.min.js:123:115
cc @ react-dom.production.min.js:216
react-dom.production.min.js:216 TypeError: Cannot read properties of null (reading 'breakpoints')
at Sidebar.js:36:22
at c (useMediaQuery.js:19:50)
at _ (Sidebar.js:35:20)
at oi (react-dom.production.min.js:157:137)
at Wc (react-dom.production.min.js:267:460)
at kl (react-dom.production.min.js:250:347)
at Sl (react-dom.production.min.js:250:278)
at xl (react-dom.production.min.js:250:138)
at bl (react-dom.production.min.js:243:163)
at react-dom.production.min.js:123:115
cc @ react-dom.production.min.js:216
react-dom.production.min.js:123 Uncaught TypeError: Cannot read properties of null (reading 'breakpoints')
at Button.js:48:22
at c (useMediaQuery.js:19:50)
at b (Button.js:47:20)
at oi (react-dom.production.min.js:157:137)
at Wc (react-dom.production.min.js:267:460)
at kl (react-dom.production.min.js:250:347)
at Sl (react-dom.production.min.js:250:278)
at xl (react-dom.production.min.js:250:138)
at bl (react-dom.production.min.js:243:163)
at react-dom.production.min.js:123:115
I tried using the Dockerfile.dev
under admin
instead of Dockerfile
(also editing the docker-compose.yml
to fit the changes), and now I see a page with Network error
when I try to login, but it's much better !
node changed from 12.x to 14.x as it was breaking docker build
issue 1= /docker-compose.yml" is unsupported. You might be seeing this error because you're using the wrong Compose file version. Either specify a supported version (e.g "2.2" or "3.3") and place your service definitions under the services
key, or omit the version
key and place your service definitions at the root of the file to use version 1.
issue 2= WARN[0000] The "TINI_VERSION" variable is not set. Defaulting to a blank string. WARN[0000] The "POSTGRES_PASSWORD" variable is not set. Defaulting to a blank string. WARN[0000] The "DEBUG" variable is not set. Defaulting to a blank string. WARN[0000] The "ALLOWED_HOSTS" variable is not set. Defaulting to a blank string. WARN[0000] The "REST_FRAMEWORK_PAGE_SIZE" variable is not set. Defaulting to a blank string. WARN[0000] The "CELERY_RESULT_BACKEND" variable is not set. Defaulting to a blank string. WARN[0000] The "DATABASE_ENGINE" variable is not set. Defaulting to a blank string. WARN[0000] The "POSTGRES_USER" variable is not set. Defaulting to a blank string. WARN[0000] The "POSTGRES_PORT" variable is not set. Defaulting to a blank string. WARN[0000] The "POSTGRES_DB" variable is not set. Defaulting to a blank string. WARN[0000] The "SECRET_KEY" variable is not set. Defaulting to a blank string. WARN[0000] The "CELERY_BROKER_URL" variable is not set. Defaulting to a blank string. WARN[0000] The "CORS_ALLOWED_ORIGINS" variable is not set. Defaulting to a blank string. WARN[0000] The "NAMESPACE" variable is not set. Defaulting to a blank string. WARN[0000] The "TINI_VERSION" variable is not set. Defaulting to a blank string. WARN[0000] The "NAMESPACE" variable is not set. Defaulting to a blank string. WARN[0000] The "CELERY_BROKER_URL" variable is not set. Defaulting to a blank string. WARN[0000] The "DATABASE_ENGINE" variable is not set. Defaulting to a blank string. WARN[0000] The "DEBUG" variable is not set. Defaulting to a blank string. WARN[0000] The "CELERY_RESULT_BACKEND" variable is not set. Defaulting to a blank string. WARN[0000] The "ALLOWED_HOSTS" variable is not set. Defaulting to a blank string. WARN[0000] The "REST_FRAMEWORK_PAGE_SIZE" variable is not set. Defaulting to a blank string. WARN[0000] The "POSTGRES_PORT" variable is not set. Defaulting to a blank string. WARN[0000] The "POSTGRES_DB" variable is not set. Defaulting to a blank string. WARN[0000] The "POSTGRES_PASSWORD" variable is not set. Defaulting to a blank string. WARN[0000] The "POSTGRES_USER" variable is not set. Defaulting to a blank string. WARN[0000] The "SECRET_KEY" variable is not set. Defaulting to a blank string. WARN[0000] The "CORS_ALLOWED_ORIGINS" variable is not set. Defaulting to a blank string. WARN[0000] The "NAMESPACE" variable is not set. Defaulting to a blank string. WARN[0000] The "TINI_VERSION" variable is not set. Defaulting to a blank string. WARN[0000] The "CELERY_RESULT_BACKEND" variable is not set. Defaulting to a blank string. WARN[0000] The "POSTGRES_DB" variable is not set. Defaulting to a blank string. WARN[0000] The "POSTGRES_PASSWORD" variable is not set. Defaulting to a blank string. WARN[0000] The "POSTGRES_PORT" variable is not set. Defaulting to a blank string. WARN[0000] The "POSTGRES_USER" variable is not set. Defaulting to a blank string. WARN[0000] The "SECRET_KEY" variable is not set. Defaulting to a blank string. WARN[0000] The "CORS_ALLOWED_ORIGINS" variable is not set. Defaulting to a blank string. WARN[0000] The "ALLOWED_HOSTS" variable is not set. Defaulting to a blank string. WARN[0000] The "DEBUG" variable is not set. Defaulting to a blank string. WARN[0000] The "DATABASE_ENGINE" variable is not set. Defaulting to a blank string. WARN[0000] The "REST_FRAMEWORK_PAGE_SIZE" variable is not set. Defaulting to a blank string. WARN[0000] The "CELERY_BROKER_URL" variable is not set. Defaulting to a blank string. WARN[0000] The "NAMESPACE" variable is not set. Defaulting to a blank string. WARN[0000] The "NODE_VERSION" variable is not set. Defaulting to a blank string. WARN[0000] The "TINI_VERSION" variable is not set. Defaulting to a blank string. WARN[0000] The "POSTGRES_USER" variable is not set. Defaulting to a blank string. WARN[0000] The "POSTGRES_PASSWORD" variable is not set. Defaulting to a blank string. WARN[0000] The "POSTGRES_DB" variable is not set. Defaulting to a blank string. WARN[0000] The "NAMESPACE" variable is not set. Defaulting to a blank string. WARN[0000] The "REDIS_VERSION" variable is not set. Defaulting to a blank string. WARN[0000] The "REDIS_LOG_PREFIX_PATH" variable is not set. Defaulting to a blank string. WARN[0000] The "NAMESPACE" variable is not set. Defaulting to a blank string. WARN[0000] The "REDIS_LOG_PREFIX_PATH" variable is not set. Defaulting to a blank string. WARN[0000] The "REDIS_MEMORY_MAX" variable is not set. Defaulting to a blank string. WARN[0000] The "REDIS_LOG_FILE" variable is not set. Defaulting to a blank string. WARN[0000] The "PWD" variable is not set. Defaulting to a blank string. WARN[0000] The "PWD" variable is not set. Defaulting to a blank string. WARN[0000] The "PWD" variable is not set. Defaulting to a blank string.
Bumps json5 from 1.0.1 to 1.0.2.
Sourced from json5's changelog.
Unreleased [code, diff]
v2.2.3 [code, diff]
- Fix: [email protected] is now the 'latest' release according to npm instead of v1.0.2. (#299)
v2.2.2 [code, diff]
- Fix: Properties with the name
__proto__
are added to objects and arrays. (#199) This also fixes a prototype pollution vulnerability reported by Jonathan Gregson! (#295).v2.2.1 [code, diff]
- Fix: Removed dependence on minimist to patch CVE-2021-44906. (#266)
v2.2.0 [code, diff]
- New: Accurate and documented TypeScript declarations are now included. There is no need to install
@types/json5
. (#236, #244)v2.1.3 [code, diff]
v2.1.2 [code, diff]
... (truncated)
a62db1e
1.0.2e0c23fe
docs: update CHANGELOG for v1.0.262a6540
fix: add proto to objects and arraysDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase
.
Bumps express from 4.17.1 to 4.18.2.
Sourced from express's releases.
4.18.2
- Fix regression routing a large stack in a single route
- deps: [email protected]
- deps: [email protected]
- perf: remove unnecessary object clone
- deps: [email protected]
4.18.1
- Fix hanging on large stack of sync routes
4.18.0
- Add "root" option to
res.download
- Allow
options
withoutfilename
inres.download
- Deprecate string and non-integer arguments to
res.status
- Fix behavior of
null
/undefined
asmaxAge
inres.cookie
- Fix handling very large stacks of sync middleware
- Ignore
Object.prototype
values in settings throughapp.set
/app.get
- Invoke
default
with same arguments as types inres.format
- Support proper 205 responses using
res.send
- Use
http-errors
forres.format
error- deps: [email protected]
- Fix error message for json parse whitespace in
strict
- Fix internal error when inflated body exceeds limit
- Prevent loss of async hooks context
- Prevent hanging when request already read
- deps: [email protected]
- deps: [email protected]
- deps: [email protected]
- deps: [email protected]
- deps: [email protected]
- deps: [email protected]
- Add
priority
option- Fix
expires
option to reject invalid dates- deps: [email protected]
- Replace internal
eval
usage withFunction
constructor- Use instance methods on
process
to check for listeners- deps: [email protected]
- Remove set content headers that break response
- deps: [email protected]
- deps: [email protected]
- deps: [email protected]
- Prevent loss of async hooks context
- deps: [email protected]
- deps: [email protected]
- Fix emitted 416 error missing headers property
- Limit the headers removed for 304 response
- deps: [email protected]
- deps: [email protected]
- deps: [email protected]
- deps: [email protected]
... (truncated)
Sourced from express's changelog.
4.18.2 / 2022-10-08
- Fix regression routing a large stack in a single route
- deps: [email protected]
- deps: [email protected]
- perf: remove unnecessary object clone
- deps: [email protected]
4.18.1 / 2022-04-29
- Fix hanging on large stack of sync routes
4.18.0 / 2022-04-25
- Add "root" option to
res.download
- Allow
options
withoutfilename
inres.download
- Deprecate string and non-integer arguments to
res.status
- Fix behavior of
null
/undefined
asmaxAge
inres.cookie
- Fix handling very large stacks of sync middleware
- Ignore
Object.prototype
values in settings throughapp.set
/app.get
- Invoke
default
with same arguments as types inres.format
- Support proper 205 responses using
res.send
- Use
http-errors
forres.format
error- deps: [email protected]
- Fix error message for json parse whitespace in
strict
- Fix internal error when inflated body exceeds limit
- Prevent loss of async hooks context
- Prevent hanging when request already read
- deps: [email protected]
- deps: [email protected]
- deps: [email protected]
- deps: [email protected]
- deps: [email protected]
- deps: [email protected]
- Add
priority
option- Fix
expires
option to reject invalid dates- deps: [email protected]
- Replace internal
eval
usage withFunction
constructor- Use instance methods on
process
to check for listeners- deps: [email protected]
- Remove set content headers that break response
- deps: [email protected]
- deps: [email protected]
- deps: [email protected]
- Prevent loss of async hooks context
- deps: [email protected]
- deps: [email protected]
... (truncated)
8368dc1
4.18.261f4049
docs: replace Freenode with Libera Chatbb7907b
build: [email protected]f56ce73
build: [email protected]24b3dc5
deps: [email protected]689d175
deps: [email protected]340be0f
build: [email protected]33e8dc3
docs: use Node.js name style644f646
build: [email protected]ecd7572
build: [email protected]Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase
.
No new changes to the application.
Mainly packages updates
Distributed Message Queue
Now tasks can be executed in the background.
The first step towards an API driven Web app 🏆 Created an endpoint for all interactions. Should be easier to change the frontend in the future: Jinja2 -> React
New features:
New features:
- Extract all headers
- Extract all working links from a page
- Extract all links found on the website
- Extract all images found on a page
Cloud, Blockchain, Data, Crawl, NLP, Web ... The World is full of interesting subjects. SRE @padok-team
GitHub Repositoryseo seo-tools internal-links headers serp link-extractor lighthouse dashboard analysis python securityheader summarizer crawler audits extractor