Inspiration
Online shoppers often find the same product at different prices across multiple stores. Comparing each listing manually takes time, and a low displayed price does not always mean the offer is the best choice when product variants, ratings, reviews, and unknown costs are considered.
I created PricePao to help Thai consumers compare equivalent products clearly, stay within their budget, and make more informed purchasing decisions.
What it does
PricePao lets users search for products in Thai and compare multiple offers from online stores. Users can:
- Set minimum and maximum prices.
- Compare exact listing prices, ratings, and review counts.
- View multiple matching offers instead of only one result.
- Save products and set price targets.
- Create a simulated purchase budget.
- Select products from different stores and monitor spending and remaining budget.
- Open the original store or shopping page before purchasing.
AI validates product identity and distinguishes the requested product from accessories, spare parts, components, unrelated variants, and ambiguous listings. AI is never used to generate or estimate product prices.
When shipping information is unavailable, PricePao displays it as unknown instead of inventing a total.
How we built it
The frontend was developed with React, TypeScript, Vinext, Vite, HTML, and CSS. A Python FastAPI backend provides the search, matching, caching, and price-tracking APIs.
PricePao retrieves public shopping listings through an Apify Google Shopping actor configured for Thailand. The backend normalizes product information and sends listing titles to an AI model using structured output. Only listings classified as the same main product and matching the requested price range are accepted.
PostgreSQL stores products, offers, search cache, and price history. Successful searches are cached to reduce repeated external requests and conserve API credits. The application runs as containerized frontend, backend, worker, and database services using Docker Compose.
Challenges we faced
The main challenge was determining whether two listings represented the same product. Similar search results may contain accessories, replacement parts, different pack sizes, or products with the same word but a different function.
Thai price expressions also required careful interpretation. For example, users may describe a price range naturally rather than entering exact limits. We combined semantic AI decisions with deterministic numeric validation so that AI handles product meaning while the application remains responsible for prices.
Another challenge was working with incomplete data. Some listings do not provide reviews or shipping costs. The interface therefore shows the exact information available and clearly labels missing values.
Accomplishments
- Built a working full-stack price comparison prototype.
- Implemented semantic product matching with structured AI output.
- Added price-range filtering and review-aware offer ranking.
- Added caching to reduce external API usage.
- Built a browser-local shopping budget and purchase simulation.
- Containerized the complete application with Docker.
- Created 45 backend tests and 10 frontend behavior tests.
What we learned
Accurate price comparison requires more than sorting numbers. The system must first confirm that every offer represents a comparable product. We also learned that clearly communicating missing information creates more trust than estimating values that cannot be verified.
What's next
The next step is to evolve the simulated budget into a Unified Cross-Platform Cart. Users will be able to collect products from several platforms in one shopping session, view combined and per-platform subtotals, adjust the cart to stay within budget, and then continue to each platform to complete the respective order.
Future work also includes user testing with Thai shoppers, a mobile experience, improved price alerts, stable public deployment, and marketplace or affiliate partnerships.
Built With
- apify
- css
- docker
- docker-compose
- fastapi
- google-shopping
- html
- httpx
- openai-api
- postgresql
- pydantic
- python
- react
- rest-api
- typescript
- vinext
- vite
Log in or sign up for Devpost to join the conversation.