Skip to content

Capstone Changes

This page documents all files that were added, modified, or deleted as part of the capstone project. Work began after this commit: a473895.

Overview

New

  • Workflow Builder: The entire node-based editor on the frontend including the compiler, IR executor, and graph validation engine on the backend
  • Checks & Scheduling: Replaced the old "request/query" system with a new check model. Added Trigger.dev integration for scheduled workflow execution and background jobs
  • Shared Packages: Workflow DSL, node registry, builder IR, template variable system, and shared constants.
  • Testing: ~3,600 lines of tests across 23 files covering routes, controllers, hooks, components, and the builder engine.

Modified

  • Database: Schema was significantly extended (new workflow, check, and schedule models). Old migrations were consolidated and replaced with new ones.
  • CI/CD & Deployment: Migrated from Google Cloud Run to Fly.io, added a staging environment, and added a PR validation workflow.
  • Frontend UI: New pages for checks, workflows, and the builder. Several shadcn/ui primitives were added. Existing components (nav bar, plate preview, profile) received incremental updates.

Mostly Unchanged

  • Authentication: Minor refactors to the auth middleware, routes, and controller (~22 insertions across 3 backend files). Frontend auth pages received only small layout tweaks.
  • Shared Validators & Types: Pre-existing validators and types received minor updates.

Full list of changes

A Added · M Modified · D Deleted · R Renamed

Full Diff

View the complete diff on GitHub: Compare pre-capstone → dev

CI/CD

StatusFile
M.github/workflows/deploy-prod.yml
M.github/workflows/deploy-staging.yml
A.github/workflows/pr-main.yml
M.github/workflows/pr-staging.yml

API - Infrastructure

StatusFile
Mapps/api/.gitignore
Mapps/api/Dockerfile
Aapps/api/openapi.json
Mapps/api/package.json
Mapps/api/tsconfig.json
Aapps/api/trigger.config.ts

API - Database & Prisma

StatusFile
Mapps/api/prisma/data-source.ts
Mapps/api/prisma/schema.prisma
Mapps/api/prisma/seeding/cityData.ts
Mapps/api/prisma/seeding/seed.js
M8 database migration files

API - Workflow Builder Engine

StatusFile
Aapps/api/src/builder/compiler/GraphToIrCompiler.ts
Aapps/api/src/builder/compiler/GraphToIrCompiler.test.ts
Aapps/api/src/builder/executor/IrExecutor.ts
Aapps/api/src/builder/executor/IrExecutor.test.ts
Aapps/api/src/builder/validate/validateGraph.ts
Aapps/api/src/builder/validate/validateGraph.test.ts

API - Controllers

StatusFile
Mapps/api/src/controllers/Authorization.controller.ts
Mapps/api/src/controllers/City.controller.ts
Aapps/api/src/controllers/LicensePlateCheck.controller.ts
Aapps/api/src/controllers/Workflow.controller.ts
Mapps/api/src/controllers/User.controller.ts
Dapps/api/src/controllers/LicensePlateQuery.controller.ts
Dapps/api/src/controllers/LicensePlateRequest.controller.ts

API - Routes

StatusFile
Mapps/api/src/routes.ts
Mapps/api/src/routes/auth.routes.ts
Mapps/api/src/routes/auth.routes.test.ts
Aapps/api/src/routes/builder.routes.ts
Aapps/api/src/routes/builder.routes.test.ts
Aapps/api/src/routes/builder.routes.execute.test.ts
Aapps/api/src/routes/city.routes.ts
Aapps/api/src/routes/city.routes.test.ts
Aapps/api/src/routes/docs.routes.ts
Mapps/api/src/routes/index.routes.test.ts
Aapps/api/src/routes/internal.routes.ts
Aapps/api/src/routes/internal.routes.test.ts
Aapps/api/src/routes/licensePlateCheck.routes.ts
Aapps/api/src/routes/licensePlateCheck.routes.test.ts
Dapps/api/src/routes/licensePlateRequest.routes.ts
Mapps/api/src/routes/user.routes.ts
Aapps/api/src/routes/user.routes.test.ts
Aapps/api/src/routes/webhook.routes.ts
Aapps/api/src/routes/webhook.routes.test.ts

API - Services & Background Jobs

StatusFile
Aapps/api/src/services/executeWorkflowForCheck.ts
Aapps/api/src/services/executeWorkflowForCheck.test.ts
Aapps/api/src/trigger/executeWorkflow.ts
Aapps/api/src/trigger/scheduledCheckExecution.ts

API - Other

StatusFile
Mapps/api/src/app.ts
Mapps/api/src/env.ts
Mapps/api/src/index.ts
Aapps/api/src/instrument.ts
Mapps/api/src/middleware/auth.ts
Mapps/api/src/middleware/rateLimiter.ts
Aapps/api/src/types/auth.types.ts
Aapps/api/src/types/compiler.types.ts
Aapps/api/src/types/validate.types.ts
Dapps/api/src/types/controller.types.ts
Dapps/api/src/playwright/cities/cityController.example.json
Dapps/api/src/playwright/cities/muenster.json
Dapps/api/src/scraper/muenster.ts
Dapps/api/src/utils/requestParser.ts

Frontend - Workflow Builder

StatusFile
Aapps/web/app/builder/page.tsx
Aapps/web/app/builder/config.ts
Aapps/web/app/builder/store/builder-store.ts
Aapps/web/app/builder/store/index.tsx
Aapps/web/app/builder/hooks/useDragAndDrop.ts
Aapps/web/app/builder/components/bottom-palette.tsx
Aapps/web/app/builder/components/execution-error-banner.tsx
Aapps/web/app/builder/components/outcome-toast.tsx
Aapps/web/app/builder/components/test-dialog.tsx
Aapps/web/app/builder/components/variable-input.tsx
Aapps/web/app/builder/components/variable-picker.tsx
Aapps/web/app/builder/components/edges/workflow-edge.tsx
Aapps/web/app/builder/components/edges/index.ts
Aapps/web/app/builder/components/nodes/base-handle.tsx
Aapps/web/app/builder/components/nodes/base-node.tsx
Aapps/web/app/builder/components/nodes/click-node.tsx
Aapps/web/app/builder/components/nodes/conditional-node.tsx
Aapps/web/app/builder/components/nodes/end-node.tsx
Aapps/web/app/builder/components/nodes/node-status-indicator.tsx
Aapps/web/app/builder/components/nodes/open-page-node.tsx
Aapps/web/app/builder/components/nodes/select-option-node.tsx
Aapps/web/app/builder/components/nodes/start-node.tsx
Aapps/web/app/builder/components/nodes/type-text-node.tsx
Aapps/web/app/builder/components/nodes/wait-node.tsx
Aapps/web/app/builder/components/nodes/index.ts

Frontend - Pages

StatusFile
Mapps/web/app/auth/login/page.tsx
Mapps/web/app/auth/register/page.tsx
Aapps/web/app/checks/page.tsx
Mapps/web/app/layout.tsx
Mapps/web/app/page.tsx
Mapps/web/app/profile/page.tsx
Aapps/web/app/workflows/page.tsx
Aapps/web/app/workflows/[id]/page.tsx
Dapps/web/app/requests/page.tsx

Frontend - Components

StatusFile
Rapps/web/lib/auth-context.tsxapps/web/components/auth-context.tsx
Mapps/web/components/auth-status.tsx
Aapps/web/components/check-dashboard.tsx
Aapps/web/components/check-form.tsx
Aapps/web/components/city-picker.tsx
Mapps/web/components/nav-bar-simple.tsx
Mapps/web/components/nav-bar.tsx
Mapps/web/components/plate-preview.tsx
Mapps/web/components/profile-form.tsx
Mapps/web/components/profile-update-modal.tsx
Aapps/web/components/workflow-list.tsx
Dapps/web/components/request-dashboard.tsx
Dapps/web/components/request-form.tsx
Aapps/web/components/ui/alert-dialog.tsx
Aapps/web/components/ui/badge.tsx
Mapps/web/components/ui/card.tsx
Mapps/web/components/ui/combobox.tsx
Mapps/web/components/ui/dialog.tsx
Aapps/web/components/ui/select.tsx
Aapps/web/components/ui/separator.tsx
Aapps/web/components/ui/textarea.tsx

Frontend - Hooks, Lib & Services

StatusFile
Aapps/web/hooks/use-persisted-form.ts
Aapps/web/hooks/use-persisted-form.test.ts
Aapps/web/hooks/use-plate-input.ts
Aapps/web/hooks/use-plate-input.test.ts
Mapps/web/lib/api-client.ts
Aapps/web/lib/api-client.test.ts
Aapps/web/lib/utils.ts
Aapps/web/lib/utils.test.ts
Aapps/web/services/check.service.ts
Aapps/web/services/city.service.ts
Aapps/web/services/user.service.ts
Aapps/web/services/workflow.service.ts

Frontend - Tests

StatusFile
Aapps/web/tests/components/auth-context.test.tsx
Aapps/web/tests/components/auth-status.test.tsx
Aapps/web/tests/components/check-dashboard.test.tsx
Aapps/web/tests/components/city-picker.test.tsx
Mapps/web/tests/components/nav-bar-simple.test.tsx

Frontend - Other

StatusFile
Mapps/web/app/globals.css
Aapps/web/app/icon.png
Mapps/web/components.json
Mapps/web/next.config.ts
Mapps/web/package.json
Mapps/web/tsconfig.json
Rapps/web/fonts/EuroPlate-new.ttfapps/web/public/fonts/EuroPlate-new.ttf
Rapps/web/fonts/EuroPlate.ttfapps/web/public/fonts/EuroPlate.ttf
Aapps/web/public/logotype-full.svg
Aapps/web/public/logotype.svg

Shared Packages

StatusFile
Mpackages/shared/package.json
Mpackages/shared/types/index.ts
Mpackages/shared/types/types.ts
Apackages/shared/types/error.types.ts
Apackages/shared/types/executor.types.ts
Apackages/shared/builder-ir/index.ts
Apackages/shared/builder-ir/ir.schema.ts
Apackages/shared/builder-ir/types.ts
Apackages/shared/constants/limits.ts
Apackages/shared/constants/schemes.ts
Apackages/shared/node-registry/index.ts
Apackages/shared/node-registry/registry.ts
Apackages/shared/node-registry/nodes/index.ts
Apackages/shared/node-registry/nodes/core.click.ts
Apackages/shared/node-registry/nodes/core.conditional.ts
Apackages/shared/node-registry/nodes/core.end.ts
Apackages/shared/node-registry/nodes/core.openPage.ts
Apackages/shared/node-registry/nodes/core.selectOption.ts
Apackages/shared/node-registry/nodes/core.start.ts
Apackages/shared/node-registry/nodes/core.typeText.ts
Apackages/shared/node-registry/nodes/core.wait.ts
Apackages/shared/template-variables/index.ts
Apackages/shared/template-variables/index.test.ts
Mpackages/shared/validators/licensePlateValidators/cityRequest.validator.ts
Mpackages/shared/validators/licensePlateValidators/lettersRequest.validator.ts
Mpackages/shared/validators/licensePlateValidators/numbersRequest.validator.ts
Apackages/shared/validators/workflowValidators/description.validator.ts
Apackages/shared/validators/workflowValidators/name.validator.ts
Mpackages/shared/validators/zodSchemes.ts
Apackages/shared/workflow-dsl/config.ts
Apackages/shared/workflow-dsl/graph.schema.ts
Apackages/shared/workflow-dsl/index.ts
Apackages/shared/workflow-dsl/types.ts

Root / Config

StatusFile
M.gitignore
Mbiome.json
Mbun.lock
Mbunfig.toml
Afly.staging.toml
Mfly.toml
Mpackage.json
Mtsconfig.base.json