Przemysław Zalewski

Shipping with PostHog since 2024

A PostHog developer for data you can trust and dashboards leadership reads

Ad blockers eat your events and nobody trusts the dashboard. I write the tracking plan before the feature, run PostHog on EU cloud behind a first-party proxy, and build the dashboards your weekly call starts from. This page tracks itself below.

Want a number first? See hours, price and start date →

Calls this week · work starts 3 November 2026 · Wrocław, Poland (CET), remote

Przemysław Zalewski
4,000+freelancers and teams on Sandtime.io
8platforms shipped for Sandtime.io as founding engineer
800+pull requests reviewed on one product, 2018 to 2026
~2/3of merged PRs in 2026 built with AI coding agents, nearly all through my review or merge

Sound familiar?

PostHog and analytics problems I fix in 2026

Are bots inflating our traffic and sign-ups?

The 2026 Imperva Bad Bot Report, released on 5 May 2026, found that bots now make up over 53% of all web traffic and that AI‑driven bot attacks grew 12.5 times. Every one of those visits can land in your funnel as a visitor or a sign‑up.

I filter known bots, crawlers and your own test traffic out of the insights leadership reads, so conversion rates count people. I set the filter once for the whole project, so every new insight starts clean. In January 2026 bots hit a client’s sign‑up form; I found the pattern in the logs and had a bot check live in production the same day.

Could our analytics vendor leak customer data?

In November 2025 an attacker took a dataset from Mixpanel. OpenAI disclosed that it included names, emails and coarse locations of its API users, and then stopped using Mixpanel.

I write the tracking plan so events carry IDs and only the properties a question needs, never names or emails. I mask inputs in session replay and run PostHog on EU cloud behind a first-party proxy. In May 2024 I explained to a marketing team why a hashed email is not anonymous and why, under GDPR, sending even a salted hash to an ad network can still count as sharing personal data.

Sound like you? Book a free 30‑min call →

Cookie banner rejections wiping out our analytics?

On 3 September 2025 the French regulator CNIL fined Google €325 million and Shein €150 million in cases over cookie rules, Shein’s for placing cookies without consent. Dropping the banner is not an option.

I set PostHog to store nothing until a visitor chooses, and to count people who reject with its cookieless mode, using a privacy-preserving hash and no cookies. Your lawyer still signs off on what the banner says. On an affiliate site in 2024 I made the browser’s Global Privacy Control signal count as an opt‑out and started analytics only after consent.

How much of our traffic comes from ChatGPT and Claude?

On 28 July 2026 PostHog moved ChatGPT, Claude, Gemini and Perplexity into a new AI channel and reclassified past sessions. Filters and alerts built on Organic Search or Referral now show different counts.

I rebuild the channel dashboards and alerts around the AI channel and tie each channel to sign‑ups and revenue. When I took over growth for a SaaS, organic acquisition grew from near zero on this loop of SEO, GEO and dashboards. In October 2026 I noticed ChatGPT visits were hiding in a product’s analytics, because its links carry a UTM tag and no referrer, so I built PostHog views that read both and show visits and sign‑ups per AI assistant.

Facing one of these? Book a free 30‑min call →

Why me

A tracking plan before the feature

Event, trigger, properties and the question the dashboard will answer, written before the code and kept in the repo. The PR that adds a feature adds its row, so the event ships with it, never as a follow‑up ticket.

Events that survive ad blockers

A first-party proxy on your domain, no cookies, EU hosting. PostHog’s docs say a proxy typically recovers 10 to 30 percent more events. This page runs on the same setup.

Dashboards leadership reads

Activation, retention, revenue and adoption per client, built so the weekly call starts from the numbers, not from asking. In the growth case study below, these dashboards went with SEO and GEO work, and organic acquisition grew from near zero.

Proof your AI features get used

Adoption per client measured from the first release, dashboards built through PostHog’s MCP with coding agents. On an MCP server I shipped, the dashboard exposed a bot rule blocking MCP clients, and it was gone the same day.

Live demo

This page, tracking itself

Every event this page sends to PostHog shows up in the feed as it happens, with its properties: the page view, this demo loading, your clicks. The tracking plan table shows when each event fires and which question it answers. Fire a test event and watch it land.

Demo loading…

Block the request in your dev tools and the feed shows it too. That is the point of a first-party proxy.

Proof

Work I can show

Problem, what I did, result. Client names only where I am allowed to use them.

Taking over growth: SEO, GEO and dashboards leadership reads

The problem
Organic acquisition was close to zero and nobody could say which feature moved which number.
What I did
A tracking plan per feature, PostHog KPI dashboards, SEO and GEO work on landing pages and help, with help, changelog and landing pages treated as one body of context for people and bots.
Result
Organic acquisition grew from near zero: in one 28‑day window organic clicks rose 116% and impressions 2.5×. Leadership gets its numbers from dashboards, not from asking. Numbers stay relative on purpose.

PostHog SEO + GEO

Back-office task management: team lead of four, no product manager

The problem
A back-office tool needed new features, a UI refresh and a faster pipeline, with no product manager in sight.
What I did
I led four engineers and kept coding. Trunk-based development with CI/CD, live updates over server-sent events, a stopped parallel initiative that analysis showed would not pay off, priorities set directly with department managers. A survey of the 100+ operators who used the tool rated the changes a clear improvement.
Result
“Measurable changes in some key metrics” and “a true bias for action”, in the public LinkedIn recommendation of my manager on that project, now a CTO.

team of 4 manager recommendation

An MCP server from first merge to first external users

The problem
Users of Sandtime.io, the time tracker I built at Sanddev, used by 4,000+ freelancers and teams, wanted to log time from their AI assistants. The API existed, the agent surface did not.
What I did
I set the tool surface, removed destructive tools, routed every operation through the existing REST controllers so an agent gets no wider access than a person, and instrumented adoption per client in PostHog from day one.
Result
First external users. A bot-protection rule that rejected MCP clients by user agent was found and removed the same day because the dashboard showed it.

MCP OAuth adoption dashboard

Facing something similar? Book a free call →

One foot in the door

Not ready for a project? Start with one week or one pull request.

Two ways to see how I work before you commit to a sprint. Fixed scope, the price range below, the final number in writing within 24 hours of the call.

One-week PostHog code audit

I read the repo, CI, tests, deploys and the parts the team avoids, by hand. You get a written report with risks ranked by cost, what to fix first, a plan with milestones and a go or no‑go you can defend. The report is yours whether or not we continue.

$1,080⁠–⁠$2,160 excl. VAT · 30⁠–⁠40 h · See price and start date →

Code review of one pull request or one module

Send me the diff that worries you. Within a few days you get line‑level comments, the three things I would change first and whether I would merge it. I have reviewed 800+ pull requests on one product since 2018.

$72⁠–⁠$216 excl. VAT · 2⁠–⁠4 h · See price and start date →

Book a call to pick one Free 30‑minute call first. If neither fits, I say so on the call.

How it works

Three steps from this page to a running project.

  1. 1

    A 30-minute call

    You describe the product and the problem. I ask the questions I would ask on day one.

  2. 2

    Scope in writing

    Within 24 hours after the call you get a short written plan: what we build first, what we measure, how we work together and what it costs. No slide deck.

  3. 3

    Working software in week one

    Deployed, measured and open for your review. After that, the numbers set the pace.

Fit check

Is this a fit?

A good fit when

  • You need a senior who owns delivery, not a pair of hands
  • The product has to ship and be measured, with or without a product manager
  • A solo engagement, or one team of up to four that I lead directly
  • TypeScript, React, Node.js, Cloudflare, Postgres, PostHog, and Python when the work needs it

Probably not when

  • A program that needs a ten‑person vendor team
  • A stack built around Java or a cloud I do not work in
  • Body leasing by the hour with no say in how the work is done

Working style

How I work

Measured, not assumed

PostHog in every project from day one. A tracking plan per feature, and dashboards leadership reads instead of asking me for numbers.

Zero bug policy

A bug is fixed or consciously closed, never parked. Alerts and error tracking in every project, so I learn about problems before the client does.

No product manager? Fine.

Where there is no PM I set priorities directly with the people using the software and answer support myself.

Good to know

PostHog facts that change the bill and the data

Anonymous events cost up to 4 times less

With person_profiles set to identified_only, visitors stay anonymous until identify(), alias(), group() or setPersonProperties(). Identified events can cost up to 4 times more (PostHog docs).

Flags without a person profile

setPersonPropertiesForFlags() targets feature flags on anonymous users without creating a profile (PostHog docs).

Generic IDs merge everyone into one person

PostHog refuses to re-identify a user already identified under another ID, and blocks generic IDs such as “null” or “guest”. Calling reset() on logout prevents the next login merging into the previous person (identify docs).

A proxy brings back 10 to 30 percent of events

A reverse proxy typically recovers 10 to 30 percent more events, but only on a subdomain without words like analytics, tracking or posthog, and with ui_host set (proxy docs).

Data over a billing limit is gone

When a billing limit is reached, the extra data is dropped for good, not paused (billing limits).

SPA page views need the defaults date

Route changes in single-page apps are captured automatically only with defaults set to 2025‑05‑24 or later (JS config). Third-party iframes stay blank in replays (replay troubleshooting).

FAQ

Questions people ask before they book

Is there a quick way to see what my PostHog is missing?
Yes, free: Dashboard Desk reads your events, creates a growth dashboard in your project with the funnel, activation and retention, and lists what your tracking plan is missing. Your key stays in your browser.
Can you measure whether AI assistants recommend us?
Yes. The free AI Visibility Desk asks your buyers’ questions every week and shows whether you are named and which pages are cited; the growth work that follows is measured in PostHog.
EU hosting and GDPR?
PostHog Cloud EU, no cookies by default, no personal data in properties unless the product needs it and the policy says so. Consent banners only where consent is the lawful basis.
What about ad blockers?
A first-party proxy on your domain, with a path that filter lists do not match. Expect a visible jump in captured sessions the day it ships.
What does it cost?
I bill by the hour: base rate 45 USD, 36 to 54 USD by difficulty, excl. VAT, with no minimum, so you can stop at any time. Details on pricing. Not sure yet? Start with the one‑week code audit: a fixed price range, with the final number in writing within 24 hours of the call. The configurator link at the top shows hours, a price range and the start date.
We built dashboards before and nobody opened them. Why would yours be different?
I start from the decision, not from the data. The tracking plan names the question each event answers, a dashboard holds only the insights your weekly call needs, and an insight that answers nothing does not ship. That is how I work in every project: dashboards leadership reads instead of asking me for numbers.
Who owns the setup, and who sees our data?
You do. The tracking plan and the proxy live in your repository and the dashboards in your PostHog organization, on your accounts, so nothing leaves with me. Only I do the work, with no subcontractors, and customer data never reaches an AI model without your written approval. Liability cover depends on the engagement: for high‑risk projects, extra cover for that contract can be arranged before work starts, with its cost reflected in the rate. Details in the trust center.
Can you migrate from Google Analytics or Mixpanel?
Yes. Map the old events, run both for a few weeks, retire the old one when the numbers agree. Session replay and feature flags come for free with the move. If agents will read the data too, see the AI and agents page.
Feature flags and experiments too?
Flags for rollouts and kill switches, experiments when there is enough traffic to decide. I will tell you when there is not.
How soon can you start?
Work starts 3 November 2026. Book the call and bring your three hardest product questions.
Why are all my users merged into one person in PostHog?
Usually identify() was called with a generic value or a constant, or reset() was skipped on logout (identify docs). The fix is in the code that calls identify, not in PostHog settings.
How do I cut my PostHog bill?
Keep visitors anonymous until they sign in, since identified events can cost up to 4 times more, and use setPersonPropertiesForFlags for targeting (PostHog docs). Set billing limits knowing that overflow data is dropped (billing limits).
Are bots inflating our traffic and sign‑ups?
The 2026 Imperva Bad Bot Report, released on 5 May 2026, found that bots now make up over 53% of all web traffic and that AI‑driven bot attacks grew 12.5 times. Every one of those visits can land in your funnel as a visitor or a sign‑up. I filter known bots, crawlers and your own test traffic out of the insights leadership reads, so conversion rates count people. I set the filter once for the whole project, so every new insight starts clean. In January 2026 bots hit a client’s sign‑up form; I found the pattern in the logs and had a bot check live in production the same day.

Bonus · #suchar

A dad joke, on the house

Free, like the first call. Same sense of humor, included in every project.

Where do all the PostHogs live?Punchline

In HogWarts. Ba‑dum‑tss.

What did the hedgehog say to the cactus?Punchline

“Dad, is that you?” Ba‑dum‑tss.

Why did the event never reach PostHog?Punchline

It got ad‑blocked at the door. Should have taken the proxy. Ba‑dum‑tss.

In 30 minutes you will know if we are a fit

You bring the problem, I bring the questions. Want a number first? The configurator shows hours, a price range and the start date.

or write to ciunkos@gmail.com

After you book you get a calendar invite. Nothing else to fill in.

My pledge

  • Reply within 24 hours. I reply within 24 hours on working days, personally, not a bot. Weekend messages: by Monday noon.
  • Late means free. If I am late, the first hour of work is free. You do not have to ask.
  • Scope in writing within 24 hours. A free 30‑minute call with no company deck, then the scope and the price in writing within 24 hours. You decide.
  • The person who does the work. You talk to the person who does the work. No sales layer, no handoff.
  • Follow‑up only with news. I follow up only when I have something new for you. Never a “did you see my offer”.
  • Honest “not a fit”. If I am not the right person, I say so on the call and point you to someone who is.

Calls this week · work starts 3 November 2026 · B2B contract · Wrocław, Poland (CET), remote

You own the code, domain and accounts from day one. Nothing is held hostage.