Skip to content

One platform, built end to end

The main line of work is putting AI inside the product. Automation, generation, measurement, data and the servers behind it sit under that. Every line names the tools actually in use.

AI agents that run inside your own walls

Open models go straight onto the client’s own GPUs. That matters where conversations must not leave the building, or where per-call pricing does not survive the volume. A custom agent for a university is being built this way right now.

A 32B-class model is quantised to four bits so it fits a single card. Quality gets measured, and size is only given back where it actually dropped. Where domain documents have piled up, an adapter is trained on top to match the vocabulary.

An agent is only useful if something survives the end of a conversation. What was decided last time, and who this person is, is kept as vectors and pulled back in on the next turn. Older memories and recent ones carry different weight.

Documents get cut before they go in, and where they are cut decides the quality of the answer. Each chunk keeps the document and page it came from, so an answer and its evidence always arrive as a pair.

Retrieval runs twice. Vectors pull a few dozen candidates fast, then a model that reads the question and the passage together keeps three or four. Only so much fits in the prompt — a correct answer sitting at rank twenty may as well not exist.

vLLM · Qwen3-32B AWQ 4-bit · BGE-M3 · BGE-reranker · LangGraph

Answers with the clause attached

Documents are embedded, and the answer comes back with the clause it rests on. The clause number, the passage itself and the page it sits on ride along with the response.

If nothing retrieved clears the threshold, no answer gets written.

On the insurance side, eligibility is filtered by five rules: age, health, occupation, sum insured and smoking. Similarity between coverages is computed from embeddings.

ChromaDB · OpenAI text-embedding-3-small · Anthropic Claude · FastAPI

Browser automation where there is no API

Platforms with no public API get driven through the screen: log in, click what has to be clicked, take the result back. Where an API exists we use it.

The same job run twice lands in the same place, and where it stopped is left visible. One of our own products runs this way with nobody watching — generation, processing and publishing fire on a schedule, and a failure sends a message.

Playwright · Docker Compose · PostgreSQL · launchd

Generation providers you can swap

Pipelines that turn text and images into video and audio run inside our own products. Several generation providers sit behind one protocol, and a failure hands off to the next.

The path down is decided in advance, and the bottom of it finishes without a GPU. For audio, the generation service is driven through a browser with nobody in the loop.

Replicate · ComfyUI · Stability · FFmpeg

What was clicked, and what was spent

Where people arrive from and what they click gets collected across app and web, as events and as session replay. Event names arriving in Korean and in English are normalised to one code first — mismatched names turn a join into a silent zero.

Joining ad spend to that behaviour on one key is the part that matters here. An ad dashboard knows only what was spent; an analytics tool knows only what people did. Only together do they say what each channel returned.

From there we pick ad keywords and draft copy for a chosen platform and tone. Keywords and channels that overlap between advertisers sit in a graph and feed the next recommendation.

ClickHouse · rrweb · Kotlin WebFlux · Redis

Data placement that starts at PostgreSQL

The source of truth stays in PostgreSQL. Neo4j goes in where traversal stops fitting a join, ClickHouse where analytics starts slowing the production screen.

The graph is re-projected out of the operational data rather than copied into. Writes happen in one place, PostgreSQL.

PostgreSQL · Neo4j · ClickHouse · Flyway

From app to deploy, one pair of hands

Next.js and React on the web, Kotlin and Python on the server, Electron on the desktop. Packaging it into containers and putting it up carries on in the same pair of hands.

Where one machine is enough, it goes on one machine. Where traffic grows or GPUs have to be shared, it goes on Kubernetes. The tool never arrives before the scale that needs it.

The seam between app and server, and between server and infrastructure, is watched by the same person. What leaks at those seams is what outlives launch the longest.

A handover travels as one repository, a run document and the migration history. Every alert carries what to look at first, and a backup counts as working once a restore has actually been run.

Next.js · Kotlin · Python · Docker Compose

The conditions AI runs under

An AI feature gets a cost ceiling and a call timeout before it gets wired in. New calls stop at the ceiling, and an alert fires at eighty percent of it first.

Agents ship switched off. Switching them on, or off, is a person.

Why this one

Ask before you sign and there is an answer. The places where one does not come out are the places that cost later.

What was built for whom is on the built page, line by line.

Work

Which of them gets drawn

We start by settling how far you want to hand over.

Email
info@divine-company.co.kr
Phone
070-8955-2815
Address
Seoul Seongbuk-gu 713 Bugaksan-ro, Unit 3-307