diff --git a/.eslintrc b/.eslintrc
index 3a220319e5fb8bb1653379bf2a4f15a0bbbc59f9..3e5b59cb048a849557963774729f0ba640d63884 100644
--- a/.eslintrc
+++ b/.eslintrc
@@ -3,29 +3,11 @@
 		"parser": "@typescript-eslint/parser"
 	},
 	"extends": [
-		"eslint:recommended",
-		"plugin:vue/recommended"
+		"eslint:recommended"
 	],
 	"rules": {
-		"vue/require-v-for-key": 0,
-		"vue/max-attributes-per-line": 0,
-		"vue/html-indent": 0,
-		"vue/html-self-closing": 0,
-		"vue/no-unused-vars": 0,
-		"vue/attributes-order": 0,
-		"vue/require-prop-types": 0,
-		"vue/require-default-prop": 0,
-		"vue/html-closing-bracket-spacing": 0,
-		"vue/singleline-html-element-content-newline": 0,
-		"vue/no-v-html": 0,
 		"no-console": 0,
 		"no-unused-vars": 0,
 		"no-empty": 0
-	},
-	"globals": {
-		"ENV": true,
-		"VERSION": true,
-		"API": true,
-		"LANGS": true
 	}
 }
diff --git a/gulpfile.ts b/gulpfile.ts
index b899d62f99972ce8e89be0cdfd86f4fea8bbae44..0717d82086477c58494cba1b777e9d61c4452ffb 100644
--- a/gulpfile.ts
+++ b/gulpfile.ts
@@ -14,7 +14,7 @@ const locales: { [x: string]: any } = require('./locales');
 const meta = require('./package.json');
 
 gulp.task('build:ts', () => {
-	const tsProject = ts.createProject('./tsconfig.json');
+	const tsProject = ts.createProject('./src/tsconfig.json');
 
 	return tsProject
 		.src()
diff --git a/src/.eslintrc b/src/.eslintrc
new file mode 100644
index 0000000000000000000000000000000000000000..d54e20f6b69c9d85306c33f456f45721ba0c748d
--- /dev/null
+++ b/src/.eslintrc
@@ -0,0 +1,6 @@
+{
+	"env": {
+		"node": true,
+		"commonjs": true
+	}
+}
diff --git a/src/client/.eslintrc b/src/client/.eslintrc
index 8829472b49ec8a61856f854b371547e1d23bddb7..fffa28d9e4c68fa347a2837f43996d7ced0073f1 100644
--- a/src/client/.eslintrc
+++ b/src/client/.eslintrc
@@ -1,4 +1,24 @@
 {
+	"env": {
+		"node": false,
+	},
+	"extends": [
+		"eslint:recommended",
+		"plugin:vue/recommended"
+	],
+	"rules": {
+		"vue/require-v-for-key": 0,
+		"vue/max-attributes-per-line": 0,
+		"vue/html-indent": 0,
+		"vue/html-self-closing": 0,
+		"vue/no-unused-vars": 0,
+		"vue/attributes-order": 0,
+		"vue/require-prop-types": 0,
+		"vue/require-default-prop": 0,
+		"vue/html-closing-bracket-spacing": 0,
+		"vue/singleline-html-element-content-newline": 0,
+		"vue/no-v-html": 0
+	},
 	"globals": {
 		"_DEV_": false,
 		"_LANGS_": false,
diff --git a/tsconfig.json b/src/tsconfig.json
similarity index 89%
rename from tsconfig.json
rename to src/tsconfig.json
index 075450bf64e1cde1e309dc4c99787ff2b24afee3..95cb35fc5fbf7c8ed6a77ed17d52d0a71fe9e0e8 100644
--- a/tsconfig.json
+++ b/src/tsconfig.json
@@ -22,8 +22,8 @@
 		"resolveJsonModule": true,
 		"isolatedModules": true,
 		"typeRoots": [
-			"node_modules/@types",
-			"src/@types"
+			"../node_modules/@types",
+			"./@types"
 		],
 		"lib": [
 			"esnext"
@@ -31,9 +31,9 @@
 	},
 	"compileOnSave": false,
 	"include": [
-		"./src/**/*.ts"
+		"./**/*.ts"
 	],
 	"exclude": [
-		"./src/client/**/*.ts"
+		"./client/**/*.ts"
 	]
 }
diff --git a/test/.eslintrc b/test/.eslintrc
new file mode 100644
index 0000000000000000000000000000000000000000..cea1b11388cfd499ccd692e84cf5aee0397848d9
--- /dev/null
+++ b/test/.eslintrc
@@ -0,0 +1,7 @@
+{
+	"env": {
+		"node": true,
+		"mocha": true,
+		"commonjs": true
+	}
+}
diff --git a/test/tsconfig.json b/test/tsconfig.json
new file mode 100644
index 0000000000000000000000000000000000000000..987067ba81919379b5b75d13a2ff2749578ed91c
--- /dev/null
+++ b/test/tsconfig.json
@@ -0,0 +1,36 @@
+{
+	"compilerOptions": {
+		"allowJs": true,
+		"noEmitOnError": false,
+		"noImplicitAny": true,
+		"noImplicitReturns": true,
+		"noUnusedParameters": false,
+		"noUnusedLocals": true,
+		"noFallthroughCasesInSwitch": true,
+		"declaration": false,
+		"sourceMap": true,
+		"target": "es2017",
+		"module": "commonjs",
+		"moduleResolution": "node",
+		"removeComments": false,
+		"noLib": false,
+		"strict": true,
+		"strictNullChecks": true,
+		"strictPropertyInitialization": false,
+		"experimentalDecorators": true,
+		"emitDecoratorMetadata": true,
+		"resolveJsonModule": true,
+		"isolatedModules": true,
+		"typeRoots": [
+			"../node_modules/@types",
+			"../src/@types"
+		],
+		"lib": [
+			"esnext"
+		]
+	},
+	"compileOnSave": false,
+	"include": [
+		"./**/*.ts"
+	]
+}