This is a Vue 3 + Vite TypeScript application that provides a web-based interface for creating, configuring, and managing co-simulation workflow configurations.
- Flowchart Designer: Interactive drag-and-drop interface using Vue Flow for designing simulation workflows
- Template Management: Save, view, edit, and delete simulation templates
- Component Library: Pre-built components (Simulator, Data Source, Connector, Configuration)
- Node Connections: Connect components with visual edges in the flowchart
- Responsive UI: Built with Tailwind CSS and Radix UI Vue components
- Backend API: Python FastAPI server with file-based JSON storage and oedisi simulation runner
- Persistent Storage: Templates stored as JSON files in
data/templates/
├── server/ # Backend API server (Python FastAPI)
│ ├── main.py # FastAPI app: template CRUD + simulation run endpoints
│ ├── components.json # Component name → oedisi component-definition path map
│ ├── pyproject.toml # uv-managed Python dependencies
│ └── CLAUDE.md # Server design notes
├── data/ # Template storage directory
│ └── templates/ # JSON template files ({id}.json)
├── src/
│ ├── components/
│ │ ├── ui/ # Reusable UI components (Button, Card, Dialog, etc.)
│ │ ├── CustomNode.vue # Custom Vue Flow node component
│ ├── pages/
│ │ ├── Home.vue # Landing page
│ │ ├── FlowchartDesigner.vue # Main designer interface with Vue Flow
│ │ ├── SavedConfigs.vue # Template management
│ │ ├── SimulationResults.vue # Results viewer
│ │ └── SimulationStatus.vue # Status monitoring
│ ├── router/
│ │ └── index.ts # Vue Router configuration
│ ├── lib/
│ │ ├── api.ts # API client for backend communication
│ │ └── utils.ts # Utility functions (cn, clsx)
│ ├── styles/
│ │ └── index.css # Global styles and Tailwind directives
│ ├── App.vue # Root component
│ └── main.ts # Application entry point
└── package.json
- Node.js 18+ and npm/pnpm
- Python 3.12+ and
uvfor the backend helicsbinary onPATH(only needed to actually run simulations)
- Navigate to the project directory:
cd /Users/alatif/Documents/GitHub/oedisi-frontend-app- Install dependencies:
npm install
# or
pnpm install
# Backend (Python)
uv --directory server sync- Start the development servers:
Option 1: Run both frontend and backend together (recommended):
npm run dev:allOption 2: Run separately:
Terminal 1 - Backend server:
npm run dev:serverTerminal 2 - Frontend:
npm run devThe frontend will be available at http://localhost:5173
The backend API will be available at http://localhost:3001
To create a production build:
npm run build
# or
pnpm buildLanding page with quick access to main features:
- Create new simulation templates
- View saved templates
- Access simulation results
- Monitor simulation status
Main interface for creating simulation workflows using Vue Flow:
- Drag components from the left sidebar to the canvas
- Connect components by dragging from node handles (left/right sides)
- Edit component properties in the right sidebar
- Select and delete connections
- Save templates with custom names and descriptions
- Zoom, pan, and navigate with built-in controls
- Minimap for overview of the flowchart
Manage previously created templates:
- View all saved templates with metadata
- See all components in each template
- Load templates back into the designer
- Run simulations from saved templates
- Download templates as JSON files
- Delete templates
View and analyze simulation outputs (placeholder for future implementation)
Monitor active simulations and their progress (placeholder for future implementation)
- Vue 3: Progressive JavaScript framework
- Vite: Next generation frontend build tool
- TypeScript: Typed JavaScript
- Vue Flow: Interactive node-based graph library
- Tailwind CSS: Utility-first CSS framework
- Vue Router: Official routing library
- Lucide Vue: Beautiful SVG icons
- FastAPI + uvicorn: Python web framework and ASGI server
- uv: Python package and project manager
- oedisi: Used as a library to build runner configs in-process
- HELICS: External binary invoked as a subprocess to actually run simulations
The application uses Tailwind CSS with custom CSS variables for theming. Colors are defined in src/styles/index.css and can be customized in tailwind.config.ts.
Located in src/components/ui/:
Button.vue: Versatile button with multiple variantsCard.vue: Container component with header, default, and footer slotsDialog.vue: Modal dialog with header, content, and footerInput.vue: Text input fieldTextarea.vue: Multi-line text inputLabel.vue: Form label component
Located in src/pages/:
Each page is a standalone component that uses the router and UI components.
CustomNode.vue: Custom Vue Flow node with connection handles
Templates are stored as JSON files in data/templates/.
- Each template is stored as one JSON file:
data/templates/{id}.json - Files contain template metadata plus
nodesandedges GET /api/templatesreturns all files sorted bycreatedAt(newest first)
Each template document contains:
id: Unique identifier (timestamp)name: Template namedescription: Template descriptionnodes: Array of node objects with positions and dataedges: Array of connection objects (source/target relationships)createdAt: ISO timestamp
The backend provides REST API endpoints:
Templates:
GET /api/templates- Get all templatesGET /api/templates/{id}- Get a single templatePOST /api/templates- Save a new templatePUT /api/templates/{id}- Update a templateDELETE /api/templates/{id}- Delete a template
Simulation runs:
POST /api/runs- Build a runner config from aWiringDiagramand start a HELICS subprocessGET /api/runs/{run_id}- Poll run status (running/done/failed)GET /api/runs/{run_id}/logs/{component}- Stream a component log fileDELETE /api/runs/{run_id}- Kill a running simulation
Interactive docs are at http://localhost:3001/docs when the server is running. See server/CLAUDE.md for design details.
- Real simulation execution
- Advanced visualization and analytics
- Collaborative design features
- Template sharing and import/export
- Undo/redo functionality
- Component validation
- Custom node types
- Edge labels and properties
- Template versioning
Created from Figma export for OEDISI project.