diff --git a/.gitignore b/.gitignore
index 9ccb36a9ee..e438ad890c 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,5 +1,6 @@
 # Visual Studio Code
 /.vscode
+!/.vscode/extensions.json
 
 # Intelij-IDEA
 /.idea
diff --git a/.vscode/extensions.json b/.vscode/extensions.json
index 36cfce106e..40b781b552 100644
--- a/.vscode/extensions.json
+++ b/.vscode/extensions.json
@@ -2,10 +2,10 @@
 	"recommendations": [
 		"ducksoupdev.vue2",
 		"editorconfig.editorconfig",
-		"eg2.tslint",
 		"eg2.vscode-npm-script",
 		"hollowtree.vue-snippets",
 		"ms-vscode.typescript-javascript-grammar",
+		"ms-vscode.vscode-typescript-tslint-plugin",
 		"octref.vetur",
 		"sysoev.language-stylus"
 	]
diff --git a/src/client/app/desktop/views/components/activity.calendar.vue b/src/client/app/desktop/views/components/activity.calendar.vue
index 9e3e6f0818..da74a97f68 100644
--- a/src/client/app/desktop/views/components/activity.calendar.vue
+++ b/src/client/app/desktop/views/components/activity.calendar.vue
@@ -5,7 +5,7 @@
 		:x="record.x" :y="record.date.weekday"
 		rx="1" ry="1"
 		fill="transparent">
-		<title>{{ record.date.year }}/{{ record.date.month }}/{{ record.date.day }}</title>
+		<title>{{ record.date.year }}/{{ record.date.month + 1 }}/{{ record.date.day }}</title>
 	</rect>
 	<rect v-for="record in data" class="day"
 		:width="record.v" :height="record.v"
@@ -39,17 +39,17 @@ export default Vue.extend({
 		const month = now.getMonth();
 		const day = now.getDate();
 
-		let x = 0;
-		this.data.slice().reverse().forEach((d, i) => {
+		let x = 20;
+		this.data.slice().forEach((d, i) => {
 			d.x = x;
 
 			const date = new Date(year, month, day - i);
 			d.date = {
 				year: date.getFullYear(),
 				month: date.getMonth(),
-				day: date.getDate()
+				day: date.getDate(),
+				weekday: date.getDay()
 			};
-			d.date.weekday = (new Date(d.date.year, d.date.month - 1, d.date.day)).getDay();
 
 			d.v = peak == 0 ? 0 : d.total / (peak / 2);
 			if (d.v > 1) d.v = 1;
@@ -58,7 +58,7 @@ export default Vue.extend({
 			const cl = 15 + ((1 - d.v) * 80);
 			d.color = `hsl(${ch}, ${cs}%, ${cl}%)`;
 
-			if (d.date.weekday == 6) x++;
+			if (d.date.weekday == 0) x--;
 		});
 	}
 });
diff --git a/src/client/app/desktop/views/components/activity.chart.vue b/src/client/app/desktop/views/components/activity.chart.vue
index 7a5004e998..648b64a3fe 100644
--- a/src/client/app/desktop/views/components/activity.chart.vue
+++ b/src/client/app/desktop/views/components/activity.chart.vue
@@ -46,7 +46,7 @@ export default Vue.extend({
 	props: ['data'],
 	data() {
 		return {
-			viewBoxX: 140,
+			viewBoxX: 147,
 			viewBoxY: 60,
 			zoom: 1,
 			pos: 0,
diff --git a/src/client/app/desktop/views/components/activity.vue b/src/client/app/desktop/views/components/activity.vue
index 7bb942ac09..2cac125041 100644
--- a/src/client/app/desktop/views/components/activity.vue
+++ b/src/client/app/desktop/views/components/activity.vue
@@ -48,7 +48,7 @@ export default Vue.extend({
 		this.$root.api('charts/user/notes', {
 			userId: this.user.id,
 			span: 'day',
-			limit: 7 * 20
+			limit: 7 * 21
 		}).then(activity => {
 			this.activity = activity.diffs.normal.map((_, i) => ({
 				total: activity.diffs.normal[i] + activity.diffs.reply[i] + activity.diffs.renote[i],