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.
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.
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.
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.
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.
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.
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.
Understanding TypeScript Utility Types
Partial, Required, Readonly, Pick, Omit, Record, ReturnType with real examples and the footguns I've hit.
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.
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.
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.
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.
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.
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.
Demystifying 'this' in JavaScript
How this actually binds in JS: default, implicit, explicit, new, and why arrow functions ignore you.
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.
Understanding Promises in JavaScript
Promises in plain language. Pending, fulfilled, rejected, chaining, Promise.all, race, resolve, reject, with pasteable examples.
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.
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.
Copy to Clipboard with JavaScript
Use the Async Clipboard API for text and images. HTTPS required, permissions matter, and `execCommand` is dead weight now.
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.
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.
Google Analytics on Gridsome Applications
Gridsome + gtag without a plugin that fought me. Manual setup in main.js, pageviews, and a share event example.
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.
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.
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.
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.
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.