# Bicikl servis Avala Official website and complete MVP workflow for bicycle service and repair in Pinosava, Belgrade, Serbia. ## Canonical - https://biciklservisavala.rs/ ## Summary - Business: Bicycle repair workshop - Location: Save Ristića 26, Pinosava, 11226 Belgrade, Serbia - Google Maps query: Bicikl servis Avala, Save Ristića 26 Pinosava, Beograd 11226 - Phone: +381638112321 - Email: servis@biciklservisavala.rs - Service area: Belgrade - Opening hours: Monday-Friday 09:00-18:00, Saturday 09:00-14:00 - Languages: Serbian (default), English - Contact channels: Phone call, SMS, WhatsApp message, Viber message, Instagram, TikTok, YouTube, Strava, Facebook - Social profiles: Instagram @biciklservisavala, TikTok @biciklservisavala, YouTube @biciklservisavala, Strava app link, Facebook @biciklservisavala - WhatsApp and Viber are the primary direct messaging channels; SMS and phone call are also available via the floating contact button. - Homepage hero: diagonal split slideshow with separate desktop and mobile image sets - Hero image inventory: 10 desktop images and 10 mobile images in active slideshow rotation - Hero h1 headline rotates through 4 bilingual variants every 4 seconds, fading between them in sync with the diagonal image slideshow. - JSON-LD business schema is published on the homepage route (canonical) and not injected into 404 pages. - JSON-LD also describes the service calculator web application and the operational document workflow. - The FAQ section (#faq) is a bilingual accordion with 9 Q&As between ReviewsSection and MapSection; questions cover: free diagnostics, booking, service duration, pricing/services (not parts), e-bike add-on (visible in calculator), pickup/delivery zones, parts from Germany (advance payment for part AND transport required), dirty-bike mandatory wash policy, and supported bike types. Open accordion item has a lime-green left border accent; toggle icon is a circle that fills lime green with a + turning to − (SVG lines) when open. - JSON-LD includes a FAQPage node (9 Q&As) at /#faq for Google rich-snippet eligibility; the FAQ_ITEMS in JsonLd.tsx mirror the questions in components/FAQ.tsx and must be kept in sync. - Mobile interaction: tapping or swiping on the animated hero image area does not alter slideshow state - Mobile interaction: hero CTA buttons remain the only interactive tap targets inside the hero content block - Mobile stability: hero slideshow resize handling is debounced and only reinitializes when crossing mobile/desktop breakpoint ## Core Services - Free diagnostics and pre-purchase inspection - Brakes: cantilever (touring/gravel/older MTB), V-brake, mechanical disc, hydraulic disc — adjustment, pad/cable/rotor replacement, bleeding, rotor decontamination (700 RSD). Cantilever includes straddle wire service. Basic brake adjustment 1,400 RSD; brake piston centering (Centriranje klipa, br-m04-f/r) 600 RSD; hydraulic bleeding — mineral oil / Shimano (br-h03-f/r) 2,900 RSD; hydraulic bleeding — DOT fluid / SRAM, Formula, Magura (br-h03dot-f/r) 3,700 RSD (+800 RSD due to mandatory frame and rubber protection procedure before work); hydraulic hose replacement 4,100 RSD. Rotor replacement: bolt mount front/rear 1,400 RSD each (br-rot-f-bolt / br-rot-r-bolt, parts extra); center lock front/rear 1,700 RSD each (br-rot-f-cl / br-rot-r-cl, parts extra). ALL brake services exist as separate front (prednja) and rear (zadnja) cards so both can appear as distinct line items on a receipt. IDs use -f/-r suffix (e.g. br-h02-f, br-h02-r). No (komad)/(par) in names. Brake types classified internally by groupLabel: Cantilever, V-brake, Mehanički disk, Hidraulični disk. - Drivetrain (cable): shifter tuning front/rear 4,000 RSD each; derailleur replacement front/rear 3,500 RSD each (parts extra); brake cable services — cable only (external) 1,400 RSD / cable+housing (external) 2,000 RSD / cable only (internal routing) 2,300 RSD / cable+housing (internal routing) 3,200 RSD; shifter cable services — cable only (external) 1,700 RSD / cable+housing (external) 2,400 RSD / cable only (internal routing) 2,800 RSD / cable+housing (internal routing) 3,900 RSD; all cable services exist as front (prednja) and rear (zadnja) variants with -f/-r IDs; cassette replacement 1,500 RSD; chain service (wear check + replacement) 1,800 RSD (id: dr-06, name: Servis lanca); derailleur hanger replacement 1,500 RSD; derailleur cleaning & service 1,500 RSD; cleat installation 1,200 RSD. - Drivetrain (electronic): Shimano Di2 (105, Ultegra, Dura-Ace, XT, XTR, GRX, CUES), SRAM AXS (Red, Force, Rival, Eagle, Transmission), Campagnolo EPS (Super Record, Record, Chorus) — rear 5,900 RSD / front 5,900 RSD; each charged individually, no bundle. Includes app calibration (E-Tube / AXS App / My Gruppo) and firmware update. - Bottom bracket: threaded BSA/Italian 2,000 RSD; press-fit BB86/PF30/BB30/BBright 3,000 RSD (requires specialist press tooling). - E-bike add-on: hub motor, mid-drive or battery disconnect & reconnect 2,000 RSD — added as a line item to any e-bike service. - Tyres (Gume): situation-based bundle cards — tyre-front (prednji točak, sve gume) 1,500 RSD; tyre-rear-std (zadnji točak, standardna kaseta) 1,500 RSD; tyre-rear-hub (zadnji točak, bubnasti menjač/internal hub) 1,500 RSD; tyre-rear-ebike (zadnji točak, e-bike) 1,500 RSD; tyre-rear-fat (zadnji točak, fat bike) 1,500 RSD. All tube-bundle prices unified at 1,500 RSD. Bundles include wheel removal, tube replacement, and reinstallation in one price — no separate wheel-removal card needed. Rim tape replacement (wh-g-bandas) 300 RSD + parts. Tubeless services remain as separate cards: tyre swap front 1,500 / rear 2,000; tubeless conversion front 2,000 / rear 2,500; de-conversion front 2,200 / rear 2,700; tubeless valve replacement 1,000 each; sealant top-up 800 each; sealant & rim tape cleaning 1,500 each; inner tube patching 700 RSD; tyre pressure check free. A TyreConfigurator inline widget in the Gume tab guides customers to the correct bundle via 2 steps (wheel position → bike type). The 'sitni' (small parts) category is visible in the public ServicesTabbed UI and can be added to the estimate by customers. - Wheels (Točkovi): wheel truing front/rear 5,000 RSD each; spoke replacement front/rear 1,800 each; hub service front/rear 3,000 each; axle replacement front/rear 3,500 each; new wheel installation front/rear 1,500 each (separate category from Gume/Tyres). All wheel services exist as -f/-r variants. Standalone wheel removal/installation (for services requiring wheel off without tyre change): front QR 0 RSD (wh-rm-f-qr / wh-inst-f-qr); front nut/thru-axle 1,000 RSD each (wh-rm-f-axle / wh-inst-f-axle); rear QR 0 RSD (wh-rm-r-qr / wh-inst-r-qr); rear nut axle 500 RSD removal / 1,000 RSD installation (wh-rm-r-nut / wh-inst-r-nut); rear e-bike hub motor 1,500 RSD removal / 1,500 RSD installation (wh-rm-r-ebike / wh-inst-r-ebike). - Suspension: fork setup 2,500 RSD; lower-leg service 4,500 RSD; full fork service 10,000 RSD; fork replacement 2,000 RSD; rear shock setup 2,500 RSD; rear shock air-can service 4,500 RSD; full rear shock service 9,000 RSD. - Cockpit & frame: grips/bar tape/saddle/seatpost 1,200 RSD each; handlebar or stem replacement 1,800 RSD; headset service 2,500 RSD; dropper post service 5,500 RSD; pivot bearing service — standard (up to 5 pivots) 9,000 RSD / complex linkage 6+ pivots (Trek Full Floater, Specialized FSR, Ibis DW-Link, Giant Maestro) 14,000 RSD. - Washing and drivetrain cleaning: a single all-in-one service — Pranje + čišćenje pogona + podmazivanje (wash-01) 3,500 RSD, 1h — full frame wash + drivetrain degrease (chain/cassette/derailleur) + fresh lubrication. Frame-only washing is not offered; a dirty bike cannot be safely serviced without this treatment. Mandatory for all bikes arriving with visible mud, dust or cobwebs. E-bike wash (wash-ebike) 4,000 RSD, 1.5h (extended to protect motor, battery, connectors). - Service programs: Servisi (Starter 4,000 RSD / Redovan 10,000 RSD / Pro 14,000 RSD) — all labour; parts billed separately in every package. - Germany parts availability: parts can be ordered for complex repairs and component groups that local bike shops do not support - Parts import policy: advance payment for both the part AND transport is required; expected delivery is up to 3 weeks - Exclusive: bike and rider transport (call for information and pricing) - Bike pickup and delivery: zone-based fixed prices — Šira okolina BG 5,000 RSD / Beograd (centar) 4,000 RSD / Okolina Avale 2,500 RSD per direction - Labour baseline: 3,000 RSD/h (parts charged separately) ## Estimate And Workflow - Services catalog (ServicesTabbed) is the primary selection surface: clicking any card checks/unchecks it and adds it to the live estimate; a floating 'Vidi procenu' badge appears showing the count of selected items — lime green (rgb(166,247,2)) with dark text. - Services catalog shows an intro hint above the cards grid (hidden during search): 'Ovde možeš izabrati usluge klikom na kartice, a zatim klikom na sticky dugme Vidi procenu možeš dovršiti kreiranje radnog naloga.' - The 'Vidi procenu' floating badge is a solid lime-green pill button, fixed bottom-right (bottom:192, right:20), topmost in the right-side stack. - The 'Vodič' tour button has been removed from the sticky layout. The tour is now started exclusively via the Hero 'Provedi me kroz sajt' / 'Show me around' button (lime-green outline, pulsing bsa-vodic-pulse animation, dispatches bsa:start-tour). - FloatingCTA unified FAB (lime-green chat icon, bottom:24, right:20) opens a single panel containing both contact links (WhatsApp, Viber, SMS, Pozovite) and social links (Instagram, TikTok, YouTube, Strava, Facebook) separated by a divider. FAB rotates 45° to show ✕ when open. The Viber icon inside FloatingCTA uses the 5-subpath SimpleIcons SVG path (M11.398.002C8.473...) with fillRule='evenodd' clipRule='evenodd' on the element — same path used in OtkupProdajaSection and ServisniKalkulatorSection. Never use the 2-subpath simplified Viber path (M11.4 0C8.85...) — it renders as a blob. - Right-side sticky: FloatingCTA FAB (bottom:24, right:20) → Vidi procenu (bottom:148, right:20). Left-side sticky: Pomoć na putu (bottom:24, left:20) only. Vodič sticky FAB has been removed; the tour is launched from the Hero button. - Service card price rows show labour time only (e.g. '1–2h'); a global notice above the cards grid reads 'Cene pokrivaju radnu snagu — Delovi se naplaćuju posebno.' / 'Prices cover labour — parts billed separately'. - Services catalog category navigation uses a responsive image-card grid (replacing the former small tab strip). Every card — including the virtual 'Najpopularnije' and 'Sve' tabs — has a background photo from /assets/categories/.jpg with a dark gradient overlay (rgba(0,0,0,0.08)→rgba(0,0,0,0.72)). No special-casing: all 14 cards use the same render path. Active card: lime border (2px solid rgb(166,247,2)) + lime label bar with #111 text. Icon centred in the upper portion (white / lime when active). Grid layout: auto-fill minmax(120px 1fr) — 2 cols on small screens up to 5–6 on desktop. Categories with images: dijagnostika, kocnice, menjaci, gume, tockovi, viljuska, upravljac, ebike, pranje, paketi, transport, sitni, najpopularnije, all. - Services catalog default tab is 'Najpopularnije' (Most Popular), containing featured gateway services with the tagline 'Brz servis, transparentne cene, bez čekanja'. - The estimate calculator section (ServisniKalkulatorSection) reads selection state from a shared estimate-store module; it no longer has its own service list or tabs — the catalog above is the only selection surface. - Estimate calculator layout: full-width vertical flow (no right-column aside). Row 1: services estimate list. Row 2: add-ons band — Transport zone picker + Washing options in side-by-side 2-column grid, lime-accented top border, prominent. Row 3: summary + total (left) | CTA panel (right, 480px col). - Add-ons band opens with lime caption 'Prateće usluge' and copy: 'Dodaj transport i pranje — biraju ih skoro svi klijenti.' - PRIMARY CTA in calculator is messaging: a lime-bordered 'Pošalji poruku odmah' box (id=calc-messaging-cta) with WhatsApp (full-width green) and Viber + SMS below. WhatsApp and Viber open a name/intro dialog before sending; SMS is a direct link. Messaging is intentionally above the email work order action. - Name dialog (pre-send): clicking WhatsApp or Viber opens a modal dialog asking for Ime (first name) and Prezime (last name): 'Još samo da nam se predstaviš / i šaljemo poruku sa svim odabranim uslugama i cenama.' On confirm, the name is prepended to the message text ('Zdravo, zovem se [Ime Prezime]. Zanima me termin...') and the messaging link opens. Name entry is optional — users can send without entering a name. - Secondary CTA is 'Pošalji radni nalog mejlom →' (formerly 'Kreiraj radni nalog'); it opens work-order.html in a new tab. The button style is subdued (ghost) to signal it is secondary to messaging. - Estimate calculator shows: selected services list (with × remove buttons), a zone-based transport picker (3 zones × 2 directions), washing add-on checkboxes, totals, and messaging + email work-order action buttons. - Transport zone picker in calculator: three zone buttons ordered Šira okolina BG 5,000 RSD / Beograd (centar) 4,000 RSD / Okolina Avale 2,500 RSD, then separate pickup and delivery checkboxes; selecting both adds both direction fees. - All service prices are fixed single values (priceMin === priceMax, no ranges); transport uses the three zone prices above. No pair/bundle discounts — every service is priced per unit regardless of quantity. Press-fit BB costs 150% of threaded BB (3,000 vs 2,000 RSD). Electronic derailleur adjustment 5,900 RSD each (significantly above cable equivalent — premium components command premium service rate). - buildMessage(name?) generates pre-filled text listing each selected service with its price range + the total estimate; if a name is provided, the message opens with 'Zdravo, zovem se [Ime Prezime].' / 'Hello, my name is [First Last].' Buttons are dimmed when no services are selected. - WhatsApp, Viber, and SMS CTA buttons all open a name-collection modal ('Još samo da nam se predstaviš') with optional Ime + Prezime fields before sending; pressing Enter or the confirm button prepends the name to the pre-filled message and opens the channel. All three channels use