From bbfaf5ccc5285746d064c985567bcebc1e19d919 Mon Sep 17 00:00:00 2001 From: ScuroNeko Date: Thu, 16 Apr 2026 16:33:48 +0300 Subject: [PATCH] workstations and light theme --- data/projects.json | 6 +- data/schemas/links.schema.json | 32 +++++ data/schemas/projects.schema.json | 47 +++++++ data/schemas/shared.schema.json | 23 ++++ data/schemas/stack.schema.json | 39 ++++++ data/schemas/workstations.schema.json | 87 +++++++++++++ data/stack.json | 21 +++ data/workstations.json | 110 ++++++++++++++++ favicon.png => icons/favicon-512.png | Bin {icons => img/icons}/css.svg | 0 {icons => img/icons}/gh.svg | 0 {icons => img/icons}/git.svg | 0 {icons => img/icons}/go.svg | 0 {icons => img/icons}/html.svg | 0 img/icons/jetbrains.svg | 1 + {icons => img/icons}/js.svg | 0 {icons => img/icons}/mdb.svg | 0 {icons => img/icons}/psql.svg | 0 {icons => img/icons}/py.svg | 0 {icons => img/icons}/re.svg | 0 img/icons/sass.svg | 1 + {icons => img/icons}/tg.svg | 0 {icons => img/icons}/ts.svg | 0 img/icons/vscode.svg | 4 + index.html | 66 +++++++++- js/data.js | 9 +- js/projects.js | 2 +- js/stack.js | 25 +++- js/workstations.js | 144 +++++++++++++++++++++ manifest.json | 17 +++ styles/links.css | 5 +- styles/main.css | 50 ++----- styles/projects.css | 60 ++------- styles/stack.css | 31 ++++- styles/theme-light.css | 107 +++++++++++++++ styles/tones.css | 54 ++++++++ styles/workstations.css | 180 ++++++++++++++++++++++++++ 37 files changed, 1015 insertions(+), 106 deletions(-) create mode 100644 data/schemas/links.schema.json create mode 100644 data/schemas/projects.schema.json create mode 100644 data/schemas/shared.schema.json create mode 100644 data/schemas/stack.schema.json create mode 100644 data/schemas/workstations.schema.json create mode 100644 data/workstations.json rename favicon.png => icons/favicon-512.png (100%) rename {icons => img/icons}/css.svg (100%) rename {icons => img/icons}/gh.svg (100%) rename {icons => img/icons}/git.svg (100%) rename {icons => img/icons}/go.svg (100%) rename {icons => img/icons}/html.svg (100%) create mode 100644 img/icons/jetbrains.svg rename {icons => img/icons}/js.svg (100%) rename {icons => img/icons}/mdb.svg (100%) rename {icons => img/icons}/psql.svg (100%) rename {icons => img/icons}/py.svg (100%) rename {icons => img/icons}/re.svg (100%) create mode 100644 img/icons/sass.svg rename {icons => img/icons}/tg.svg (100%) rename {icons => img/icons}/ts.svg (100%) create mode 100644 img/icons/vscode.svg create mode 100644 js/workstations.js create mode 100644 manifest.json create mode 100644 styles/theme-light.css create mode 100644 styles/tones.css create mode 100644 styles/workstations.css diff --git a/data/projects.json b/data/projects.json index 7e2ffa9..e7201c2 100644 --- a/data/projects.json +++ b/data/projects.json @@ -2,6 +2,10 @@ { "description": "A personal page for projects, stack notes, and developer work.", "key": "web", + "links": { + "homepage": "https://scuroneko.dev", + "sources": "https://git.scuroneko.dev/ScuroNeko/scuroneko.dev" + }, "name": "ScuroNeko.dev", "stack": ["html", "css", "js"], "status": "active", @@ -16,6 +20,6 @@ "name": "Laniakea", "stack": ["go", "tg"], "status": "active", - "tone": "purple" + "tone": "rose" } ] diff --git a/data/schemas/links.schema.json b/data/schemas/links.schema.json new file mode 100644 index 0000000..bc3f3b7 --- /dev/null +++ b/data/schemas/links.schema.json @@ -0,0 +1,32 @@ +{ + "$id": "https://scuroneko.dev/schemas/links.schema.json", + "$schema": "https://json-schema.org/draft/2020-12/schema", + "items": { + "additionalProperties": false, + "properties": { + "key": { + "minLength": 1, + "type": "string" + }, + "label": { + "minLength": 1, + "type": "string" + }, + "name": { + "minLength": 1, + "type": "string" + }, + "tone": { + "$ref": "./shared.schema.json#/$defs/tone" + }, + "url": { + "format": "uri", + "type": "string" + } + }, + "required": ["key", "name", "label", "url", "tone"], + "type": "object" + }, + "title": "Links", + "type": "array" +} diff --git a/data/schemas/projects.schema.json b/data/schemas/projects.schema.json new file mode 100644 index 0000000..e6eb155 --- /dev/null +++ b/data/schemas/projects.schema.json @@ -0,0 +1,47 @@ +{ + "$id": "https://scuroneko.dev/schemas/projects.schema.json", + "$schema": "https://json-schema.org/draft/2020-12/schema", + "items": { + "additionalProperties": false, + "properties": { + "description": { + "minLength": 1, + "type": "string" + }, + "key": { + "minLength": 1, + "type": "string" + }, + "links": { + "additionalProperties": { + "format": "uri", + "type": "string" + }, + "type": "object" + }, + "name": { + "minLength": 1, + "type": "string" + }, + "stack": { + "items": { + "minLength": 1, + "type": "string" + }, + "type": "array", + "uniqueItems": true + }, + "status": { + "enum": ["active", "archive", "wip", "paused"], + "type": "string" + }, + "tone": { + "$ref": "./shared.schema.json#/$defs/tone" + } + }, + "required": ["key", "name", "description", "stack", "status", "tone"], + "type": "object" + }, + "title": "Projects", + "type": "array" +} diff --git a/data/schemas/shared.schema.json b/data/schemas/shared.schema.json new file mode 100644 index 0000000..13d12c0 --- /dev/null +++ b/data/schemas/shared.schema.json @@ -0,0 +1,23 @@ +{ + "$defs": { + "tone": { + "enum": [ + "blue", + "gold", + "mint", + "purple", + "red", + "cyan", + "green", + "pink", + "teal", + "lime", + "rose" + ], + "type": "string" + } + }, + "$id": "https://scuroneko.dev/schemas/shared.schema.json", + "$schema": "https://json-schema.org/draft/2020-12/schema", + "title": "Shared schema definitions" +} diff --git a/data/schemas/stack.schema.json b/data/schemas/stack.schema.json new file mode 100644 index 0000000..aff5077 --- /dev/null +++ b/data/schemas/stack.schema.json @@ -0,0 +1,39 @@ +{ + "$id": "https://scuroneko.dev/schemas/stack.schema.json", + "$schema": "https://json-schema.org/draft/2020-12/schema", + "items": { + "additionalProperties": false, + "properties": { + "hide": { + "type": "boolean" + }, + "key": { + "minLength": 1, + "type": "string" + }, + "name": { + "minLength": 1, + "type": "string" + }, + "tags": { + "items": { + "minLength": 1, + "type": "string" + }, + "type": "array", + "uniqueItems": true + }, + "tone": { + "$ref": "./shared.schema.json#/$defs/tone" + }, + "years": { + "minimum": 0, + "type": "number" + } + }, + "required": ["key", "name", "tone", "years"], + "type": "object" + }, + "title": "Stack", + "type": "array" +} diff --git a/data/schemas/workstations.schema.json b/data/schemas/workstations.schema.json new file mode 100644 index 0000000..2a0fb4b --- /dev/null +++ b/data/schemas/workstations.schema.json @@ -0,0 +1,87 @@ +{ + "$id": "https://scuroneko.dev/schemas/workstations.schema.json", + "$schema": "https://json-schema.org/draft/2020-12/schema", + "items": { + "additionalProperties": false, + "properties": { + "actual": { + "type": "boolean" + }, + "devices": { + "items": { + "additionalProperties": false, + "properties": { + "key": { + "minLength": 1, + "type": "string" + }, + "name": { + "minLength": 1, + "type": "string" + } + }, + "required": ["key", "name"], + "type": "object" + }, + "type": "array" + }, + "key": { + "minLength": 1, + "type": "string" + }, + "name": { + "minLength": 1, + "type": "string" + }, + "specs": { + "properties": { + "cpu": { + "minLength": 1, + "type": "string" + }, + "gpu": { + "minLength": 1, + "type": "string" + }, + "os": { + "type": "string" + }, + "ram": { + "minLength": 1, + "type": "string" + }, + "storage": { + "items": { + "additionalProperties": false, + "properties": { + "capacity": { + "minLength": 1, + "type": "string" + }, + "name": { + "minLength": 1, + "type": "string" + }, + "type": { + "minLength": 1, + "type": "string" + } + }, + "required": ["name", "capacity"], + "type": "object" + }, + "type": "array" + } + }, + "type": "object" + }, + "tone": { + "$ref": "./shared.schema.json#/$defs/tone" + } + }, + "required": ["key", "name", "tone"], + "type": "object" + }, + "title": "Workstations", + "type": "array" +} diff --git a/data/stack.json b/data/stack.json index c5f1fa6..f1e220d 100644 --- a/data/stack.json +++ b/data/stack.json @@ -45,6 +45,20 @@ "tone": "blue", "years": 2 }, + { + "key": "jetbrains", + "name": "JetBrains IDE", + "tags": ["tools"], + "tone": "purple", + "years": 10 + }, + { + "key": "vscode", + "name": "Visual Studio Code", + "tags": ["tools"], + "tone": "purple", + "years": 7 + }, { "hide": true, "key": "html", @@ -65,5 +79,12 @@ "name": "JavaScript", "tone": "gold", "years": 7 + }, + { + "hide": true, + "key": "sass", + "name": "Sass", + "tone": "rose", + "years": 5 } ] diff --git a/data/workstations.json b/data/workstations.json new file mode 100644 index 0000000..7702acc --- /dev/null +++ b/data/workstations.json @@ -0,0 +1,110 @@ +[ + { + "actual": true, + "devices": [ + { + "key": "monitor1", + "name": "AOC 24G2SPU" + }, + { + "key": "monitor2", + "name": "AOC 24E1Q" + }, + { + "key": "keyboard", + "name": "Ardor Wakizashi" + }, + { + "key": "mouse", + "name": "Ardor Immortaliry PRO" + }, + { + "key": "microphone", + "name": "Fifine AM8" + } + ], + "key": "pc", + "name": "PC", + "specs": { + "cpu": "AMD Ryzen 7 7700", + "gpu": "NVIDIA GeForce RTX 5070", + "os": "Windows 11 Pro", + "ram": "32GB DDR5", + "storage": [ + { + "capacity": "1TB", + "name": "Adata XPG GAMMIX S11 Pro", + "type": "M2 PCI-E 3.0" + }, + { + "capacity": "1TB", + "name": "WD Blue", + "type": "SATA HDD" + } + ] + }, + "tone": "rose" + }, + { + "actual": true, + "key": "notebook", + "name": "Notebook", + "specs": { + "cpu": "Intel Core i3-8470U", + "gpu": "Intel UHD Graphics 620", + "os": "Windows 10 LTSC 2021", + "ram": "16GB DDR4", + "storage": [ + { + "capacity": "256GB", + "name": "WD Blue SN550", + "type": "M2 PCI-E 3.0" + }, + { + "capacity": "256GB", + "name": "Neo Forza NFS12", + "type": "SATA SSD" + } + ] + }, + "tone": "blue" + }, + { + "actual": true, + "key": "vps", + "name": "VPS", + "specs": { + "cpu": "2 vCore (AMD EPYC 7763)", + "gpu": "N/A", + "os": "Arch Linux", + "ram": "4GB", + "storage": [ + { + "capacity": "60GB", + "name": "NVMe SSD", + "type": "NVMe" + } + ] + }, + "tone": "green" + }, + { + "actual": false, + "key": "pc", + "name": "PC", + "specs": { + "cpu": "Intel Core i7-6700", + "gpu": "AMD Radeon RX580", + "os": "Windows 11 Pro", + "ram": "16GB DDR4", + "storage": [ + { + "capacity": "256GB", + "name": "Samsung 850 EVO", + "type": "SATA SSD" + } + ] + }, + "tone": "teal" + } +] diff --git a/favicon.png b/icons/favicon-512.png similarity index 100% rename from favicon.png rename to icons/favicon-512.png diff --git a/icons/css.svg b/img/icons/css.svg similarity index 100% rename from icons/css.svg rename to img/icons/css.svg diff --git a/icons/gh.svg b/img/icons/gh.svg similarity index 100% rename from icons/gh.svg rename to img/icons/gh.svg diff --git a/icons/git.svg b/img/icons/git.svg similarity index 100% rename from icons/git.svg rename to img/icons/git.svg diff --git a/icons/go.svg b/img/icons/go.svg similarity index 100% rename from icons/go.svg rename to img/icons/go.svg diff --git a/icons/html.svg b/img/icons/html.svg similarity index 100% rename from icons/html.svg rename to img/icons/html.svg diff --git a/img/icons/jetbrains.svg b/img/icons/jetbrains.svg new file mode 100644 index 0000000..2f669ff --- /dev/null +++ b/img/icons/jetbrains.svg @@ -0,0 +1 @@ +JetBrains \ No newline at end of file diff --git a/icons/js.svg b/img/icons/js.svg similarity index 100% rename from icons/js.svg rename to img/icons/js.svg diff --git a/icons/mdb.svg b/img/icons/mdb.svg similarity index 100% rename from icons/mdb.svg rename to img/icons/mdb.svg diff --git a/icons/psql.svg b/img/icons/psql.svg similarity index 100% rename from icons/psql.svg rename to img/icons/psql.svg diff --git a/icons/py.svg b/img/icons/py.svg similarity index 100% rename from icons/py.svg rename to img/icons/py.svg diff --git a/icons/re.svg b/img/icons/re.svg similarity index 100% rename from icons/re.svg rename to img/icons/re.svg diff --git a/img/icons/sass.svg b/img/icons/sass.svg new file mode 100644 index 0000000..1a3eea2 --- /dev/null +++ b/img/icons/sass.svg @@ -0,0 +1 @@ +Sass \ No newline at end of file diff --git a/icons/tg.svg b/img/icons/tg.svg similarity index 100% rename from icons/tg.svg rename to img/icons/tg.svg diff --git a/icons/ts.svg b/img/icons/ts.svg similarity index 100% rename from icons/ts.svg rename to img/icons/ts.svg diff --git a/img/icons/vscode.svg b/img/icons/vscode.svg new file mode 100644 index 0000000..cf03825 --- /dev/null +++ b/img/icons/vscode.svg @@ -0,0 +1,4 @@ + + Visual Studio Code + + diff --git a/index.html b/index.html index ee9c225..09db850 100644 --- a/index.html +++ b/index.html @@ -3,11 +3,50 @@ + + + + + + + + + + + + + + + + + + + + + + - + + + ScuroNeko @@ -38,6 +79,7 @@ @@ -51,6 +93,9 @@

Tools I reach for when the task needs to ship.

+
@@ -63,9 +108,26 @@
-