A powerful, visual workflow automation platform built with Next.js that allows you to create, connect, and execute AI-powered workflows without writing code. Think of it as a simplified n8n alternative with built-in AI capabilities.
- Drag-and-drop interface for creating workflows
- Real-time visual feedback with node execution status
- Interactive canvas powered by ReactFlow
- Node connection system with validation
- Minimap and controls for easy navigation
- Webhook Trigger - Start workflows via HTTP requests
- Schedule Trigger - Run workflows on a schedule (minutes, hours, days)
- AI Text Generator - Generate text content with customizable prompts
- AI Content Analyzer - Perform sentiment analysis, keyword extraction, and summarization
- AI Chatbot - Create conversational AI with customizable personalities
- AI Data Extractor - Extract structured data from unstructured text
- HTTP Request - Make API calls (GET, POST, PUT, DELETE)
- Data Transform - Transform data using JavaScript code
- Send Email - Send emails (simulated for demo)
- If/Else - Conditional branching with JavaScript expressions
- Delay - Add delays between workflow steps
- Framework: Next.js 16 with App Router
- Language: TypeScript
- UI Components: shadcn/ui (Radix UI primitives)
- Styling: Tailwind CSS with custom theme
- Workflow Engine: ReactFlow for visual workflow builder
- State Management: Zustand
- AI Integration: OpenAI API (gpt-4o-mini)
- Icons: Lucide React
- Clone the repository:
git clone https://github.com/trishit78/Zaply.git
cd zaply- Install dependencies:
npm install- Create a
.env.localfile in the root directory:
OPENAI_API_KEY=your_openai_api_key_here- Run the development server:
npm run dev- Open your browser: Navigate to http://localhost:3000
- Add Nodes: Drag nodes from the sidebar onto the canvas
- Connect Nodes: Click and drag from one node's output to another's input
- Configure Nodes: Double-click any node to open its configuration panel
- Execute Workflow: Click the "Execute" button to run your workflow
Use template variables to pass data between nodes:
{{input}}- Access the entire input object{{input.fieldName}}- Access specific fields{{input.nested.field}}- Access nested fields
Example:
// In HTTP Request URL field:
https://api.example.com/users/{{input.userId}}
// In AI Text Generator prompt:
Write a summary about: {{input.content}}Schedule Trigger โ AI Text Generator โ AI Content Analyzer โ Send Email
Webhook โ If/Else โ HTTP Request (Branch A) / Send Email (Branch B)
Webhook โ Data Transform โ AI Data Extractor โ HTTP Request
zaply/
โโโ app/
โ โโโ api/
โ โ โโโ ai/execute/ # AI node execution endpoints
โ โโโ page.tsx # Main workflow builder page
โ โโโ layout.tsx # Root layout
โ โโโ globals.css # Global styles
โโโ component/
โ โโโ CustomNode.tsx # Workflow node component
โ โโโ Sidebar.tsx # Node palette sidebar
โ โโโ NodeConfigPanel.tsx # Node configuration panel
โโโ components/ui/ # shadcn/ui components
โโโ lib/
โ โโโ store.ts # Zustand state management
โ โโโ types.ts # TypeScript type definitions
โ โโโ executor.ts # Workflow execution engine
โ โโโ node-definitions.ts # Node type definitions
โ โโโ utils.ts # Utility functions
โโโ hooks/
โโโ use-mobile.ts # Mobile detection hook
- Define the node in
lib/node-definitions.ts:
myNewNode: {
type: "myNewNode",
label: "My New Node",
description: "Does something cool",
category: "action",
icon: MyIcon,
color: "bg-blue-500",
defaultConfig: {
// Default configuration values
},
configFields: [
{
name: "fieldName",
label: "Field Label",
type: "text",
placeholder: "Enter value...",
required: true
}
]
}- Implement execution logic in
lib/executor.ts:
private async executeMyNewNode(config: Record<string, any>, input: any) {
// Your execution logic here
return {
success: true,
output: { /* result */ }
};
}| Variable | Description | Required |
|---|---|---|
OPENAI_API_KEY |
Your OpenAI API key for AI nodes | Yes |
- Define the node in
lib/node-definitions.ts:
myCustomNode: {
type: 'myCustomNode',
label: 'My Custom Node',
description: 'Does something amazing',
category: 'action',
icon: Star,
color: 'bg-yellow-500',
defaultConfig: { /* ... */ },
configFields: [ /* ... */ ]
}- Implement execution in
lib/executor.ts:
case 'myCustomNode':
return this.executeMyCustomNode(config, input);- Add the handler:
private executeMyCustomNode(config: any, input: any) {
// Your logic here
return {
success: true,
output: { /* ... */ }
};
}- Image Generation: Use DALL-E API
- Speech-to-Text: Integrate Whisper API
- Vision: Analyze images with GPT-4 Vision
- Embeddings: For semantic search
- Save/load workflows to database
- User authentication
- Workflow scheduling with cron
- Real webhook endpoints
- Node marketplace
- Collaboration features
- Version control for workflows
- Execution history and logs
- Cost tracking for AI usage
- Mobile responsive design
- Dark mode improvements
- Keyboard shortcuts
- Undo/redo functionality
- Workflow templates library
- Export/import workflows as JSON
- Performance monitoring
Contributions are welcome! Please feel free to submit a Pull Request.
- Fork the repository
- Create your feature branch (
git checkout -b feature/AmazingFeature) - Commit your changes (
git commit -m 'Add some AmazingFeature') - Push to the branch (
git push origin feature/AmazingFeature) - Open a Pull Request
- Follow the existing code style
- Write meaningful commit messages
- Add tests for new features
- Update documentation as needed