QRuestBook is a web application that allows users to create and manage guestbook forms that can be accesses through QR codes for collecting fun guest memories and silly reviews. Users can create customized forms, generate QR codes, and collect responses from people who scan them.
The Knock Knock Bathroom Guestbook inspired me to create this project. My family owns the Knock Knock Couch Guestbook, but no one ever fills it out. I thought a great way to solve this issue would be to create the form digitally, and have users scan a QR code to fill it out. I have link the Knock Knock Bathroom Guestbook and website below: https://knockknockstuff.com/ https://knockknockstuff.com/products/bathroom-guestbook-2022-edition?_pos=1&_sid=197250704&_ss=r
- User authentication with Firebase
- Create customizable feedback forms
- Generate unique QR codes for each form
- Collect and manage reviews
- View analytics and responses
- Mobile-responsive design
- More customization for forms (general guest form, couch guestbook, etc)
- Cuter (and possibly customizable as well) styling
- Email notifcation system to see when someone has filled out a form you created
- React
- Tailwind CSS
- Firebase Authentication
- React Router
- Node.js
- Express
- PostgreSQL
- Firebase Admin SDK
- QR Code generation
Before you begin, ensure you have the following installed:
- Node.js (v14 or higher)
- PostgreSQL
- npm or yarn
- Clone the repository:
git clone [repository-url]
cd QRuestBook- Install dependencies:
For the backend:
cd backend
npm installFor the frontend:
cd frontend
npm install- Set up environment variables:
Create a .env file in the backend directory:
DB_HOST=localhost
DB_PORT=5432
DB_NAME=qrreview_db
DB_USER=postgres
DB_PASSWORD=your_password
TEST_DB_NAME=logreview_test_db
PORT=5000
APP_URL=http://localhost:3000- Set up the database:
psql -U postgres -f backend/db/schema.js- Start the backend server:
cd backend
npm run dev- Start the frontend development server:
cd frontend
npm startThe application will be available at http://localhost:3000
├── backend/
│ ├── db/
│ │ ├── index.js
│ │ ├── database.js
│ │ └── schema.js
│ ├── middleware/
│ │ └── FirebaseAuth.js
│ ├── routes/
│ │ └── api.js
│ └── server.js
├── frontend/
│ ├── src/
│ │ ├── components/
│ │ ├── pages/
│ │ └── firebase.js
│ └── package.json
└── package.json
POST /api/verify- Verify user token and create/update user
POST /api/logs- Create a new logGET /api/logs- Get all logs for a userGET /api/logs/:logId/config- Get log configurationPUT /api/logs/:logId- Update a logDELETE /api/logs/:logId- Delete a log
POST /api/logs/:logId/reviews- Submit a reviewGET /api/logs/:logId/reviews- Get all reviews for a logGET /api/logs/:logId/reviews/:reviewId- Get a specific review
The application uses the following main tables:
users- User informationlogs- Log/form configurationslog_fields- Form field settingsreviews- Submitted reviewsreview_field_values- Review content
- Firebase Authentication for user management
- Rate limiting for review submissions
- IP-based spam prevention
- Secure file uploads with Multer
- 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