DataHub
ActiveAn 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.
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