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: 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
02

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
03

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
04

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
05

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
06

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
07

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
08

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
09

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
10

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
11

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
12

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
13

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
14

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
15

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
16

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
17

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
18

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
19

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
20

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
21

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
22

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
23

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
24

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
25

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
26

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
27

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