尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证制作者的介绍仅有上面的一句话。 更多详情请阅读仓库 README。 仓库 README ↗
正在加载完整 README。
查看完整 README ↗A fair test for your skincare. Measure your skin with the YouCam AI Skin Analysis API, choose one product for one goal, and check back weeks later. ProofLoop tells you whether a score moved further than normal scan-to-scan variation — or says plainly that it can't tell yet.
Built for the YouCam API Skin AI & eCommerce VTO Hackathon (Skin AI track).
People wonder whether a product is working while standing in front of a mirror — a bad instrument with different light every morning. Skin scanners give a number; shops give a product; nobody tells you whether the next number is actually different from the last one. ProofLoop closes that loop honestly:
| API | Endpoint | Where |
|---|---|---|
| File upload | POST /s2s/v2.0/file/skin-analysis + presigned PUT | every live scan / preview |
| AI Skin Analysis | POST /s2s/v2.0/task/skin-analysis, GET …/{task_id} (format: json, 8 SD concerns, 12 units) | baseline, instrument-check and check-in scans; per-concern detection masks shown over the user's photo |
| AI Skin Simulation | POST /s2s/v2.0/task/skin-simulation, GET …/{task_id} (4 units) | optional goal preview on the product page |
All of the above were verified against the live API through ProofLoop's own client — see
docs/youcam-integration.md for evidence, costs and the repeatability study.
Requirements: Python 3.12, Node 22.
# backend (http://localhost:8000)
cd backend
python3.12 -m venv venv
./venv/bin/pip install -r requirements-dev.txt
cp .env.example .env # add YOUCAM_API_KEY for live scans; leave blank for sample data only
./venv/bin/uvicorn app.main:app --reload --port 8000
# frontend (http://localhost:3000)
cd frontend
npm install
npm run dev
Without a key, everything except live scans and previews works, and live scans fail with a clear message instead of inventing results. Try with sample data replays a recorded YouCam response, labelled as such.
cd backend && ./venv/bin/python -m pytest # 91 tests, no network; 2 opt-in live tests skipped
cd backend && TEST_DATABASE_URL=postgresql://… ./venv/bin/python -m pytest # same suite on PostgreSQL, schema via Alembic
cd backend && ./venv/bin/ruff check . && ./venv/bin/ruff format --check .
cd frontend && npm run lint && npm run typecheck && npm run build
cd frontend && npm run test:e2e # Playwright, desktop + mobile, axe; isolated keyless backend
Live checks (spend units only when asked): YOUCAM_LIVE=1 ./venv/bin/python -m pytest -m live.
Hosted on free tiers: Next.js on Vercel (Hobby), FastAPI on Render (Free web service), PostgreSQL on Neon (Free).
Schema changes go through Alembic (backend/migrations). Runbook, settings and limits: docs/deployment.md.
Photos are cleaned (metadata stripped) and sent to YouCam, never stored by ProofLoop. The server keeps scores, capture metadata and trials under an anonymous session token; "Delete all my data" removes them immediately. ProofLoop is not a medical device and never attributes a change to a product.
The product catalogue is fictional sample data created to demonstrate matching.