pnpm workspace monorepo using TypeScript. Contains the Workflow Translator app — a business process analysis tool that takes messy process descriptions and returns structured analyst-quality output.
- Monorepo tool: pnpm workspaces
- Node.js version: 24
- Package manager: pnpm
- TypeScript version: 5.9
- API framework: Express 5
- Database: PostgreSQL + Drizzle ORM
- Validation: Zod (
zod/v4),drizzle-zod - API codegen: Orval (from OpenAPI spec)
- Build: esbuild (CJS bundle)
- AI: Replit OpenAI AI Integration (gpt-5.2 via proxy, no API key required)
pnpm run typecheck— full typecheck across all packagespnpm run build— typecheck + build all packagespnpm --filter @workspace/api-spec run codegen— regenerate API hooks and Zod schemas from OpenAPI specpnpm --filter @workspace/db run push— push DB schema changes (dev only)pnpm --filter @workspace/api-server run dev— run API server locally
artifacts/workflow-translator/— React + Vite frontend (previewPath:/)artifacts/api-server/— Express API server (previewPath:/api)
/— Main app: input section + 7-section structured results dashboard
POST /api/translate— Accepts{ description: string }, returns structuredWorkflowOutputJSON using OpenAI gpt-5.2
- Uses Replit OpenAI AI Integration (
@workspace/integrations-openai-ai-server) - Server imports
openaiclient from the integration lib - No API key needed — automatically provisioned via Replit
- Env vars:
AI_INTEGRATIONS_OPENAI_BASE_URL,AI_INTEGRATIONS_OPENAI_API_KEY
- Workflow Summary
- Workflow Stages (name, goal, entry trigger, exit condition)
- Process Flow (numbered steps with action/owner/tool/output)
- Gaps and Friction Points (gap/why it matters/risk level)
- Recommended System Structure (system type/core records/fields/statuses)
- Measurement Suggestions (metric/why it matters)
- First 3 Improvements (recommendation/why first/expected impact)
See the pnpm-workspace skill for workspace structure, TypeScript setup, and package details.
When a user submits their email via the usage-limit capture flow (artifacts/api-server/src/routes/captureEmail/index.ts), a confirmation email should be sent. The Resend integration was proposed but the user chose to defer it. To resume: connect Resend via Replit Integrations, then add the send call after the successful db.insert in that route.