``` web/contract/ ├── base.ts # Base contract (inputStructure: 'detailed')
web/contract/ ├── base.ts # Base contract (inputStructure: 'detailed') ├── router.ts # Router composition & type exports ├── marketplace.ts # Marketplace contracts └── console/ # Console contracts by domain ├── system.ts └── billing.ts
web/contract/console/{domain}.tsbase from ../base and type from @orpc/contractpath, method, input, outputweb/contract/router.tsbilling: { invoices, bindPartnerStack }web/service/use-{domain}.tsconsoleQuery.{group}.{contract}.queryKey() for query keysconsoleClient.{group}.{contract}() for API calls{ params, query?, body? } format{paramName} in path, match in params object/billing/* → billing: {})@/types/, use type<T>() helperexport type ConsoleInputs = InferContractRouterInputs<typeof consoleRouterContract>