Query Modules

35+ TanStack Query (React Query) modules in frontend/src/lib/queries/. Each module encapsulates query keys, query hooks, and mutation hooks for a specific domain entity.

Module Pattern

Every module follows the key factory + as const pattern:

export const buildingKeys = {
  all: ['buildings'] as const,
  lists: () => [...buildingKeys.all, 'list'] as const,
  list: (filters: Filters) => [...buildingKeys.lists(), filters] as const,
  details: () => [...buildingKeys.all, 'detail'] as const,
  detail: (id: string) => [...buildingKeys.details(), id] as const,
};

Central key registry: frontend/src/lib/queryKeys.ts.

Key Modules

ModuleFileEntity / Domain
buildingQueriesbuildingQueries.tsBuildings, technology, components, calc params
projectQueriesprojectQueries.tsProjects, phases, Scenarios
contactQueriescontactQueries.tsContacts (with HubSpot sync)
companyQueriescompanyQueries.tsCompanies (with HubSpot sync)
quoteQueriesquoteQueries.tsQuotes, allocations, links
invoiceQueriesinvoiceQueries.tsInvoices, line items
fundingApplicationQueriesfundingApplicationQueries.tsFunding Applications
documentObtainingQueriesdocumentObtainingQueries.tsDocument Obtaining
fileQueriesfileQueries.tsFiles
portalQueriesportalQueries.tsPortal operations
authQueriesauthQueries.tsAuthentication
workflowQueriesworkflowQueries.tsWorkflows
pdfQueriespdfQueries.tsPDF Templates
hubspot-querieshubspot-queries.tsHubSpot Integration
adminQueriesadminQueries.tsAdmin Dashboard, Users
dashboardQueriesdashboardQueries.tsDashboard statistics
leadQueriesleadQueries.tsLeads
productQueriesproductQueries.tsProducts
formQueriesformQueries.tsForms, Form Builder
appointmentQueriesappointmentQueries.tsAppointments

Rules

  • Define in lib/queries/ — never inline useQuery/useMutation in components
  • ESLint enforced — warns on useMutation in components/ or pages/
  • Key factories — all query keys built via factory functions for consistent invalidation
  • Mutations invalidate related queries via onSuccess callbacks

API Client

Query hooks call the API client layer which handles:

  • Base URL configuration
  • JWT token injection
  • Error response parsing

See API Layer Pattern for the client structure.