This is a submission for the Hacktoberfest Open-Source AI Challenge Week 2: Side Hustle
What I Built
PriceCraft AI is a one-click appraisal and listing engine for people who flip vintage clothes, watches, refurbished tech, and collectibles on eBay, Etsy, Poshmark, Mercari, and Shopify.
That person is usually not a “startup.” They are a seller with a phone, a storage tote, and a side income that lives or dies on two numbers: what to ask, and how long it takes to write the listing.
Overprice, and the item sits. Underprice, and you donated margin to a stranger. Write a sloppy title, and search never finds you. Skip the condition note, and you eat a return plus a platform fee you already paid. A careful listing still takes 15–20 minutes: hunt comps, guess a price, squeeze keywords into eBay’s 80-character title, write specs, disclose flaws.
PriceCraft turns that into a single form: brand, category, condition, sourcing cost, a few attributes. It returns:
- a suggested list price, a quick-sale floor, a patient ceiling, and a 14-day sell-through probability
- live competitor min / average / max (when SerpApi is configured)
- net after a typical marketplace fee blend, so “optimal” is not vanity revenue
- an eBay-length title, an Etsy-style title, markdown specs, and a condition-honest description
- optional 15-second promo narration for TikTok / Reels
- a small inventory catalog and CSV export
Who would pay? Anyone listing more than a handful of items a week. The product is not “AI for shopping.” It is time and pricing discipline for a resale hustle, which is exactly the kind of small, specific, useful software this week asked for.
Demo
Live app: https://pricecraft-ai.onrender.com
Try a preset (vintage Nike windbreaker, etc.), or enter a real item you would actually sell. Appraisal, comps, copy, unit economics, and inventory live in the same dashboard. Health check: /api/health.
The public demo runs on Render’s free tier, so the first request after idle can take a moment to wake. That is the honest cost of shipping something judges (and sellers) can click without cloning a repo.
Code
PriceCraft AI
Intelligent resale pricing, live market comps, and listing generation for online sellers.
Live demo: https://pricecraft-ai.onrender.com
Built for Hacktoberfest 2026 (Week 2 — Side Hustle) with open-source AI at the core.
Overview
Solo sellers on eBay, Etsy, Poshmark, Mercari, and Shopify spend too much time on two jobs that should be fast: pricing and listing copy.
- Guessing a price too high leaves inventory sitting. Guessing too low gives away margin.
- Writing an 80-character eBay title, specs, and an honest condition note often takes 15–20 minutes per item.
PriceCraft AI turns item specs and sourcing cost into a valuation, competitor snapshot, marketplace listing, and optional short-form promo voiceover in one request.
Features
| Capability | What you get |
|---|---|
| Tabular valuation (Prior Labs TabPFN) | Suggested list price, quick-sale floor, collector ceiling, and 14-day sell-through probability |
| Liquidity curve | Chart.js view of sell probability across price tiers |
| Listing copy (Google Gemma 2) | eBay-length title, |
Repo: github.com/ritikahirwar8168-dev/pricecraft-ai
Stack: Python 3.11, FastAPI, SQLite, Tailwind, Chart.js. Blueprint: render.yaml. Tests: python -m unittest tests/test_pricecraft.py -v.
How I Built It
Every listing follows the same path: seller input in, priced listing out, with Sentry wrapping each engine so latency is measurable instead of guessed.
flowchart TD
Seller["Seller"] -->|"Item specs, condition, sourcing cost"| UI["Dashboard on Render"]
UI -->|"POST /api/analyze"| API["FastAPI pipeline"]
subgraph Traced["Sentry-traced agent steps"]
TabPFN["TabPFN<br/>price, floor, ceiling, 14-day sell-through"]
SerpApi["SerpApi<br/>live Google Shopping comps"]
Gemma["Gemma 2<br/>80-char title, specs, description"]
Econ["Unit economics<br/>fees, shipping, net profit"]
end
API --> TabPFN
API --> SerpApi
TabPFN --> Gemma
TabPFN --> Econ
SerpApi --> Econ
Gemma --> Out["Priced listing + copy"]
Econ --> Out
Out --> UI
Out -->|"Save / CSV export"| DB["SQLite inventory"]
UI -->|"POST /api/voiceover"| Voice["ElevenLabs promo clip"]
Voice --> UI
The open pieces are not a badge on the README. They are the two jobs a closed chatbot is bad at: numbers on a small table, and copy that obeys a marketplace rule.
Valuation is TabPFN, not an LLM. Prior Labs’ tabular foundation model is trained to do Bayesian-style inference on small tabular sets in a forward pass. Resale data looks like that: condition score, brand tier, rarity, age, demand, original retail, sourcing cost. I fit TabPFNRegressor on sold price and TabPFNClassifier on “sold within 14 days,” then score the item. From that I derive floor, ceiling, days-on-market, and a factor breakdown. A general chat model will sound like it priced the jacket. TabPFN is actually doing tabular prediction.
Copy is Gemma 2. Google’s open-weight gemma-2-9b-it writes the listing: 80-character eBay title, warmer Etsy title, bullets, markdown description, tags, social hook. Inference can go through Groq or Hugging Face; GEMMA_MODEL_ID is swappable. Temperature is low. The output is JSON, not a paragraph you have to edit twice.
Live comps are SerpApi (Google Shopping), so the price is not floating in a vacuum.
ElevenLabs turns the social hook into a short voiceover. Resellers already film phone videos; they should not also write and record a script for every SKU.
Sentry agent tracing wraps each step (tabular_valuation, market_comps, listing_generation, voiceover_synthesis) with latency and metadata. The UI has a telemetry tab; the same spans go to Sentry when SENTRY_DSN is set. For a multi-engine pipeline, “it feels slow” is useless. You need to know whether TabPFN, search, or copy ate the budget.
Render is the runtime: FastAPI on 0.0.0.0:$PORT, health check at /api/health, env keys marked sync: false in the blueprint. The side hustle only exists if a seller can open a URL.
Fallbacks are intentional. Keys are optional. Without them, built-in priors still produce a valuation and listing so the app never dead-ends. That matters more for a $0–small-budget hustle than a demo that 500s when a vendor is down.
One POST /api/analyze run: TabPFN valuation → SerpApi comps → Gemma 2 listing → unit economics (price − cost − ~13.25% + $0.30 fee − shipping). Voiceover is a separate POST /api/voiceover so you do not pay for audio on every appraisal.
Why Does Open Innovation Matter?
A reseller’s margin is thin. If every listing calls a closed frontier API, the tool can cost more than the extra dollars it finds. Open weights change the unit economics of the product, not just the philosophy.
Tabular work is a poor fit for a closed chat API. Pricing is rows and columns: condition, rarity, age, comps. Forcing that through a general LLM is the expensive way to get a confident wrong number, with no real posterior and no cheap way to refit on your own sold-history CSV. TabPFN is built for that shape of data. That is where open innovation is not a slogan; it is the correct model class.
Gemma lets me constrain and swap. eBay’s title limit is 80 characters. I need a model I can prompt strictly, pin to JSON, and replace (2b vs 9b, Groq vs Hugging Face vs local later) without rewriting the app or renegotiating a vendor. Closed copy APIs are fine until the price per 1K tokens moves, the model is deprecated, or the policy dislikes “used goods with stains disclosed.” Open weights keep the listing writer under my control.
Seller data is not abstract. Sourcing cost and true margin are the most sensitive fields in this workflow. A hosted closed API means sending that to a third party on every click. Self-hosting FastAPI + TabPFN on CPU, or running Gemma through a provider you chose, is a better default for a hustle that should not leak wholesale.
Closed tools fail the “would someone pay” test in a different way. ChatGPT can draft a description. It will not fit a tabular prior, subtract eBay fees, pull shopping comps, and emit File Exchange-shaped CSV in one path. The open stack is what made it one product instead of five tabs.
Open here does not mean “no internet, always.” It means the intelligence that makes the hustle work — tabular valuation and constrained listing copy — is not locked to a single closed SKU. Render hosts it. Partners add live search, voice, and traces. The core still runs with fallbacks if those keys are empty.
Prize Categories
-
Best Use of Render — production runtime at pricecraft-ai.onrender.com,
render.yaml,/api/health - Best Use of TabPFN — regressor + classifier on resale attributes: price, 14-day sell-through, floor/ceiling, factor breakdown, inside a wider valuation agent
- Best Use of Gemma — Gemma 2 as the listing writer (80-char titles, specs, condition copy)
-
Best Use of Sentry Agent Tracing — per-engine spans (latency, price, title length, competitor count) in-app and via
sentry-sdk - Best Use of SerpApi — live Google Shopping comps grounding the price
- Best Use of ElevenLabs — short-form listing promo narration
Top comments (0)