Automation and Tooling

Workflow Automation and Internal Tools

This project area reflects a recurring pattern in the work: many problems do not need a large application. They need a well-scoped tool, script, or service that removes repetition and makes an existing workflow easier to run. The most useful internal tools tend to be small, specific, and reliable.

TypeScriptNode.jsPlaywrightAPIsCron JobsLinux

Overview

A body of automation and utility work aimed at reducing repetitive manual steps, connecting systems together, and exposing the right information at the right time.

01

Problem / Context

Repeated manual tasks create a hidden cost. Even when each action is small, the accumulation of context switching, browser work, copying, checking, and re-checking becomes both inefficient and mentally expensive.

02

Solution / Approach

The approach was to build tools around specific points of friction rather than building a generic automation layer first. That means starting with the workflow, identifying where repetition or uncertainty is highest, and designing the smallest reliable tool that meaningfully improves it.

03

Overview

The result is a more deliberate automation toolkit: small systems that improve visibility, reduce repetition, and support cleaner day-to-day work without becoming another source of complexity.

04

Technical Details

Node.js and TypeScript used for scheduled jobs, scripts, service connectors, and small internal utilities

Playwright used where automation requires browser interaction rather than clean API access

CLI-friendly design so tools can sit comfortably inside Linux-based workflows and developer environments

Automation output structured so it can be consumed by dashboards, local utilities, or system bars where relevant

Tooling decisions guided by long-term maintenance and ease of rerun, not just by making the first version work

05

Challenges

Avoiding fragile automation when the source system is inconsistent or designed primarily for manual use

Keeping utility work narrow enough to stay dependable over time

Making sure tooling improves a workflow rather than introducing another thing that needs managing

06

Lessons Learned

The best internal tools usually have a very specific job and a very clear input/output model

Automation becomes maintainable when failure modes are considered as part of the design

A tool is more valuable when it fits naturally into an existing workflow rather than replacing everything around it

Detailed Content

More context behind the project.

Context

Automation work is often presented as if the main benefit is speed. In practice, the more important benefit is usually reduced friction. A saved minute matters, but a calmer process matters more because it reduces interruption, inconsistency, and avoidable mental load.

This project area represents the kind of tools I find especially useful to build:

  • scripts that remove repeated manual steps
  • small services that connect awkward systems together
  • data collection tools where no clean API exists
  • utilities that surface useful information in the right place at the right time

The Real Problem

The underlying issue is rarely that a workflow is impossible. It is that it is repetitive, brittle, and expensive in attention.

Typical signs include:

  • repeating the same browser flow every day
  • copying the same data between systems
  • checking for updates manually
  • collecting information from sites not designed for integration
  • maintaining a set of fragile personal workarounds

Those problems often sit below the level of a full product, but they still deserve engineering attention.

Product Philosophy

The key principle here is proportion. Not every workflow issue should become a platform. A lot of useful engineering work lives in building the smallest system that removes the highest-friction step.

That changes the shape of the solution:

  • narrow scope instead of a broad internal tool suite
  • strong input and output boundaries
  • easy reruns
  • failure modes that are obvious
  • tooling that fits naturally inside existing workflows

Typical Work In This Area

Believable examples include:

  • scraping structured information from sites with no API
  • turning repeated browser interactions into scheduled jobs
  • transforming data into local JSON or dashboard-friendly output
  • generating summaries that can be used in terminals, bars, or dashboards
  • connecting internal workflow data between systems with incompatible formats

Technical Direction

This kind of work often sits naturally in Node.js and TypeScript because the tools benefit from strong scripting ergonomics and enough structure to stay maintainable.

Where the workflow requires browser automation rather than clean HTTP access, Playwright becomes useful. When the workflow is mostly transformation and scheduling, CLI-first utilities and cron-friendly scripts are often a better fit than a large UI.

The technical focus is not on novelty. It is on reliability:

  • can the job run again cleanly?
  • is the failure obvious?
  • is the output structured enough to be reused?
  • is the tool still understandable in six months?

Challenges

The hardest part of automation work is resisting the wrong level of abstraction. There is always a temptation to generalise too early.

A better pattern is:

  1. understand the workflow
  2. find the repeated pain point
  3. build a narrow tool that solves it well
  4. only generalise later if the repetition is real

That keeps the system believable and maintainable.

Why It Fits My Goals

This area reflects a core part of how I think about software. I am interested in building things that improve the shape of work. That can mean a full-stack product, but it can also mean a script, service, or automation layer that removes repeated overhead.

It also fits naturally with my wider interest in Linux environments, terminal workflows, Neovim, and practical developer tooling.

Outcome

The result is a body of work that demonstrates system thinking, restraint, and practical engineering judgment. These tools are not designed to look impressive in isolation. They are designed to make a workflow cleaner, faster, and easier to trust.

Related Articles

More writing connected to this project.

Automation

Automating Brittle Workflows Without Overbuilding the Solution

A practical look at building automation around awkward, repetitive workflows while keeping the tooling small, dependable, and worth maintaining.

Shane Gifford

Manchester-based web developer focused on practical full-stack applications, functional minimalist systems, and workflow-aware tooling.

Modern web applications

Backend workflows and APIs

Functional minimalist systems

Built for practical, well-structured software

© 2026 Shane Gifford