Architecture & transparency

How LogPulse is built

Trust starts with knowing what's under the hood. Here's the stack that runs your logs, the choices we made, and where we're going. We'd rather over-share than oversell.

The stack at a glance

Boring, well-understood components. No magic.

Ingest

Fastify on Node 22

GCP · Amsterdam (NL)

OTLP HTTP plus a generic JSON endpoint. Bearer-auth with bcrypt-hashed API keys. Rate-limited per key.

Queue

BullMQ on Redis

GCP · Amsterdam (NL)

Batches 100–1000 records before each insert. Retries on transient ClickHouse failures.

Log storage

ClickHouse Cloud

GCP · Amsterdam (NL)

Columnar, partitioned by tenant_id and date. Order key (tenant_id, namespace, timestamp, log_id) makes tenant-scoped queries hit the right partitions first. Typical 8–12× compression on text logs.

Metadata

PostgreSQL via Drizzle ORM

GCP · Amsterdam (NL)

Users, organisations, API keys, dashboards, alerts, pipelines. No log content stored here.

Frontend

React 19 + Vite

Cloudflare Pages

TanStack Query for server state, Zustand for UI state, Tailwind + shadcn/ui. Strict TypeScript everywhere.

AI

Anthropic Claude

US-based subprocessor

Powers natural-language → LPQL translation and the AI Investigator. Listed in our subprocessors. Logs only flow to the LLM when you trigger an AI query.

How data moves

From your apps to ClickHouse and back to you.

  Your apps  ──OTLP HTTP──▶  Fastify ingest  ──▶  BullMQ (Redis)
                                  │                       │
                              auth + quota              batch
                                  │                       ▼
                                  │             ClickHouse (GCP · Amsterdam)
                                  │                       │
                                  ▼                       │
                              PostgreSQL                  │
                              (metadata)                  │
                                                          ▼
  Web UI  ◀── LPQL / AI ──  Fastify query  ──▶  ClickHouse (tenant-scoped)

Push-based ingest: agents and SDKs send logs over OTLP HTTP. The API authenticates and enqueues; a worker batches and writes to ClickHouse. Queries flow the other direction: the UI hits the API, the API runs LPQL on ClickHouse with tenant scoping enforced at the boundary.

Multi-tenancy & isolation

Separation enforced in the database, not just the app.

  • Free, Pro, and Business tenants share a ClickHouse table partitioned by tenant_id + date. Enterprise customers get a fully dedicated stack: isolated ingest, compute, and storage.
  • Every query carries WHERE tenant_id = '…', enforced at the API boundary, parameterised, never string-concatenated. Partition pruning means cross-tenant data isn't scanned.
  • API keys are bcrypt-hashed in PostgreSQL; raw keys are shown once at creation and never logged.
  • Namespace RBAC scopes log access per team, so Platform Engineering teams can give developers self-service without exposing other namespaces.

Retention & cost

Flat pricing means you don't pay extra when you log more than you predicted.

  • Plan-based retention: Free 7d, Starter 14d, Pro 30d. Team and Platform plans have configurable retention with automated lifecycle management.
  • Flat-fee pricing: daily ingest is included up to your quota. No per-GB charges, no surprise overage bills.
  • ClickHouse columnar compression typically achieves 8–12× on text logs, which is why we can offer flat pricing without bleeding margin.
  • When you hit your quota you get a 429 and an email at 80%. We'd rather you upgrade deliberately than charge for overage silently.

AI: a shortcut, not a black box

Every query the AI runs is shown. You can verify, edit, and save it.

  • Natural-language questions are translated to LPQL by an LLM (Anthropic Claude). The LLM is listed in our subprocessors and only sees data when you trigger an AI query.
  • The AI Investigator chains queries: search, correlate with deploys, compare to baseline. Each step is shown in the chat with the LPQL it ran and the log lines it returned.
  • Hypotheses are framed as 'likely root cause' with evidence, not declarations. You verify before acting.
  • EU-hosted LLM options are on the roadmap for customers with strict residency requirements. Until then, AI features are opt-in per query.
Honest, not breathless

Where we are vs where we're going

We'd rather be honest about what's built and what's still in progress.

GDPR

Compliant by default

DPA + SCCs available on paid plans. EU-only data path. Encryption at rest and in transit.

SOC 2 Type II

In progress · Q3 2026

Trust Services Criteria controls in place. Audit underway.

ISO 27001

Tracking

Aligned controls; not yet certified.

Public uptime page

Planned

Status page with historical uptime per service.

Public benchmarks

Planned

Reproducible ingest-throughput and query-latency posts.

Spotted a gap or want a deeper dive?

We'd rather over-share than oversell. Mail [email protected] with questions about the stack, isolation, or anything we haven't covered here.

We use cookies to analyze site traffic and improve your experience. No cookies are placed without your consent. Privacy Policy