A powerful web scraping workflow automation platform built with Next.js 16. Create visual workflows to automate browser-based tasks, extract data with AI, and deliver results via webhooks.
- Visual Workflow Editor - Drag-and-drop interface using React Flow
- Scheduled Workflows - Cron-based scheduling with automatic execution
- Execution History - Track all workflow runs with detailed logs
- Launch Browser - Start automated browser sessions
- Page to HTML - Extract HTML content from pages
- Extract Text from Element - Get text using CSS selectors
- Fill Input - Automate form filling
- Click Element - Simulate user clicks
- Wait for Element - Wait for elements to appear
- Navigate URL - Navigate to different pages
- Scroll to Element - Scroll page to specific elements
- Extract Data with AI - Use Google Gemini to intelligently extract structured data
- Read/Add JSON Properties - Manipulate JSON data within workflows
- Deliver via Webhook - Send results to external services
- User Authentication - Secure login with Clerk
- Credits System - Pay-per-use billing with Stripe
- Credentials Vault - Securely store API keys and passwords (encrypted)
- Analytics Dashboard - Track workflow performance and credit usage
- Node.js >= 18.x
- npm or yarn or pnpm
- Stripe Account (for billing features)
- Clerk Account (for authentication)
- Google AI API Key (optional, for AI extraction features)
-
Clone the repository
git clone https://github.com/ArunKushhhh/floww.git cd floww -
Install dependencies
npm install
-
Set up environment variables
Create a
.env.localfile in the root directory:cp .env .env.local
Then fill in the required values (see Environment Variables below).
-
Set up the database
npx prisma generate npx prisma db push
-
Run the development server
npm run dev
-
Open the app
Visit http://localhost:3000 in your browser.
Create a .env.local file with the following variables:
| Variable | Description | Required |
|---|---|---|
NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY |
Clerk publishable key (starts with pk_) |
β |
CLERK_SECRET_KEY |
Clerk secret key (starts with sk_) |
β |
NEXT_PUBLIC_CLERK_SIGN_IN_URL |
Sign-in page URL | β |
NEXT_PUBLIC_CLERK_SIGN_UP_URL |
Sign-up page URL | β |
NEXT_PUBLIC_CLERK_SIGN_UP_FORCE_REDIRECT_URL |
Redirect URL after sign-up | β |
Example:
NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY=pk_test_xxxxx
CLERK_SECRET_KEY=sk_test_xxxxx
NEXT_PUBLIC_CLERK_SIGN_IN_URL=/sign-in
NEXT_PUBLIC_CLERK_SIGN_UP_URL=/sign-up
NEXT_PUBLIC_CLERK_SIGN_UP_FORCE_REDIRECT_URL=/setup| Variable | Description | Required |
|---|---|---|
DATABASE_URL |
Database connection string | β |
Example (SQLite - default):
DATABASE_URL="file:./prisma/dev.db"| Variable | Description | Required |
|---|---|---|
NEXT_PUBLIC_APP_URL |
Base URL of your application | β |
API_SECRET |
Secret key for API authentication (generate a random string) | β |
ENCRYPTION_KEY |
32-byte hex key for encrypting credentials | β |
NEXT_PUBLIC_DEV_MODE |
Enable development features (true/false) |
β |
Example:
NEXT_PUBLIC_APP_URL=http://localhost:3000
API_SECRET=your-random-api-secret-key
ENCRYPTION_KEY=your-64-character-hex-string
NEXT_PUBLIC_DEV_MODE=falseTo generate an encryption key:
node -e "console.log(require('crypto').randomBytes(32).toString('hex'))"| Variable | Description | Required |
|---|---|---|
STRIPE_SECRET_KEY |
Stripe secret key | β |
NEXT_PUBLIC_STRIPE_PUBLISHABLE_KEY |
Stripe publishable key | β |
STRIPE_WEBHOOK_SECRET |
Stripe webhook signing secret | β |
STRIPE_SMALL_PACK_PRICE_ID |
Price ID for Small credits pack | β |
STRIPE_MEDIUM_PACK_PRICE_ID |
Price ID for Medium credits pack | β |
STRIPE_LARGE_PACK_PRICE_ID |
Price ID for Large credits pack | β |
Example:
STRIPE_SECRET_KEY=sk_test_xxxxx
NEXT_PUBLIC_STRIPE_PUBLISHABLE_KEY=pk_test_xxxxx
STRIPE_WEBHOOK_SECRET=whsec_xxxxx
STRIPE_SMALL_PACK_PRICE_ID=price_xxxxx
STRIPE_MEDIUM_PACK_PRICE_ID=price_xxxxx
STRIPE_LARGE_PACK_PRICE_ID=price_xxxxxNote: You need to create products and prices in your Stripe dashboard, then copy the price IDs here.
| Command | Description |
|---|---|
npm run dev |
Start development server with hot reload |
npm run build |
Build for production |
npm run start |
Start production server |
npm run lint |
Run ESLint |
- Framework: Next.js 16 with App Router
- Language: TypeScript
- UI Components: Radix UI + shadcn/ui
- Styling: Tailwind CSS 4
- Database: Prisma ORM with SQLite (LibSQL adapter)
- Authentication: Clerk
- Payments: Stripe
- Workflow Editor: React Flow
- Browser Automation: Puppeteer
- AI: Google Gemini
- State Management: TanStack Query
floww/
βββ app/ # Next.js App Router
β βββ (auth)/ # Authentication pages (sign-in, sign-up)
β βββ (dashboard)/ # Dashboard pages
β β βββ billing/ # Billing & credits management
β β βββ credentials/ # Credentials vault
β β βββ workflows/ # Workflow management
β βββ api/ # API routes
β β βββ webhooks/ # Stripe webhooks
β β βββ workflows/ # Workflow execution endpoints
β βββ setup/ # User setup page
β βββ workflow/ # Workflow editor
βββ actions/ # Server actions
β βββ analytics/ # Analytics actions
β βββ billing/ # Billing actions
β βββ credentials/ # Credentials actions
β βββ workflows/ # Workflow actions
βββ components/ # React components
βββ hooks/ # Custom React hooks
βββ lib/ # Utility libraries
β βββ stripe/ # Stripe configuration
β βββ workflow/ # Workflow execution engine
βββ prisma/ # Database schema & migrations
βββ providers/ # React context providers
βββ schemas/ # Zod validation schemas
βββ types/ # TypeScript type definitions
βββ public/ # Static assets
Floww uses a credit-based billing system:
| Pack | Credits | Price |
|---|---|---|
| Small | 1,000 | $9.99 |
| Medium | 5,000 | $39.99 |
| Large | 10,000 | $69.99 |
New users receive 100 free credits upon signup. Different tasks consume varying amounts of credits based on complexity.
- Credentials Encryption: All stored credentials are encrypted using AES-256-GCM
- Authentication: Secured with Clerk's enterprise-grade auth
- API Protection: Internal APIs are protected with secret key validation
- Webhook Verification: Stripe webhooks are verified using signatures
This project is private and proprietary.
Contributions are welcome! Please feel free to submit a Pull Request.
If you have any questions or need help, please open an issue in the repository.