Inspiration
What it does
Inspiration
Anyone who has ordered uniforms for a team, club, school, or company knows the usual process: a spreadsheet gets passed around, everyone guesses their size, and weeks later a box arrives with jerseys that do not fit. The organizer then has to deal with the cost of returns and reorders, while incorrectly sized garments often go to waste.
Self-measuring with a tape is unreliable, and realistically, many people will not do it correctly.
SnapMeasure changes that process by producing real body measurements from two phone photos, without a measuring tape or guesswork. I wanted to build the system that connects those measurements to an actual bulk order, turning “everyone guess your size” into “everyone scans once, and the organizer receives an order-ready manifest.”
What It Does
UniformFit is a bulk-order sizing platform for teams, schools, clubs, and company merchandise. It is built using the SnapMeasure body-scan API.
An organizer creates a campaign, selects a garment, and receives two links: a private administrative link and a shareable member link.
Each member opens the share link on their phone. No application download or account is required. They enter their height and fit preference, then take front and side photos.
SnapMeasure returns real body measurements. UniformFit compares those measurements with the selected garment’s size chart and recommends an exact size.
When a person’s measurements fall between sizes, the system displays a borderline warning and suggests an alternate size.
The organizer’s dashboard automatically creates a per-person size manifest, tracks completion, displays over-order warnings, and provides a one-click CSV export that can be sent directly to a supplier.
The primary goal is to eliminate the cost and waste caused by guessed uniform sizes.
How We Built It
UniformFit was built using the following technologies:
- Framework: Next.js 16 with the App Router, React Server Components, Server Actions, and Turbopack
- Database: Neon Postgres with Drizzle ORM
- Validation: Zod validation for every user input
- Measurement system: SnapMeasure API behind a provider abstraction
- Testing: 131 Vitest tests
- Continuous integration: GitHub Actions for linting, type checking, testing, and building
- Deployment: Vercel
The SnapMeasure integration is the core of the application. Front and side photos, along with the member’s height, are sent through a multipart upload using an API key. The circumference measurements returned by the API are mapped to the dimensions required by UniformFit’s sizing engine.
The sizing engine scores each member’s measurements against the garment’s size chart. It also considers the member’s preferred fit and detects measurements that fall near the boundary between two sizes.
A confidence score is calculated based partly on whether the side photo provides useful body-depth information.
Every SnapMeasure API error is translated into clear, member-friendly guidance. For example:
- A
422photo-quality error displays the API auditor’s advice, such as asking the member to retake the photos while wearing fitted clothing under even lighting. - A
400 no_person_detectederror asks the member to retake the photo. - A quota error is presented as a system billing issue rather than incorrectly blaming the member’s photo.
Member photos are stored in memory only for the duration of the request. They are never written to disk, saved in the database, or included in application logs.
To avoid using paid API credits during development, the measurement provider is interchangeable. A mock provider is used locally, while the real SnapMeasure provider activates automatically when an API key is available. Each saved measurement result records which provider was actually used.
Challenges We Ran Into
Creating useful error messages
A body-measurement API can fail in many different ways. One of the main challenges was turning each technical error into an actionable message that a non-technical member could understand.
Protecting member privacy
Body photos are highly sensitive. The architecture had to guarantee that uploaded photos would never be permanently stored. This privacy requirement influenced the design of the entire scan endpoint.
Handling uncertain sizing
Real measurements do not always fit perfectly within a single size range. Instead of displaying a falsely confident recommendation, UniformFit detects borderline cases and provides an alternate-size suggestion.
Developing with a credit-metered API
Testing repeatedly against the real SnapMeasure API would consume credits. Creating a provider abstraction allowed development and automated testing to use realistic mock measurements without changing the rest of the application.
Accomplishments That We’re Proud Of
We are proud of building a complete workflow that connects body scanning directly to an order-ready uniform manifest.
Major accomplishments include:
- Integrating a real body-measurement API
- Preventing member photos from being permanently stored
- Creating a sizing engine with fit preferences and borderline detection
- Translating technical API failures into clear member instructions
- Building an account-free mobile scanning experience
- Creating organizer completion tracking and over-order warnings
- Providing a one-click supplier-ready CSV export
- Completing 131 automated tests
- Establishing a full GitHub Actions pipeline for linting, type checking, testing, and production builds
What We Learned
Building with a real, credit-metered measurement API is very different from working with a simple mock service.
The project encouraged us to create a clean provider abstraction, defensively parse external API responses, and treat every possible error path as an important part of the user experience.
We also gained deeper experience with Next.js Server Actions and React Server Components while building a form-heavy, token-authenticated application that does not require user accounts.
Most importantly, we learned that accurate sizing is not simply a matter of selecting the closest measurement. Fit preference, garment dimensions, confidence levels, and borderline cases all need to be considered.
What’s Next for UniformFit
Future versions of UniformFit could include:
- Additional garment types
- Brand-specific size charts
- Support for tailored and fitted apparel
- Improved confidence calculations
- More detailed organizer analytics
- Supplier and ordering-platform integrations
- Support for SnapMeasure’s extended measurement set
- A three-dimensional body-model preview using the API’s OBJ export
The long-term goal is to make UniformFit a complete sizing and ordering system for any organization purchasing clothing in bulk.
How we built it
Challenges we ran into
Accomplishments that we're proud of
What we learned
What's next for UniformFit
Built With
- base-ui
- drizzle-orm
- github-actions
- neon
- next.js
- node.js
- postgresql
- react
- shadcn
- snapmeasure-api
- tailwindcss
- typescript
- vercel
- vitest
- zod
Log in or sign up for Devpost to join the conversation.