Services · Software, not pages

Custom web applications your business actually runs on.

Vebses builds custom web applications in Tbilisi, including marketplaces, booking and rental platforms, structured catalogues and internal tools. Not a site that describes your business: the system it runs on, where people log in, records change state, and the process is enforced instead of remembered.

Three web applications we built: Spark City's apartment chooser in front, Metropol's tower floor selector and Copter Tech's filtered catalogue behind
Spark City · Metropol · Copter Tech
4
applications in the archive
Day one
code and database in your name
Per phase
scope fixed before it is priced
Before anything else

Is it a website or a web app?

A website presents information. A web app does work. If people log in, if records change state, if permissions decide who sees what, or if money moves inside it, you are commissioning an application, and it needs a data model, not a page structure.

Who logs in?

A website

Nobody. Everyone sees the same pages.

A web app

Staff, customers or partners, each seeing a different slice.

What changes?

A website

The content, when somebody publishes.

A web app

Records: a status, a stock level, a booking, a price.

Who is allowed?

A website

Not a question the site has to answer.

A web app

The whole design. Who approves, who edits, who can only read.

Does money move?

A website

You get an enquiry and take it from there.

A web app

Payments, invoices or deposits happen inside the system.

Most projects that reach us as a website request have an application hiding inside them. If all four answers came out on the left, you want a marketing site or a headless CMS, and we will tell you so on the call.

The reframe

From spreadsheets to software you run on.

Where the work leaks today, and what a custom web application does about it.

Before01

The work happens in spreadsheets.

The real process lives in a file somebody emails around, and only one person understands the tabs.

With Vebses

The process becomes the software.

The steps your team already follows, modelled properly, with the rules enforced instead of remembered.

Before02

Two systems, two truths.

The site says one thing, the back office says another, and the fix is somebody re-typing numbers.

With Vebses

One source of truth.

Everything reads and writes to the same place, so the website, the phone and the reports always agree.

Before03

Everyone can see everything.

Access is a conversation rather than a rule, so the only way to protect anything is to keep it out of the system.

With Vebses

Roles that match the org chart.

What a supplier sees, what a manager approves, what finance can export and never edit, all decided per person, not per department.

Before04

Half the real work is exceptions.

The tool handles the clean case, so the refund, the split delivery and the awkward customer go back into a spreadsheet beside it.

With Vebses

The exception path is designed.

The awkward cases are modelled on purpose, which is the difference between a tool people use and one they work around.

Before05

Growth broke it.

It worked for a hundred records and crawls at fifty thousand, because nothing was modelled for scale.

With Vebses

Built for the second year.

Data modelled and indexed for the volume you expect, not the volume you launched with.

Discovery is longer here: we map the process before we price the build.

Fixed scope per phase, so a platform can start small and grow on evidence.

You own the code and the database from day one.

The shape of the problem

Most businesses run on eight things that do not talk.

How it usually is
SiteIn stockSheetsStock 14CRMSynced MonGmailRe: stock?StockStock 12POSStock 9DocsPrices v7ViberIn stock?

A site here, a spreadsheet there, a CRM nobody updates. Every pair of tools needs its own bridge, and the person maintaining those bridges is usually somebody re-typing numbers by hand.

How we build it
OnesystemWeb12 in stockFinance12 on the booksiOS · Android12 leftAdminStock 12Partnersstock: 12Reports12 units

One place where the data actually lives, and every surface (the public site, the phone, the back office, the reports) reading from and writing to that same place.

The evidence

Show your working.

Four crops from applications we built, each read back literally, and each with the limit of what it proves printed next to it, in the same size type.

Metropol's Oval tower in Batumi used as a floor selector, floor 13 outlined in orange and a panel listing its free apartments
01Metropol

The building is the selector.

What this shows

  • A photograph of the Oval tower under the heading აირჩიეთ სართული, choose a floor
  • Floor 13 outlined in orange on the facade, where the pointer rests
  • A panel headed 13 სართული that lists the free apartments on that floor
  • ბინა 1301 at 72.9 m², marked თავისუფალი (free), 1 bedroom and 1 bathroom
  • 1303 at 62.1 m² and 1311 at 67.2 m² under it

What it does not show

One floor in its hover state. In the page itself, floors with nothing left are drawn as disabled shapes, but this crop cannot show that, and whether those three units were still free on the day is the client's data, not ours.

Metropol floor page for floor 13 of the Oval: block O1, apartments 3 of 21, over the oval floor plan
02Metropol

Availability counted per floor.

What this shows

  • A floor page headed 13 სართული, with up and down controls beside it
  • A strip reading block O1, floor 13 and apartments 3 / 21
  • The oval floor plate as an architectural plan, grid axes 2 to 10 and B to E
  • Units at both ends of the plate outlined in orange against the grey of the rest

What it does not show

The list under the plan, where each free unit appears with its area and price, is outside this crop. The colours are the client's convention; we are not claiming which state each shade stood for on the day of the capture.

Copter Tech drones category: a filter rail with a price histogram bound to 7 to 13999 GEL, stock and brand filters, and a priced product grid
03Copter Tech

A search with real values behind it.

What this shows

  • A category page headed დრონები, with a count of 146 პროდუქტი
  • A price filter drawn as a histogram over a range slider, bound to 7 ₾ and 13999 ₾
  • Category boxes for დრონები and აქსესუარები, drones and accessories
  • Availability toggles reading მარაგშია (in stock) and ფასდაკლებით (discounted)
  • Cards with price, struck-through old price and a badge: DJI Mini 4 Pro at 2,499 ₾, was 3,599 ₾, −31%

What it does not show

This is the new Copter Tech shop on its preview address, before launch; coptertech.ge still runs the old store. Prices and stock come from a catalogue snapshot, so read it as a search that works, not as today's stock.

The CFMOTO catalogue twice: in Georgian, ჩვენი კატალოგი, behind, and the same page in English, Our catalog, in front, with the same tabs, counts and four cards
04CFMOTO

Two languages, one component.

What this shows

  • The same page twice, headed ჩვენი კატალოგი and Our catalog
  • Category tabs whose counts match across languages: მოტოციკლი (8) and MOTORCYCLE (8)
  • The same four motorcycles in the same order: 450CL-C, 700CLX HERITAGE, Papio ADV, 125NK
  • Spec labels translated on every card: ძრავის მოცულობა becomes Displacement
  • A € EUR / ₾ GEL switch on each card, in both languages

What it does not show

The spec fields are not one schema yet: one card gives 449 cc and 30 kW, another 75 horsepower and 693 cc. The labels are translated; the units are not normalised. No cart or checkout appears, so this proves a catalogue in two languages, not transactions.

Everything above is cropped from a build we made and captioned with what is literally on screen. Where a build is not live yet, or a screen cannot prove a claim, we said so.

The honest answer first

Build, buy, or extend what you have.

Custom software is the right answer less often than agencies imply. Here is how we decide, including the cases where we tell you to buy something instead.

Buy

When a proven product already covers the workflow, and the workflow is not what makes you money.

  • A normal product catalogue, which Shopify does better than we would
  • A small internal register a few people update (Airtable or Notion)
  • Standard appointment booking with nothing unusual about it
  • Off-the-shelf course delivery, if your courses fit its shape

Extend

When a platform gets you most of the way and what is missing is a connection, not a product.

  • The tool is right but it cannot talk to the system holding your data
  • You need one screen the platform will never build for you
  • Reporting is the only genuine gap
  • You are one workflow away, and that workflow is well defined

Build.

When the way you work is the thing you compete on, and no product models it.

  • The process is the business, and every tool makes you bend it
  • A product covers part of it and the rest becomes manual work
  • Per-seat pricing scales against you as the team grows
  • The data cannot sit in somebody else's account
  • Two sides need different views of the same record

Tell us the workflow on a call and we will name the product we would buy instead, if one exists. That answer is free and it happens more often than you would expect.

What we get asked to build

Four shapes this usually takes.

01

Marketplaces.

Two sides who need different things from the same record: listings, verification, and the moment a buyer contacts a seller. The hard part is never the listing page. It is the cold start, and we would rather plan for it than ship into it.

Mycorner.ge: named, not screenshotted; the archive holds only its cover.

02

Booking & rental.

Availability across a date range, which is a harder data problem than it looks: double-booking, deposits, handover and return, and the awkward business of what happens when something comes back late or not at all.

Cars-Rent.ge: pick-up, drop-off, dates and a filtered result set, on its cover.

03

Catalogues & inventory.

Thousands of records with variants, filters bound to the values that actually exist, and availability shown as a state rather than a label. This is the shape we have the most captured evidence for.

Deka Development and CFMOTO, both cropped and captioned above.

04

Internal tools.

The spreadsheet's replacement. One place where the rules are enforced instead of remembered, built so the person who does the job by hand today can run it without ringing us.

Mgroup Menu System: a back office feeding a customer-facing menu.

Spec sheet

What ships, in numbers.

The same standard applies to an application as to a site: measured before handover, not asserted after it.

90+

Lighthouse, mobile

The target every build ships against, verified before launch. Not a promise you have to take on trust.

Performance
Sub-second first loadLighthouse 90+ on mobile, checked before launch
Design fidelity
Pixel-exact, every breakpointPhone, tablet, laptop and wide, not approximately
Motion
60fps, GPU-compositedNo jank, no layout shift, reduced-motion respected
Accessibility
WCAG AA contrastFull keyboard path and screen-reader labels
Browsers
Last two versionsSafari, Chrome, Firefox and Edge, plus real iOS devices
Languages
GE / EN / RULocalised routes and metadata, not a translate widget
Search
Schema, sitemap, metadataStructured so answer engines can quote you
Ownership
Yours on day oneCode, CMS and domain in your accounts, not ours
How it works

Eight steps, no surprises.

The full process
  1. 01

    Intro call

    Thirty minutes. A straight answer and a budget range.

  2. 02

    Discovery

    We map the problem and write the scope.

  3. 03

    Design & build

    Weekly demos, a staging link from week one.

  4. 04

    Launch & after

    Live, tracked, and still ours to look after.

Shipped with

If that is not your problem.

FAQ

Asked and answered.

Still unclear? The intro call costs thirty minutes and commits you to nothing.

You do, from the first commit rather than at handover. The repository is created in your organisation, and the hosting, database and domain accounts are opened in your name, so leaving is a matter of removing our access, not of asking for a delivery. There is no proprietary framework you would be unable to take elsewhere.

The drivers are how many roles the system has, how many flows carry real value, how many integrations are needed, and whether your existing data is clean or has to be cleaned first. Discovery produces a written scope, a data model, a screen list and a price broken down by phase, and you keep that document whether or not you build with us.

Typically eight to sixteen weeks to a first working version, depending on the number of roles and flows. There is a staging link from the first week and a fixed weekly point where you see working software and make a decision, so the timeline is something you watch rather than something you are told about afterwards.

That is usually the point. In discovery we identify which system currently holds the truth (an accounting package, a POS, a warehouse sheet) and scope each integration once we have actually seen it. Georgian bank card gateways we have shipped; anything else we quote after looking rather than before.

Because the admin surfaces belong to our clients and we do not publish them. What we publish instead is the evidence section on this page: real crops from real builds, captioned with what is literally on screen and with the limits stated. On a call, with the client's permission or on dummy data, we will screen-share one.

Someone who worked on the build answers, on a channel agreed before launch, and a retainer states plainly what it covers and what it does not, so nobody discovers the boundary during an incident. If you ever want to leave, you already hold the accounts, and we hand over an architecture note, the data model and a session with the developer who built it.

Start a project

Tell us what you are building.

Thirty minutes, no pitch deck. Describe the problem and we will tell you what it takes to solve it (scope, budget range, timeline), even if the answer is that you do not need us.

What are you building?
Budget (optional)
How did you find us? (optional)

We reply within 24 hours.