JONATHAN ALPHABERT
Back to site
Project Write-upFull-Stack EngineeringPrivate Client

Enterprise Financial Monitoring & Reporting Platform.

A full-stack internal platform that turns high-volume transaction data into structured profit-and-loss intelligence — letting an operations team monitor margins, detect anomalies, and act on losses in near real time, all from a single web app.

Stack
Vue 3 + Node.jsExpress · PostgreSQL
Scale
220+ screens~260 menu features
Data Models
190+ entities160+ controllers
Automation
40+ cron jobsZero manual effort
01 — Overview

A control room for a high-volume transaction business.

Hundreds of thousands of records flow in from multiple sources every day. The operations, finance, and audit teams need to answer one recurring question fast: where are we making or losing money, and why?

The platform is built as two connected applications: a single-page web dashboard where each team has its own set of reports, monitoring screens, and audit tools — and a backend API and automation layer that ingests data, runs scheduled reconciliation jobs, computes profit/loss metrics, and pushes alerts.

Private engagement. Built for a private business — client name, infrastructure details, and live data are withheld. This write-up describes architecture and engineering only.

260+
Menu Features
220+
Routed Screens
190+
DB Entities
40+
Cron Jobs
02 — UX Details

Faster and clearer than Excel — not heavier.

The audience is non-technical operators who live in spreadsheets. A guiding principle drove every decision: reduce time-to-insight. Filter, find the anomaly, drill in, export — without leaving the page.

Spreadsheet-Grade Tables

Data-grids with pivoting, frozen headers, merged header groups, and inline editing — so analysts get familiar spreadsheet ergonomics inside the app.

One-Click Export

Every report exports to styled Excel, CSV, and PDF, so results drop straight into existing finance workflows with no copy-paste.

Visual-First Monitoring

Loss and margin trends render as interactive charts, so anomalies are visible at a glance instead of buried in rows of numbers.

Role-Scoped Navigation

The menu adapts to each user's permissions — people only see the reports and tools they're authorized to use. Navigation is invisible where access is absent.

Drill-Down Detail

Summary rows expand into transaction-level modals — from “this number looks wrong” to the underlying records in two clicks.

Real-Time Feedback

Long-running jobs and live status update over a socket connection, with toast notifications rather than blocking spinners.

03 — Features

Nine capability areas. One cohesive platform.

Each feature area was scoped to a dedicated set of screens, controllers, and service-layer logic — keeping the codebase navigable across its full scale.

P&L
Profit & Loss Monitoring

Dashboards that rank and surface margin erosion across products, partners, and time windows. The primary view for the operations team — updated in near real time from precomputed aggregates.

Detection
Anomaly & Loss Detection

Automated flags for suspect transactions and records that fall outside expected economics. Thresholds are configurable; flagged items surface immediately in the monitoring dashboard.

Reconcile
Reconciliation Engine

Cross-checks settlement and partner data to catch mismatches that would otherwise leak money. Runs on a scheduled cadence and produces a detailed exception report for review.

Audit
Audit Toolkit

Dedicated internal-audit views that let reviewers verify the numbers behind each monitoring report. Every figure is traceable to its source transactions via drill-down.

Automation
Scheduled Automation — 40+ Jobs

Background jobs that capture, parse, compare, and summarize data on a cron schedule. Most of the platform's value is produced without anyone clicking anything — data acts on itself.

Alerts
Multi-Channel Alerting

Notifications delivered via chat bot, email, and push so the right person hears about a problem immediately — not at the next morning standup.

MDM
Master-Data Management

CRUD tooling for the dozens of reference entities — categories, partners, denominations, operators — that the reports depend on. Changes propagate immediately to all dependent views.

RBAC
Role & Permission Administration

Granular access control configurable per user and per menu item. Permissions are enforced on both the frontend (menu visibility) and backend (route middleware).

Export
Rich Exports & Reports

On-demand generation of styled Excel workbooks and PDF documents. Formatting mirrors the in-app tables so exported files are presentation-ready with no post-processing.

04 — Tech Stack

Chosen for real-time data, scale, and team operability.

Vue 3's Composition API kept per-report logic encapsulated in hooks; Node's event loop handled concurrent socket connections and cron jobs without blocking. Every library has a clear job — nothing is speculative.

Frontend
Vue 3ViteVue RouterVuexComposition APIPersisted State
Visualisation & Data Grids
ApexChartsEChartsCustom data-grid layerPivot-table layerFrozen headersMerged header groups
Export & Real-Time
SheetJS (XLSX)pdfmakeSocket.IO clientPapaParse (CSV)Bootstrap 5
Backend
Node.jsExpressSequelize ORMPostgreSQLMVC + Service layerJWT (httpOnly cookies)Role-based middleware
Automation & Integrations
node-cronSocket.IO serverNodemailerFirebase AdminChat-bot integrationsCheerio (scraping)Winston (logging)Daily log rotation
05 — Architecture

A clean two-tier split — and an autonomous layer on top.

The system has a clear separation of concerns: a Vue SPA that handles display and interaction, an Express API that handles business logic and data, and a headless automation tier that runs continuously without any user triggering it.

Web App — Vue 3 + Vite

Thin, composable frontend

Feature screens compose reusable components and pull data through a dedicated service layer, keeping API calls out of the UI. Composition-API hooks encapsulate per-report logic; Vuex holds shared state.

Views → compose components
Services → API call layer
Hooks → per-report logic
Vuex → shared + persisted state
Socket.IO → live data push
API Server — Node + Express

Layered, testable backend

Requests pass through JWT + role middleware, into thin controllers, down to a service layer that holds business logic, and finally to Sequelize models. Controllers stay thin; logic stays reusable.

Routes → middleware → controllers
Services → business logic
Models → Sequelize + PostgreSQL
Socket.IO → live data emit
Winston → structured logging
Autonomous Layer — Cron + Scrapers + Notifiers

The system's engine runs without anyone clicking

Alongside the request path, a fully headless tier continuously ingests and reconciles data, then hands off to notifiers. Most of the platform's value — precomputed P&L, anomaly flags, reconciliation results — is produced here.

node-cron — 40+ scheduled jobs on configurable intervals
Scrapers — Cheerio + proxy-aware HTTP clients for external data ingestion
Notifiers — Nodemailer, Firebase push, chat-bot webhooks on trigger

Key Decisions

Service layer
Service layer on both ends to keep controllers and components thin — business logic is isolated, testable, and reusable across jobs and request handlers alike.
Cookie JWT
Cookie-based JWT (httpOnly) over localStorage tokens. httpOnly cookies are inaccessible to JavaScript, which eliminates the XSS attack surface that localStorage-based auth introduces.
Precompute
Cron-driven precomputation so heavy P&L aggregations are ready before a user ever opens the report. Queries that could take seconds resolve in milliseconds at report-open time.
06 — Outcome

A production system, not a demo.

The platform serves a real operations team and consolidates work that previously lived in scattered spreadsheets into one auditable, role-scoped product.

01

Delivered a production system serving a real operations team — consolidating work previously spread across scattered spreadsheets into one auditable platform with full access control.

02

Scaled to 220+ screens, 160+ controllers, and 190+ data models while keeping the codebase navigable through consistent layering and naming conventions throughout.

03

Automated 40+ recurring data and reconciliation jobs, removing hours of daily manual checking and surfacing money-losing anomalies the same day they occur.

04

Cut time-to-insight — an analyst can go from a high-level loss summary to the exact offending transactions, then export the evidence in seconds rather than hours.

What I took away: how to architect and sustain a large full-stack application — designing a layered backend, taming a sprawling feature set with disciplined conventions, and building automation and real-time feedback that make data act on itself rather than wait for a human.