Sharvarok.com is the first Ukrainian online classifieds platform in the U.S., connecting the diaspora with local businesses and individuals. The platform enables users to post, browse, and interact with listings for goods, services, jobs, and more, helping Ukrainians stay connected and support each other.
- Client
- Grew out of Hromada's printed newspaper
- My role
- CTO and sole technical owner - architecture, backend, frontend, mobile, admin/CRM, infrastructure and DevOps
- Period
- 2024 - present

Project Overview
Sharvarok did not start as a website. Its classifieds began as a section in the printed newspaper of Hromada, the Ukrainian-American non-profit whose platform I also build - the same PDF issues that are now in that site's archive. People were buying, selling and hiring through a page in a monthly paper, which works until it doesn't: an ad is out of date the day it is printed, nobody can search it, and the audience is whoever happens to hold a copy. So the section came off the page and became its own product: a searchable bilingual marketplace, and then iOS and Android apps on the same backend. Today it is a bridge between Ukrainians in the U.S. and local businesses, service providers and individuals - with the moderation, payments and tax handling a real marketplace needs and a newspaper page never did.
The project in numbers
- Built by
One person, from an empty repository
Client-owned product, but there was no existing system to join: architecture, data model, backend, frontend, admin and CRM, mobile apps, infrastructure and DevOps are all mine, as sole technical owner since 2024.
- Mobile clients
iOS and Android, both stores
A React Native app on the same Next.js backend as the website, released to the App Store and Google Play through scripted pipelines that dry-run by default.
- Payment stack
PCI DSS SAQ A eligible
Stripe Elements checkout with webhooks, subscriptions and payment-state reconciliation, so raw card data never reaches application servers.
- Per-listing translation cost
manual, or nothing
tonear zero, automatic
AI-powered bilingual listings with a caching layer, so every listing reaches both the Ukrainian and English audience with no manual step.
- Content moderation
Review queue, takedowns, account actions
A user-generated content workflow with a real-time admin analytics dashboard, giving the platform a repeatable process for fraudulent and abusive listings.
- Technical SEO
Schema.org, sitemaps, canonicals, Core Web Vitals
Owned end to end and monitored in Google Search Console to keep listings discoverable in organic search.
- Posting a listing
a form to fill in
tospeak it, AI structures it
Voice dictation in Ukrainian or English feeds an AI parser that fills the listing fields, which matters for an audience that finds typing a long form in a second language the reason not to post at all.
- US sales tax
Computed per jurisdiction
Implemented and tested as its own subsystem, because a marketplace charging the wrong tax in the wrong state is a legal problem rather than a bug.
Challenges
- Building a scalable classifieds platform capable of handling a high volume of listings and user interactions.
- Ensuring fast and accurate search and filtering across diverse listing categories.
- Providing a secure messaging system while maintaining user privacy.
- Optimizing performance to handle high traffic and real-time listing updates.
- Enabling automatic English-Ukrainian and Ukrainian-English translations for listings.
- Getting people to post at all: the audience is bilingual, and a long form in a second language is the point where most of them give up.
- Charging the correct US sales tax per jurisdiction, which is a legal obligation rather than a rounding detail.
- Keeping a mobile app in behavioural parity with the website when both run against the same backend and diverge the moment one gets a feature first.
- Preserving traffic attribution across an OAuth round trip, which otherwise discards the UTM parameters and referrer that say where a user came from.
- Answering questions about traffic and listings without running heavy aggregate queries over the raw page-view table on every dashboard load.
- Surviving vulnerability scans against a public marketplace, and knowing what to do when one turns into a real incident.
Solutions
- Developed a modular, scalable architecture using Next.js and React for a fast, SEO-optimized front-end.
- Implemented Sphinx Full-Text Search for fast and accurate classified listing searches.
- Integrated Stripe and PayPal APIs for secure payment transactions when needed.
- Added a secured messaging system to allow private communication between buyers and sellers while ensuring data privacy.
- Leveraged Next-Intl for automatic English-Ukrainian and Ukrainian-English translations in listings.
- Deployed the platform on AWS EC2 with AWS S3 & CloudFront for media storage and optimized content delivery.
- Automated CI/CD workflows with GitHub Actions to streamline updates and maintenance.
- Implemented robust monitoring with Sentry and Google Analytics to track performance and user behavior.
- Built a React Native client for iOS and Android on the same Next.js API as the website, with Stripe PaymentSheet for in-app payment, Firebase messaging and analytics, and Sentry, released through scripted App Store Connect and Google Play pipelines that are dry-run by default.
- Added voice dictation to the posting form that feeds an AI parser: the seller describes the item aloud in Ukrainian or English and the listing fields come back filled.
- Implemented US sales tax as its own subsystem with a documented test plan, rather than a rate constant buried in the checkout.
- Built DB-backed feature flags with an admin UI and a short cache, so a half-finished feature can ship dark and be switched on without a deploy.
- Added MaxMind GeoIP through a shared reader that re-reads on file change, refreshed by a weekly cron, so location-aware listings do not depend on a third-party lookup per request.
- Preserved UTM parameters and referrer across the OAuth round trip, so sign-ups keep the attribution that says which channel produced them.
- Rolled page views into daily aggregate slices on a fifteen-minute cron, so the analytics dashboard answers from a summary table instead of scanning raw events.
- Generated Open Graph preview images for business profiles at the size and thresholds Facebook actually honours, with a backfill for existing records.
- Built bilingual structured fields for jobs and resumes - the source plus paired translated fields - so a vacancy is searchable and readable in both languages rather than machine-translated at display time.
- Added a health endpoint that distinguishes fatal from degraded - the database is fatal, Redis and Sphinx are degradation - plus a post-deploy smoke run over public URLs that bypasses the CDN cache and reports to Telegram.
- Ran end-to-end tests in Cypress alongside the smoke suite, and documented a real vulnerability-scanning incident with the log analysis and the reporting path in the US.
Key Features
- Multi-Category Listings - Users can post and browse ads for services, jobs, real estate, and more.
- Advanced Search & Filtering - Full-text search powered by Sphinx for fast and accurate results.
- Secure Transactions - Integrated Stripe and PayPal for seamless payments when applicable.
- AI-Powered Translations - Automatic English-Ukrainian and Ukrainian-English translation for listings using Next-Intl.
- Secured Messaging - Private messaging system with a focus on data privacy and security.
- Optimized Performance - Hosted on AWS EC2 with AWS S3 & CloudFront for efficient content delivery.
- CI/CD & Monitoring - GitHub Actions for automated deployments, Sentry & Google Analytics for tracking performance.
- Native Mobile Apps - A React Native client on iOS and Android against the same backend as the website, with in-app Stripe payment and push notifications.
- Speak Your Listing - Voice dictation in Ukrainian or English parsed by AI into filled listing fields.
- US Sales Tax - Computed per jurisdiction as its own tested subsystem.
- Feature Flags - Database-backed flags with an admin UI, so features ship dark and switch on without a deploy.
- Bilingual Jobs & Resumes - Structured fields carried in both languages rather than translated at display time.
- Analytics Dashboard - Daily page-view rollups on a fifteen-minute cron, with traffic attribution preserved across OAuth.
- Health Checks & Smoke Tests - Fatal versus degraded distinguished explicitly, with a post-deploy run reporting to Telegram.
Project Info
Technologies
Frontend
Mobile
Backend
Search
Translations
Payments
Messaging
AI & APIs
Security
Hosting & Deployment
DevOps & CI/CD
Monitoring & Analytics
Need something like this?
Tell me what you are building and where it is stuck. I will tell you plainly whether it is work I should be doing.