smooth-app
A collaborative, free and open database of ingredients, nutrition facts and information on food products from around the world
Upload biometric study data to generate stats, charts, and PDF reports
AI summary · README
HealthJavaScript · CSSGitHub @georgettebadourra7788-cloudOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
Loading the full README. The saved excerpt is shown below.
A web app for UX researchers and academic labs to upload raw biometric
study data (eye-tracking, GSR, heart-rate CSVs) and generate clean stats,
charts, and exportable PDF reports.
Visual design ported from a Google Stitch export — see STITCH_SOURCE.md
for the screen → component mapping.
• Frontend: React + Vite, Tailwind CSS v4
• Backend/Auth/DB: Firebase (Auth, Firestore) — Spark (free) plan
• CSV parsing: Papaparse (client-side)
• Charts: Recharts
• PDF export: jsPDF + html2canvas
• Hosting: VercelRead the full README ↗A web app for UX researchers and academic labs to upload raw biometric study data (eye-tracking, GSR, heart-rate CSVs) and generate clean stats, charts, and exportable PDF reports.
Visual design ported from a Google Stitch export — see STITCH_SOURCE.md
for the screen → component mapping.
All data processing happens client-side — no Cloud Functions are required, so the app stays on Firebase's free Spark plan.
src/
components/ Dashboard, NewStudy, UploadZone, StudyResults, ReportExport, Sidebar, AppHeader, PageLayout
context/ AuthContext.jsx (Firebase Auth state + user profile doc)
hooks/ useStudies.js, useStudy.js (Firestore realtime listeners)
lib/ firebase.js, csvParser.js, statsEngine.js, planLimits.js
pages/ Login.jsx, Dashboard.jsx, NewStudyPage.jsx, Study.jsx, Account.jsx
App.jsx, main.jsx
firebase.json, firestore.rules, firestore.indexes.json
.env.example (copy to .env.local and fill in your Firebase config)
users/{uid}
email, plan ("free" | "researcher" | "lab"), createdAt
studies/{studyId}
ownerId, name, conditions: [{ label, color }], uploadCount, status, createdAt
studies/{studyId}/uploads/{uploadId}
fileName, participantLabel, columnMapping,
parsedStats: { hr, gsr, pupil, durationSeconds, sampleCount },
series: [...] (downsampled, ≤200 points, for charting), sizeBytes, uploadedAt
The raw CSV is parsed entirely client-side and then discarded — only the derived stats and a downsampled series (for charting) are written to Firestore. No file storage is used or required.
.env.local (see .env.example for the variable names).npm install -g firebase-tools
firebase login
firebase use --add # pick your project
firebase deploy --only firestore:rules,firestore:indexes
The composite index in firestore.indexes.json is required for the
studies-by-owner query (where ownerId == ... orderBy createdAt desc) —
without it, the dashboard's Firestore listener will fail with a
"requires an index" error until the index finishes building.npm install
npm run dev
Try the end-to-end flow: sign up → New Study → upload a CSV with
timestamp, hr/heart rate, and gsr/eda columns (headers are matched
case-insensitively; if auto-detect misses a column, the upload screen lets
you map it manually) → Results tab shows the chart and stats → Export tab
generates a PDF.
users/{uid}.plan defaults to "free" on first sign-in:
There's no billing integration yet — to test a higher tier locally, edit
the plan field on your user doc directly in the Firestore console.
npm run build
Deploy the dist/ output to Vercel (a vercel.json SPA rewrite is
included) and set the VITE_FIREBASE_* environment variables in the
Vercel project settings. Firestore security rules are deployed separately
via the Firebase CLI (see above) — Vercel only hosts the static frontend.