Stop Guessing. Start Wearing.
Lyo.mp4
LYO is a virtual fitting room for Myntra. Shoppers upload a full-body photo once, get avatars in multiple poses, then try garments on those avatars while browsing product pages. Favorites land in a virtual wardrobe so they can compare looks before buying.
At a high level:
- Create your avatar — Upload a full-body photo; the product generates multiple pose variants so users can pick the best likeness.
- Try on clothes — On Myntra, use try-on so garments appear on the selected avatar.
- Virtual wardrobe — Saved try-ons accumulate for review while shopping.
The stack pairs a browser extension (injected UI on Myntra, side panel, background work) with a NestJS API (auth, credits, wardrobe, asset storage, job queues, and integration with virtual try-on providers). A marketing site mirrors the story and CTAs from lyo.fashion; a dashboard app supports authenticated web flows aligned with APP_URL in server configuration.
| App / area | Role |
|---|---|
apps/lyo-server |
NestJS backend: REST API, TypeORM + PostgreSQL, Redis, BullMQ, S3-compatible storage, OAuth, throttling |
apps/lyo-extension |
WXT + React extension (Chrome MV3 and other targets via WXT) |
apps/lyo-website |
Vite + React marketing site |
apps/lyo-dashboard |
Vite + React dashboard (dev server defaults to port 3001) |
Tooling: Nx workspaces, pnpm (packageManager in root package.json), TypeScript.
- Node.js compatible with the repo (see current LTS used by your team).
- pnpm — version pinned via
packageManagerin rootpackage.json(runcorepack enableandcorepack prepareif you use Corepack). - PostgreSQL and Redis reachable from the values in
apps/lyo-server/.env. - S3-compatible storage — local dev often uses LocalStack (see comment in
apps/lyo-server/.env.examplefor bucket creation). - For real try-on generation: Fashn AI (or equivalent) credentials where the server expects them (
FASHN_AI_API_KEY, webhook secret inapps/lyo-server/.env.example).
pnpm installCopy examples and fill in secrets:
| Location | Purpose |
|---|---|
apps/lyo-server/.env.example → .env |
API, DB, Redis, S3, JWT, Google OAuth, Fashn, Sentry, throttling |
apps/lyo-website/.env.example → .env |
VITE_SERVER_URL, VITE_APP_URL |
apps/lyo-extension/.env.example → .env |
VITE_SERVER_URL, VITE_CLIENT_DOMAIN |
Keep URLs consistent: server defaults include SERVER_URL, FRONT_URL (e.g. marketing on 4200), and APP_URL (dashboard on 3001) as in .env.example.
With apps/lyo-server/.env configured:
pnpm exec nx run @lyo/lyo-server:migration:deployOther migration targets (migration:revert, migration:generate, etc.) are defined on the same project in apps/lyo-server/project.json.
Start PostgreSQL, Redis, and (if used) LocalStack before the API.
Backend (build + nodemon by default):
pnpm exec nx serve @lyo/lyo-serverMarketing site (port 4200 per apps/lyo-website/vite.config.mts):
pnpm exec nx serve lyo-websiteDashboard (port 3001 per apps/lyo-dashboard/vite.config.ts):
pnpm exec nx serve lyo-dashboardBrowser extension (WXT dev server; e.g. Chrome):
pnpm exec nx run @lyo/lyo-extension:dev:chromeLoad the unpacked extension from apps/lyo-extension/dist/<browser>-mv3-dev (exact folder name follows WXT output). Production builds: pnpm exec nx run @lyo/lyo-extension:build:chrome (and sibling targets for other browsers).
pnpm exec nx show projectsUse the printed names if any differ from the examples above after workspace changes.
pnpm exec nx run @lyo/lyo-server:build
pnpm exec nx build lyo-website
pnpm exec nx build lyo-dashboard
pnpm exec nx run @lyo/lyo-extension:build:chromeTests and lint targets follow each project’s Nx configuration (pnpm exec nx test <project>, pnpm exec nx lint <project> where configured).
Plans, credit bundles, and customer-facing copy should match lyo.fashion. This README stays technical; marketing and legal pages live in apps/lyo-website and on the live site.