β If you find this tool useful, please consider giving it a star!
- Overview
- Quick Start
- Detailed Installation
- User Guide
- Technical Documentation
- Production Deployment
- Contributing
Feedback Flow is a web application designed to help product testers efficiently manage their testing activities and feedback submissions.
This application is built for individual testers who participate in product testing programs (such as Amazon's Testers Club or similar platforms), where sellers offer free or discounted products in exchange for honest reviews.
β You should use this app if you:
- Test multiple products simultaneously
- Need to track purchases, feedback, and refunds
- Must provide proof of published reviews to receive refunds
- Want organized records in case of disputes with sellers
β This app is NOT for:
- Sellers or product managers
- Managing product offers from sellers (out of scope)
- π¦ Purchase Tracking - Record all your test product purchases
- βοΈ Feedback Management - Document your reviews and opinions
- πΈ Proof Storage - Keep screenshots of purchases and published reviews
- π° Refund Monitoring - Track refund status and amounts
- π Dispute Resolution - Generate public proof links for seller disputes
- π Statistics Dashboard - Visualize your testing activity
Feedback Flow supports the standard product testing process:
- Purchase - Seller offers product; you purchase it
- Proof of Purchase - Upload screenshot to seller
- Testing - Use and evaluate the product
- Review - Write honest feedback
- Publication - Feedback published on platform (e.g., Amazon)
- Proof of Review - Send published review screenshot to seller
- Refund - Receive full or partial refund from seller
- Frontend: React 19, Vite, Tailwind CSS, HeroUI
- Backend: Cloudflare Workers (serverless)
- Database: Cloudflare D1 (SQLite)
- Authentication: Auth0 (OAuth 2.0)
- Deployment: Static SPA on CDN + REST API on Workers
Based on the Vite, Auth0 & HeroUI Template.
- Node.js 18+ and npm
- Git
- A GitHub account (for authentication)
# 1. Clone the repository
git clone https://github.com/sctg-development/feedback-flow.git
cd feedback-flow
# 2. Install dependencies
cd cloudflare-worker && npm ci
cd ../client && npm ci
# 3. Set up environment (see Configuration section)
cp .env.example .env
# Edit .env with your settings
# 4. Initialize database with test data
cd cloudflare-worker
npm run d1:create && npm run d1:init && npm test
# 5. Start the application
# Terminal 1 - Backend
cd cloudflare-worker && npm run dev:env
# Terminal 2 - Frontend
cd client && npm run dev:env
# 6. Open http://localhost:5173git clone https://github.com/sctg-development/feedback-flow.git
cd feedback-flow
# Install backend dependencies
cd cloudflare-worker
npm ci
# Install frontend dependencies
cd ../client
npm ciFeedback Flow uses Auth0 for authentication. You'll need to:
- Create an Auth0 account at auth0.com
- Set up an Application (Single Page Application type)
- Configure Social Connections (enable GitHub login)
- Create an API for backend authentication
- Set up permissions in your API
Detailed Auth0 configuration instructions are available in Auth0.md.
Create a .env file in the root directory with the following structure:
# ========================================
# AUTH0 CONFIGURATION
# ========================================
AUTH0_CLIENT_ID=your_auth0_client_id
AUTH0_CLIENT_SECRET=your_auth0_client_secret
AUTH0_MANAGEMENT_API_CLIENT_ID=your_management_api_client_id
AUTH0_MANAGEMENT_API_CLIENT_SECRET=your_management_api_secret
AUTH0_DOMAIN=your-domain.eu.auth0.com
AUTH0_SCOPE="openid profile email read:api write:api admin:api backup:api"
AUTH0_AUDIENCE="http://localhost:8787/api"
AUTH0_SUB=github|your_github_user_id
# ========================================
# API CONFIGURATION
# ========================================
API_BASE_URL=http://localhost:8787/api
CORS_ORIGIN=http://localhost:5173
# ========================================
# PERMISSIONS
# ========================================
READ_PERMISSION=read:api
WRITE_PERMISSION=write:api
ADMIN_PERMISSION=admin:api
ADMIN_AUTH0_PERMISSION=auth0:admin:api
BACKUP_PERMISSION=backup:api
SEARCH_PERMISSION=search:api
# ========================================
# APPLICATION SETTINGS
# ========================================
CRYPTOKEN=your_random_encryption_key_here
STATISTICS_LIMIT=100
DB_BACKEND=d1
DB_MAX_IMAGE_SIZE=640
AMAZON_BASE_URL="https://www.amazon.fr/gp/your-account/order-details?orderID="
# ========================================
# AUTHENTICATION TOKEN (for testing)
# ========================================
# Get this token by logging into the app and clicking your name in the footer
AUTH0_TOKEN="your_jwt_token_here"To populate your development environment with realistic sample data:
cd cloudflare-worker
npm run d1:create && npm run d1:init && npm testThis creates:
- Sample purchases with various dates and amounts
- Feedback entries linked to purchases
- Publication records with screenshots
- Refund transactions
- Different purchase states (pending, published, refunded)
- Start the application (see Step 6)
- Open http://localhost:5173
- Log in with your GitHub account
- Click on your name in the footer
- Copy the JWT token from the modal
- Paste it in your
.envfile asAUTH0_TOKEN - Restart the Cloudflare Worker
Open two terminal windows:
Terminal 1 - Backend:
cd cloudflare-worker
npm run dev:envTerminal 2 - Frontend:
cd client
npm run dev:envAccess the application:
- Frontend: http://localhost:5173
- Backend API: http://localhost:8787
- API Documentation: http://localhost:8787/docs
Feedback Flow uses a role-based permission system:
| Permission | Description |
|---|---|
read:api |
View your own feedback data |
write:api |
Create and update your feedback data |
search:api |
Search across feedback data |
admin:api |
Administer users and testers |
auth0:admin:api |
Manage Auth0 users |
backup:api |
Backup and restore database |
1. Add a New Purchase
- Navigate to the main page
- Click "Add Purchase"
- Fill in: product name, order number, purchase date, amount
- Upload screenshot of purchase confirmation
- Save
2. Submit Feedback
- Find your purchase in the list
- Click "Add Feedback"
- Write your honest review
- Save feedback draft
3. Publish Your Review
- Publish your review on the required platform (e.g., Amazon)
- Return to Feedback Flow
- Click "Publish Feedback"
- Upload screenshot of published review
- Mark as published
4. Request and Record Refund
- Generate a PDF report for the seller (optional)
- Send proof to seller
- When refund is received, click "Add Refund"
- Enter refund amount and date
Managing Users and Testers
Admins can access the Users & Permissions page to:
- View all Auth0 users with their assigned testers
- Create new testers and assign OAuth IDs
- Assign/unassign users to testers (single or bulk operations)
- Delete users (automatically unassigns them first)
Creating a Tester:
- Navigate to Users & Permissions
- Click "Create Tester"
- Enter tester name
- Select one or more OAuth IDs to assign
- Save
Assigning Users to Testers:
- Select user(s) in the table
- Click "Assign"
- Choose existing tester
- Confirm assignment
The REST API is documented with Swagger UI at /docs.
Authentication:
- Log into the application
- Click your name in the footer
- Copy the JWT token
- In Swagger UI, click "Authorize"
- Paste token with
Bearerprefix:Bearer your_token_here
The token is valid for 24 hours.
If you need to prove your testing activity to a seller:
- Select the purchase in question
- Click "Generate Public Link"
- Share the link with the seller
- The link provides read-only access to:
- Purchase proof
- Published review screenshot
- All relevant dates and information
flowchart LR
Browser["Browser\n(React SPA)"] -->|HTTPS| CDN["CDN (Static)\n(Vite build)"]
CDN -->|REST API| Workers["Cloudflare Workers\n(Serverless)"]
Workers --> D1["D1 Database\n(SQLite)"]
Workers --> KV["KV Storage\n(Cache)"]
classDef infra fill:#f8f9fa,stroke:#333,stroke-width:1px;
class Browser,CDN,Workers,D1,KV infra;
The application stores:
- Testers: User profiles with OAuth ID mappings
- Purchases: Product orders with dates and amounts
- Feedback: Review text and submission dates
- Publications: Published review proofs
- Refunds: Refund amounts and dates
- Screenshots: Base64 encoded images
All REST API endpoints are automatically documented with Swagger UI:
π Interactive API Documentation
The Swagger UI provides:
- Complete endpoint documentation
- Request/response schemas
- Interactive testing interface
- Authentication examples
Authentication Flow:
- User logs in via Auth0 (OAuth 2.0)
- Browser receives JWT token
- Token sent to API in
Authorization: Bearer <token>header - API verifies token signature and permissions
- Access granted or denied based on token claims
Permission Enforcement:
- All endpoints require valid JWT
- Permissions checked on every request
- Users can only access their own data (except admins)
- Admin endpoints require
admin:apipermission
Backend (cloudflare-worker/):
npm run dev:env # Start dev server with .env
npm run d1:create # Create local D1 database
npm run d1:init # Initialize schema
npm run d1:migrate:all # Run migrations
npm test # Run tests + populate test dataFrontend (client/):
npm run dev:env # Start dev server with .env
npm run build # Build for production
npm run preview # Preview production buildThe test suite includes:
- End-to-end API tests
- Database operation tests
- Authentication flow tests
- Permission enforcement tests
Run tests with:
cd cloudflare-worker
npm testFeedback Flow can be deployed entirely on Cloudflare's free tier.
- Cloudflare Account - Sign up at dash.cloudflare.com
- Wrangler CLI - Install globally:
npm install -g wrangler - GitHub Repository - Fork or use the original repo
A. Sign in to Cloudflare via Wrangler:
npx wrangler loginB. Create KV Namespace (for caching):
npx wrangler kv:namespace create "KV_CACHE"Copy the returned namespace ID to wrangler.jsonc.
C. Create D1 Database:
npx wrangler d1 create feedbackflow-dbCopy the returned database ID to wrangler.jsonc.
D. Initialize Remote Database:
cd cloudflare-worker
npm run d1:create:remote
npm run d1:migrate:all:remoteNavigate to your repository: Settings β Secrets and variables β Actions
Required Secrets:
CLOUDFLARE_API_TOKEN(Workers/D1/KV edit permissions)CLOUDFLARE_ACCOUNT_IDAUTH0_DOMAINAUTH0_CLIENT_IDAUTH0_CLIENT_SECRETAUTH0_MANAGEMENT_API_CLIENT_IDAUTH0_MANAGEMENT_API_CLIENT_SECRETAUTH0_AUDIENCEAPI_BASE_URL(your production URL)CORS_ORIGIN(your frontend URL)PAYPAL_TRANSACTION_BASE_URL
Required Variables:
AUTH0_SCOPEREAD_PERMISSIONWRITE_PERMISSIONADMIN_PERMISSIONSEARCH_PERMISSIONADMIN_AUTH0_PERMISSIONBACKUP_PERMISSIONDB_BACKEND(set tod1)DB_MAX_IMAGE_SIZEAMAZON_BASE_URLSTATISTICS_LIMIT
The repository includes a deployment workflow: .github/workflows/deploy-cloudflare-worker.yaml
Trigger deployment:
- Automatic: Push to
mainbranch - Manual: Actions tab β CloudflareWorkerDeploy β Run workflow
- Check the Worker URL in Cloudflare dashboard
- Test API endpoints:
GET /api/testers - Deploy frontend to your preferred CDN
- Update Auth0 callback URLs with production URLs
The frontend is a static SPA that can be deployed to:
- Cloudflare Pages (recommended)
- Vercel
- Netlify
- Any static hosting service
Build the frontend:
cd client
npm run buildDeploy the dist/ folder to your hosting provider.
If you fork this repository:
- Enable GitHub Actions in your fork
- Create all secrets and variables as listed above
- Update
wrangler.jsoncwith your resource IDs - Push to trigger deployment
Contributions are welcome! Please:
- Fork the repository
- Create a feature branch:
git checkout -b feature/your-feature - Commit changes:
git commit -m 'Add your feature' - Push to branch:
git push origin feature/your-feature - Open a Pull Request
- Follow existing code style
- Add tests for new features
- Update documentation as needed
- Keep commits focused and atomic
MIT License - see LICENSE file for details.
- Documentation: sctg-development.github.io/feedback-flow/docs
- Template: Vite, Auth0 & HeroUI Template
- Issues: GitHub Issues
Made with β€οΈ by the SCTG Development team
