# Projects

> 23 projects across systems, AI agents, web, and open source.

### go-fmt

- Language/Stack: Go
- Open source: yes
- Published: 2026-03-18
- URL: <https://github.com/oullin/go-fmt>

A semantic formatting engine and CLI for Go that goes beyond gofmt, enforcing rule-based structure around control flow, declaration ordering, and spacing before handing code off to gofmt and goimports. Built to make human-written, generated, and agent-written Go converge on the same house style in a single pass. Ships as both a reusable engine and a standalone fmt command, with config-driven file discovery, exclusion rules, and agent-friendly output formats for CI and automation workflows.

---

### Oullin — Workflow

- Language/Stack: Go
- Open source: yes
- Published: 2026-03-14
- URL: <https://github.com/oullin/workflow>

A production-grade state machine and Petri Net workflow engine for Go, built to model complex domain object lifecycles without coupling state logic to business rules. Transitions are declared explicitly with guard conditions and side-effect hooks, making illegal state changes impossible by construction rather than by convention. The engine ships with a full audit trail, thread-safe concurrent state lookups, and Graphviz export for visualising transition graphs — useful both in debugging and in communicating system behaviour to non-technical stakeholders.

---

### skills

- Language/Stack: Go
- Open source: yes
- Published: 2026-03-03
- URL: <https://github.com/gocanto/skills>

A Go CLI for installing and organising reusable AI agent skills so prompts, setup steps, and repo-specific workflows stay consistent instead of drifting across machines.

---

### go-maps

- Language/Stack: Vue / Vite
- Open source: yes
- Published: 2026-02-26
- URL: <https://github.com/gocanto/go-maps>

An interactive visualiser for Go's map internals, built to make bucket growth, hashing, and lookup behaviour easier to understand through direct experimentation.

---

### java-spotless

- Language/Stack: Go
- Open source: yes
- Published: 2026-02-26
- URL: <https://github.com/gocanto/java-spotless>

A Go wrapper around Spotless for Java projects, designed to make formatting automation easier to script inside broader toolchains and CI pipelines.

---

### to-markdown

- Language/Stack: Makefile / Docker
- Open source: yes
- Published: 2026-02-26
- URL: <https://github.com/gocanto/to-markdown>

A container-first wrapper around MarkItDown that converts documents to Markdown without requiring a local Python runtime, keeping the tool portable across environments.

---

### money

- Language/Stack: Go
- Open source: yes
- Published: 2026-01-02
- URL: <https://github.com/gocanto/money>

A Go implementation of Martin Fowler's Money pattern, centred on amount and currency value objects so arithmetic stays explicit, predictable, and safe across domain boundaries.

---

### payment-gateway

- Language/Stack: Go
- Open source: yes
- Published: 2025-11-22
- URL: <https://github.com/gocanto/payment-gateway>

A Go payment gateway sandbox focused on provider abstraction and transaction flow handling, structured as a clean starting point for payment integrations.

---

### dot-files

- Language/Stack: Shell
- Open source: yes
- Published: 2025-10-28
- URL: <https://github.com/gocanto/dot-files>

Personal shell and editor dotfiles captured as code, making terminal setup reproducible and easier to evolve across machines without manual drift.

---

### Oullin — REST API

- Language/Stack: Go / Docker
- Open source: yes
- Published: 2025-10-18
- URL: <https://github.com/oullin/api>

A purpose-built Go API powering content delivery and dynamic data for the Oullin platform. Structured around clean request routing, strict input validation, and a fixture-driven data layer that makes it trivial to swap persistence backends without touching application logic. Designed from the start for predictable latency under load, with no hidden allocations in the hot path. Ships as a single Docker image with zero external config requirements — pull, run, done.

---

### Oullin — Web Client

- Language/Stack: Vue / TypeScript
- Open source: yes
- Published: 2025-10-18
- URL: <https://github.com/oullin/web>

The Vue 3 + TypeScript single-page application behind the Oullin platform. Built with Vite, Tailwind CSS v4, and a composable API store that abstracts all remote data access behind a single, type-safe surface. Routing, SEO metadata, and structured JSON-LD are handled declaratively so each page remains focused on content rather than plumbing. shadcn-vue provides the base component primitives, extended with a custom design token system for light and dark mode without a single media query in component code.

---

### Oullin — Infrastructure

- Language/Stack: Go / Docker
- Open source: yes
- Published: 2025-10-18
- URL: <https://github.com/oullin/infra>

Docker-based deployment pipeline for the full Oullin stack — API, web client, and any future services. The core design principle is environment parity: if it works locally it works in production, with no special-casing at any layer. A composable Makefile wraps common operations so the cognitive overhead of managing multi-service deployments collapses to a handful of muscle-memory commands. Reproducible builds are enforced through pinned base images and explicit dependency resolution.

---

### users-grpc-service

- Language/Stack: Go
- Open source: yes
- Published: 2025-04-22
- URL: <https://github.com/gocanto/users-grpc-service>

A reference gRPC service in Go implementing both server and client roles, designed to demonstrate clean contract design between distributed services. Identity and session operations are exposed via a typed protobuf interface, making the service easy to consume, mock, or swap behind an API gateway. Built with observability in mind — structured logging and defined error codes throughout so distributed traces stay readable. Useful as a starting point for any Go service that needs to participate in a gRPC mesh.

---

### csv-files-reader

- Language/Stack: Go
- Open source: yes
- Published: 2025-02-26
- URL: <https://github.com/gocanto/csv-files-reader>

A small Go utility for reading CSV files with minimal ceremony, useful when the job is controlled ingestion rather than building a full data-processing framework.

---

### gocanto.dev — Portfolio

- Language/Stack: Vue / TypeScript
- Open source: yes
- Published: 2024-09-29
- URL: <https://github.com/oullin-link/gocanto-dev-client>

An earlier iteration of my personal portfolio, built in Vue 3 and TypeScript as a deliberate exercise in shipping something polished without over-engineering it. Documents two decades of full-stack engineering across fintech, insurance, and SaaS — explained in plain language rather than keyword lists. The project also served as the testbed where I first established the design token system, composable SEO utilities, and API store patterns that later carried forward into the Oullin platform.

---

### Aura Chakra

- Language/Stack: PHP / Vue
- Open source: no
- Published: 2023-10-05
- URL: <https://github.com/aurachakra>

A wellness platform exploring the intersection of energy awareness and digital product design, built during a deliberate reset after a decade in high-pressure fintech delivery. The backend is a Laravel API managing user profiles, session history, and content delivery. The frontend is a Vue SPA with a visual language intentionally distinct from the productivity tools I usually build — softer, more tactile, more human. The project was as much a study in product thinking and user empathy as it was a technical exercise.

---

### http-client

- Language/Stack: PHP
- Open source: yes
- Published: 2022-12-22
- URL: <https://github.com/gocanto/http-client>

A resilient PHP HTTP client built for inter-service communication in production environments where downstream unreliability is a given. Wraps Guzzle behind a consistent interface that adds configurable retry logic with backoff, structured request and response logging, and dynamic header injection for auth token propagation. The abstraction was motivated by recurring client work where teams were duplicating the same retry-and-log boilerplate across every service boundary — this library makes the right behaviour the default.

---

### Laravel Framework — Contributions

- Language/Stack: PHP
- Open source: yes
- Published: 2022-09-15
- URL: <https://github.com/laravel/framework/pulls?q=is%3Apr+is%3Aclosed+author%3Agocanto>

Merged pull requests to the Laravel core across the HTTP, routing, and validation layers — focused on edge-case correctness rather than headline features. Contributions included fixing subtle behavioural inconsistencies in request input handling, improving API surface consistency in the router, and tightening documentation where the specified and actual behaviour had drifted apart. Contributing to a codebase used by millions of developers demands a different standard of care than internal work: every change is load-bearing for someone else's production system.

---

### converter-go

- Language/Stack: Go
- Open source: yes
- Published: 2021-10-11
- URL: <https://github.com/gocanto/go-converter>

A data-agnostic currency converter in Go that accepts any exchange-rate provider through a defined interface, keeping business logic fully decoupled from third-party API contracts. Conversion operations are expressed as value types rather than primitive floats, eliminating a whole class of precision and mutation bugs at the type level. The port mirrors the design decisions made in the earlier PHP version of the same library — intentionally, to validate that the interface held up across languages and runtime models.

---

### vuemit

- Language/Stack: Vue / JS
- Open source: yes
- Published: 2021-08-11
- URL: <https://github.com/gocanto/vuemit>

A zero-dependency event bus for Vue.js that keeps inter-component communication explicit, traceable, and free of global state pollution. At the time of release, Vue's built-in event system didn't scale well beyond simple parent-child communication — vuemit filled that gap with a clean subscribe/publish API that worked across component trees without forcing a full state management solution. Shipped to npm and used in production across multiple client engagements where the overhead of Vuex was unjustifiable for the problem size.

---

### google-autocomplete

- Language/Stack: Vue / JS
- Open source: yes
- Published: 2021-08-11
- URL: <https://github.com/gocanto/google-autocomplete>

A Vue component that wraps the Google Places Autocomplete API into a clean, accessible, and configurable input. The component exposes individual address fields — street, city, postcode, country — as distinct mapped outputs rather than forcing consumers to parse a raw Places response themselves. Country restrictions, field mappings, and bias regions are all configurable via props. Addresses the common pain point where Google's SDK API and Vue's reactivity model pull in opposite directions, resolving that tension with a thin but principled adapter layer.

---

### laravel-simple-pdf

- Language/Stack: PHP
- Open source: yes
- Published: 2020-12-26
- URL: <https://github.com/gocanto/laravel-simple-pdf>

A minimal PDF generation package for Laravel that wraps DOMPDF behind a fluent, expressive interface. Documents are composed from Blade templates, so they inherit the full power of the Laravel view layer — partials, components, conditionals — without any PDF-specific templating language to learn. The goal was to make generating a multi-page, branded document feel as unremarkable as rendering an HTML response. Used in production for contract generation and invoicing across several client projects.

---

### converter

- Language/Stack: PHP
- Open source: yes
- Published: 2019-06-11
- URL: <https://github.com/gocanto/converter>

An immutable, data-agnostic currency converter for PHP that enforces value-object semantics throughout — no raw floats, no mutation, no hidden coupling to any specific exchange-rate API. Conversion amounts are wrapped in typed value objects that carry currency context, making invalid operations fail at the method boundary rather than silently producing wrong numbers. The library predates the Go port and established the interface design that was later validated in that second implementation.
