The Problem
Salon owners need a single interface to track appointments, services, staff, and revenue across one or many locations. Manual spreadsheets or disparate tools lead to double‑bookings, lost client history, and inefficient reporting.
What This Does
The repository bundles two loosely‑related apps:
Admin Panel – a React‑based dashboard (155 files) that presents service catalogs, booking calendars, and analytics. Key UI components live under Admin Panel/ (e.g., index.js). AI Sakincare Recommendation – a client‑facing React app (src/ and public/) that calls a Flask or AWS‑Lambda backend (mlmodelflask/app.py, mlmodelAWSLambda/app.py) to run a skin‑analysis model stored in export.pkl.
The salon‑management front‑end consumes Firebase for real‑time data (mentioned in the README) while the skincare module provides a separate ML inference service.
How To Use It
Install the React front‑ends
Salon admin UI (requires a package.json – missing in repo) cd "Admin Panel" ❗ No package.json found; you must add one or copy from a CRA template npm install && npm start # expected command once package.json exists
AI skincare demo
cd "../AI Sakincare Recommandation" npm ci # uses package-lock.json npm start # runs CRA dev server (looks for src/index.js) Set up the ML back‑ends
Flask version
cd mlmodelflask python -m venv .venv source .venv/bin/activate pip install -r requirements.txt flask run # app.py defines a Flask app object
AWS‑Lambda version (Zappa deployment)
cd mlmodelAWSLambda pip install -r requirements.txt Deploy with Zappa – configuration in zappasettings.json zappa deploy production Configure Secrets
Admin Panel expects environment variables (e.g., Firebase keys) defined in Admin Panel/.env. The file is present and likely contains plaintext credentials – remove or replace it before any public deployment. The Flask/Lambda services read nothing from .env; you must supply any required API keys in their own config files (none are present). Run the full stack (demo)
In separate terminals
npm start # AI skincare React UI flask run # Flask inference service (default 5000) Point the UI to http://localhost:5000 via the fetch URLs in src/FacialAnalysis.js
Real‑World Use
A boutique chain can host the Admin Panel on a Firebase‑hosting site, linking it to a Firestore database that stores appointments, customers, and services. Staff use the dashboard to add new services or view a real‑time calendar. Meanwhile, the AI Sakincare UI could be embedded on the public website to offer a free skin‑type analysis that calls the Flask endpoint (/predict) and returns product recommendations.
// Example fetch from src/FacialAnalysis.js fetch(${process.env.REACTAPPAPIURL}/predict, { method: 'POST', body: imageFormData, }) .then(r => r.json()) .then(data => setResult(data));
Code Health & Issues
| Severity | Issue | Location |
|---|---|---|
| High | Plaintext secrets in Admin Panel/.env. | Admin Panel/.env |
| High | No CI/CD pipeline – no automated builds or tests. | Repository root lacks .github/, Jenkinsfile, etc. |
| Medium | Missing package.json for the Admin Panel, preventing npm install/start. | Admin Panel/ |
| Medium | Mixed responsibilities: salon management UI and skincare ML are unrelated, increasing maintenance overhead. | Entire repo |
| Low | Only four test files; they target the React UI (src/App.test.js) and do not cover backend logic. | AI Sakincare Recommandation/src/App.test.js |
| Low | No LICENSE file – legal reuse unclear. | Repository root |
| Low | Large nodemodules committed (e.g., Admin Panel/nodemodules/) – inflates repo size and masks dependency drift. | Admin Panel/node_modules/ |
The Bottom Line
The project provides a functional React‑Firebase salon dashboard and a working ML inference demo, but the codebase is fragmented, missing essential build metadata for the admin UI, and contains exposed secrets. It may serve as a proof‑of‑concept for a small team willing to separate the two concerns and add proper CI, licensing, and secret management. Large‑scale or production deployments will require significant cleanup.