Skip to content

areeburrub/drized

Repository files navigation

Drized

AI virtual try-on: paste a supported retailer product link (or upload a cloth image), add a photo of yourself, and generate a try-on result.

Drized — AI virtual try-on

Watch the demo on YouTube

Monorepo powered by Bun, Turborepo, Next.js (Vercel), Prisma/Postgres, Cloudflare R2, and SST (SQS + Lambda) for scrape + Vertex try-on jobs.

Apps and packages

Path Package Role
apps/website @drized/website Next.js 16 app — landing, Clerk auth, server actions, API routes (payments webhook, Discord notify, uploads)
packages/server @drized/server Domain logic — users, files/R2, driz CRUD, Dodo payments, SQS enqueue, scrapers, extract/try-on job handlers
packages/db @drized/db Prisma schema, migrations, shared Postgres client
packages/types @drized/types Shared TypeScript DTOs (plain types; runtime validation is zod in website actions)
infra @drized/infra SST: ClothesExtractor Lambda, Extract/Generate queues + workers

Architecture

Browser (Clerk)
  → Next.js server actions / API routes
  → @drized/server
  → Postgres (Prisma) + R2 (private objects, signed GET URLs)

Async try-on:
  createDriz
    → ExtractQueue → extract-worker → ClothesExtractor (Playwright)
    → GenerateQueue → tryon-worker → Google Vertex Virtual Try-On → R2

Supported product hosts (server allowlist): Myntra, Ajio, Flipkart, Amazon (and short links like a.co / amzn.to).

Prerequisites

  • Bun (see packageManager in root package.json)
  • Node compatible with the repo engines field
  • Docker (optional, for local Postgres via docker-compose.yml)
  • AWS credentials (queues / Lambda invoke)
  • Cloudflare R2, Clerk, Dodo Payments, Google Cloud (Vertex) for full flows

Local development

# Install
bun install

# Optional: local Postgres (port 5140)
docker compose up -d postgres

# Env — copy `.env.example` → `.env` and/or `apps/website/.env`

# Generate Prisma client / migrate as needed
bun run --filter @drized/db db:generate
# bun run --filter @drized/db db:migrate

# Dev (website + package watchers via Turbo)
bun run dev

Website defaults to port 5000 (next dev).

Useful scripts from the repo root:

bun run build          # turbo build
bun run lint
bun run check-types
bun run deploy:infra   # SST deploy (@drized/infra)

Environment

Do not commit .env files. Start from .env.example. Typical variables:

Website / shared

  • DATABASE_URL, DIRECT_URL
  • CLERK_SECRET_KEY, NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY, CLERK_WEBHOOK_SECRET
  • DODO_PAYMENT_API_KEY, DODO_PAYMENT_PRODUCT_ID, DODO_WEBHOOK_SECRET
  • R2_ENDPOINT, R2_ACCESS_KEY_ID, R2_SECRET_ACCESS_KEY, R2_BUCKET_NAME
  • AWS_REGION, AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY
  • EXTRACT_QUEUE_URL, GENERATE_QUEUE_URL, CLOTHES_EXTRACTOR_FUNCTION_NAME
  • GOOGLE_CLOUD_PROJECT, GOOGLE_SERVICE_ACCOUNT_JSON (workers; may also be needed for local try-on)
  • DISCORD_WEBHOOK_URL
  • NEXT_PUBLIC_WEBSITE_URL, NEXT_PUBLIC_MIXPANEL_API_KEY

Workers / scrape (SST deploy + ClothesExtractor)

  • Above DATABASE_URL, R2_*, Google vars
  • SCRAPER_PROXY_SERVER, SCRAPER_PROXY_USERNAME, SCRAPER_PROXY_PASSWORD (optional residential proxy)

Ops / Wrangler (local only, not required on Vercel)

  • CLOUDFLARE_ACCOUNT_ID, CLOUDFLARE_API_TOKEN — manage R2 via Wrangler; keep separate from R2_SECRET_ACCESS_KEY (S3 API secret)

Turbo lists many of these under globalEnv in turbo.json.

Deploy

Website (Vercel)

  • Project points at apps/website
  • Set production env vars (R2 signing keys required; public bucket access should stay off)
  • Dodo webhook: https://<your-domain>/api/payments/webhook

Backend workers (SST)

See infra/README.md. From repo root with AWS + env loaded:

cd infra
bun run deploy --stage production

Wire SST outputs (EXTRACT_QUEUE_URL, GENERATE_QUEUE_URL, CLOTHES_EXTRACTOR_FUNCTION_NAME) into Vercel.

Storage privacy

User photos and try-on results live in a private R2 bucket. The app serves short-lived signed GET URLs; do not re-enable public r2.dev / custom-domain public access without revisiting that design.

Notes

  • Redis in docker-compose.yml is unused by the current Next + SQS architecture (leftover from the old Nest/BullMQ stack).
  • Runtime input validation for server actions uses zod in apps/website/src/_actions.

Contributing

See CONTRIBUTING.md. Security reports: SECURITY.md. Conduct: CODE_OF_CONDUCT.md.

License

MIT — see LICENSE.

About

AI virtual try-on from retailer product links

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

Watchers

Forks

Contributors

Languages