A modern React e-commerce PWA powering thredup.com. It's an isomorphic (server-side rendered) application built for performance and maintainability.
| Layer | Technologies |
|---|---|
| Frontend | React 18, TypeScript 5, React Router 6 |
| Data | Apollo Client 3, GraphQL |
| Server | Express (Node.js), SSR |
| Styling | CSS Modules, PostCSS, Tailwind, @thredup/styleguide |
| Build | Webpack 5, Babel 7 |
| Testing | Jest, React Testing Library, Storybook |
| CI/CD | GitHub Actions, ArgoCD (GitOps) |
src/
├── client/
│ ├── desktop/ # Desktop-specific UI
│ ├── mobile/ # Mobile-specific UI
│ └── global/ # Shared components, hooks, contexts, services
├── server/ # Express SSR server
├── graphql/ # Queries, mutations, fragments, local state
├── config/ # Shared configuration
└── utils/ # Shared utilities
Functional Components with React Hooks (no class components)
Section ordering in components:
- Hooks
- Setup
- Styles
- Handlers
- Markup helpers
- Life-cycle (useEffect)
Path aliases: @global/*, @desktop/*, @mobile/*, @graphql/*, etc.
CSS Modules: Each component has styles.css using design system variables
Lazy loading: @loadable/component for code splitting
GraphQL types: Auto-generated from schema via Apollo codegen
npm install && npm run build # Initial setup
npm run start:dev # Development server
npm run test:watch # Run tests
npm run lint # Linting
npm run generate # Regenerate GraphQL types
npm run storybook # Component playground- SSR for SEO and fast initial load
- PWA with service worker support
- Shamrock internal component library (
@thredup/*packages) - DataDog monitoring
- Snowplow analytics
release:patch— bugfixes, typosrelease:minor— feature updatesrelease:major— breaking changes, new features
Full docs in docs/ folder covering patterns, testing, SEO, and tracking.