The building of fasttools.dev

A Vue 3 + Vite + PNPM + Raw CSS adventure in the modern frontend world.

Fast Tools (fasttools.dev) is a collection of free utilities designed to help developers and testers with everyday tasks like UUID and document generation. While the tools themselves are small in scope, the real value of this project, for me, was in the journey of revisiting frontend development with modern tools and practices.

After years focusing primarily on backend technologies, cloud architecture, and .NET ecosystems, this project allowed me to re-engage with Vue 3, Vite, and Static Site Generation (SSG) — while deepening my practical knowledge of Azure Static Web Apps, SEO, and CI/CD pipelines using pnpm.

Project Goals: Static, Fast, Simple — Done Right

While I continue to work as a full-stack developer professionally, my recent projects have been backend and Android-centric. The fasttools.dev project was born as a deliberate exercise in sharpening skills that often gather dust when we’re knee-deep in APIs and databases:

  • Vue 3 with Composition API
  • Vite for fast, efficient static builds
  • Static Site Generation (SSG) for performance and SEO
  • Azure Static Web Apps for deployment
  • CI/CD with pnpm
  • CSS written entirely from scratch — no frameworks, no utilities, no libraries, no boilerplates

One key design principle for this project was simplicity. Each tool is pre-rendered at build time. There’s no SPA, no client-side routing, no backend APIs. This choice optimizes for speed, SEO, and maintainability.


No CSS Frameworks: Handmade Styling for a Lightweight Footprint

While tools like Tailwind CSS or Bootstrap are popular choices today, I deliberately chose not to use any CSS frameworks or utility-first libraries for fasttools.dev. All the styling is written by hand, from scratch, with plain CSS.

Why?

  1. Educational Intent: Revisiting core CSS skills was part of the exercise.
  2. Lightweight Result: Minimal CSS, optimized for exactly what’s needed.
  3. Full Control: Every component and layout behaves exactly as designed, with no external dependencies bloating the output.

The result is a site with a tiny CSS footprint, perfectly aligned with the project’s performance goals.


Why pnpm instead of npm or yarn?

I standardized on pnpm across all my projects due to its clear benefits:

  • Faster dependency installation
  • Content-addressable storage
  • Deterministic builds

However, Azure Static Web Apps does not support pnpm by default. This led me to create a custom CI/CD pipeline to ensure smooth integration.


Custom CI/CD with GitHub Actions for pnpm on Azure

To deploy a Vue 3 + Vite SSG site with pnpm to Azure Static Web Apps, I customized the GitHub Actions workflow. Below is the production pipeline I settled on.

📄 Workflow in Detail

on:
push:
branches:
- main

jobs:
build_and_deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3

- name: Setup pnpm
run: |
corepack enable
corepack prepare pnpm@latest --activate

- name: Install dependencies
run: pnpm install

- name: Build
run: pnpm build

- name: Deploy to Azure Static Web Apps
uses: Azure/static-web-apps-deploy@v1
with:
azure_static_web_apps_api_token: ${{ secrets.AZURE_STATIC_WEB_APPS_API_TOKEN_FASTTOOLS }}
action: "upload"
app_location: "dist"
output_location:

Step-by-Step Breakdown

1 Corepack for pnpm Activation

Azure runners include Node.js but not pnpm. Instead of installing pnpm globally, I use Corepack for a cleaner, reproducible setup:

corepack enable
corepack prepare pnpm@latest --activate

This ensures the latest pnpm version is used without polluting the global environment.


2. Dependency Management

With pnpm active, installing dependencies is straightforward:

pnpm install

This leverages the lockfile for deterministic builds.


3. Static Build with Vite SSG

Vite outputs fully static files to /dist, ready for CDN distribution:

pnpm build

4. Deploy to Azure

Azure’s static-web-apps-deploy action handles publishing. The deployment is tied to the main branch and secured via GitHub Secrets:

with:
azure_static_web_apps_api_token: ${{ secrets.AZURE_STATIC_WEB_APPS_API_TOKEN_FASTTOOLS }}
action: "upload"
app_location: "dist"

Architecture Overview

No APIs, no dynamic backend, no runtime dependencies beyond serving static assets.

All the Vue components are gathered together on the build script to generate static HTML files. This will happen when anything gets pushed on the main branch.

After the build is complete, the pipeline pushes the code to an Azure Static Website and makes it available for clients.

For now, the Azure free tier offer is good enough to keep the site up and running. It can handle a decent amount of traffic in this client-only type of application. So, our architecture consists basically in 3 components:

  • A GitHub-hosted repository
  • An Azure Static Website resource
  • A YAML file with the pipeline to glue them


SEO Considerations: Static Site, Strong Foundation

The choice of Static Site Generation wasn’t just about simplicity — it was also about performance and SEO:

  • Fully static, crawlable HTML pages per tool
  • Proper <title> and <meta> tags per route
  • Manually maintained sitemap.xml and robots.txt
  • Optimized CSS and JS assets via Vite
  • Lighthouse scores optimized for performance, SEO, and accessibility

SSG ensured fast initial loads, great indexing, and no reliance on JavaScript for basic navigation or content.


What I Learned from fasttools.dev

Even a small project like this brought valuable technical practice:

  • Building efficient pipelines for pnpm
  • Leveraging Corepack for clean environments
  • Practical SSG deployment on Azure Static Web Apps
  • Writing clean, framework-free CSS from scratch
  • Reinforcing modern SEO best practices
  • Reconnecting with Vue 3’s ecosystem through hands-on experience

Final Thoughts

The fasttools.dev project might appear simple on the surface, but under the hood, it reflects best practices in static site delivery, clean deployment pipelines, and performance optimization. Rejecting unnecessary dependencies — from CSS frameworks to backend services — kept the project light, maintainable, and focused.

If you’re exploring similar workflows or considering pnpm and Azure Static Web Apps for SSG projects, I hope this breakdown helps clarify the process.

You can visit the live project at: https://fasttools.dev

Suggestions, criticisms, and new tool requests are greatly welcome!

Regards!

Leave a comment