Anvilstack

Norwegian product engineering

We forge rough ideas into software that holds.

Anvilstack is a product studio, not a code shop. We take an idea from the first sketch to a system running in production — and when a build has already gone off the rails, we rescue that too.

  • Two-week test sprint
  • Senior engineers only
  • Nordic-led, delivered globally

What we do

Four capabilities, one team.

Most vendors sell code and leave the rest to you. We cover the whole movement from idea to market — including the business development and marketing capacity most product teams never get.

  1. 01

    Custom software development

    Mobile apps, web apps, websites and the cloud infrastructure underneath. Senior engineers delivering continuously from the first sprint.

    • Mobile apps
    • Web apps
    • Websites
    • Cloud & infra
    • AI integrations
  2. 02

    Code audit & rescue

    A codebase you no longer trust — inherited, outsourced or generated by AI — read line by line, then rebuilt into something you can ship on.

    • Architecture review
    • Refactor
    • Test coverage
    • Security
  3. 03

    Growth, marketing & sales

    Positioning, campaigns and lifecycle automation from the same team that builds the product, wired to the data the product already produces.

    • Positioning
    • Campaigns
    • Automation
    • Sales enablement
  4. 04

    Consultancy & technical leadership

    Architecture reviews, build-versus-buy calls and interim technical leadership — from the strategy conversation through to delivery.

    • Architecture
    • Build vs. buy
    • Interim CTO
    • Due diligence

Capability 02 — Code audit & rescue

The same screen, built twice.

This is what a rescue actually changes. On the left, a generated build exactly as it shipped: unaligned, unvalidated, unsafe. On the right, the same feature after we rebuilt it. Drag the handle across.

Vibe-codedProduction

Orders

sync ?

LCP

4.8 s

+140% vs last week

Bundle

3.1 MB

no budget set

Errors / day

214

untriaged

Revenue

Last 6 months

janfebmaraprmaijun
Recent orders5 of ? rows
  • #4812Nordisk Frakt ASundefined
  • #4813Fjordlys LabsNaN kr
  • #4814Bergen Utstyrpending…
  • #4815Trondheim Marineundefined
  • #4816Sørlandet Bygg ASNaN kr
  • 12 race conditions
  • Unsecured API keys
  • No error boundary
  • CLS 0.41

Orders

Synced live

LCP

0.9 s

−81% vs last week

Bundle

214 kB

under budget

Errors / day

0

7 days clean

Revenue

Last 6 months

janfebmaraprmaijun
Recent orders5 of 128
  • #4812Nordisk Frakt AS12 400 kr
  • #4813Fjordlys Labs8 950 kr
  • #4814Bergen Utstyr21 300 kr
  • #4815Trondheim Marine6 120 kr
  • #4816Sørlandet Bygg AS34 800 kr
  • Zero-trust auth
  • Sub-50ms SSR
  • Lighthouse 100
  • 0 type errors

Capability 01 — Custom software

From spec to the Oslo edge, in one scroll.

Every build has the same shape, whether the idea is brand new or the code already exists: write the contract first, build against it, then let the pipeline prove it before anyone calls it done.

Step A — Spec

Types before code

Step B — Build

Logic and AI, guarded

Step C — Ship

Tested, built, deployed

schema.tsroute.ts
import { z } from "zod";
export const OrderSchema = z.object({
id: z.string().uuid(),
customer: z.string().min(1),
totalNok: z.number().int().nonnegative(),
status: z.enum(["pending", "paid", "shipped"]),
});
export type Order = z.infer<typeof OrderSchema>;
export async function listOrders(): Promise<Order[]> {
const rows = await db.order.findMany({ take: 50 });
return rows.map((row) => OrderSchema.parse(row));
}
export async function POST(req: Request) {
const parsed = OrderSchema.safeParse(await req.json());
if (!parsed.success) {
return NextResponse.json({ error }, { status: 422 });
}
// risk score runs on-device, with a deterministic fallback
const risk = await scoreRisk(parsed.data);
const order = await db.order.create({
data: { ...parsed.data, risk },
});
revalidateTag("orders");
return NextResponse.json(order, { status: 201 });
}
localhost:3000/orders

Orders

Live orders · Oslo edge

Live

Today

42 700 kr

+12.4%

Orders

128

+6 today

p95

38 ms

−4 ms

Revenue

8 weeks

  • #4812Nordisk Frakt AS12 400 kr
  • #4813Fjordlys Labs8 950 kr
  • #4814Bergen Utstyr21 300 kr
  • #4815Trondheim Marine6 120 kr
  • #4816Sørlandet Bygg AS34 800 kr
Terminalbash — 80×24
  • bun run test
  • 148 tests passed in 2.31s
  • bun run build
  • compiling 218 modules...
  • route /orders dynamic 41 kB
  • production bundle built in 8.4s
  • fly deploy --region osl
  • pushing image to osl registry...
  • deployed to Oslo edge cluster

Capability 03 — Growth, sales & marketing

Shipping it is half the job.

The team that builds the product also runs the sequences that fill it. Positioning, outreach and lifecycle automation, wired to the data your app already produces.

Sequence builder

Running
  • 01

    New signup

    Trigger · webhook from the app

    Live
  • 02

    Enrich & score

    Company size, stack, intent

    Scored
  • 03

    Intro email

    Written from actual usage

    Sent
  • 04

    Wait two days

    Skipped if they reply

    Timed
  • 05

    Meeting booked

    Straight into the calendar

    Booked

Emails sent

0

Per quarter, fully automated

Replies

0

8.5% reply rate

Meetings booked

0

Without a sales rep

Pipeline sourced

0 kr

Attributed to automation

Signup → paid, last 9 months

+218%

Measured inside the product, not in the ad platform.

Capability 04 — Strategy & products

Start small. Prove it. Then scale.

Every engagement starts with the smallest thing that can be shipped and measured. No six-month discovery phase, and no invoice before something is running.

The offer

Two-week test sprint

A fixed-scope sprint that ends with something deployed. You keep the code either way, and you decide afterwards whether we continue.

  1. 01

    Scope

    One outcome, agreed in writing on day one.

  2. 02

    Architecture

    Data model, contracts, and the risky parts first.

  3. 03

    Build

    Daily deploys to a real environment you can open.

  4. 04

    Handover

    Demo, findings, and an honest estimate for the rest.

Ends with working software, not a slide deck.

Architecture discovery

A half-day session that turns a vague idea into a build order, with the failure modes named up front.

  • Data model and integration boundaries
  • Build vs. buy, with real numbers
  • A written spec you could take to any vendor

Idea phase

Nothing to show yet? We prototype the one screen that decides whether the idea holds.

  • Clickable prototype
  • Cost model
  • Risk register

What we build for ourselves

Our own products

SaaS platform

Fundel

Live

Fundraising and digital operations for Norwegian sports clubs: real-time raffle draws, a sponsor marketplace that routes a share back to the club, and payouts through Stripe and Vipps.

  • Elixir
  • Phoenix LiveView
  • PostgreSQL
  • Vipps

Consumer app

Finn min bil

Prototype

An independent AI advisor for buying a car in Norway: a five-year cost model and a seven-criteria ranking, weighted around the buyer's actual situation rather than a dealer's stock.

  • Next.js
  • Prisma
  • Claude
  • Expo

Contact

Tell us what you want to build.

An idea on a napkin, a codebase that needs rescuing, or a product that needs users. Send the repo, the staging link, or just a description — you get a reply from an engineer, not a form autoresponder.

Book a 30-minute call

Pick a slot that suits you. No deck and no discovery script — bring the problem.

  • Fixed price for the first sprint, agreed before we start.
  • You own the code and the infrastructure from day one.
  • One named contact, from the first call to delivery.
Office
Ørvikveien 17
3970 Langesund, Norway
Anvilstack AS · Registered in Norway
What do you need?

A few sentences is plenty. What do you want to exist, and what is in the way?

We reply within one business day.