Skip to content

DataHub

Active

An internal data hub, rewritten in C#/.NET: an older system split across three services became one ASP.NET Core application. In production since June 2026, released by tag ever since.

Tech Stack

.NET 10ASP.NET CoreDapperEF CoreSQL ServerNetSuite SuiteQLHangfireVue 3

Deployment

  • Only pushing a v* tag releases. The job runs on a self-hosted runner on the production machine and never on pull requests.
  • The deploy script stops the service, backs it up, overwrites it, starts it and smoke-tests it; any failed step rolls back automatically, and the last five backups are kept.
  • The smoke test fails while a migration is still pending. Otherwise a failed migration would leave the health check returning 200.
  • "The site loads" doesn't count as a successful release; the workflow run does.

Network

  • The app listens only on loopback and is reached through a reverse proxy. It trusts only that one proxy on loopback, which is how it keeps the real client IP.

Verification

  • Before cutover, a reconciliation tool diffed every endpoint between the old and new systems. Any mismatch on a high-risk endpoint fails, and those can't be waived.
  • Tests come in three layers: unit, live integration against the real sources, and reconciliation regression.
  • A separate set of tests checks that the checks themselves haven't been removed or bypassed. A live test with no credentials reports skipped, never passed.

Writes

  • The ERP sources are read-only, and code review blocks any write to them.
  • Outbound writes sit behind a dry-run / live switch that flips at runtime; rolling back means switching to dry-run.
  • Each document is sent once: the ledger is checked before any heavy work.

Record-keeping

  • Risks, open questions and progress each have their own document. Lessons go into a list that only takes mistakes made a second time.
← Back to Projects

Other Projects

B2B Customer PortalActive

A B2B portal for customers, backed by NetSuite. Deployed to a company server in September 2026 and used internally; not yet open to customers.

.NET 10ASP.NET CoreEF Core
Enterprise Manufacturing Analytics PlatformActive

A dbt + Databricks pipeline using a medallion (Bronze→Silver→Gold→Mart) architecture to turn raw ERP data into analytics-ready models for manufacturing, inventory, sales, and workforce reporting.

dbtDatabricksUnity Catalog
jackdeng.cc — Personal HubActive

The site you're reading: the frontend and Payload CMS 3 live in one Next.js 16 app, the data sits in Supabase Postgres, and it deploys to Vercel, in English and Chinese.

Next.js 16Payload CMS 3PostgreSQL