A clone of Zapier that allows users to create automated workflows (Zaps) between different applications using triggers and actions.
-
frontend/: Next.js frontend applicationapp/: Next.js app router pages and componentscomponents/: Reusable React componentshooks/: Custom React hookstypes/: TypeScript type definitions
-
primary-backend/: Main backend API servicesrc/: Source coderouter/: API route handlersmiddleware/: Authentication and other middlewaredb/: Database configuration and models
prisma/: Database schema and migrations
-
hooks/: Webhook handling service -
processor/: Background job processor -
worker/: Asynchronous task worker
- Node.js (v18+)
- npm or yarn
- Docker + Docker Compose (recommended)
From the repo root:
docker compose up -dThis starts:
- Postgres on
localhost:5432(db:zapier, user:postgres, password:postgres) - Apache Kafka broker on
localhost:9092
cd primary-backend && npm install
cd ../hooks && npm install
cd ../processor && npm install
cd ../worker && npm install
cd ../frontend && npm install- Primary Backend API (
primary-backend/.env)
DATABASE_URL="postgresql://postgres:postgres@localhost:5432/zapier?schema=public"
JWT_SECRET=your_jwt_secret- Processor (
processor/.env)
DATABASE_URL="postgresql://postgres:postgres@localhost:5432/zapier?schema=public"- Hooks service
- It does not read
.envcurrently, so passDATABASE_URLwhen starting it.
- Frontend (
frontend/.env.local)
NEXT_PUBLIC_API_URL=http://localhost:8080Run migrations from the primary-backend directory:
cd primary-backend
npx prisma migrate devWithout this, the Zap builder modal will be empty.
INSERT INTO "AvailableTrigger" ("id","name","image")
VALUES ('webhook_catch','Webhook Catch','https://placehold.co/64x64')
ON CONFLICT ("id") DO NOTHING;
INSERT INTO "AvailableAction" ("id","name","image")
VALUES
('send_email','Send Email','https://placehold.co/64x64'),
('send_slack','Send Slack Message','https://placehold.co/64x64')
ON CONFLICT ("id") DO NOTHING;- Primary Backend API
cd primary-backend
npm run start- Webhook Service
cd hooks
DATABASE_URL="postgresql://postgres:postgres@localhost:5432/zapier?schema=public" npm run start- Background Processor
cd processor
npm run start- Task Worker
cd worker
npm run start- Frontend
cd frontend
npm run dev- User authentication
- Create Zaps with triggers and actions
- View and manage existing Zaps
- Real-time workflow execution
- Frontend: Next.js, React, TypeScript, Tailwind CSS
- Backend: Node.js, Express, TypeScript
- Database: PostgreSQL with Prisma ORM
- Authentication: JWT
MIT