A full-stack web application for creating, managing, and collecting feedback through customizable forms. Built with React (frontend) and Node.js/Express (backend) with PostgreSQL database.
Modern landing page with features showcase and testimonials
Clean login/signup interface with form validation
User dashboard showing all created forms with quick actions
User dashboard showing share url screen
Intuitive form builder with drag-and-drop functionality
Detailed form analytics with response statistics
Test the form using the url below
https://feedbacker.purushotamjeswani.in/form/0cffa8ec-dfad-4d0d-bb8a-aa4fd2a9773e
- User Authentication: Secure login/signup system with JWT tokens
- Form Management: Create, edit, and delete feedback forms
- Dynamic Questions: Support for multiple question types (text, email, textarea, checkbox)
- Public/Private Forms: Control form visibility and access
- Real-time Responses: Collect and view form responses instantly
- Responsive Design: Modern UI that works on all devices
- Analytics Dashboard: View form statistics and response counts
- React - UI framework
- Vite - Build tool and dev server
- React Router DOM - Client-side routing
- Tailwind CSS - Styling and responsive design
- Node.js - Runtime environment
- Express.js - Web framework
- PostgreSQL - Database
- Zod - Schema validation
Before running this application, make sure you have:
- Node.js (v14 or higher)
- npm or yarn package manager
- PostgreSQL database server
git clone <repository-url>
cd FeedbackerNavigate to the backend directory:
cd backendInstall dependencies:
npm installCreate a .env file in the backend directory with the following variables:
# Database Configuration
DB_CONNECTION_STRING="postgresql://username:password@localhost:5432/feedback_db"
JWT_SECRET="qwqwqw"
ALLOWED_ORIGIN="http://localhost:5173,"
PORT=3000Start the backend server:
# Development mode (with nodemon)
npm run dev
# Production mode
npm startThe backend server will run on http://localhost:3000
Navigate to the frontend directory:
cd frontendInstall dependencies:
npm installCreate a .env file in the frontend directory (optional):
VITE_SERVER_URL=http://localhost:3000/api/v1/Start the frontend development server:
npm run devThe frontend will run on http://localhost:5173
| Method | Endpoint | Description | Auth Required |
|---|---|---|---|
| POST | /api/v1/user/create |
Register a new user | No |
| POST | /api/v1/user/login |
Login user | No |
| GET | /api/v1/user/ |
Get user profile | Yes |
| Method | Endpoint | Description | Auth Required |
|---|---|---|---|
| GET | /api/v1/feedback/all |
Get all user's forms | Yes |
| GET | /api/v1/feedback/:id |
Get specific form by ID | Optional* |
| POST | /api/v1/feedback/create |
Create new form | Yes |
| PATCH | /api/v1/feedback/:id |
Update form details | Yes |
| DELETE | /api/v1/feedback/:id |
Delete form | Yes |
| GET | /api/v1/feedback/detail/:id |
Get form detail | Yes |
*Optional auth: Public forms accessible without auth, private forms require ownership
| Method | Endpoint | Description | Auth Required |
|---|---|---|---|
| PATCH | /api/v1/questions/:id |
Update question | Yes |
| DELETE | /api/v1/questions/:id |
Delete question | Yes |
| Method | Endpoint | Description | Auth Required |
|---|---|---|---|
| POST | /api/v1/response/:formId |
Submit form response | No |
| GET | /api/v1/response/all/:formId |
Get 20 recent form responses | Yes |
- Purpose: Landing page for the application
- Features:
- Hero section with call-to-action
- Features showcase
- How it works section
- Customer testimonials
- Footer with links
- Access: Public (no authentication required)
- Purpose: User authentication (login/signup)
- Features:
- Toggle between login and signup modes
- Redirect to dashboard after successful login
- Access: Public
- Purpose: Public form filling page
- Features:
- Display form questions
- Handle different question types
- Form submission with validation
- Thank you modal after submission
- Access: Public (for public forms)
- Purpose: Main user dashboard
- Features:
- List all user's forms
- Quick actions (edit, delete, view responses)
- Create new form button
- Access: Authenticated users only
- Purpose: Create new form or edit existing form
- Features:
- Form title and description editing
- Add/remove questions
- Question type selection (text, email, textarea, checkbox, url, etc)
- Option management for checkbox questions
- Public/private form settings
- Access: Authenticated users only (can only edit own forms)
- Purpose: View form details and responses
- Features:
- Form information display
- All form responses listing
- Response pagination
- Response statistics
- Access: Authenticated users only (can only view own form responses)
id- Primary keyname- User's full nameemail- User's email (unique)password- Hashed passwordis_verified- Email verification statuscreated_at- Account creation timestamp
id- Primary keytitle- Form titledescription- Form descriptionuser_id- Foreign key to users tableis_public- Public/private form flagclosed- Form status (open/closed)created_at- Form creation timestamp
id- Primary keyform_id- Foreign key to forms tablequestion_text- Question contentquestion_type- Type (text, email, textarea, checkbox)is_required- Required field flagorder_index- Question order in form
id- Primary keyquestion_id- Foreign key to questions tableoption_text- Option contentorder_index- Option order
id- Primary keyform_id- Foreign key to forms tablequestion_id- Foreign key to questions tableresponse_text- User's responsesubmitted_at- Response timestamp
- User registers/logs in through
/loginpage - JWT token is generated and stored in localStorage
- Token is automatically included in API requests via axios interceptor
- Protected routes verify token using
authMiddleware - Frontend redirects to login if token is invalid/expired
Purshotam Jeswani