A Blazor WebAssembly application that provides a canvas-based workflow builder with drag-and-drop functionality, node editing capabilities, and visual workflow creation.
This project implements a trimmed-down version of a workflow canvas featuring:
- Drag-and-drop node creation from a toolbar
- Interactive canvas with Basic and Complex (For Each) nodes
- Right-side drawer for node configuration
- Real-time two-way data binding
- Sample workflow loading from JSON
- Framework: Blazor WebAssembly (.NET 8)
- Diagramming: Z.Blazor.Diagrams v3.0.3
- Styling: Tailwind CSS
- Data: JSON deserialization with System.Text.Json
Before running this project, ensure you have:
- .NET 8 SDK or later
- A modern web browser (Chrome, Firefox, Edge, Safari)
- Node.js (for Tailwind CSS compilation)
git clone <repository-url>
cd MiniWorkflowBuilder# Restore .NET packages
dotnet restore
# Install Node.js dependencies (for Tailwind)
npm install# Build Tailwind CSS
npm run build-css# Start the development server
dotnet runOr alternatively:
# Watch mode for development
dotnet watch- Creating Nodes: Drag icons from the left toolbar onto the canvas
- Editing Nodes: Click any node to open the configuration drawer
- Node Properties: Edit label and filters in the drawer with real-time updates
- Filters: Add/remove filter conditions with field name, condition type, and values
The project uses Tailwind CSS for styling. Configuration is in tailwind.config.js:
module.exports = {
content: ["./**/*.{razor,html}"],
theme: {
extend: {
// Custom design tokens can be added here
}
}
}The sample-workflow.json follows this structure:
{
"Workflow": {
"WorkflowName": "Demo",
"Steps": [...]
},
"Application": {
"ApplicationId": 1,
"Activities": [...]
}
}dotnet publish -c Releasedotnet test- Basic drag-and-drop functionality
- Node creation and rendering
- Drawer-based node editing
- JSON data loading
- Filter management
- Responsive layout foundation
Time Investment: ~12-16 hours (≈ 2 working days)
Assignment Goal: Demonstrate front-end craft, component structure, and UX polish