Inspiration
Fashion is one of the most wasteful industries on the planet. Around 10% of global carbon emissions come from textiles, and most of it is driven by fast fashion that gets bought, worn once or twice, and thrown away. The frustrating part is that good alternatives already exist. Depop, Vinted, ThredUp, Vestiaire Collective, Whatnot, and thousands of small sustainable brands are full of pieces that are better quality, cheaper, more unique, and don't trash the planet. The problem? No one wants to open twelve tabs to research minor details about a desired clohing item to make a purchase.
We wanted one place that does the research and searching for you, and curates a personalized stylebook. A feed that knows your style, surfaces sustainable options by default, and keeps following you tacross the internet so that when you do end up on Shein or Zara, you see what you're buying with a sustainability score and details about the product quality.
What it does
EcoThread is a sustainable fashion stylebook + discovery platform that meets you wherever you shop. It has three surfaces, all pulling from the same catalog of secondhand and ethically-made clothing.
1. The feed (web app)
A Pinterest-style discovery app in a Y2K Windows 98 aesthetic. Users pick their style tags (Y2K, Dark Academia, Streetwear, Vintage 90s, Cottagecore, Minimalist, etc.) and occasions (Prom, Wedding, Date Night, Everyday), and EcoThread serves them a personalized masonry feed pulled live from Depop, Vinted, eBay, ThredUp, Vestiaire Collective, and Whatnot. Every piece is already a sustainable pick by virtue of being secondhand or vintage. Users save pieces to occasion-tagged boards ("Prom 2026", "Summer in Paris") the same way they would on Pinterest, with 2x2 cover mosaics and the full pin-and-curate flow.
2. The shopping companion (Chrome extension)
Works on 26+ retailers, including fast-fashion sites (Zara, H&M, Shein, ASOS, Urban Outfitters), general retail (Amazon, Nordstrom, Macy's, any Shopify store), and the secondhand marketplaces the main feed already covers. When you land on a product page, EcoThread quietly checks what you're looking at and shows you the sustainability context right there. For fast-fashion pieces we flag alternatives pulled from our secondhand catalog so you can see a similar item at a similar price that is not going to a landfill in six months. The toolbar badge glows green, amber, or red so you get a signal at a glance without the extension needing to shout.
3. The thrift-store sidekick (Photon iMessage bot)
For the moment when you are actually in a store, holding a tag, trying to decide if a piece is worth buying. Text the brand name and fabric details to the bot. K2-Think V2 reads the brand and materials, Dedalus pulls a brand audit, and the bot texts back what the piece is actually made of and gives you the TL;DR on the sustainability of the product. No app install, no account, just a reply in iMessage.
The common thread across all three surfaces is the same sustainable catalog and the same reasoning engine. The feed is where you go looking, the extension is where you get redirected to better options and better understanding of what you're buying, and the iMessage bot is where you get a second opinion in-person.
How we built it
- Frontend: React, TypeScript, and Tailwind, scaffolded with Orchids.
- Backend: EnterPro built the auth layer, the Postgres database with Row Level Security on every user-scoped table, and four Deno edge functions.
- Product discovery (the core): Tavily is the search backbone. The
aggregate-productsfunction fans out to Depop, Vinted, eBay, ThredUp, Vestiaire Collective, and Whatnot in parallel, normalizes wildly different response shapes into one product schema, and writes to a 1-hour cache so hackathon wifi and rate limits never ruin the feed.get-recommendationsreads the user's style preferences and returns a personalized page of results, which is what powers the main feed and the "better option" callouts the extension surfaces on fast-fashion pages. - Sustainability reasoning (the decision aid): K2-Think V2 (70B open-reasoning model from IFM at MBZUAI) is the layer that tells users whether a piece is actually worth it. We feed it product metadata, retailer class (secondhand gets a baseline carbon-reduction credit), Dedalus brand rating, and certifications, and K2-Think returns a 0-100 score with a plain-English explanation and a CO2 comparison. Called through the IFM-provided API endpoint, with a Modal + vLLM self-host path kept as a backstop. The
analyze-tagedge function uses K2-Think V2 vision to read paper tags for the Photon bot. - Brand audits: A Dedalus Labs agent with a Google Search tool hits Good On You and similar sustainability rating databases to fetch a brand rating, certifications (bluesign, Fair Trade, GOTS, etc.), and notes.
- Chrome extension: Vite + crxjs for the build pipeline, MV3 service worker for the background layer, content scripts with per-site scrapers plus a generic Open Graph / JSON-LD fallback for any Shopify or OG-compliant store. The popup is React. Everything runs through the same edge functions the web app uses, so the catalog and the reasoning stay consistent across surfaces.
- iMessage bot: Photon Cloud + the Spectrum-TS SDK. A persistent Bun process listens for inbound iMessages, uploads the attached image, POSTs it to the
analyze-tagedge function, and sends the reply back. - Resilience: Every path has a graceful fallback. If Tavily hiccups, the feed serves 22 hand-picked mock products so users still see a populated catalog. K2-Think down means a retailer heuristic fills in (secondhand baseline = 65, new retail = 35). Dedalus down means K2-Think runs without brand data. The demo never hits a broken state.
Challenges we ran into
- Hosting K2-Think. K2-Think V2 is 70B parameters and nothing about running it is casual. We originally planned to self-host on Modal with vLLM and spent a chunk of Saturday on that path before IFM handed us a direct API key and saved us several hours of cold-start debugging. We kept the Modal + vLLM script in the repo as a backstop so we are not hostage to one provider.
- Inspire language 404s. The original backend choice was Kizaki, which uses a schema language called Inspire. The Inspire docs were literally returning 404s on docs.kizaki.ai, and the CLI is macOS/Linux only while one teammate was on Windows. Around hour 10 we migrated the entire backend setup with EnterPro (Supabase) and rewrote the three
@exposefunctions as Deno edge functions. The business logic survived; only the platform changed. - Metadata chaos across retailers. Depop, Vinted, and eBay each expose product data differently, and fast-fashion sites barely expose it at all. Writing site-specific scrapers for a dozen hosts was not realistic in 36 hours, so we wrote adapters for the top secondhand sites and a generic OG / JSON-LD scraper that catches everything else with standard product markup.
- Three surfaces, one catalog. Keeping the web app, the Chrome extension, and the iMessage bot pulling from the same Tavily-backed catalog and the same reasoning engine forced us to lock the API shape early. It was useful architecture pressure, but it meant every surface had to wait on the core discovery and scoring functions being stable.
Accomplishments that we're proud of
- A single catalog of secondhand and vintage clothing that spans six marketplaces and follows the user into every other shopping site they visit.
- Three working surfaces built in 36 hours, all pulling from the same discovery and reasoning layer.
- K2-Think V2 is doing real reasoning in our product, not a cosmetic API call. The model's chain-of-thought output is what populates the sustainability explanation users actually read.
- The Chrome extension covers 26 hosts out of the box and degrades gracefully to any Shopify store via generic scraping.
- The iMessage flow works with zero account setup. Text a tag, get a verdict.
- The Y2K OS aesthetic is consistent across every surface. The same pixel flourishes and monospace type show up in the web app and the extension popup.
What we learned
- Open reasoning models are finally usable in real products. K2-Think V2 is not a toy.
- Managed inference endpoints save days compared to self-hosting, but self-hosting is still the right backstop for demo day.
- Chrome MV3's service worker model is a pain, but the separation of concerns (content script scrapes, service worker fetches, popup renders) ends up being cleaner than MV2 once you accept it.
- When you build for three surfaces at once, you are forced to design the scoring API before you design any UI, which is the correct order.
What's next for EcoThread
- Closet mode. Photograph what you already own. EcoThread suggests outfits from your closet before recommending new buys.
- Aggregate impact dashboard. Show a user their total CO2 saved across all their pins and purchases.
- Eragon natural-language filters. "Show me 90s grunge under $40" translates into structured feed params.
- More site scrapers for the extension, especially for fast-fashion sites that hide material info.
- Swap-at-checkout prompts. "This Shein dress costs $28 and lasts four wears. Here's a near-identical vintage piece on Depop at $24."
- Brand onboarding for small sustainable labels so they can surface inside the feed alongside secondhand pieces.
Built With
- bun
- chrome
- dedaluslabs
- enterpro
- ifm
- k2-think
- modal
- orchids
- photon
- postgresql
- react
- spectrum-ts
- supabase
- tailwind
- tavily
- typescript
- vite

Log in or sign up for Devpost to join the conversation.