gora.
web development · tbilisi, georgia

Web Developer in Tbilisi, Georgia

I design, build and deploy production websites and web applications for businesses in Georgia and abroad: Next.js front ends, NestJS and PostgreSQL back ends, multilingual sites, catalogues and admin panels. One developer from the first message to deployment and support.

  • 1,958 URLs in the sitemaps of a property catalogue
  • 10,000+ parts in a Lithuanian e-commerce catalogue
  • Multi-page restaurant site in Tbilisi

Typical projects, each one backed by something I have shipped. The stack is chosen to fit the task, not the other way round.

  • Business and brand websites

    Multi-page editorial sites for restaurants, studios and small companies, server-rendered in Next.js so Google and AI assistants can read every page. Examples: BRUNO Tbilisi, a wine restaurant in Vake, and WedInGeorgia, a wedding photographer's portfolio.

  • Multilingual websites

    Separate URLs per language, hreflang, localized metadata and typography that works for Georgian, Russian and English. Jusmila serves Lithuanian, Russian and English; Aperwind serves Russian and English.

  • E-commerce and catalogues

    Product and listing catalogues with search, admin panels and imports from external sources: 10,000+ motorcycle parts for Jusmila, a daily-synced property catalogue for Aperwind.

  • Web applications and admin panels

    Operator dashboards, order queues, reports and role-based access. The delivery platform I built has a 50-page admin panel and real-time updates over Socket.IO.

  • Back ends and APIs

    NestJS and PostgreSQL services with Redis where it earns its place: REST and WebSocket APIs, background jobs, audit trails, multi-tenant data models.

  • Integrations

    Messengers (Telegram, WhatsApp Business API), payment providers, external data feeds and existing internal systems, connected through their APIs and webhooks.

  • Performance and technical SEO

    Core Web Vitals, structured data, sitemaps, canonicals and crawlable server-side rendering built in from the start rather than bolted on afterwards.

  • Deployment and maintenance

    Docker, GitHub Actions, nginx with Let's Encrypt, systemd. Aperwind deploys on a push to main: build, restart and a smoke request that stops the release if it fails.

Four production sites with their numbers. Each links to the full case study.

BRUNO Tbilisi — restaurant website

Editorial multi-page site for a wine restaurant in Vake, Tbilisi (public, brunotbilisi.com).

What was done
Nine home-page sections plus eight routes (menu, brunch, cocktails, reels, reviews, visit, about), animation in plain CSS and IntersectionObserver with prefers-reduced-motion respected, a content pipeline for 200+ photos, and structured data for Restaurant, Menu and FAQ.
Problem solved
Present a restaurant's menu, reviews and visit details as a branded site that search engines and AI assistants can read, without heavy animation slowing it down.
Technology
  • Next.js 14 (App Router, SSR)
  • TypeScript
  • Tailwind CSS
  • JSON-LD
  • nginx + Cloudflare
In numbers
  • 127 curated reviews from four sources (Google, Yandex, TripAdvisor, Restaurant Guru)
  • 200+ photos processed to webp/avif with blurhash placeholders and duplicate detection
  • llms.txt and robots.txt that explicitly allow GPTBot, ClaudeBot and PerplexityBot

Read the case study →

Jusmila — motorcycle parts e-commerce, Lithuania

Catalogue and storefront for motorcycle, ATV and moped parts, with a local warehouse in Šakiai.

What was done
A Turborepo monorepo with three apps: a Next.js storefront, a NestJS API and a Vite + React admin. Catalogue imports from several sources, real-time stock and order status between admin and storefront, session replay for debugging customer issues.
Problem solved
Keep a large parts catalogue current from multiple sources and let warehouse staff see orders and stock live, in three languages.
Technology
  • Next.js 14 + next-intl
  • NestJS 10
  • PostgreSQL 16
  • Redis
  • Socket.IO
  • Vite + React
In numbers
  • 10,000+ parts in the catalogue
  • Lithuanian, Russian and English storefront
  • Real-time sync through Socket.IO with a Redis adapter

Read the case study →

Aperwind — Thailand property catalogue

Public catalogue of new-build property in Phuket, Bangkok, Samui and Pattaya, in two languages (aperwind.com).

What was done
A public Next.js 15 site, an admin panel with its own analytics, and a Python pipeline that reads the supplier's spreadsheet every morning and applies the changes to PostgreSQL in a single transaction. The sync stops at safety thresholds and waits for human approval.
Problem solved
The data source belongs to someone else and changes without warning, so the catalogue must update daily without losing a single indexed URL.
Technology
  • Next.js 15
  • React 19
  • TypeScript
  • PostgreSQL 16
  • Python 3
  • Docker
  • nginx
In numbers
  • 1,958 URLs across four sitemaps (979 pages in two locales)
  • Seven production dependencies and 397 tests
  • Sync halts if more than 25% of listings change, a price jumps over 30%, or more than 5% of rows go missing

Read the case study →

WedInGeorgia — wedding photographer portfolio

A multi-page portfolio site for a wedding photographer in Georgia (wedingeorgia.com).

What was done
Built in a single session with Claude Code, with every revision given as a voice message in a Telegram topic. The result is a multi-page Next.js site: home, gallery, six location pages, reviews and FAQ, in Russian and English.
Problem solved
Turn a folder of portfolio photos into a premium-looking site quickly, with the concept, palette, fonts and animation chosen automatically.
Technology
  • Next.js 16
  • Tailwind CSS 4
  • framer-motion 12
  • static export to a VPS with nginx
In numbers
  • 172 photos from the client's portfolio were the only input
  • 10 minutes from an empty folder to a site deployed on a VPS
  • Home, gallery, six location pages, reviews and FAQ in two languages

Read the case study →

Front end
Next.js 15 (App Router) · React 19 · TypeScript · Tailwind CSS v4 · Vite
Back end
NestJS · Node.js · TypeORM · PostgreSQL 16 · Redis · Socket.IO
Delivery
Docker · GitHub Actions · nginx + Let's Encrypt · Cloudflare · systemd
Search and quality
Core Web Vitals · JSON-LD / schema.org · hreflang · XML sitemaps

Four steps, no managers between you and the person writing the code.

  1. 01 · First message

    Write to me on Telegram. In your own words, even if you don't know the technical terms. I care more about understanding what you want to build than what you call it.

  2. 02 · Reading between the lines

    Within a day or two I understand the task and give you an estimate of timeline and budget. If I see it isn't my case — I say so right away, no hedging.

  3. 03 · Lock-in

    Price and timeline — in writing. 50% upfront. After that things change only by mutual agreement, and rarely.

  4. 04 · Work

    I show interim results at my own pace. At the end — handover with documentation and access. First month of support is included by default.

  • You talk directly to the developer who writes the code. No account managers, no agency layer.
  • One person covers architecture, back end, front end and deployment, so nothing is lost between handoffs.
  • Production experience: the sites above are live and maintained, not demos.
  • I work with existing systems as well as new builds: two of my SEO projects were done on the clients' existing sites with no redesign.
  • Code goes into your GitHub from day one, with documentation and credentials in your hands. No lock-in to me.
  • Based in Tbilisi, working internationally in English and Russian, with Georgian as a basic third language.

I am based in Tbilisi and available for projects across Georgia as well as remote international work. Day-to-day communication happens on Telegram, with video calls on request.

Sites for the Georgian market usually need Georgian, Russian and English side by side. That means separate URLs per language, correct hreflang and typography that handles Georgian script properly. For Georgian businesses I can also integrate local payment and operational systems where required, including workflows involving TBC Bank or Bank of Georgia.

I do not publish a fixed price list for custom work, because two sites that look alike can differ several times over in effort. What moves the cost: the number of page types and templates, how many languages, where the content comes from, an admin panel, integrations (payments, messengers, external data) and real-time features.

After your first message I send a written estimate of timeline and budget, usually within a day or two. If the task is not a good fit, I say so in the first reply. Once agreed, price and timeline are fixed in writing with 50% upfront.

How much does a website cost?
It depends on scope, so I quote per project rather than from a price list. The main drivers are the number of page types, languages, an admin panel, integrations and real-time features. Send a short description on Telegram and I reply with a written estimate of timeline and budget, usually within a day or two.
How long does it take to build a website?
As a guide, the same ranges I give on the home page: a landing page takes one to two weeks, a corporate site or internal tool three to five weeks, and a multi-tenant platform three months and up. The exact timeline is fixed in writing before work starts.
Do you work with businesses in Georgia, and in which languages?
Yes. I am based in Tbilisi and work with clients in Georgia and internationally. I communicate in English and Russian, with basic Georgian. For sites, I set up Georgian, Russian and English versions with separate URLs and hreflang.
Can you build a multilingual website?
Yes. Each language gets its own URL, localized metadata and hreflang links, so search engines show the right version to each visitor. Jusmila runs in Lithuanian, Russian and English; Aperwind in Russian and English.
Can you improve or extend an existing website?
Yes. I regularly work with existing systems: two SEO projects were done on the clients' own sites without a redesign, and I plug into existing NestJS or FastAPI back ends instead of rewriting them.
Can the site take payments?
Yes. I integrate the payment provider that fits your market and legal setup. For Georgian businesses that can include workflows with TBC Bank or Bank of Georgia where their APIs are available; the contract and verification with the bank stay on your side. I agree the integration scope before quoting.
Who owns the code and where is the site hosted?
You do. The code lives in your GitHub repository from day one, with documentation in the README and credentials with you. I usually deploy to a VPS with Docker, nginx and Let's Encrypt, or to your own infrastructure.
What happens after launch?
The first month of support is included: bug fixes, small content edits and log monitoring. After that it is hourly or a monthly retainer. Security patches, dependency updates and incident response can be covered under a separate agreement.

Describe the task in your own words. I respond within 24 hours, usually the same day on weekdays.

Elsewhere: GitHub·Telegram channel·Reddit·X