Fit check · 2026-11-04 · local dev servers

Drape Site Audit

Every route of the marketing site, brand portal, tenant storefront and admin console, captured on a local machine with Playwright at desktop and phone widths, plus the interaction states a visitor can reach signed out. 82 routes, 215 captures, 1 critical and 3 attention-level findings.

Web appsNext.js dev servers on this Mac, brand and admin reached through *.localhost hosts so the dev API accepts them
BackendsBrand, storefront and admin call dev-api.drape.to. Marketing calls api.drape.to (its built-in default).
Commits auditedDrape-Marketing main 444e4f1 2026-09-10
Drape-brand main f8fe441 2026-09-26
Drape-admin-v1 main 35dedc7 2026-09-15
Drape- develop 9986a240 2026-10-12
Signed-in stateNot covered. No test accounts exist in the repos or docs, so the 42 gated routes were recorded only as their redirect.
SurfaceRoutes · capturesFindings
Marketing sitelocalhost:300310 · 411 critical1 attention10 minor
Brand portalbrand.localhost:300538 · 1030 critical1 attention32 minor20 gated
Brand storefront (tenant host)qa-atelier.localhost:300511 · 400 critical1 attention17 minor1 gated
Admin consoleadmin.localhost:300423 · 310 critical0 attention3 minor21 gated

What stands out

  1. Marketing · in productionPrivacy and Terms return 404 on drape.to. Local serves /privacy and /terms through a rewrite to the HTML files. Production serves /privacy.html but not the clean URL, so the rewrite is not active on the host. Every marketing page footer links to the clean URLs, and the config comment names them as the App Store Connect canonical URLs. Seen only in production; not reproducible locally.
  2. Marketing · in productionProduct share pages lose their image in production and crash locally. Production renders the product (FEED Corduroy Jacket) but the image optimizer refuses the fal.media host with a 400, leaving an empty frame with alt text. Locally the same missing next/image remotePatterns entry throws a runtime error instead. One fix covers both: allow v3b.fal.media and the Supabase storage host in Drape-Marketing/next.config.ts.
  3. Admin · in productionA wrong admin password silently reloads the login page. The API answers 401 with "Invalid admin credentials", but the admin API client redirects to /login on every 401, including the login request itself, so the page reloads with no message and an emptied email field. Reproduced locally and on admin.drape.to. The brand portal gets this right and shows "Invalid email or password"; an earlier draft of this report blamed both portals, which was an artifact of a malformed probe address.
  4. Mobile app · dev buildThe app holds up across 47 screens. Signup and login both validate empty submits with clear copy, onboarding runs welcome → culture → style → body profile, every tab and seller-hub screen renders, and the legal pages load. Deep links opened without their parameters fall back sensibly (look board asks for a username, save-closet and checkout-return explain what is missing). Brand routes fall back to home for a consumer account. The camera screen detects the simulator and offers a manual path.
  5. Mobile app · dev onlySeller billing says Stripe is not configured. The committed dev task definition injects no STRIPE_* secrets, while task-def-prod.json injects all seven, so this is a dev-environment gap rather than a product bug. The uncommitted change to task-def-dev.json in your working tree adds exactly those secrets.
  6. Mobile app · dev dataDev seed data hides a backend error. Both QA Atelier products (Ink Wide Trousers, Cream Oversized Shirt) show a wakeskate photo, and the Featured screen shows an empty state while the featured endpoint is returning 500 on both environments, so the app is masking that failure as "no featured drops".
  7. Repo QAThe committed Maestro flows no longer match the app. 01-signup fails at its second step and the brutal-audit flow expects a login path that moved. A replacement tour flow that matches the current screens is saved in audits/2026-11-03/flows/audit-tour.yaml and runs in about 12 minutes against a Release simulator build.
  8. Backend · both environmentsThe featured-products endpoint returns 500. /api/products/featured answered Internal server error on dev-api.drape.to and api.drape.to when called directly during route discovery.
  9. Repo hygieneA test account password is committed in four files. kcb1099@gmail.com with its password appears in CHANGELOG_ENGINEERING.md, PROD_ENV_TEMPLATE.md, ENVIRONMENT_RECOVERY_PLAYBOOK.md and qa/maestro/rc1_gate.yaml. The credentials no longer work, but the pattern contradicts the repo's own secrets policy; move test credentials to environment variables and purge the lines.
  10. All surfaces · both environmentsHeading and landmark hygiene is a pattern, not a one-off. Around 20 signed-out brand-portal and storefront pages have no h1 and roughly 36 pages across the four surfaces have no <main> landmark, identically in production. The production brand app's 404 page also has no title and no heading, where the local build has both, so production is behind the develop branch there. These live in shared layouts, one fix per app.
  11. Local only · dev nice-to-havePlain localhost ports 3004 and 3005 are blocked by the dev API. The CORS allowlist accepts localhost only on 3000 to 3003, plus any *.localhost host. Use brand.localhost and admin.localhost, and update start-drape-local.sh to open those hosts. Not a production issue.
  12. Local only · dev nice-to-haveHydration mismatch warning on the brand landing page. The inline theme script sets data-theme before React hydrates. Production React strips this warning, so it cannot be observed on brand.drape.to, but the mismatch is still in the code. suppressHydrationWarning on <html> clears it.
  13. Local only · dev nice-to-haveDev-server warnings about lazy hero images. Next flags the hero image on marketing / and /for-brands and on the brand landing as the Largest Contentful Paint without loading="eager". The warning only prints in dev; the lazy-loading behaviour is the same in production and is a cheap first-paint win.
  14. StorefrontLive storefronts only exist in production. checkthefeed.drape.to renders CHECKtheFeed's shop; dev has no store with a resolvable slug, so the local storefront, door landing (/l) and QR product page (/p) could only be captured in their not-found states. Those states match production. The tenant root / redirects to the portal login in both environments, which is where a shopper on a brand subdomain lands.
  15. MarketingProduction is behind the develop branch. The /download page heading differs (production "BE FIRST TO TRY DRAPE", local "DOWNLOAD DRAPE") and the brand app's 404 page differs, so the deployed marketing and brand builds predate the local checkouts listed above. The brand landing's full-page capture also shows a tall blank band where the GSAP ScrollTrigger-pinned RackCinema section sits; that is the pin spacer, not a rendering bug.

Local vs production

The same crawl was run against drape.to, brand.drape.to, checkthefeed.drape.to and admin.drape.to.
0 findings also in production4 local onlyminor: 56 shared · 6 local only8 seen only in production

Production captures that decide the verdicts

drape.to/privacy · 404 in production
drape.to product page · image missing
admin.drape.to · wrong password, page reloaded blank
brand.drape.to · wrong password, message shown
checkthefeed.drape.to/shop · live storefront
brand.drape.to · 404 page, no title

A finding that reproduces on the live site is a real issue for users. One that appears only on localhost is a dev-environment nice-to-have, and is labelled that way in every table below.

Seen only in production

SeveritySurfaceRouteFinding
Needs attentionbrand-portal/__audit-missing-pageMissing <title>
Needs attentionstorefront/__audit-missing-pageMissing <title>
Needs attentionmarketing/product/3c9d605b-64da-4f4f-b97d-4dace7bd5f8dAPI returned 400
https://drape.to/_next/image?url=https%3A%2F%2Fv3b.fal.media%2Ffiles%2Fb%2F0aae41a5%2FjhIkKsATSLxjVHqCJlgT6.png&w=828&q=75
Needs attentionmarketing/product/3c9d605b-64da-4f4f-b97d-4dace7bd5f8d1 broken image(s)
Needs attentionmarketing/privacyRoute returns 404
Needs attentionmarketing/privacyAPI returned 404
https://drape.to/privacy
Needs attentionmarketing/termsRoute returns 404
Needs attentionmarketing/termsAPI returned 404
https://drape.to/terms
7 routes behave differently locally than in production
  • brand-portal /__audit-missing-page h1 differs (local "404", prod "—")
  • storefront /shop h1 differs (local "Brand not found", prod "CHECKtheFeed")
  • storefront /__audit-missing-page h1 differs (local "404", prod "—")
  • marketing /download h1 differs (local "DOWNLOAD DRAPE", prod "BE FIRST TO TRY DRAPE")
  • marketing /product/3c9d605b-64da-4f4f-b97d-4dace7bd5f8d h1 differs (local "This page couldn’t load", prod "FEED CORDUROY JACKET")
  • marketing /privacy status differs (local 200, prod 404)
  • marketing /terms status differs (local 200, prod 404)

Marketing site

localhost:3003API: api.drape.to (production API, site default)10 routes · 41 captures
1 critical1 needs attention10 minor
SeverityProductionAreaRouteFinding
CriticalLocal onlyjs/product/3c9d605b-64da-4f4f-b97d-4dace7bd5f8dUncaught JS error
Invalid src prop (https://v3b.fal.media/files/b/0aae41a5/jhIkKsATSLxjVHqCJlgT6.png) on `next/image`, hostname "v3b.fal.media" is not configured under …
Needs attentionLocal onlyseo/product/3c9d605b-64da-4f4f-b97d-4dace7bd5f8dMissing <title>
2 expected outcomes from deliberate probes (wrong password, invalid tokens, unknown routes)
  • /__audit-missing-page Expected: unknown route shows the 404 page
  • /__audit-missing-page Expected: Request returned 404
10 minor findings (accessibility, SEO, hygiene)
  • / Console warning
  • / No <main> landmark
  • /download No <main> landmark
  • /for-brands Console warning
  • /for-brands No <main> landmark
  • /join No <main> landmark
  • /product/share?id=3c9d605b-64da-4f4f-b97d-4dace7bd5f8d No <main> landmark
  • /product/3c9d605b-64da-4f4f-b97d-4dace7bd5f8d No <main> landmark
  • /product/3c9d605b-64da-4f4f-b97d-4dace7bd5f8d No lang attribute on <html>
  • /__audit-missing-page No <main> landmark
/2003.7s
Title Drape — Virtual Try-OnH1 CHECK YOUR FITBEFORE YOU COMMIT.Contains 0 forms · 0 inputs · 14 buttons · 22 images · 29 links
Diagnostics (1)
  • warning: Image with src "/imgs/try-on.png" was detected as the Largest Contentful Paint (LCP). Please add the `loading="eager"` property if this image is above the fold. Read more: https://nextjs.org/docs/app/api-reference/components/image#loading
Desktop 1440
Mobile 390
Expanded control 2
Expanded control 3
Expanded control 4
Mobile menu open
/download2002.1s
Title Download — DrapeH1 DOWNLOAD DRAPEContains 0 forms · 0 inputs · 1 buttons · 0 images · 26 links
Desktop 1440
Mobile 390
Expanded control 2
Mobile menu open
/for-brands2005.9s
Title For Brands — DrapeH1 SMALL BRANDSDESERVE BIGGER STAGES.Contains 0 forms · 0 inputs · 9 buttons · 12 images · 28 links
Diagnostics (1)
  • warning: Image with src "/imgs/brand/prk-marketing.png" was detected as the Largest Contentful Paint (LCP). Please add the `loading="eager"` property if this image is above the fold. Read more: https://nextjs.org/docs/app/api-reference/components/image#loading
Desktop 1440
Mobile 390
Expanded control 2
Expanded control 3
Expanded control 4
Expanded control 5
Mobile menu open
/join2008.4s
Title Join — DrapeH1 JOIN DRAPEContains 0 forms · 0 inputs · 1 buttons · 0 images · 26 links
Desktop 1440
Mobile 390
Expanded control 2
Mobile menu open
/seller/billing2002.7s
Title Drape — Virtual Try-OnH1 Power up your closetContains 0 forms · 0 inputs · 1 buttons · 0 images · 21 links
Desktop 1440
Mobile 390
Expanded control 2
Mobile menu open
/product/3c9d605b-64da-4f4f-b97d-4dace7bd5f8d2004.6s
Title —H1 This page couldn’t loadContains 1 forms · 0 inputs · 2 buttons · 0 images · 0 links1 JS error
Diagnostics (1)
  • JS: Invalid src prop (https://v3b.fal.media/files/b/0aae41a5/jhIkKsATSLxjVHqCJlgT6.png) on `next/image`, hostname "v3b.fal.media" is not configured under images in your `next.config.js` See more info: https://nextjs.org/docs/messages/next-image-unconfigured-host
Desktop 1440
Mobile 390
Expanded control 1
Mobile menu open
/privacy2001.7s
Title Privacy Policy — Drape AIH1 Privacy PolicyContains 0 forms · 0 inputs · 0 buttons · 0 images · 4 links
Desktop 1440
Mobile 390
/terms2001.7s
Title Terms of Service — Drape AIH1 Terms of ServiceContains 0 forms · 0 inputs · 0 buttons · 0 images · 5 links
Desktop 1440
Mobile 390
Unknown route (404 page)4042.9s
Title Drape — Virtual Try-OnH1 404Contains 0 forms · 0 inputs · 1 buttons · 0 images · 20 links1 failing request
Diagnostics (1)
  • HTTP 404: http://localhost:3003/__audit-missing-page
Desktop 1440
Mobile 390
Expanded control 2
Mobile menu open

Brand portal

brand.localhost:3005API: dev-api.drape.to38 routes · 103 captures
0 critical1 needs attention32 minor20 behind login
SeverityProductionAreaRouteFinding
Needs attentionLocal onlyconsole/Console error
A tree hydrated but some attributes of the server rendered HTML didn't match the client properties. This won't be patched up. This can happen if a SSR…
5 expected outcomes from deliberate probes (wrong password, invalid tokens, unknown routes)
  • /login Expected: API returned 422
  • /verify-email?token=audit-invalid Expected: API returned 400
  • /accept-invite?token=audit-invalid Expected: API returned 404
  • /__audit-missing-page Expected: unknown route shows the 404 page
  • /__audit-missing-page Expected: Request returned 404
32 minor findings (accessibility, SEO, hygiene)
  • / Console warning
  • / Console warning
  • /login No <h1> on page
  • /login No <main> landmark
  • /signup No <h1> on page
  • /signup No <main> landmark
  • /apply No <h1> on page
  • /apply No <main> landmark
  • /forgot-password No <h1> on page
  • /forgot-password No <main> landmark
  • /reset-password No <h1> on page
  • /reset-password No <main> landmark
  • /reset-password?token=audit-invalid No <h1> on page
  • /reset-password?token=audit-invalid No <main> landmark
  • /verify-email No <h1> on page
  • /verify-email No <main> landmark
  • /verify-email?token=audit-invalid No <h1> on page
  • /verify-email?token=audit-invalid No <main> landmark
  • /accept-invite No <h1> on page
  • /accept-invite No <main> landmark
  • /accept-invite?token=audit-invalid No <h1> on page
  • /accept-invite?token=audit-invalid No <main> landmark
  • /auth/handoff No <h1> on page
  • /auth/handoff No <main> landmark
  • /l No <h1> on page
  • /l No <main> landmark
  • /l?code=AUDIT1 No <h1> on page
  • /l?code=AUDIT1 No <main> landmark
  • /p No <main> landmark
  • /p?id=3c9d605b-64da-4f4f-b97d-4dace7bd5f8d No <main> landmark
  • /shop No <main> landmark
  • /__audit-missing-page No <main> landmark
20 routes redirect to login when signed out

These exist and are reachable, but every one bounced to /login. Their signed-in state is not in this audit.

  • /dashboard
  • /products
  • /products/new
  • /products/edit
  • /orders
  • /analytics
  • /billing
  • /comments
  • /content
  • /content/comments
  • /engagement
  • /go-live
  • /integrations
  • /locations
  • /retail
  • /settings
  • /team
  • /widget
  • /ads
  • /agreement
/2004.4s
Title Drape Brand PortalH1 YOUR STORE. EVERYWHERE.Contains 0 forms · 0 inputs · 8 buttons · 21 images · 24 links1 console error
Diagnostics (3)
  • warning: You have Reduced Motion enabled on your device. Animations may not appear as expected.. For more information and steps for solving, visit https://motion.dev/troubleshooting/reduced-motion-disabled
  • error: A tree hydrated but some attributes of the server rendered HTML didn't match the client properties. This won't be patched up. This can happen if a SSR-ed Client Component used: - A server/client branch `if (typeof window !== 'undefined')`. - Variable input such as `Date.now()` or `Math.random()` which changes each time it's called. - Date formatting in a user's locale which doesn't match the serv
  • warning: Image with src "/imgs/brand/prk-marketing.png" was detected as the Largest Contentful Paint (LCP). Please add the `loading="eager"` property if this image is above the fold. Read more: https://nextjs.org/docs/app/api-reference/components/image#loading
Desktop 1440
Mobile 390
Expanded control 1
Expanded control 2
Expanded control 3
Expanded control 4
Expanded control 5
Mobile menu open
/login2003.5s
Title Drape Brand PortalH1 —Contains 1 forms · 2 inputs · 2 buttons · 0 images · 3 links1 failing request
Diagnostics (1)
  • HTTP 422: https://dev-api.drape.to/api/auth/login
Desktop 1440
Mobile 390
Expanded control 1
Form 1 submitted empty
Login with wrong password
Mobile menu open
/signup20013.6s
Title Drape Brand PortalH1 —Contains 1 forms · 3 inputs · 2 buttons · 0 images · 4 links
Desktop 1440
Mobile 390
Expanded control 1
Form 1 submitted empty
Mobile menu open
/apply2007.3s
Title Drape Brand PortalH1 —Contains 0 forms · 0 inputs · 0 buttons · 0 images · 5 links
Desktop 1440
Mobile 390
Expanded control 1
Mobile menu open
/forgot-password2004.4s
Title Drape Brand PortalH1 —Contains 1 forms · 1 inputs · 2 buttons · 0 images · 4 links
Desktop 1440
Mobile 390
Expanded control 1
Form 1 submitted empty
Mobile menu open
/reset-password2003.2s
Title Drape Brand PortalH1 —Contains 1 forms · 2 inputs · 1 buttons · 0 images · 4 links
Desktop 1440
Mobile 390
Expanded control 1
Mobile menu open
/reset-password?token=audit-invalid2002.1s
Title Drape Brand PortalH1 —Contains 1 forms · 2 inputs · 1 buttons · 0 images · 4 links
Desktop 1440
Mobile 390
Expanded control 1
Form 1 submitted empty
Mobile menu open
/verify-email2001.9s
Title Drape Brand PortalH1 —Contains 1 forms · 1 inputs · 1 buttons · 0 images · 5 links
Desktop 1440
Mobile 390
Expanded control 1
Form 1 submitted empty
Mobile menu open
/verify-email?token=audit-invalid2004.7s
Title Drape Brand PortalH1 —Contains 1 forms · 1 inputs · 1 buttons · 0 images · 5 links1 failing request
Diagnostics (1)
  • HTTP 400: https://dev-api.drape.to/api/auth/verify-email?token=audit-invalid
Desktop 1440
Mobile 390
Expanded control 1
Form 1 submitted empty
Mobile menu open
/accept-invite2002.0s
Title Drape Brand PortalH1 —Contains 0 forms · 0 inputs · 0 buttons · 0 images · 1 links
Desktop 1440
Mobile 390
Expanded control 1
Mobile menu open
/accept-invite?token=audit-invalid2004.6s
Title Drape Brand PortalH1 —Contains 0 forms · 0 inputs · 0 buttons · 0 images · 2 links1 failing request
Diagnostics (1)
  • HTTP 404: https://dev-api.drape.to/api/brand/team/invites/preview?token=audit-invalid
Desktop 1440
Mobile 390
Expanded control 1
Mobile menu open
/auth/handoff2001.9s
Title Drape Brand PortalH1 —Contains 0 forms · 0 inputs · 0 buttons · 0 images · 1 links
Desktop 1440
Mobile 390
Expanded control 1
Mobile menu open
/l2002.0s
Title Drape Brand PortalH1 —Contains 0 forms · 0 inputs · 0 buttons · 0 images · 0 links
Desktop 1440
Mobile 390
Expanded control 1
Mobile menu open
/l?code=AUDIT12001.9s
Title Drape Brand PortalH1 —Contains 0 forms · 0 inputs · 0 buttons · 0 images · 0 links
Desktop 1440
Mobile 390
Expanded control 1
Mobile menu open
/p2001.9s
Title Drape Brand PortalH1 QR code not recognizedContains 0 forms · 0 inputs · 0 buttons · 0 images · 2 links
Desktop 1440
Mobile 390
Expanded control 1
Mobile menu open
/p?id=3c9d605b-64da-4f4f-b97d-4dace7bd5f8d2002.5s
Title Drape Brand PortalH1 QR code not recognizedContains 0 forms · 0 inputs · 0 buttons · 0 images · 2 links
Desktop 1440
Mobile 390
Expanded control 1
Mobile menu open
/shop2001.9s
Title Drape Brand PortalH1 Brand not foundContains 0 forms · 0 inputs · 0 buttons · 0 images · 2 links
Desktop 1440
Mobile 390
Expanded control 1
Mobile menu open
Unknown route (404 page)4041.9s
Title Drape Brand PortalH1 404Contains 0 forms · 0 inputs · 0 buttons · 0 images · 0 links1 failing request
Diagnostics (1)
  • HTTP 404: http://brand.localhost:3005/__audit-missing-page
Desktop 1440
Mobile 390
Expanded control 1
Mobile menu open

Brand storefront (tenant host)

qa-atelier.localhost:3005API: dev-api.drape.to11 routes · 40 captures
0 critical1 needs attention17 minor1 behind login
SeverityProductionAreaRouteFinding
Needs attentionLocal onlyconsole/Console error
A tree hydrated but some attributes of the server rendered HTML didn't match the client properties. This won't be patched up. This can happen if a SSR…
4 expected outcomes from deliberate probes (wrong password, invalid tokens, unknown routes)
  • / Expected: API returned 404
  • /login Expected: API returned 422
  • /__audit-missing-page Expected: unknown route shows the 404 page
  • /__audit-missing-page Expected: Request returned 404
17 minor findings (accessibility, SEO, hygiene)
  • / Console warning
  • /l No <h1> on page
  • /l No <main> landmark
  • /l?code=AUDIT1 No <h1> on page
  • /l?code=AUDIT1 No <main> landmark
  • /p No <main> landmark
  • /p?id=3c9d605b-64da-4f4f-b97d-4dace7bd5f8d No <main> landmark
  • /shop No <main> landmark
  • /login No <h1> on page
  • /login No <main> landmark
  • /__audit-missing-page No <main> landmark
  • /forgot-password No <h1> on page
  • /forgot-password No <main> landmark
  • /apply No <h1> on page
  • /apply No <main> landmark
  • /signup No <h1> on page
  • /signup No <main> landmark
1 routes redirect to login when signed out

These exist and are reachable, but every one bounced to /login. Their signed-in state is not in this audit.

  • /
/l20015.8s
Title Drape Brand PortalH1 —Contains 0 forms · 0 inputs · 0 buttons · 0 images · 0 links1 failing request
Diagnostics (1)
  • HTTP 404: https://dev-api.drape.to/api/tenant/qa-atelier
Desktop 1440
Mobile 390
Expanded control 1
Mobile menu open
/l?code=AUDIT12005.2s
Title Drape Brand PortalH1 —Contains 0 forms · 0 inputs · 0 buttons · 0 images · 0 links1 failing request
Diagnostics (1)
  • HTTP 404: https://dev-api.drape.to/api/tenant/qa-atelier
Desktop 1440
Mobile 390
Mobile menu open
/p2006.5s
Title Drape Brand PortalH1 QR code not recognizedContains 0 forms · 0 inputs · 0 buttons · 0 images · 2 links1 failing request
Diagnostics (1)
  • HTTP 404: https://dev-api.drape.to/api/tenant/qa-atelier
Desktop 1440
Mobile 390
Expanded control 1
Mobile menu open
/p?id=3c9d605b-64da-4f4f-b97d-4dace7bd5f8d20010.8s
Title Drape Brand PortalH1 QR code not recognizedContains 0 forms · 0 inputs · 0 buttons · 0 images · 2 links1 failing request
Diagnostics (1)
  • HTTP 404: https://dev-api.drape.to/api/tenant/qa-atelier
Desktop 1440
Mobile 390
Expanded control 1
Mobile menu open
/shop20012.4s
Title Drape Brand PortalH1 Brand not foundContains 0 forms · 0 inputs · 0 buttons · 0 images · 2 links2 failing requests
Diagnostics (2)
  • HTTP 404: https://dev-api.drape.to/api/tenant/qa-atelier
  • HTTP 404: https://dev-api.drape.to/api/tenant/qa-atelier
Desktop 1440
Mobile 390
Expanded control 1
Mobile menu open
/login2003.7s
Title Drape Brand PortalH1 —Contains 1 forms · 2 inputs · 2 buttons · 0 images · 2 links2 failing requests
Diagnostics (2)
  • HTTP 404: https://dev-api.drape.to/api/tenant/qa-atelier
  • HTTP 422: https://dev-api.drape.to/api/auth/login
Desktop 1440
Mobile 390
Expanded control 1
Form 1 submitted empty
Login with wrong password
Mobile menu open
Unknown route (404 page)4045.1s
Title Drape Brand PortalH1 404Contains 0 forms · 0 inputs · 0 buttons · 0 images · 0 links2 failing requests
Diagnostics (2)
  • HTTP 404: http://qa-atelier.localhost:3005/__audit-missing-page
  • HTTP 404: https://dev-api.drape.to/api/tenant/qa-atelier
Desktop 1440
Mobile 390
Expanded control 1
Mobile menu open
/forgot-password2004.2s
Title Drape Brand PortalH1 —Contains 1 forms · 1 inputs · 2 buttons · 0 images · 4 links1 failing request
Diagnostics (1)
  • HTTP 404: https://dev-api.drape.to/api/tenant/qa-atelier
Desktop 1440
Mobile 390
Form 1 submitted empty
/apply2004.0s
Title Drape Brand PortalH1 —Contains 0 forms · 0 inputs · 0 buttons · 0 images · 5 links1 failing request
Diagnostics (1)
  • HTTP 404: https://dev-api.drape.to/api/tenant/qa-atelier
Desktop 1440
Mobile 390
Expanded control 1
/signup2003.9s
Title Drape Brand PortalH1 —Contains 1 forms · 3 inputs · 2 buttons · 0 images · 4 links1 failing request
Diagnostics (1)
  • HTTP 404: https://dev-api.drape.to/api/tenant/qa-atelier
Desktop 1440
Mobile 390
Form 1 submitted empty
Mobile menu open

Admin console

admin.localhost:3004API: dev-api.drape.to23 routes · 31 captures
0 critical0 needs attention3 minor21 behind login

No critical or attention-level findings on this surface.

3 expected outcomes from deliberate probes (wrong password, invalid tokens, unknown routes)
  • /login Expected: API returned 422
  • /__audit-missing-page Expected: unknown route shows the 404 page
  • /__audit-missing-page Expected: Request returned 404
3 minor findings (accessibility, SEO, hygiene)
  • /login No <h1> on page
  • /login No <main> landmark
  • /__audit-missing-page No <main> landmark
21 routes redirect to login when signed out

These exist and are reachable, but every one bounced to /login. Their signed-in state is not in this audit.

  • /
  • /dashboard
  • /analytics
  • /audit-logs
  • /billing-plans
  • /brand-waitlist
  • /drops
  • /featured
  • /inbox
  • /integrations
  • /moderation
  • /ops
  • /products
  • /referrals
  • /seller-listings
  • /settings
  • /stores
  • /submissions
  • /taxonomy
  • /ugc
  • /users
/login2002.2s
Title Drape AdminH1 —Contains 1 forms · 2 inputs · 2 buttons · 0 images · 0 links1 failing request
Diagnostics (1)
  • HTTP 422: https://dev-api.drape.to/api/admin/login
Desktop 1440
Mobile 390
Expanded control 1
Form 1 submitted empty
Login with wrong password
Mobile menu open
Unknown route (404 page)4042.4s
Title Drape AdminH1 404Contains 0 forms · 0 inputs · 0 buttons · 0 images · 0 links1 failing request
Diagnostics (1)
  • HTTP 404: http://admin.localhost:3004/__audit-missing-page
Desktop 1440
Mobile 390
Expanded control 1
Mobile menu open

Mobile app

iPhone 15 Pro simulator · Release build of developAPI: dev-api.drape.to2 Maestro flows · 51 captures

Driven with Maestro using the flows shipped in frontend/.maestro, against a Release simulator build pointed at the dev API, signed in as a throwaway consumer account created through the dev signup API. The repo's own flows are stale against the current screens, so the tour below is a replacement flow that walks signup and login validation, onboarding, then every main, seller and brand route by deep link. Try-on rendering, purchases and body-photo upload were skipped because they spend Fashn credits, call Stripe, or need a photo library.

dev client · manual2 screens
welcome
product preview
· signupflow stopped early2 screens

FAILED

launch
path selected
audit tourflow stopped early47 screens
welcome
choose starting point
signup
signup empty validation
login
login empty validation
after login
after login step1
after login step2
after login step3
home
catalog
explore
featured
new drops
saved
cart
scan
sell
refer
messages
orders
history
look board
notification settings
profile
fit setup
body photo
preview
save closet
in store checkout
in store check in
privacy
data disclosure
seller onboarding
seller dashboard
seller orders
seller messages
seller analytics
seller billing
brand dashboard
brand products
brand orders
brand analytics
brand settings
checkout return
billing return

Method and limits