Accounting System

Internal accounting product: org-scoped Next.js UI, imports, reporting, and Go services on Postgres with Redis for background jobs.

Year 2026 (ongoing)
Role Lead Fullstack Engineer

Stack

Frontend

  • Next.js
  • React
  • TypeScript
  • Node.js
  • Tailwind CSS
  • MUI
  • Material React Table (MRT)
  • Recharts
  • Claude
  • Cursor
  • Claude Design
  • Google Stitch

Backend

  • Go
  • chi
  • PostgreSQL
  • Redis
  • Excelize
  • gorilla/websocket
  • Testcontainers
  • Newman
  • Claude
  • Cursor
Finance dashboard with summary cards for receivables, expenses, budget, and net balance, plus an income vs expenses chart.

What was my role?

I led the fullstack thread from operator workflows in the browser through service contracts and persistence: org-scoped screens, import orchestration, ledger reads, and reporting stakeholders could trust during closes—not a thin UI layer on someone else’s opaque API.

Practically that meant shaping the Next.js workspace, pairing Postgres modeling with Go HTTP handlers, and keeping Redis-backed jobs visible in-product so failures were explained instead of buried in logs.

Situation

The client's financial operators still stitched together spreadsheets, one-off exports, and several older tools whenever they needed balances scoped to an org or a clean period cut.

There was no single workspace that enforced tenancy end-to-end, surfaced import problems in plain language, and kept leadership views inside the same audited path.

Task

Ship a 2026 internal accounting product with an operator-first experience: bulk CSV/XLS intake, org-scoped authorization, persisted ledgers, and charts that stay tied to the same source of truth through month-end.

Action

On the client I built a Next.js workspace with TypeScript, MUI tables (including MRT), Recharts summaries, and Tailwind-driven layout tokens so dense finance screens stayed readable.

On the server I implemented Go services behind chi routers, PostgreSQL for core entities and audit-friendly reads, Redis where async work and fan-out helped, Excelize-driven parsing for workbook-shaped uploads, and gorilla/websocket for live job feedback during long imports.

Across the stack I wired Vitest on the SPA side, service tests with Testcontainers, and Newman checks so regressions were caught before they reached operators.

Result

The company's team could load, validate, and reconcile work inside one product instead of re-exporting everything for every question, while engineering kept a testable full path from browser to database.

Latency-sensitive aggregation stayed in Go and Postgres instead of the browser, org boundaries held consistently, and the roadmap could grow new reporting without rewriting the ingestion story each time.