Getting StartedTech Stack (for .NET devs)

Tech Stack — for .NET devs

If you are coming from ASP.NET Core, Entity Framework, and SQL Server, most of what HiveCFM does will feel familiar — it’s the same problem shape with different names. Use the table below as a translation key, then read the three files at the bottom in order.

What you know, what HiveCFM uses

You knowHiveCFM usesWhy it mattersWhere it lives
C#TypeScriptTypeScriptJavaScript with a static type system. Every HiveCFM Node service, the frontend, and the dev hub are written in it.Same type discipline, different runtime. Strict mode is on everywhere.hivecfm-core/tsconfig.json
ASP.NET Core MVC / Minimal APIsNext.jsNext.jsReact framework used by HiveCFM Core. Handles routing, server rendering, and API routes in one bundle. 14 App Router + ReactReactThe component-based UI library every HiveCFM frontend is written in. Components are TypeScript functions returning JSX. Server ComponentsRoutes are folders under app/, server code runs in server components and route handlers.hivecfm-core/apps/web/app/
Entity Framework CorePrismaPrismaThe TypeScript ORM HiveCFM uses to talk to Postgres. The schema lives at packages/database/schema.prisma.A declarative schema file compiles to a typed client. Migrations are generated from schema diffs.hivecfm-core/packages/database/schema.prisma
SQL Server + T-SQLPostgreSQLPostgreSQLThe open-source relational database HiveCFM runs on. Replaces SQL Server for this project. 16 + pgvectorpgvectorA Postgres extension that adds a vector column type for similarity search. Used for AI-powered survey insights.Same relational model, plus vector columns for semantic search of feedback text.hivecfm-core/packages/database/migrations/
SSRSApache SupersetAnalyst-driven dashboards on top of the live Postgres; embedded back into the app via signed tokens.hivecfm-core/superset/ and apps/web/app/api/v1/integrations/analytics/
IISNginx + Node.jsNext.jsNext.jsReact framework used by HiveCFM Core. Handles routing, server rendering, and API routes in one bundle. runs as a node process; nginx terminates TLS and fans out to the services.hivecfm-core/nginx/
NuGetpnpmpnpmThe package manager HiveCFM uses instead of npm or yarn. Faster, uses a single on-disk content store. workspacesPackage manifests per workspace, one lockfile at the root.hivecfm-core/pnpm-workspace.yaml
xUnitVitest (TS) / go test (Go)Same arrange-act-assert. Vitest workspace config runs tests across every package.hivecfm-core/vitest.workspace.ts
ILogger<T>Structured JSON loggerOne logger package exports a typed logger; output is line-delimited JSON for ingest.hivecfm-core/packages/logger/src/logger.ts
HangfireRiverRiverThe Go background-job queue Hub uses. Jobs are rows in Postgres, so there is no separate broker to run. job queue (Go)Durable jobs stored in Postgres; the Go HubHubThe Go service that owns background processing, integrations, and the admin API. Sibling to Core. is the worker.hivecfm-hub/internal/workers/
SignalR hubsServer Actions + HTTPMutations go through ReactReactThe component-based UI library every HiveCFM frontend is written in. Components are TypeScript functions returning JSX. Server Actions; there is no realtime push today. Clients that need freshness poll.hivecfm-core/apps/web/app/ (look for "use server")
appsettings.json + env transforms.env files + typed process.env accessOne .env.local for native dev, container envs for Docker. The dev hub extracts the live list.See Env Vars reference and hivecfm-dev-hub/generated/env-vars.json
Swagger / SwashbuckleOpenAPI handwritten + syncedAPI spec lives as YAML and is mirrored into the dev hub for browsing.hivecfm-core/openapi.yml
Azure AD / SAMLSAMLThe XML-based enterprise SSO protocol HiveCFM supports for customers using Okta, Azure AD, or similar IdPs. via Microsoft.IdentityNextAuthNextAuthThe auth library HiveCFM Core uses to handle sessions, OAuth providers, and credentials. with a SAMLSAMLThe XML-based enterprise SSO protocol HiveCFM supports for customers using Okta, Azure AD, or similar IdPs. adapterSessions are JWTJWTA compact, signed token that carries identity between services. HiveCFM issues one per authenticated user. cookies signed with NEXTAUTH_SECRET. See Auth Flow.hivecfm-core/apps/web/app/api/auth/[...nextauth]/route.ts

Things that do not port one-to-one

  • LINQ. Prisma’s fluent client covers the common 90% (findMany, where, include). For anything complex, drop to prisma.$queryRaw — it is tagged-template and parameterised.
  • async/await is the same, but the execution model is single-threaded event loop. No Task.Run or thread pools. CPU-heavy work goes to the Go Hub.
  • DI containers. There is no Autofac equivalent. Dependencies are plain imports. Shared state goes through modules in hivecfm-core/apps/web/lib/ or package-level singletons.
  • Configuration binding. No IOptions<T> equivalent. Read env vars through a typed module and validate with zod at boot.
  • Background services. No IHostedService. Long-running work lives in hivecfm-hub/internal/workers/ as River workers; cron-style work is triggered by scheduled jobs enqueued from the web.

Read these three files first

Before you open a ticket, open these in order:

  1. hivecfm-core/packages/database/schema.prisma — the domain model. Every table and relation is here.
  2. hivecfm-core/apps/web/app/api/v2/client/[environmentId]/responses/route.ts — a canonical write path. Zod validation, Prisma write, job enqueue.
  3. hivecfm-hub/internal/workers/webhook_dispatch.go — a canonical async worker. River job args, a service call, a retry policy.

Once those three make sense, the rest of the codebase is variations on the same theme.