Journal

Writing, mostly about software.

Short essays when one idea is enough. Longer notes when I can't leave it alone. Mostly leadership, type, performance, and whatever broke while shipping.

01

TIL: When a Static Site Becomes Easier Than a CMS

Not every small website needs a full CMS behind it. Sometimes a static site, a few Markdown files, and a simple editing flow are more than enough.

Jun 16, 2026
5 min read
02

TIL: When Docker Makes Local Development Easier

Docker doesn’t make local development easier by magic. It helps when the project has too many moving parts and the setup becomes part of the problem.

Jun 09, 2026
5 min read
03

TIL: fireEvent Is Not the Same as userEvent in React Testing Library

I used to treat fireEvent and userEvent as two ways to click or type in a test. They aren't the same thing. One fires an event. The other tries to describe what a user actually does.

Jun 04, 2026
7 min read
04

TIL: When Headless WordPress Makes More Sense Than Classic WordPress

Classic WordPress works well until every custom feature starts depending on a very small set of people. This is the story of why I started looking at Headless WordPress with React and Next.js as a cleaner way to split content, backend logic, and UI work.

Jun 03, 2026
4 min read
05

TIL: Pages CMS Actions Need a Matching GitHub Actions Input

I hit a small but annoying issue while connecting Pages CMS with GitHub Actions. Pages CMS could trigger the workflow, but GitHub rejected the request because the workflow didn’t define the payload input that Pages CMS sends when it runs a manual action.

Jun 02, 2026
5 min read
06

TIL: AbortController Helps Prevent Stale Search Results in Vue

Today I learned how AbortController can make fetch-based search inputs in Vue safer by cancelling outdated requests and stopping older responses from overwriting newer UI state.

Jun 01, 2026
4 min read
07

My 2026 Frontend Stack

A practical look at how I structure modern Vue apps in 2026, using TypeScript, TanStack Query, Zod, Tailwind, and clear boundaries between API logic, server state, validation, UI, and business rules.

May 31, 2026
12 min read
08

Vue Design Patterns That Actually Make Your Life Easier

Smart vs dumb components, list/list-item, composables, provide/inject, and when patterns help vs when they're overkill.

Dec 07, 2025
2 min read
09

Understanding TypeScript Utility Types

Partial, Required, Readonly, Pick, Omit, Record, ReturnType with real examples and the footguns I've hit.

Oct 28, 2025
2 min read
10

DYPA Published a 30MB PDF - I Built a Search Engine for It in a Couple of Hours

Greece's employment service dropped a giant PDF of results. I parsed it with Linux tools, stuffed codes in PocketBase, and shipped a Vue search UI.

Aug 05, 2025
2 min read
11

Developers, It's Time to Talk Security

Security habits I actually use in 2025. Validate input, hash passwords, patch deps, HTTPS, headers, and baking checks into the SDLC.

Jul 27, 2025
2 min read
12

The Singleton Pattern in TypeScript

When one shared instance makes sense in TypeScript, how to wire it, and why dependency injection is often the better exit.

Apr 03, 2024
2 min read
13

State Management Showdown: Vuex vs Pinia

Vuex vs Pinia on a toy counter app. API shape, TypeScript, and which one I'd pick for a new project today.

Feb 25, 2024
2 min read
14

JavaScript Objects: Your Quick Guide

Objects in JS are just key-value bags you can grow and change. Here's creation, access, methods, iteration, and prototypes without the textbook voice.

Dec 06, 2023
2 min read
15

Google One Dark Web Report

Google One now scans dark-web dumps for your info and pings you if something shows up. Quick notes on how it works and what I'd actually do with an alert.

Nov 13, 2023
1 min read
16

Demystifying 'this' in JavaScript

How this actually binds in JS: default, implicit, explicit, new, and why arrow functions ignore you.

Oct 27, 2023
2 min read
17

Unplugging and Recharging

A summer break from coding bought me clarity I didn't get from another sprint. Short notes on rest, not hustle cosplay.

Aug 21, 2023
2 min read
18

Understanding Promises in JavaScript

Promises in plain language. Pending, fulfilled, rejected, chaining, Promise.all, race, resolve, reject, with pasteable examples.

May 29, 2023
2 min read
19

API vs SDK - What's Actually Different?

APIs expose data and actions over the wire. SDKs ship libraries and tools for one platform. When to pick which, with plain examples.

May 01, 2023
2 min read
20

Comparing Vue and React in 2023: Pros and Cons

My honest take on Vue vs React in 2023. Not a winner-takes-all post, just tradeoffs I hit on real projects.

Apr 09, 2023
2 min read
21

Copy to Clipboard with JavaScript

Use the Async Clipboard API for text and images. HTTPS required, permissions matter, and `execCommand` is dead weight now.

Oct 23, 2022
2 min read
22

Vue 3 State to Your CSS with v-bind()

Wire component props into scoped CSS with Vue 3's v-bind() in the style block. Handy for theme tokens without inline styles everywhere.

Oct 20, 2022
1 min read
23

Hide Your API Keys with an API Proxy Server

Move API keys off the client with a tiny Express proxy. Weather API example, axios, dotenv. Not perfect, but better than keys in the bundle.

Aug 09, 2022
2 min read
24

Google Analytics on Gridsome Applications

Gridsome + gtag without a plugin that fought me. Manual setup in main.js, pageviews, and a share event example.

Apr 10, 2022
1 min read
25

Why I Created a Password Generator CLI Tool

gPass is a tiny npm CLI I built because opening a password site in the browser got old. Install, run, copy, back to work.

Jul 24, 2021
1 min read
26

Internationalization (i18n) with Angular

Built-in Angular i18n from scratch: mark strings, extract XLF, translate to Greek and French, build per locale. No ngx-translate in this walkthrough.

Nov 07, 2019
5 min read
27

Things I Love About Vue

Why Vue stuck for me after a student social network project in 2018. SFCs, CLI, Vuex, and a community that isn't owned by one company.

Oct 04, 2019
2 min read
28

Dynamic Menu in Vue

Build a sidebar from Vue Router routes with meta.visible and a recursive MenuItem component. Vue CLI 3 era, still useful pattern.

Aug 26, 2019
2 min read
29

6 YouTube Channels to Follow as a Jr Web Developer

Six YouTube channels that helped me as a junior dev when paid 35-hour courses felt like too much. Free, messy, real code.

Aug 20, 2019
2 min read