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 know | HiveCFM uses | Why it matters | Where 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 APIs | Next.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 Components | Routes are folders under app/, server code runs in server components and route handlers. | hivecfm-core/apps/web/app/ |
| Entity Framework Core | PrismaPrismaThe 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-SQL | PostgreSQLPostgreSQLThe 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/ |
| SSRS | Apache Superset | Analyst-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/ |
| IIS | Nginx + Node.js | Next.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/ |
| NuGet | pnpmpnpmThe package manager HiveCFM uses instead of npm or yarn. Faster, uses a single on-disk content store. workspaces | Package manifests per workspace, one lockfile at the root. | hivecfm-core/pnpm-workspace.yaml |
| xUnit | Vitest (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 logger | One logger package exports a typed logger; output is line-delimited JSON for ingest. | hivecfm-core/packages/logger/src/logger.ts |
| Hangfire | RiverRiverThe 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 hubs | Server Actions + HTTP | Mutations 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 access | One .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 / Swashbuckle | OpenAPI handwritten + synced | API 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.Identity | NextAuthNextAuthThe 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. adapter | Sessions 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 toprisma.$queryRaw— it is tagged-template and parameterised. async/awaitis the same, but the execution model is single-threaded event loop. NoTask.Runor 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 inhivecfm-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:
hivecfm-core/packages/database/schema.prisma— the domain model. Every table and relation is here.hivecfm-core/apps/web/app/api/v2/client/[environmentId]/responses/route.ts— a canonical write path. Zod validation, Prisma write, job enqueue.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.
Was this page helpful?