diff --git a/navLinks.json b/navLinks.json index de8baa5..46d9329 100644 --- a/navLinks.json +++ b/navLinks.json @@ -31,8 +31,17 @@ "label": "Newsletter" }, { - "href": "/tools", - "label": "Tools I use" + "label": "Tools I use", + "submenu": [ + { + "href": "/tools", + "label": "How I Use Them" + }, + { + "href": "/stack", + "label": "Tech Stack Overview" + } + ] }, { "label": "Projects", diff --git a/techStack.json b/techStack.json new file mode 100644 index 0000000..9de7c78 --- /dev/null +++ b/techStack.json @@ -0,0 +1,114 @@ +[ + { + "name": "Authelia", + "description": "Authelia provides two-factor authentication and single sign-on for private routes on the blog, securing administrative access.", + "png": "/static/images/logos/Authelia.png", + "svg": "/static/images/logos/Authelia.svg", + "url": "https://www.authelia.com/" + }, + { + "name": "Debian", + "description": "Debian is the base operating system that runs the server hosting the blog, offering stability and security.", + "png": "/static/images/logos/Debian.png", + "svg": "/static/images/logos/Debian.svg", + "url": "https://www.debian.org/" + }, + { + "name": "Express", + "description": "Express.js is the core HTTP server that powers the blog's routing, middleware, and response handling.", + "png": "/static/images/logos/Express.png", + "svg": "/static/images/logos/Express.svg", + "url": "https://expressjs.com/" + }, + { + "name": "Handlebars", + "description": "Handlebars is the templating engine used to render HTML pages for the blog dynamically on the server side.", + "png": "/static/images/logos/Handlebars.png", + "svg": "/static/images/logos/Handlebars.svg", + "url": "https://handlebarsjs.com/" + }, + { + "name": "Linux", + "description": "Linux is the kernel layer supporting the Debian OS on which the blog stack operates.", + "png": "/static/images/logos/Linux.png", + "svg": "/static/images/logos/Linux.svg", + "url": "https://www.kernel.org/" + }, + { + "name": "Mocha", + "description": "Mocha is used to test backend logic and ensure the reliability of the blog's JavaScript codebase.", + "png": "/static/images/logos/Mocha.png", + "svg": "/static/images/logos/Mocha.svg", + "url": "https://mochajs.org/" + }, + { + "name": "NGINX", + "description": "NGINX acts as a reverse proxy to serve the blog and handle HTTPS traffic termination.", + "png": "/static/images/logos/NGINX.png", + "svg": "/static/images/logos/NGINX.svg", + "url": "https://nginx.org/" + }, + { + "name": "NixOS", + "description": "NixOS is used as a secondary development environment for testing reproducible builds of the blog stack.", + "png": "/static/images/logos/NixOS.png", + "svg": "/static/images/logos/NixOS.svg", + "url": "https://nixos.org/" + }, + { + "name": "Node.js", + "description": "Node.js is the runtime environment executing the blog's backend JavaScript code.", + "png": "/static/images/logos/Node.js.png", + "svg": "/static/images/logos/Node.js.svg", + "url": "https://nodejs.org/" + }, + { + "name": "Nodemon", + "description": "Nodemon automatically restarts the Express server during development when code changes are detected.", + "png": "/static/images/logos/Nodemon.png", + "svg": "/static/images/logos/Nodemon.svg", + "url": "https://github.com/remy/nodemon" + }, + { + "name": "NPM", + "description": "NPM manages the dependencies for all backend and tooling packages used in the blog engine.", + "png": "/static/images/logos/NPM.png", + "svg": "/static/images/logos/NPM.svg", + "url": "https://www.npmjs.com/" + }, + { + "name": "Oh My Zsh", + "description": "Oh My Zsh enhances the development terminal with plugins and themes used to manage and deploy the blog.", + "png": "/static/images/logos/Oh-my-zsh.png", + "svg": "/static/images/logos/Oh-my-zsh.svg", + "url": "https://ohmyz.sh/" + }, + { + "name": "Raspberry Pi", + "description": "Raspberry Pi is used as a self-hosted hardware platform for testing deployments of the blog on ARM architecture.", + "png": "/static/images/logos/Raspberry-Pi.png", + "svg": "/static/images/logos/Raspberry-Pi.svg", + "url": "https://www.raspberrypi.com/" + }, + { + "name": "SQLite", + "description": "SQLite is the embedded database used to store blog content, metadata, and configuration data.", + "png": "/static/images/logos/SQLite.png", + "svg": "/static/images/logos/SQLite.svg", + "url": "https://www.sqlite.org/" + }, + { + "name": "SSH", + "description": "SSH provides secure access to the remote server that hosts and maintains the blog.", + "png": "/static/images/logos/SSH.png", + "svg": "/static/images/logos/SSH.svg", + "url": "https://www.openssh.com/" + }, + { + "name": "Visual Studio", + "description": "Visual Studio is the integrated development environment used to build and debug the blog’s backend.", + "png": "/static/images/logos/Visual-Studio.png", + "svg": "/static/images/logos/Visual-Studio.svg", + "url": "https://visualstudio.microsoft.com/" + } +]