PageSourceSearch

https://bcnn.io/contact/?topic=header

html bcnn.io collected 2026-10-09 22:40:52 UTC 15,817 bytes, 119 lines download raw bytes

1<!DOCTYPE html><html lang="en" data-rh-managed="lang"><head>
2  <meta charset="UTF-8">
3  <!-- No maximum-scale / user-scalable here. Blocking pinch-zoom is a WCAG
4       1.4.4 failure, and this site's audience reads 10px labels on phones. -->
5  <meta name="viewport" content="width=device-width, initial-scale=1.0">
6  <meta name="theme-color" content="#0F172A">
7
8  <!--
9    No title/description/og tags here on purpose. components/Seo.tsx owns all of
10    them, and react-helmet-async can only replace tags it rendered itself - a
11    static copy in this template is not removed, it is duplicated. Every URL the
12    site serves is prerendered (see prerenderRoutes in
13    components/pages/data/routes.ts) and unmatched URLs are rewritten to the
14    prerendered `/`, so the no-JS fallback comes from the build, not from here.
15  -->
16
17  <link rel="icon" type="image/svg+xml" href="/favicon.svg">
18  <link rel="apple-touch-icon" href="/favicon.svg">
19  <!-- Tailwind is built, not loaded at runtime: see tailwind.config.js and index.css. -->
20  <link rel="preconnect" href="https://fonts.googleapis.com">
21  <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin="">
22  <!-- Inter serves the pages still on the old design system. Archivo is the
23       2026 landing page and contact page; the wdth axis is not optional, the
24       display headings set font-stretch up to 115%. -->
25  <link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800&amp;family=Archivo:wdth,[email protected],400..900&amp;display=swap" rel="stylesheet">
26  <link href="https://cdn.jsdelivr.net/npm/[email protected]/dist/style.min.css" rel="stylesheet">
27
28
29  <!--
30    Open in Polish for Polish speakers.
31
32    Runs here, ahead of the module script, so a Polish visitor never sees a
33    frame of English. Firebase Hosting serves static files and cannot read
34    Accept-Language without its i18n feature, which negotiates content at the
35    *same* URL - that would collapse /pl/ back onto / and break hreflang. So
36    the detection is client-side, and every guard below is load-bearing:
37
38    - __PRERENDER_INJECTED: the build runs a headless Chrome over every route.
39      Without this it would bounce off / and bake Polish into dist/index.html.
40      RedactReveal.tsx opts out of the prerender on the same flag.
41    - the stored preference: once someone uses the EN/PL switcher their choice
42      wins for good. See localePreference.ts, which owns this key and writes
43      it; the literal is repeated here because a template 
43<script> has no
44      import.
45    - the TWIN lookup: only the two English pages redirect. /services/ and the
46      case studies are English-only and untouched, and /pl/* never bounces back.
47    - replace(), not assign(): Back leaves the site instead of ping-ponging.
48
49    Crawlers advertise en and stay on the English tree; the hreflang set and
50    x-default=en are how they find /pl/. Both URLs serve their own prerendered
51    HTML to everyone, so there is no cloaking here.
52  -->
53  
53<script>
54    (function () {
55      var TWIN = { '/': '/pl/', '/contact/': '/pl/contact/' };
56      try {
57        if (window.__PRERENDER_INJECTED) return;
58        if (localStorage.getItem('bcnn_lang')) return;
59        var twin = TWIN[location.pathname];
60        if (!twin) return;
61        // navigator.languages is in preference order, so read it in order and
62        // stop at the first language the site actually serves. Polish first
63        // means Polish; English first means English, even for someone who also
64        // lists pl further down - they have already stated a preference.
65        var langs = navigator.languages || [navigator.language || ''];
66        for (var i = 0; i < langs.length; i++) {
67          if (/^pl\b/i.test(langs[i])) {
68            location.replace(twin + location.search + location.hash);
69            return;
70          }
71          if (/^en\b/i.test(langs[i])) return;
72        }
73      } catch (e) {
74        /* no storage, no detection - the English page stands */
75      }
76    })();
77  </script>
77
78
79  <!-- Apollo website tracker -->
80  
80<script>function initApollo(){var n=Math.random().toString(36).substring(7),o=document.createElement("script");
81o.src="https://assets.apollo.io/micro/website-tracker/tracker.iife.js?nocache="+n,o.async=!0,o.defer=!0,
82o.onload=function(){window.trackingFunctions.onLoad({appId:"6a2a8215a829bc0018d0861c"})},
83document.head.appendChild(o)}initApollo();</script>
83<script src="https://assets.apollo.io/micro/website-tracker/tracker.iife.js?nocache=dgc8lc" async="" defer=""></script>
83
84
85  <!-- Google tag (gtag.js) - GA4 property G-F31EJ1RWBQ, see TRACKING.md -->
vendor: 69 bytes, lines 85-86
85
86  <script async="" src="https://www.googletagmanager.com/gtag/js?id=
86G-F31EJ1RWBQ
vendor: 14 bytes, lines 86-87
86"></script>
87  
87<script>
88    window.dataLayer = window.dataLayer || [];
89    function gtag(){dataLayer.push(arguments);}
90    gtag('js', new Date());
91
92    // send_page_view is off because this is an SPA: the automatic view fires on
93    // document load only, so route changes would go uncounted. analytics.ts
94    // sends every view instead, including the first.
95    gtag('config', 'G-F31EJ1RWBQ', { send_page_view: false });
96  </script>
96
97  
97<script type="importmap">
98{
99  "imports": {
100    "react-dom": "https://aistudiocdn.com/react-dom@^19.2.0",
101    "react-dom/": "https://aistudiocdn.com/react-dom@^19.2.0/",
102    "react": "https://aistudiocdn.com/react@^19.2.0",
103    "react/": "https://aistudiocdn.com/react@^19.2.0/",
104    "lucide-react": "https://aistudiocdn.com/lucide-react@^0.554.0",
105    "reactflow": "https://esm.sh/[email protected]?external=react,react-dom"
106  }
107}
108</script>
108
109  
109<script type="module" crossorigin="" src="/assets/index-CwDQhT7t.js"></script>
109
110  <link rel="stylesheet" crossorigin="" href="/assets/index-BYHPM06n.css">
111<title data-prerendered-seo>Start the investigation | BCNN</title><meta data-prerendered-seo name="description" content="Tell us what you are looking into. Investigations start at €10,000 and work on a real subset of your data. We reply within one working day."><meta data-prerendered-seo property="og:title" content="Start the investigation | BCNN"><meta data-prerendered-seo property="og:description" content="Tell us what you are looking into. Investigations start at €10,000 and work on a real subset of your data. We reply within one working day."><meta data-prerendered-seo property="og:url" content="https://bcnn.io/contact/"><meta data-prerendered-seo property="og:type" content="website"><meta data-prerendered-seo property="og:locale" content="en_US"><meta data-prerendered-seo property="og:site_name" content="BCNN"><link data-prerendered-seo rel="canonical" href="https://bcnn.io/contact/"><link data-prerendered-seo rel="alternate" hreflang="en" href="https://bcnn.io/contact/"><link data-prerendered-seo rel="alternate" hreflang="pl" href="https://bcnn.io/pl/contact/"><link data-prerendered-seo rel="alternate" hreflang="x-default" href="https://bcnn.io/contact/"></head>
112
113<body style="background-color: rgb(239, 231, 218);">
114  <div id="root"><div class="min-h-screen w-full bg-bcnn-cream font-display text-bcnn-ink antialiased"><a href="#main" class="sr-only focus:not-sr-only focus:fixed focus:left-0 focus:top-0 focus:z-[100] focus:border-[3px] focus:border-bcnn-red focus:bg-bcnn-ink focus:px-[22px] focus:py-4 focus:text-[13px] focus:font-extrabold focus:uppercase focus:tracking-[0.08em] focus:text-bcnn-cream">Skip to content</a><header class="sticky top-0 z-40 border-b-[3px] border-bcnn-ink bg-bcnn-cream"><div class="mx-auto w-full max-w-[1180px] px-[clamp(18px,4vw,32px)] "><div class="flex items-center gap-[clamp(14px,2.4vw,36px)] py-3.5"><a aria-label="BCNN - home" class="flex flex-shrink-0 items-center gap-2.5 text-bcnn-ink hover:text-bcnn-red" href="/" data-discover="true"><svg viewBox="0 0 100 100" aria-hidden="true" class="h-[30px] w-[30px]"><path d="M20 67.5 L50 82.5 L80 67.5 L50 52.5 Z" fill="#141110"></path><path d="M20 47.5 L50 62.5 L80 47.5 L50 32.5 Z" fill="#C81E1E"></path><path d="M20 27.5 L50 42.5 L80 27.5 L50 12.5 Z" fill="#141110"></path></svg><span class="font-display text-[19px] font-black uppercase tracking-[0.04em] [font-stretch:112%]">BCNN</span></a><div class="ml-auto flex flex-shrink-0 items-center gap-[clamp(10px,1.2vw,16px)]"><div role="group" aria-label="Language" class="flex flex-shrink-0 border-2 border-bcnn-ink"><a lang="en" hreflang="en" aria-current="true" class="inline-flex min-h-[34px] min-w-[34px] items-center justify-center px-1 text-[11px] font-extrabold tracking-[0.06em] transition-colors bg-bcnn-ink text-bcnn-cream" href="/contact/" data-discover="true">EN</a><a lang="pl" hreflang="pl" class="inline-flex min-h-[34px] min-w-[34px] items-center justify-center px-1 text-[11px] font-extrabold tracking-[0.06em] transition-colors bg-transparent text-bcnn-ink hover:bg-bcnn-red hover:text-bcnn-cream" href="/pl/contact/" data-discover="true">PL</a></div><a class="inline-flex min-h-[44px] items-center justify-center border-[3px] px-[22px] py-[14px] text-xs font-extrabold uppercase tracking-[0.08em] transition-colors border-bcnn-ink bg-bcnn-ink text-bcnn-cream hover:border-bcnn-red hover:bg-bcnn-red hover:text-bcnn-cream whitespace-nowrap px-[clamp(13px,1.6vw,22px)] py-3 text-[clamp(11px,1vw,12px)] tracking-[0.07em]" href="/contact/?topic=header" data-discover="true"><span class="hidden sm:inline">Start the investigation</span><span class="sm:hidden">Contact</span></a></div></div></div></header><main id="main"><div class="mx-auto w-full max-w-[1180px] px-[clamp(18px,4vw,32px)] pb-12 pt-14"><h1 class="max-w-[820px] font-display text-[clamp(32px,5.2vw,58px)] font-black uppercase leading-[1.02] tracking-[-0.015em] [font-stretch:106%]">Start the <span class="text-bcnn-red">investigation.</span></h1><div class="mt-11 flex flex-wrap gap-[clamp(28px,4vw,44px)]"><form class="flex min-w-0 max-w-[620px] flex-[1_1_420px] flex-col gap-[22px]"><input type="hidden" value="direct" name="source"><input tabindex="-1" autocomplete="off" aria-hidden="true" class="absolute -left-[9999px] h-px w-px opacity-0" type="text" name="website"><label class="flex flex-col gap-2"><span class="text-[11px] font-extrabold uppercase tracking-[0.09em]">Name</span><input required="" placeholder="Your full name" class="w-full min-h-[44px] border-[3px] border-bcnn-ink bg-white px-3.5 py-3 text-[15px] text-bcnn-ink placeholder:text-bcnn-faint outline-none focus:border-bcnn-red" type="text" name="name"></label><label class="flex flex-col gap-2"><span class="text-[11px] font-extrabold uppercase tracking-[0.09em]">Work email</span><input required="" placeholder="[email protected]" class="w-full min-h-[44px] border-[3px] border-bcnn-ink bg-white px-3.5 py-3 text-[15px] text-bcnn-ink placeholder:text-bcnn-faint outline-none focus:border-bcnn-red" type="email" name="email"></label><label class="flex flex-col gap-2"><span class="text-[11px] font-extrabold uppercase tracking-[0.09em]">What are you investigating?</span><textarea name="investigating" required="" rows="6" class="w-full min-h-[44px] border-[3px] border-bcnn-ink bg-white px-3.5 py-3 text-[15px] text-bcnn-ink placeholder:text-bcnn-faint outline-none focus:border-bcnn-red resize-y leading-[1.5]" placeholder="We think procurement fraud is running across our supplier base, but we can only see it one contract at a time.
115
116Contracts as scanned PDFs, an ERP export, three years of email. Roughly 40,000 documents."></textarea></label><button type="submit" class="inline-flex min-h-[44px] items-center justify-center border-[3px] px-[22px] py-[14px] text-xs font-extrabold uppercase tracking-[0.08em] transition-colors border-bcnn-red bg-bcnn-red text-bcnn-cream hover:border-bcnn-red-deep hover:bg-bcnn-red-deep hover:text-bcnn-cream self-start px-[26px] py-[15px] disabled:cursor-not-allowed disabled:opacity-60">Send</button></form><aside class="flex min-w-0 flex-[1_1_250px] flex-col gap-[26px]"><div class="flex flex-wrap gap-[18px]"><div class="h-[84px] w-[84px] flex-none overflow-hidden border border-bcnn-line bg-bcnn-hatch"><img alt="Michał Domański" class="h-full w-full object-cover" src="/michal.jpg" style="object-position: center 20%;"></div><div class="flex-[1_1_130px]"><h2 class="text-[17px] font-extrabold">Michał Domański</h2><div class="mt-1 text-[11px] font-extrabold uppercase tracking-[0.05em] text-bcnn-red">Founder</div><a href="mailto:[email protected]" class="mt-2 inline-flex min-h-[34px] items-center border-b-2 border-bcnn-ink text-[13px] font-bold hover:border-bcnn-red">[email protected]</a></div></div><div class="border-t border-bcnn-line pt-[22px]"><div class="text-[11px] font-extrabold uppercase tracking-[0.09em] text-bcnn-muted">Prefer to talk first?</div><a class="inline-flex min-h-[44px] items-center justify-center border-[3px] px-[22px] py-[14px] text-xs font-extrabold uppercase tracking-[0.08em] transition-colors border-bcnn-ink bg-bcnn-ink text-bcnn-cream hover:border-bcnn-red hover:bg-bcnn-red hover:text-bcnn-cream mt-3" href="https://calendar.app.google/1djPwzEwWeDLdLmRA" target="_blank" rel="noopener noreferrer">Book 30 minutes</a></div></aside></div></div><div aria-hidden="true" class="h-[3px] bg-bcnn-ink"></div><div class="mx-auto w-full max-w-[1180px] px-[clamp(18px,4vw,32px)] py-14"><h2 class="font-display text-[clamp(28px,4vw,44px)] font-black uppercase leading-[1.02] tracking-[-0.012em] [font-stretch:115%] max-w-[760px] !text-[clamp(26px,3.4vw,34px)] !leading-[1.05]">Four steps to a <span class="text-bcnn-red">scoped investigation.</span></h2><ol class="mt-10 flex list-none flex-wrap gap-px overflow-hidden"><li class="min-w-0 flex-[1_1_190px] bg-bcnn-cream px-5 pb-[26px] pt-[22px] shadow-[0_0_0_1px_#CFC4B2]"><div class="text-[11px] font-extrabold uppercase tracking-[0.07em] text-bcnn-red">Today</div><h3 class="mt-3 text-[15px] font-extrabold uppercase leading-[1.25]">You send this form</h3></li><li class="min-w-0 flex-[1_1_190px] bg-bcnn-cream px-5 pb-[26px] pt-[22px] shadow-[0_0_0_1px_#CFC4B2]"><div class="text-[11px] font-extrabold uppercase tracking-[0.07em] text-bcnn-faint">Within 1 working day</div><h3 class="mt-3 text-[15px] font-extrabold uppercase leading-[1.25]">We reply</h3></li><li class="min-w-0 flex-[1_1_190px] bg-bcnn-cream px-5 pb-[26px] pt-[22px] shadow-[0_0_0_1px_#CFC4B2]"><div class="text-[11px] font-extrabold uppercase tracking-[0.07em] text-bcnn-faint">This week</div><h3 class="mt-3 text-[15px] font-extrabold uppercase leading-[1.25]">A 30-minute call</h3></li><li class="min-w-0 flex-[1_1_190px] bg-bcnn-cream px-5 pb-[26px] pt-[22px] shadow-[0_0_0_1px_#CFC4B2]"><div class="text-[11px] font-extrabold uppercase tracking-[0.07em] text-bcnn-faint">Before any work starts</div><h3 class="mt-3 text-[15px] font-extrabold uppercase leading-[1.25]">Investigation hypothesis and patterns identified</h3></li></ol></div></main><footer class="bg-bcnn-ink pb-[34px] pt-[clamp(48px,6vw,72px)] text-bcnn-cream"><div class="mx-auto w-full max-w-[1180px] px-[clamp(18px,4vw,32px)] "><h2 class="max-w-[820px] font-display text-[clamp(28px,4vw,44px)] font-black uppercase leading-[1.02] tracking-[-0.012em] [font-stretch:115%]">From fragmented data<br>to <span class="text-bcnn-red">decision-ready intelligence.</span></h2><div class="mt-9 flex flex-wrap gap-4"><a class="inline-flex min-h-[44px] items-center justify-center border-[3px] px-[22px] py-[14px] text-xs font-extrabold uppercase tracking-[0.08em] transition-colors border-bcnn-red bg-bcnn-red text-bcnn-cream hover:border-bcnn-red-deep hover:bg-bcnn-red-deep hover:text-bcnn-cream " href="/contact/?topic=footer" data-discover="true">Start the investigation</a></div><div class="mt-[clamp(40px,5vw,64px)] border-t-2 border-bcnn-ink-rule pt-6 text-[11px] font-bold uppercase tracking-[0.06em] text-bcnn-on-ink-faint">© 2026 BCNN. All rights reserved.</div></div></footer></div></div>
117
118
119</body></html>

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.