buildfrm

For data teams

Build, debug, and hand off data work without tool hopping.

Your tickets are in Jira. Your dashboards are in Metabase. Your code runs in Databricks. Your PRs are in GitHub. By Friday, half the decisions you made on Monday have been lost between systems.

buildfrm reads the context from all of them — the Jira ticket, the Metabase query, the kickoff recording, the GitHub history — and drafts the code in Databricks. When you ship it, buildfrm updates the Jira ticket with the proof.

No MCP servers to set up No OAuth tokens stored

Every Jira ticket, GitHub PR, and design decision stays attached to the pipeline itself. The next engineer picks up the work with the trail intact — no knowledge-transfer meeting required.

No new destination for engineers. Work from Databricks, Jupyter, Metabase, or your existing data workflow.

The stack panel

Connects to your stack — live.

Click a tool in the panel and buildfrm launches it as a browser tab — it reads the open ticket, the open notebook, the open dashboard. The same tab is how the update flows back when you ship.

Uses your existing browser sessions — no MCP servers to stand up, no OAuth tokens stored on buildfrm.

Today: Databricks · Jira · GitHub · Metabase · Snowflake · dbt Cloud · custom URLs. Coming: Confluence · Notion · Linear · Asana · Sheets · Excel · Jupyter · BigQuery.

buildfrm side panel inside a Databricks workspace showing the 'Your data stack' panel — Databricks connected, plus Snowflake, Jupyter, Metabase, GitHub, Jira, and dbt Cloud available to connect.
buildfrm lives next to Databricks — click a tool, tab opens, context flows back.

Today

Data work is not blocked by one tool. It is blocked by lost context.

Requirements are scattered

The ticket says one thing, the spreadsheet says another, and the final decision is buried in a thread.

Implementation history is hard to trace

The code changed, the dashboard changed, but nobody knows which PR, ticket, or business rule caused it.

Debugging starts from zero

When a pipeline or dashboard breaks, engineers must open five tools before they know what changed.

Handoffs lose the why

The next engineer inherits code, but not the decisions, tradeoffs, owners, and context behind it.

With buildfrm

From Jira ticket to PR in minutes.

A real workflow, not a generic chatbot.

Before

An engineer opens Jira, finds an Excel mapping, checks GitHub history, opens a Metabase query, reads old docs, switches into Databricks, writes code, opens a PR, updates Jira — and still leaves the context scattered.

With buildfrm

buildfrm surfaces the ticket, mapping file, schema, BI query, docs, and PR history → suggests a Databricks change → prepares the PR and Jira update for your review → preserves the decision trail once you ship. Nothing goes out without your approval.

Multiple input formats.

The shapes of input we see most. Drop the real thing and get running code — not a suggestion, not a snippet to paste somewhere else.

Input Video + doc

A 45-minute kickoff recording.

A Microsoft Teams kick-off meeting invite for the Supplier Analytics Dashboard project, with agenda, objectives, expected outcomes, and a dashboard preview.
supplier_analytics_kickoff.mp4 45:12
dashboard_spec.pdf 3 pages
Output orders_silver.py Databricks · DLT
import dlt
  from pyspark.sql.functions import col

  @dlt.table(
    name="orders_silver",
    partition_cols=["region"],
    comment="Deduped orders joined to customer dim, daily grain",
  )
  def orders_silver():
      orders = (
          dlt.read("orders_bronze")
             .dropDuplicates(["order_id"])
      )
      customers = spark.read.table("main.sales.dim_customer")
      return orders.join(customers, "customer_id", "left")
Input Spec + sample

A spec doc and 500 rows of sample data.

A Data Transformation Mapping Document for Databricks: project info, target tables, attribute mapping with source/target columns and transformations, business rules, and data quality checks.
mapping_document.xlsx attribute mapping
sample_lineitem.csv 500 rows
Output models/marts/customer_ltv.sql dbt · coming
{{ config(materialized='incremental', unique_key='customer_id') }}

  with orders as (
    select * from {{ ref('stg_orders') }}
    {% if is_incremental() %}
      where order_ts > (select max(last_order_ts) from {{ this }})
    {% endif %}
  ),
  customers as (
    select * from {{ ref('dim_customer') }}
  )
  select
    c.customer_id,
    sum(o.gross_amount)       as lifetime_value,
    count(distinct o.order_id) as order_count,
    max(o.order_ts)           as last_order_ts
  from customers c
  left join orders o using (customer_id)
  group by 1
Input Image + prompt

A dashboard screenshot and one sentence.

A Fintech Reconciliation and Revenue Overview dashboard with KPI tiles for gross transaction volume, settled amount, settlement coverage, revenue variance, and chargeback rate, plus charts for settlement delay, aging, and revenue by currency.
fintech_recon_dashboard.png 5 KPIs, 4 charts
"build the backing queries for these tiles"
Output supplier_metrics.py Snowflake · coming
from snowflake.snowpark.functions import col, sum_, avg, count_distinct

  def supplier_kpis(session, region: str | None = None):
      df = session.table("sales.fact_shipment")
      if region:
          df = df.filter(col("region") == region)
      return df.agg(
          sum_("line_total").alias("gross_revenue"),
          avg("discount").alias("avg_discount"),
          count_distinct("supplier_id").alias("suppliers"),
      )

  def on_time_trend(session):
      return (
          session.table("sales.fact_shipment")
                 .select("ship_date", "is_on_time")
                 .group_by("ship_date")
                 .agg(avg(col("is_on_time").cast("int")).alias("rate"))
      )
Input Architecture diagram

A medallion architecture diagram.

Data engineering pipeline architecture: Postgres source ingested via Databricks JDBC into Delta Lake on S3, processed through bronze, silver, and gold layers using Apache Spark, with Unity Catalog governance, lineage, and alerting.
postgres_to_delta_medallion.png 3 layers, 7 entities
Output sales_medallion/ Databricks · DLT
sales_medallion/
  ├── ingestion/
  │   ├── postgres_to_bronze.py     # JDBC + incremental
  │   └── jdbc_config.yml
  ├── bronze/
  │   ├── orders.py                 @dlt.table
  │   ├── customers.py              @dlt.table
  │   └── products.py               @dlt.table
  ├── silver/
  │   ├── orders_cleansed.py        @dlt.table  # dedupe, expectations
  │   └── customers_scd2.py         @dlt.table  # SCD type 2
  ├── gold/
  │   ├── revenue_daily.py          @dlt.table  # currency norm + agg
  │   └── orders_by_region.py       @dlt.table
  ├── jobs/
  │   └── medallion_pipeline.yml    # Databricks Workflow
  └── observability/
      ├── lineage.json              # Unity Catalog
      └── alerts.yml

Book a demo

See buildfrm on Databricks, GitHub, Metabase, and Jira.

A 30-minute walk-through of the full loop — Jira ticket → Databricks code → GitHub PR → Jira update with proof — on the tools we most often see. Different stack? Tell us in the form and we'll show you the closest match.

The bet

Why we're building this.

At our last data jobs, every pipeline lived across at least five tools. The kickoff in Teams, the spec in Confluence, the ticket in Jira, the sample data in S3, the code in Databricks. By Friday, half the decisions we made on Monday had been lost between systems — and the next engineer inheriting the pipeline spent two days digging for context before touching a line of code.

buildfrm is our attempt at the connective layer. It lives where your team already works and reaches into the tools your team already uses (Jira, GitHub, Metabase, Confluence) to grab the context that should already be in front of you. When you ship, it updates them back. The pipeline carries its own history; the next engineer inherits the work, not a knowledge-transfer meeting.

The buildfrm team

Questions.

The ones we hear most.

Is buildfrm a data catalog? +

No. Data catalogs help organize and discover metadata. buildfrm uses context from metadata, tickets, code, BI, docs, and spreadsheets to help teams actually build, debug, ship, and preserve the work trail.

Is buildfrm a coding agent? +

It includes code and SQL generation, but it is built around data workflows. The assistant understands tickets, dashboards, warehouse metadata, PR history, docs, mappings, and asset memory — not just the file in front of you.

What happens when a new engineer inherits a pipeline? +

They see the related tickets, PRs, owners, decisions, dashboards, docs, and prior debugging context attached to the pipeline itself — instead of starting from zero with a knowledge-transfer meeting. Hand off a pipeline by sending its name.

How does buildfrm connect to my tools without holding API keys? +

It uses your existing browser sessions. Click a tool in the stack panel — buildfrm launches it as a browser tab using the auth you already have. No OAuth tokens stored on buildfrm, no API keys to manage, no integration credentials to rotate.

Can buildfrm be self-hosted? +

Yes. The full stack — backend, Postgres, vector store, object store — deploys via Docker Compose inside your VPC. Bring your own LLM keys (Anthropic, OpenAI) or run local via Ollama. Available for teams; contact sales.

Give every pipeline its work history.