Skip to content

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.

RSS feed

01

The Architecture Behind a Search Page That Still Feels Fast at Scale

Building a global search page for a large WordPress platform wasn’t mainly a frontend task. It required a dedicated search index, a clear content model, a controlled API, and a UI that could handle filters without feeling slow.

Jul 23, 2026
14 min read
02

TIL: When Cursor-Based Pagination Is Better Than Offset Pagination

Offset pagination is simple and works well for small datasets, but it can become slow and inconsistent as data grows or changes between requests. Cursor-based pagination fixes many of those problems, though it comes with a few tradeoffs of its own.

Jul 21, 2026
6 min read
03

TIL: Why I Stopped Trusting switch Statements for TypeScript Unions

I assumed switch over a TypeScript union was safe. Adding a new union value can fall through to default with no compiler error. Why I reached for ts-pattern.

Jul 03, 2026
4 min read
04

TIL: When Autoscaling Node.js by CPU Is Not Enough

CPU looks like the obvious metric for autoscaling, until a Node.js service starts timing out while the CPU graph still looks calm. For Node.js workloads, the event loop can tell a more honest story.

Jun 28, 2026
8 min read
05

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
06

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
07

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
08

TIL: When Headless WordPress Makes More Sense Than Classic WordPress

Classic WordPress works until every custom feature depends on a tiny team. Why I looked at headless WordPress with React and Next.js to split content, backend, and UI.

Jun 03, 2026
4 min read
09

TIL: Pages CMS Actions Need a Matching GitHub Actions Input

Pages CMS could trigger my GitHub Action, but GitHub rejected the run because the workflow never declared the payload input Pages CMS sends on manual deploy.

Jun 02, 2026
5 min read
10

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
11

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
12

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
13

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
14

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
15

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
16

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
17

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
18

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
19

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
20

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
21

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
22

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
23

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
24

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
25

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
26

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
27

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
28

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
29

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
30

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
31

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
32

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
33

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