Online store for used photography equipment
Bazarfoto.cz
- Server-side rendering
- WebP image pipeline
- OpenStreetMap API
- AI assistant with function calling
- Automated XML feeds (Google Merchant, Zboží.cz)

Audit
Bazarfoto.cz specializes in selling, buying, and trade-ins of used photography equipment. The business relies on unique items with their own wear, not stock inventory. The ten-year-old website no longer supported that model: it did not display correctly on mobile, product search was hard to navigate, the menu did not respond to screen size, and each new feature meant fighting the old design - or could not be built at all.
Buying outside the cart
A customer who wanted to buy a new camera body and cover part of the price by selling an old lens handled the trade-in outside the cart, through emails and lengthy communication with customer support. The journey from interest to a completed order was extended by days, with the risk that the customer would buy elsewhere in the meantime.
A sold-out item as a dead end
A used item is a single piece, not a stock item. Once it sold, other interested customers reached an empty page. The online store had no way to collect their contact details and let them know when a similar model was back in stock.
Answers trapped in email
Questions about the specific wear of a camera or lens were handled individually through support. An answer received by one customer remained in their inbox; it did not help the next person asking the same question.
Optimization
A responsive redesign built from the ground up, not patched over. Eight areas, one principle: less friction between the customer and a purchase.
Homepage before and after


Purchase flow
Order without registration, completed on one page. OpenStreetMap autocomplete fills in the address and immediately checks the building number and ZIP code. Balíkovna pickup points can be selected directly in the cart through an interactive Česká pošta map: fast visual selection replaced the original dropdown menu, without redirecting elsewhere. The cart holds a reservation for 30 minutes with a countdown. Used goods exist in only one piece, and without a time limit could block an item that another customer also wants to buy. Prepayment also includes free shipping, which reduces the number of cancelled orders.
Trade-in purchase
A customer with their own equipment handles both the sale and purchase in one step directly in the cart. The price of the item being bought is continuously deducted from the total order price, rather than only after support intervenes. This was exactly the point where a purchase previously left the cart and disappeared into email communication.
An adviser instead of a catalog
Used photography equipment is not bought like a new product in a box: customers need to know what they are getting. A decoder for lens-name abbreviations explains VR, USM, or ED as understandable features. A shutter tooltip shows the guaranteed number of cycles. A five-level wear scale explains what each level means for the camera body and optics. Questions about an item for sale are displayed directly on the product, so an answer received by one interested customer remains readable for the next rather than staying only in support email.
AI assistant
A virtual salesperson directly in the online store. It knows lens-mount compatibility rules, recommends only items actually in stock, and answers questions such as "a wide-angle lens for landscapes for a Nikon D5300".
How it works →
An agent loop with function calling over a catalog snapshot. Items are filtered through a deterministic lens-mount compatibility matrix, not free-text data search; the model temperature is zero and context follows the viewed product. The model has no access to customer data or orders and does not recommend incompatible equipment. This is both a safety and conversion safeguard.
Retention points
Three mechanisms against silently leaving the page. The stock watcher takes the email address of someone interested in a sold-out item and notifies them as soon as the same or a related model is back in stock, so the sold-out page stops being a dead end. An exit-intent discount is offered when departure from the browser is detected, as a final reason to complete an unfinished order. The newsletter collects emails into an owned audience independently of these two points: a channel for exclusive drops of new equipment.
Search and filters
Autocomplete responds as you type, with debouncing to prevent unnecessary requests. Filtering covers 18 lens mounts, equipment type, focal length, aperture, and wear condition, while a two-handle slider limits the price. A zero-result search does not end on an empty page: it offers to reset filters and shows the latest stocked items.
Search and filters - before and after


Performance and technology
Performance 100 is not an accident; it is a chain of decisions. Images go through a WebP pipeline with automatic thumbnails, static files have permanent caching with versioning, so an update does not wait for cache expiry. The LCP image has loading priority set, and pages are rendered on the server without a heavy JavaScript framework, so content is ready before it could even finish downloading.
Operation without a developer
The client runs the online store herself. XML feeds for Google Merchant and Zboží.cz are generated automatically, the price watcher sends emails through CRON without code changes, and customer export is one click away. A new feature means a request for a developer; ordinary operation does not.
Measurement
Conversions are measured continuously. Sales are compared over a longer period, not after the first weeks of operation.
Technical quality
Accessibility
7496
+22
Mobile. Desktop 74 → 96. Intentionally not 100: the client wanted lighter buttons than Lighthouse would ideally prefer.
SEO
91100
+9
Mobile and desktop both 91 → 100.
Agentic browsing
50100
+50
Readiness for AI assistants. Mobile. Desktop 31 → 100 (+69).
Performance
100 desktop / 90–100 mobile
Absolute values from manual measurements on the live website. Comparison with the old website is omitted because archival measurements through web.archive.org are distorted by its own overhead.
The collaboration was excellent and new functionality was implemented very quickly. What was originally impossible or would have taken a month to program was finished in record time.
Want a similar result?
I want an audit of my website