← All work

Director of Marketing & builder (Bagjump Action Sports GmbH) · 2024–present

Bagjump — in-house platform engineering

As Director of Marketing at Bagjump Action Sports, I built the company's internal software from scratch — a production marketing-analytics platform, a company-wide operations portal (AP automation, sales/ops/HR/finance surfaces, an "Ask BAGJUMP" AI assistant over RAG, a self-hosted LLM router, an audit system), a separate ops-automation platform of 8 engines, and a 36-endpoint integration layer — now converging into one monorepo.

TypeScriptNext.js 15PostgresDrizzleBullMQEntra IDMicrosoft GraphRAGself-hosted LLMClaudeDocker

What it is

I'm Director of Marketing at Bagjump Action Sports in Innsbruck — and the person who has built the company's internal software. Not one tool: a suite. A production marketing-analytics platform, a company-wide operations portal, a separate ops-automation platform, and the integration layer that wires them to Bagjump's Microsoft 365 and Zoho stack. Most of it built solo, by the marketing hire. It's an unusual footprint for the role — closer to an in-house software team than a marketing department.

Marketing Analytics Portal — deployed

Replaced a hand-built Excel workbook, tying ad spend through Zoho CRM leads and deals to revenue.

  • TypeScript monorepo (pnpm + Turborepo): a Next.js 15 web app and a BullMQ worker; Postgres/Drizzle (20 tables) as the source of truth; Redis for queues and caching.
  • Seven connectors, one package each — Google Ads, GA4, Meta, Microsoft Advertising / Bing, Zoho CRM, Zoho Campaigns, and Gravity Forms (webhook-driven, capturing gclid/fbclid/msclkid/utm_* into the CRM lead). Four attribution models (first, last, linear, position).
  • Auth: Microsoft Entra ID SSO via NextAuth against Bagjump's own Microsoft 365 tenant, with tenant-ID enforcement.
  • Freshness: a daily 01:00 UTC worker re-pulls the last 7 days per source so late attributions catch up, plus a parity check that fails the build if the rollups drift from the spreadsheet they replaced.
  • Docker Compose on a Hetzner box behind the shared nginx reverse proxy.

Bagjump HQ — a company-wide operations portal · built, in deployment

The big one. A single internal portal aimed at the problems a fast-growing company drowns in — rubber-stamped invoices, executive email overload, tribal knowledge, channel fragmentation — spanning the whole company, not just marketing:

  • Finance & AP — invoice intake and review with autonomous posting (100–200 invoices/month), bank-import reconciliation and transfer-matching, AR dunning, Pleo expense nudges.
  • Sales — lead scoring, a company news-radar, meeting prep, discount-approval workflows.
  • Marketing ops — WordPress publishing, translation, social publishing, bulk-meta, SEO audit + rank tracking, a change-log.
  • Operations / logistics — ready-to-invoice, factory-quote-chase, stage-stall detection, contractor scheduling, trade-agreement (Incoterm) scanning.
  • Plus HR, shared-mailbox management, onboarding, and customer / auditor views.

Underneath it:

  • An "Ask BAGJUMP" Microsoft Teams assistant on Microsoft's M365 Agents SDK, backed by a RAG layer over SharePoint and internal SOPs (1,200-char chunking, pgvector cosine search, ACL-aware retrieval so people only surface what they're allowed to see) — and it escalates questions it can't answer into an SOP-gap approval queue.
  • A multi-tier LLM router that defaults to self-hosted EU-hosted models (Llama-3.1 8B/70B), with frontier models gated behind an explicit budget.
  • An append-only audit log — Postgres row-level security, ~24 typed event kinds, GDPR-style purge-hashing.
  • A dedicated worker running dozens of background jobs: AP intake and cross-reference, bank-transfer matching, sentiment scans, SEO rank tracking, dunning, SharePoint ingest, connector-token health, voice-profile extraction, and more.

Bagjump Ops — automated operations engines · built

A separate internal platform: 8 automated "engines" over 13 connectors.

  • Engines: a 0–100 client health score (four weighted dimensions), follow-up detection, AI draft replies (Claude), meeting prep, expense categorization, handoff briefs, client updates, and a morning brief.
  • Connectors: Zoho CRM/Books, Microsoft Graph (Outlook, Calendar, Teams), Dataverse (orders / shipments / invoices / vendors / locations), Pleo, Aircall (calls + sentiment), Sortly (inventory), and the ad platforms.
  • An Outlook add-in (Office.js) that surfaces a client's health score, deal stage, invoices, and recent calls right in the reading pane, with "Track This Email" and "Draft Response" actions.

Zoho ↔ Power Apps middleware

A Node/Express service exposing 36 REST endpoints across Zoho CRM, Books, and Desk, plus a Salesforce migration bridge — API-key auth, rate-limiting, and a Swagger spec that imports directly as a Power Apps custom connector.

Now converging

These began as separate codebases; I'm consolidating them into one internal monorepo, all history preserved (233 commits and counting), as the canonical platform.

Marketing results (same role, parallel work)

  • 40% lift in organic search in the first 12 months.
  • Paid social + email campaigns generating thousands of qualified leads.
  • Campaigns contributing hundreds of thousands in revenue, and overtaking competitors across the relevant social channels.

← All work