I build the tools I needed

Santi Bivacqua, software maker in Catania, Sicily, since 2005

Scarabokki: a colouring sheet from the gallery form.ts
form.addEventListener("submit", async (event) => {
  event.preventDefault();

  if (!form.reportValidity()) return;

  const data = new FormData(form);
  const message = String(data.get("message") ?? "").trim();
  if (message.length < 10 || message.split(/\s+/).length < 2) {
    tell("bad", "The message is very short. Tell me a little more and I'll know how to reply.");
    (form.querySelector("[name=message]") as HTMLTextAreaElement).focus();
    return;
  }

  button.disabled = true;
  button.textContent = "Sending…";
From Dynamic Languages to Go: How Simplicity Changed My Development Mindset lens.ts
/* the spring: stiff while a hand holds the glass, looser once it lets go */
const k = held ? 420 : 150;
const c = held ? 34 : 19;
vx += ((tx - x) * k - vx * c) * dt;
vy += ((ty - y) * k - vy * c) * dt;
x += vx * dt;
y += vy * dt;
const speed = Math.hypot(vx, vy);
const settled = speed < 4 && Math.hypot(tx - x, ty - y) < 0.4;
if (settled) {
  x = tx;
  y = ty;
  vx = vy = 0;
}
draw(settled ? 0 : speed);
Fuego: a project's home, with its views and dashboards as a grid of cards site.css
.glass {
  background: linear-gradient(180deg, rgb(255 255 255 / 0.66), rgb(232 238 247 / 0.4));
  -webkit-backdrop-filter: blur(14px) saturate(1.8);
  backdrop-filter: blur(14px) saturate(1.8);
  box-shadow:
    inset 0 1.5px 0 rgb(255 255 255 / 0.95),
    inset 0 -1.5px 1px rgb(255 255 255 / 0.7),
    inset 0 -12px 16px -10px rgb(40 72 124 / 0.24),
    inset 0 10px 14px -12px rgb(40 72 124 / 0.12),
    0 14px 30px -14px rgb(18 34 60 / 0.38);
}

/* ---------- the pill ---------- */

.pill {
Santi, a pixel portrait main.go
http.HandleFunc("POST /mail", handleMail)

http.HandleFunc("GET /up", func(w http.ResponseWriter, r *http.Request) {
  fmt.Fprintf(w, "Server is up and running")
})

port := os.Getenv("PORT")
if port == "" {
  port = "8080"
}

slog.Info(fmt.Sprintf("Server starting on port %s...", port))
if err := http.ListenAndServe(":"+port, nil); err != nil {
  log.Fatal(err)
}
The Story Behind Fuego: Why I Built It

Tell me what you need

About

Hi, I'm Santino Bivacqua, but you can call me Santi.

I'm a software developer passionate about Golang, Typescript, and Ruby, with a growing interest in Flutter. Based in Catania (Sicily, Italy), at the foot of Mount Etna, I focus on continuous improvement, both personally and professionally.

Where AI fits

Scarabokki's AI studio turns a prompt into a colouring page, and it is live at scarabokki.online.

Coding agents are also in the loop of my daily work, this site included. They draft and explore; I decide what ships.

Why MiServe

In Italian, “mi serve” means “I need it.” It was often how clients would start their requests when explaining what they were looking for, so it felt natural to adopt it as a name.

MiServe is a name I've carried with me since I started programming. Initially, it was the name of a price comparison service I created. It is pronounced [mi ˈsɛr.ve], with the stress on “ser”.

Santi, as a pixel portrait.

Projects

The Fuego desktop app: a Firestore collection open as a tree of fields with their values, and the editor for a bytes value open on top of it.

Fuego .

A desktop app for Firestore and Firebase.

I built it because I got tired of fighting the Firestore tooling on my own projects.

  • Firestore
  • Firebase
  • Go
  • Wails
fuegoapp.dev
The Scarabokki home page: three columns — colour, play, create — over a cream dotted ground, with a row of coloured pencils along the foot.

Scarabokki .

A gallery of colouring pages, with an AI studio that generates them.

I built it because I had always wanted an app like this, and the ones I found were full of ads and ugly drawings. It also takes me back to where I started: my first program was a colouring page that I later turned into a 15 puzzle, and Scarabokki has a 15 puzzle too.

  • Go
  • PocketBase
  • Templ
  • Tailwind
scarabokki.online
The MiServe DevTools home page: a search field, a row of pinned tools, the catalogue grouped by Time, Encoding and Hashing, and the Unix timestamp converter open on the right.

DevTools .

Small developer tools that run in your browser tab.

Nothing you paste is uploaded: the work happens on your device, with Go compiled to WebAssembly where the browser cannot do it alone.

  • Go
  • WebAssembly
  • Astro
  • TypeScript
devtools.miserve.com

Skills

  • Golang 100 out of 100
  • React 100 out of 100
  • Ruby 100 out of 100
  • Typescript 100 out of 100
  • Vue 100 out of 100
  • PHP 90 out of 100
  • Flutter 50 out of 100
  • Rust 50 out of 100

Out of 100. These are my own numbers, not a benchmark.

Resume

Backend developer at Sport it. Freelance since 2005.

I work mainly in Golang, TypeScript and Ruby.

  1. Backend Developer

    Sport it 2019 – today

    • TypeScript
    • Node.js
    • Firestore
  2. Full-Stack Developer

    Dathlos 2015 – 2019

    • Ruby on Rails
    • Angular
  3. Full-Stack Developer

    Netfunitalia 2012 – 2020

    • PHP
    • Go
    • Ruby on Rails
  4. Freelance

    Dozens of projects 2005 – today

Blog

From Dynamic Languages to Go: How Simplicity Changed My Development Mindset

Coming from years of working with dynamic languages like PHP, Ruby, and TypeScript, I was looking for something fast, simple, and reliable. Go became the natural next step — and in less than a week, I was fully productive, building real features for my Firestore management app, Fuego. This post shares how Go’s simplicity, performance, and effortless deployment completely transformed the way I build software.

The Story Behind Fuego: Why I Built It

Building Fuego was not just about creating another tool for developers—it was about solving a problem I had personally faced countless times. As a developer working extensively with Firebase and Firestore, I often found myself struggling with the lack of a streamlined, user-friendly interface to manage databases and connected services efficiently.

Contact

Tell me what you need

Mi serve is Italian for “I need it”. It is what clients kept saying, and it is where every project of mine starts.