Featured case
Volta Neobank — Product Analytics
Fixed a neobank's onboarding bottleneck with an A/B test: +5.72pp KYC conversion, €208.5K in 12 mo at 13.9× ROI. 23 projects: funnel → A/B → retention → segmentation → Market & Jobs → RAT v2 → causal.
Code, data, method and the knowledge graph — the whole path to the decision.
Featured case
Fixed a neobank's onboarding bottleneck with an A/B test: +5.72pp KYC conversion, €208.5K in 12 mo at 13.9× ROI. 23 projects: funnel → A/B → retention → segmentation → Market & Jobs → RAT v2 → causal.
No projects with this tool in this category.
Experiments
18 A/B modules, each calibrated: CUPED cuts variance 17.7% (SE 0.00360 → 0.00327), the delta method finds a +0.51 pp CTR lift at p < 0.0001, and SRM p = 0.8376.
Python · NumPy / SciPy · pytest · uv
Analytics
26 SQL cases: 25 on a synthetic ~183k-event dataset + 1 real-data case on UCI Online Retail II. Funnel, retention, LTV, attribution, anomalies, dbt layer on DuckDB, live report on GitHub Pages.
SQL · dbt · DuckDB · Python
Engineering
Nine SQL cases on 50 million events plus an optimisation that leaves the query text untouched: a projection reads a key range instead of a full scan, and seven DuckDB twins cross-check every case.
ClickHouse · DuckDB · SQL · Python
Analytics
A 550,710-row day × city × channel × category aggregate: DuckDB star schema, rolling-origin order forecast, delivery bottlenecks, 14 window SQL queries and an offline dashboard for three roles.
python · sql · duckdb · superset
Analytics
An injected −10% GMV drop on real UCI Online Retail II data: the metric tree attributes 56.2% of the named drop to UK decile-1 and the full attribution reconciles to £0.00.
Python · pandas · DuckDB · Plotly
A synthetic classifieds marketplace with a planted answer key: the sell-through proxy misses by 21.4%, an EM correction brings every category inside 3 pp, and paid visibility fails its holdout.
Python · pandas · DuckDB · SciPy
CUPED cut the standard error by 26% — same power on 5.5k users per arm instead of 10k — and a pre-registered break-even threshold of 0.05 ships the campaign to new users only.
Python · LightGBM · scikit-learn · pandas / NumPy
CRM experiment: segment-stage randomization holds SRM at p=0.266, GCG uplift reaches +0.9968 purchases per user, and the net effect is +50.5 per 1,000 sends once unsubscribes are priced in.
Python · pandas / NumPy · SciPy · statsmodels
Analytics
On a synthetic log, two policies on one information set: money buys +34.45% revenue per search for −16.84% CTR, while the user_id rollout returns −14.26% and a do-not-ship verdict.
Python · DuckDB · Streamlit · NumPy / SciPy
RAG pipeline with an offline harness: recall@5 and MRR = 1.00 on 20 questions, correctness 0.37, 0.00 on retrieval-miss control set. TF-IDF, no API keys; faithfulness ≡1.00 — an extractive invariant.
Python · scikit-learn · pandas / NumPy · TF-IDF
Analytics
Python inside Tableau: 4 cohort calculations on a TabPy server and 65 tests; a triangular retention matrix with per-cohort ARPU and LTV, an observation-age caveat and a CSV + Hyper export.
Python · pandas · matplotlib / seaborn · Jupyter Notebook
Analytics
Segmented a bank's clients into 6 RFM segments: the top 20% hold 38.2% of revenue (Gini 0.324). Synthetic dataset — 1,983 clients, 9,492 transactions.
Python · SQL · Tableau
A leakage-free churn model: recall@top-10% 0.544, 5.44x lift at 0.916 ROC-AUC on a chronological split; 1.75x on the at-risk subgroup, where 69.7% of the cohort is a near-guaranteed negative.
Python · LightGBM · scikit-learn · pandas / NumPy
Experiments
Fixed a neobank's onboarding bottleneck with an A/B test: +5.72pp KYC conversion, €208.5K in 12 mo at 13.9× ROI. 23 projects: funnel → A/B → retention → segmentation → Market & Jobs → RAT v2 → causal.
Python · pandas / NumPy · SciPy / Statsmodels · scikit-learn
Analytics
A leak-free scikit-learn pipeline: all preprocessing in one ColumnTransformer fit on the train split only, a deterministic split, and 21 tests (7 + 9 + 5) guarding reproducibility.
Python · scikit-learn · pandas · matplotlib
Analytics
≥80% pytest coverage on a module-based Python analytics toolkit: loading, cleaning, EDA and visualization assembled into one reusable pipeline — the base I copy into every new analysis.
Python · pandas / NumPy · Matplotlib · pytest
Engineering
A report platform on Airflow 3: the full DAG runs in 440 s and the forecast task alone takes 413 s; every report is a versioned DAG with DQ validation, alerts and run metrics.
Python · Apache Airflow 3 · PostgreSQL · Docker Compose
Onboarding test on a seeded event stream: completion 55.9% → 70.8% (+26.6%), χ² = 40.10, p < 0.0001 at SRM p = 0.90; 6.3% of completed signups reach a paid upgrade.
Python · PostHog · FastAPI · Streamlit
Full-stack analytics on Supabase: an A/B on a seeded event stream lifted conversion +11.1pp (p ≈ 1.7e-10, chi-square), with a Streamlit dashboard reading live data through RLS.
Python · Streamlit · Supabase (Postgres + RLS + Edge Functions) · SQL
A product analytics dashboard on a synthetic SaaS dataset (8,000 users): AARRR funnel, cohort retention, revenue (MRR, ARPU, churn) and segmentation — 5 Streamlit pages.
Python · Streamlit · pandas / NumPy
Analytics
A Streamlit dashboard for AI sales calls on 16,891 synthetic calls: a 4-step funnel (greeting → offer → meeting → qualification), leak breakdown by type, and transcript drill-down.
Python · Streamlit · pandas
Experiments
10 playable mini-games as self-contained SVGs: 7 analytics (A/B to p<0.05, funnel drop, cohort catch, retention day) and 3 arcade. One file per game, zero dependencies, no build.
SVG · JavaScript · Astro · Playwright
Engineering
A scrollytelling guide to spoken English for workplace conversations (A2–B1): an MDX narrative with D3 visualizations, content and visuals decoupled. Built on Astro 6.
Astro · TypeScript · MDX · D3
Engineering
Notes linked into a network, not a feed: a digital garden about emotional intelligence in IT on Quartz v4 — backlinks and a graph turn note accumulation into a navigable structure.
TypeScript · Quartz v4 · Markdown · Obsidian
Analytics
Analytics on my own LinkedIn posts: one parser, four renderers. Formats are compared with confidence intervals — and noise is called noise, not a ranking.
Python · openpyxl · uv · bootstrap
Promo returns +68.5 m RUB of revenue but −24.4 m RUB of profit: 97.9% of waves lose money at a 1.0–19.5% breakeven vs 25.4% actual, and the optimiser earns +231 496 ₽ vs +136 648 ₽ for top-15%.
Python · pandas · scikit-learn · PySpark
Experiments
A Telegram bot for the analyst without BI: a raw CSV export becomes p-value, lift and 95% CI in 30 seconds — 12 commands, history and HTML export.
Python · aiogram · pandas · SciPy / statsmodels
A 12 000 → 9 623 → 3 384 funnel and A/B on 2 552 users: onboarding lifts activation → paid by 19.59% (p=0.000946), verdict SHIP; at an equal step, conversion adds 10.00% to LTV, retention 8.65%.
Python · pandas / NumPy · DuckDB · SciPy
Engineering
A static catalog of 47 open repositories: GitHub metadata is synced by a script into frontmatter and the build reads only that — 15 fields per project, 26 tests and an idempotent render.
Astro · TypeScript · Bun · Python
Engineering
Rebuilt a conference programme page: a time × hall grid over 91 talks, track filters, a modal and .ics export — then checked the copy against the original with measurements, not eyeballing.
HTML · CSS · JavaScript · Python
Engineering
The site you are reading: Astro 7, TypeScript and Markdown content collections, static output, dark/light theme, RSS, sitemap, JSON-LD and GitHub Pages deployment.
Astro · TypeScript · Markdown · CSS custom properties
Interactive knowledge graph: 119 nodes and 501 links between portfolio pages. Each node is keyboard-focusable; press Enter or Space to open its page. A full list of nodes and their links follows the graphic.
Source: GitHub API · updated 2026-11-03
Some of these are automated: daily data generation, site builds and checks, snapshot syncs. Code, analysis and writing are manual.
Daily contributions over the last 30 days — commits, pull requests, issues and reviews in public repositories.
Total contributions per calendar month over the last 12 months.
Total contributions per week (weeks start on Monday) over the last 12 months.
How the year’s contributions break down by type: commits, pull requests, issues and code reviews.
Language share by code bytes across public non-fork repositories. Languages beyond the top 8 are grouped into Other.
Updated · October 11, 2026
Read more →