Build beautiful, intelligent forms from plain English.
Intake is a full-stack AI form builder and data collection platform that turns natural-language prompts into structured, multi-step forms. It combines an intuitive drag-and-drop builder with AI-assisted validation, question enhancement, form auditing, analytics, response management, and CSV exports.
Built with React, TypeScript, Express, PostgreSQL, Bun, and Google Gemini.
- Application: https://intakeai-builder.vercel.app
- Backend API: https://intake-backend-dagu.onrender.com
- API Health: https://intake-backend-dagu.onrender.com/api/health
Describe the form you want in plain English and let Google Gemini generate a structured form automatically.
The AI can determine:
- Appropriate question types
- Question labels and descriptions
- Multi-step form structure
- Required fields
- Validation rules
- Theme and presentation presets
- Logical question flows
Example:
"Create a customer satisfaction survey for a SaaS product with ratings, multiple-choice questions, and an optional feedback section."
Intake turns the description into a ready-to-edit form.
Generate context-aware validation rules for form fields.
Supports AI-assisted recommendations for:
- Regex patterns
- Numeric ranges
- Field constraints
- Custom validation messages
- Context-specific validation logic
Improve individual form questions using AI.
The enhancer can:
- Rephrase unclear questions
- Improve neutrality
- Make questions more engaging
- Generate relevant follow-up questions
- Improve wording based on context
Evaluate a form before publishing it.
The AI audit provides feedback around:
- Target audience suitability
- Potential completion rate
- Question clarity
- User friction
- Form structure
- Areas for improvement
This helps identify potential UX problems before collecting responses.
Track how your forms perform with built-in analytics.
Analytics include:
- Total submissions
- Completion duration
- Conversion rates
- Submission trends
- Daily response timelines
- Question-level response breakdowns
Charts and visualizations make it easy to understand how respondents interact with your forms.
Automatically aggregate compatible response types into visual breakdowns.
Supported examples include:
- Ratings
- Yes / No responses
- Multiple-choice selections
- Multi-select responses
- Dropdown selections
Manage responses from all forms in a single interface.
The inbox provides:
- Cross-form response browsing
- Response search
- Submission details
- Fast filtering
- Centralized response management
Export collected form responses as CSV for further analysis or external data pipelines.
The backend includes an RFC 4180-compatible CSV serialization utility for structured response exports.
Published forms receive unique public slugs that can be shared with respondents.
Public forms support:
- Shareable URLs
- Public response collection
- View tracking
- Submission tracking
| Technology | Purpose |
|---|---|
| React 19 | UI framework |
| TypeScript | Type-safe development |
| Vite | Frontend build tooling |
| Tailwind CSS | Styling |
| React Router | Client-side routing |
| React Hook Form | Form state and validation |
| Axios | API communication |
| dnd-kit | Drag-and-drop form builder |
| Recharts | Analytics visualizations |
| Lucide React | Icons |
| Sonner | Notifications |
| Technology | Purpose |
|---|---|
| Bun | Runtime and package manager |
| Express 5 | REST API framework |
| TypeScript | Type-safe backend development |
| PostgreSQL | Relational database |
| Neon | Serverless PostgreSQL hosting |
| JWT | Authentication |
| bcryptjs | Password hashing |
| Google Gemini | AI generation and analysis |
| Axios / REST | Frontend β backend communication |
Intake follows a layered backend architecture that separates HTTP handling, business logic, and database access.
Client
β
βΌ
React + Vite Frontend
β
β REST API
βΌ
Express API
β
βββ Middleware
β βββ Authentication
β βββ Error Handling
β
βββ Routes
β
βββ Controllers
β
βββ Services
β βββ Authentication
β βββ Forms
β βββ Responses
β βββ Analytics
β βββ Insights
β βββ Gemini AI
β
βββ Repositories
β
βΌ
PostgreSQL / Neon
backend/
βββ config/
β βββ db.ts
β βββ envConfig.ts
β
βββ controllers/
β βββ ai.controller.ts
β βββ auth.controller.ts
β βββ form.controller.ts
β βββ insights.controller.ts
β βββ response.controller.ts
β
βββ middleware/
β βββ auth.middleware.ts
β βββ errorHandler.middleware.ts
β
βββ repositories/
β βββ form.repo.ts
β βββ response.repo.ts
β βββ user.repo.ts
β
βββ routes/
β βββ ai.routes.ts
β βββ auth.routes.ts
β βββ form.routes.ts
β βββ insights.routes.ts
β βββ response.routes.ts
β
βββ services/
β βββ ai.service.ts
β βββ analytics.service.ts
β βββ auth.service.ts
β βββ form.service.ts
β βββ gemini.service.ts
β βββ insights.service.ts
β βββ response.service.ts
β
βββ utils/
β βββ ApiError.ts
β βββ apiResponses.ts
β βββ asyncHandler.ts
β βββ constants.ts
β βββ csv.ts
β βββ nanoid.ts
β βββ seed.ts
β βββ token.ts
β
βββ app.ts
βββ server.ts
βββ package.json
βββ tsconfig.json
Intake uses JWT-based authentication.
The authentication flow includes:
- User registration
- Password hashing with bcryptjs
- JWT generation after authentication
- Bearer token authentication for protected API routes
- Automatic token attachment from the frontend
- Automatic session cleanup when a 401 Unauthorized response is received
Authentication tokens are stored client-side and attached to API requests using the HTTP Authorization header.
The backend exposes RESTful endpoints grouped by functionality.
/api/health
/api/auth
/api/forms
/api/ai
/api/responses
/api/insights
The exact endpoints are defined in the backend routes/ directory.
git clone https://github.com/nihalsheikh/intake.git
cd intakeNavigate to the backend and install dependencies
cd backend
bun installCreate Env File: backend/.env
PORT=5000
DATABASE_URL=postgresql://user:password@host/neondb?sslmode=require
JWT_SECRET=your_secure_jwt_secret
JWT_EXPIRES_IN=7d
FRONTEND_URL=http://localhost:5173
GEMINI_API_KEY=your_gemini_api_key
GEMINI_MODEL=gemini-3.6-flashIf you want to populate the database with demo data:
bun run seed
This generates realistic sample data for testing the application's forms, responses, and analytics functionality.
Start Backend For development:
bun run devOpen a new terminal go to frontend dir and install dependencies
cd frontend
bun install
Create Frontend Env file in frontend/.env
VITE_API_URL=http://localhost:5000/api
bun run dev
If the database has been populated using the seed script, you can use the seeded demo account:
Email: alex@timetoprogram.dev
Password: Test@1234
intake/
β
βββ backend/ # Express + Bun + PostgreSQL API
β
βββ frontend/ # React + Vite application
β
βββ README.md
The project is intentionally structured as a monorepo so the frontend and backend can be developed and deployed independently.
Frontend
React + TypeScript + Vite
β
β HTTPS / REST
βΌ
Backend
Express + TypeScript + Bun
β
βββββββββββββββββ
βΌ βΌ
PostgreSQL Google Gemini
Neon API
This project is created primarily for educational, portfolio, and learning purposes.
Nihal Sheikh Built with React, TypeScript, Express, PostgreSQL, Bun, and Google Gemini.