Blog

Writing

Notes on nopCommerce, .NET, and building for the web.

  • What Clean Code Means: A Pull Request Review Checklist

    "Clean code" is easy to say and hard to pin down. The most useful way to define it is by what you look for when you review someone's pull request. Here is that checklist, and a one-line definition that is not a buzzword.

  • Monolith, Layered, or Modular? The Difference, With nopCommerce as the Example

    "Monolith" gets used as one word for architectures that are not the same thing. The confusing part is that a layered monolith and a modular monolith are both organized, they are just sliced along different axes. nopCommerce is the clearest example, because it is layered, not classic, and not textbook modular.

  • Event Tracking in Google Analytics: What It Costs, and What's Worth Tracking

    In the last post I said conversion tracking is the part of a report that proves value. True, but it is also the part that takes real work, and most of it is not worth doing for a small business. Track the few events that equal money, skip the rest.

  • Google Analytics vs Cloudflare: What Your Website Report Actually Proves

    Website analytics is not a dashboard you glance at. Every number should prove something about what your site is delivering. Here is what Cloudflare and Google Analytics each prove, whether you need both, and where the numbers come from.

  • Reading nopCommerce as a System: A Monolith's Lessons for System Design

    People treat writing code and designing systems as separate skills, and a monolith as the opposite of good system design. But a well-architected monolith like nopCommerce has boundaries, layers, caching, and events. The discipline of reasoning about them is the same discipline. Here is the map, and where it honestly breaks.

  • Dependency Injection in nopCommerce Plugins

    Writing a nopCommerce plugin is mostly an exercise in dependency injection. This is a focused look at the DI scenarios you actually hit when extending nopCommerce: registration, lifetimes, overriding services, events, and tasks. Not a general plugin tutorial.

  • Scheduled Tasks: The Work That Runs Itself

    Every business has recurring chores that depend on a person remembering to do them. A scheduled task turns that into work that just happens, on time, every time. Here is what to automate, and what separates a reliable one from a script that quietly fails.

  • nopCommerce Is More Than an Online Store

    Most people think nopCommerce is store software. It is, but underneath it is a mature ASP.NET Core application with roles, scheduling, security, and a full back office. That makes it a strong base for custom business apps that never sell a thing.

  • When Off-the-Shelf Software Hits a Wall

    SaaS platforms and plugins are built for the average user, so the step that is specific to your business becomes a manual chore. A custom build turns that chore into a button. Here is what that looks like, and when it is worth it.

  • nopCommerce vs Shopify: Owning Your Store vs Renting One

    Shopify is the fastest way to open a store, and for a lot of businesses it is the right call. But you are renting a platform, not owning one. Here is where that trade matters, and where it does not.

  • Two Kinds of AI, One Feature: Building a PDF Import Around What the User Actually Wanted

    A host told me he would upload the setlist PDF he already sends out, as long as he did not have to change it. That one sentence set the design. Here is how I put two kinds of AI behind his existing habit, and other ways to use the same pattern.

  • Why I Reach for nopCommerce Over WordPress for an Online Store

    WordPress runs most of the web, so it is the default for a shop too. As your store's needs grow, that default is worth a second look. Here is where nopCommerce pulls ahead, and where WordPress is still the right call.