From 0370479fac4bb16274f0d69c487d5371c143afc7 Mon Sep 17 00:00:00 2001 From: andwati Date: Fri, 13 Feb 2026 23:34:27 +0300 Subject: [PATCH] feat: add multiple new blog posts, remove old ones, and update core application and blog template pages. --- app/app.vue | 18 +- app/pages/about.vue | 48 ++- app/pages/blog/[...slug].vue | 51 ++- app/pages/index.vue | 307 ++++++++++-------- content/blog/a-fresh-coat-of-paint.md | 55 ++++ .../blog/building-a-blog-with-nuxt-content.md | 56 ---- content/blog/file-over-app.md | 12 + content/blog/generate-django-secret-key.md | 37 +++ content/blog/getting-started-with-nuxt-4.md | 45 --- content/blog/hello-world.md | 30 ++ content/blog/inertia.md | 18 + ...tgresql-15-on-arch-manjaro-garuda-linux.md | 151 +++++++++ content/blog/integrating-netlify.md | 30 ++ content/blog/javascript-exporting-modules.md | 172 ++++++++++ content/blog/mmuctf2025.md | 162 +++++++++ content/blog/obsidian-sync.md | 116 +++++++ ...mantic-version-and-conventional-commits.md | 81 +++++ content/blog/subresource-integrity.md | 58 ++++ content/blog/utterances-comments.md | 63 ++++ content/blog/vuejs-tailwind.md | 121 +++++++ content/blog/why-i-love-open-source.md | 41 --- 21 files changed, 1343 insertions(+), 329 deletions(-) create mode 100644 content/blog/a-fresh-coat-of-paint.md delete mode 100644 content/blog/building-a-blog-with-nuxt-content.md create mode 100644 content/blog/file-over-app.md create mode 100644 content/blog/generate-django-secret-key.md delete mode 100644 content/blog/getting-started-with-nuxt-4.md create mode 100644 content/blog/hello-world.md create mode 100644 content/blog/inertia.md create mode 100644 content/blog/install-postgresql-15-on-arch-manjaro-garuda-linux.md create mode 100644 content/blog/integrating-netlify.md create mode 100644 content/blog/javascript-exporting-modules.md create mode 100644 content/blog/mmuctf2025.md create mode 100644 content/blog/obsidian-sync.md create mode 100644 content/blog/semantic-version-and-conventional-commits.md create mode 100644 content/blog/subresource-integrity.md create mode 100644 content/blog/utterances-comments.md create mode 100644 content/blog/vuejs-tailwind.md delete mode 100644 content/blog/why-i-love-open-source.md diff --git a/app/app.vue b/app/app.vue index b7834e6..deeaadb 100644 --- a/app/app.vue +++ b/app/app.vue @@ -32,10 +32,10 @@ const navItems = computed(() => [ @@ -54,7 +54,7 @@ const navItems = computed(() => [ (() => [ @@ -94,11 +94,19 @@ const navItems = computed(() => [ + diff --git a/app/pages/about.vue b/app/pages/about.vue index 693d2b6..24c71b5 100644 --- a/app/pages/about.vue +++ b/app/pages/about.vue @@ -2,19 +2,20 @@ useSeoMeta({ title: "About — Ian Andwati", description: - "Learn more about Ian Andwati — software engineer passionate about building great products.", + "Learn more about Ian Andwati — software engineer interested in offensive security and reverse engineering.", }); const skills = [ + { name: "C", icon: "i-simple-icons-c" }, + { name: "Rust", icon: "i-simple-icons-rust" }, + { name: "Go", icon: "i-simple-icons-go" }, + { name: "Python", icon: "i-simple-icons-python" }, { name: "TypeScript", icon: "i-simple-icons-typescript" }, { name: "Vue.js", icon: "i-simple-icons-vuedotjs" }, { name: "Nuxt", icon: "i-simple-icons-nuxtdotjs" }, - { name: "Node.js", icon: "i-simple-icons-nodedotjs" }, - { name: "Go", icon: "i-simple-icons-go" }, - { name: "Python", icon: "i-simple-icons-python" }, { name: "Docker", icon: "i-simple-icons-docker" }, { name: "Git", icon: "i-simple-icons-git" }, - { name: "PostgreSQL", icon: "i-simple-icons-postgresql" }, + { name: "Linux", icon: "i-simple-icons-linux" }, ]; @@ -34,9 +35,10 @@ const skills = [

About

Ian Andwati

+

0xmockinspectre · offending binaries

- I'm a software engineer who loves building tools and products that make a difference. - My interests span full-stack development, open source, and exploring new technologies. + I spend my free time working on hobby projects and sometimes I write about my experiences. + In particular, I enjoy learning about offensive security and reverse engineering.

@@ -51,9 +53,9 @@ const skills = [

Focus

What I Do

- I specialize in building modern web applications using cutting-edge technologies. - Whether it's crafting a seamless user experience on the frontend or architecting - robust backend systems, I enjoy the entire spectrum of software development. + I'm interested in low-level systems programming, security research, and understanding how things + work under the hood. I build CPU emulators, CLI tools, bots, and web apps as hobby projects. + I also participate in CTF competitions and write about what I learn.

@@ -77,13 +79,12 @@ const skills = [ - +

Connect

-

Get in Touch

+

Find Me

- Feel free to reach out through any of the links below. Always happy to - connect and discuss interesting projects or ideas. + You can find me on the following platforms.

+
diff --git a/app/pages/blog/[...slug].vue b/app/pages/blog/[...slug].vue index 8f2bc6f..7f177af 100644 --- a/app/pages/blog/[...slug].vue +++ b/app/pages/blog/[...slug].vue @@ -20,34 +20,33 @@ useSeoMeta({ diff --git a/app/pages/index.vue b/app/pages/index.vue index c91a380..7c646f0 100644 --- a/app/pages/index.vue +++ b/app/pages/index.vue @@ -6,20 +6,73 @@ const { data: recentPosts } = await useAsyncData("recent-posts", () => useSeoMeta({ title: "Ian Andwati — Software Engineer", description: - "Software engineer passionate about building great products. I write about development, technology, and the things I learn along the way.", + "Software engineer interested in offensive security, reverse engineering, and building hobby projects.", }); -const codeSnippet = `const softwareEngineer = { +const codeSnippet = `const engineer = { name: 'Ian Andwati', - role: 'Software Engineer', - skills: [ - 'TypeScript', 'Vue.js', 'Nuxt', - 'Node.js', 'Go', 'Python' + handle: '0xmockinspectre', + interests: [ + 'Offensive Security', + 'Reverse Engineering', + 'Systems Programming' + ], + languages: [ + 'C', 'Rust', 'Go', + 'Python', 'TypeScript' ], - getProjects: async () => { - return await fetchProjects(); - }, };`; + +const projects = [ + { + name: "unsplash-bot", + description: "Telegram bot to download images from Unsplash.", + icon: "i-lucide-image", + lang: "Python", + stars: 8, + url: "https://github.com/andwati/unsplash-bot", + }, + { + name: "mos-6502", + description: "MOS 6502 CPU emulator — 8 bit lives!", + icon: "i-lucide-cpu", + lang: "C", + stars: 4, + url: "https://github.com/andwati/mos-6502", + }, + { + name: "url-shortener", + description: "URL shortener service built in Go.", + icon: "i-lucide-link", + lang: "Go", + stars: 1, + url: "https://github.com/andwati/url-shortener", + }, + { + name: "ratatui-json-editor", + description: "Terminal JSON editor built with Ratatui.", + icon: "i-lucide-file-json", + lang: "Rust", + stars: 1, + url: "https://github.com/andwati/ratatui-json-editor", + }, + { + name: "store-api", + description: "Store inventory REST API.", + icon: "i-lucide-database", + lang: "Python", + stars: 1, + url: "https://github.com/andwati/store-api", + }, + { + name: "andwati.xyz", + description: "This personal site, rebuilt with Nuxt.", + icon: "i-lucide-globe", + lang: "Vue", + stars: 0, + url: "https://github.com/andwati/andwati.xyz", + }, +];