Case study · · by Michael Wybraniec

one-front, as told by git

Two years of commits, silence, and traffic — what the public repo and analytics actually show about building a personal site.

I do not remember one-front as a roadmap. I remember it as time — loud weeks, long quiet stretches, then another spike when something needed a place on the internet.

This post is that trail made readable: ~227 commits on one domain, then what ~2.8K visitors actually did. Not a feature tour — a record of when the site was alive, and when it was not.

By quarter, the pattern is obvious. Two quiet seasons, then a rebuild, a writing stretch, a CV sprint, and quieter shipping again. Empty quarters are not missing data — they are months with zero commits.

---
config:
  xyChart:
    width: 900
    height: 300
  themeVariables:
    xyChart:
      plotColorPalette: "#4A7CD8"
---
xychart-beta
  title "Commits by quarter — silence is a real bar (height 0)"
  x-axis ["Q3'24", "Q4'24", "Q1'25", "Q2'25", "Q3'25", "Q4'25", "Q1'26", "Q2'26", "Q3'26"]
  y-axis "Commits" 0 --> 130
  bar [8, 0, 0, 123, 9, 7, 72, 3, 5]

Q2 2025 (rebuild + content) and Q1 2026 (CV as product) dominate. Everything else is maintenance or pause. Concentration makes that sharper:

---
config:
  xyChart:
    width: 900
    height: 260
  themeVariables:
    xyChart:
      plotColorPalette: "#1D4ED8"
---
xychart-beta
  title "Commit concentration — 3 peak months = 70% of all commits"
  x-axis ["Apr'25 + Jun'25 + Jan'26", "Other 11 active months"]
  y-axis "Commits" 0 --> 180
  bar [160, 67]

April 2025 (58), June 2025 (42), and January 2026 (60) are most of the repo. A personal site without a habit surface goes dark; the chart is just the receipt.

If you keep only the commits that changed what the site is, the path is short:

---
header: Product milestones — Aug 2024 → Sep 2026
config:
  theme: 'default'
  themeVariables:
    'git0': '#4A7CD8'
    'git1': '#633486'
    'git2': '#566F97'
---
gitGraph LR:
    commit id: "init site" tag: "2024-08" type: HIGHLIGHT
    commit id: "contact + light mode" tag: "2024-09"
    commit id: "pause" tag: "quiet"
    commit id: "Nuxt rebuild" tag: "2025-04" type: HIGHLIGHT
    commit id: "deploy pipeline" type: REVERSE
    commit id: "blog + i18n"
    commit id: "RnD index" tag: "2025-05"
    commit id: "MCP writing" tag: "2025-06" type: HIGHLIGHT
    commit id: "CV product" tag: "2026-01" type: HIGHLIGHT
    commit id: "CI + Sentry" tag: "2026-02"
    commit id: "Audit4 / Vibe / Overvibing" tag: "2026-04" type: HIGHLIGHT
    commit id: "positioning refresh" tag: "2026-09" type: HIGHLIGHT

2024 — Domain, contact, light mode. Then silence. LinkedIn still carried more attention than the site.

Spring 2025 — Rebuild on Nuxt. Deploy and config work that looks noisy in git and was necessary in production. Blog in Markdown, translations when a post earned them, RnD when polished “Projects” felt dishonest.

Summer 2025 — Writing season: MCP, testing, architecture. Some posts also ship as audio: blog → ElevenLabs → Spotify → embed.

January 2026 — CV treated as a product: hydration, print, locales, process discipline so the week stayed shippable.

Later — Experiments live under RnD (Audit4, Vibe Drawing, Overvibing). Positioning catches up: system design and GenAI, not a freelance brochure.

Time moved in spikes and silence, not in a smooth feature roadmap.

A “% built with AI” chart would be fiction. Git does not know that.

What it can show: commits that carry a Cursor trailer (Co-authored-by: Cursor). On this repo that is 19 / 227 (~8%), starting only in February 2026.

---
config:
  xyChart:
    width: 900
    height: 280
  themeVariables:
    xyChart:
      plotColorPalette: "#633486"
---
xychart-beta
  title "Cursor-tagged commits only — 19 of 227 total (~8%)"
  x-axis ["Feb'26 (12)", "Apr'26 (1)", "May'26 (2)", "Sep'26 (5)"]
  y-axis "Tagged commits" 0 --> 14
  bar [12, 1, 2, 5]

This proves when Cursor signed a commit. It does not prove AI help without a trailer, how much of a commit was generated, or work outside git (including the voice pipeline). Treat it as a limited, honest signal — not a productivity score.

Method (GA4 snapshot): property-wide active users ≈ 2.8K, new users ≈ 2.8K, events ≈ 40K, average engagement ≈ 1m 29s. Almost no returning users. Geography below uses named city rows from the export, rolled to country/region; everyone else is Other — not invented city-level detail.

Audience geography · ~2,800 active users

GA-named regions + Other · click for detail

Loading map…
  • Other1.5K(52%)
  • Europe636(23%)
  • North America484(17%)
  • Asia219(8%)
---
config:
  xyChart:
    width: 900
    height: 280
  themeVariables:
    xyChart:
      plotColorPalette: "#1D4ED8"
---
xychart-beta
  title "Users by country — named GA rows + Other (sums to ~2.8K)"
  x-axis ["Poland 20%", "US 17%", "Singapore 5%", "France 3%", "China 3%", "Other 52%"]
  y-axis "Users" 0 --> 1600
  bar [554, 484, 143, 82, 76, 1461]

Poland (Warsaw) is the largest named city. The US city rows include names that often correlate with hosting or bot noise — counted in the total, interpreted cautiously. Other is still real traffic; the export simply did not list those cities.

---
config:
  xyChart:
    width: 900
    height: 300
  themeVariables:
    xyChart:
      plotColorPalette: "#0F766E"
---
xychart-beta
  title "Top pages — homepage ≈ 58% of views in this set"
  x-axis ["Home 58%", "Blog 15%", "ONE-FRONT 15%", "Product CV 6%", "Resume 5%", "Bankly 2%"]
  y-axis "Views" 0 --> 11000
  bar [9900, 2500, 2500, 950, 780, 423]

Among measured top pages, the homepage is still the front door. Blog and CV matter; they are not where most sessions start.

---
config:
  xyChart:
    width: 900
    height: 280
  themeVariables:
    xyChart:
      plotColorPalette: "#B45309"
---
xychart-beta
  title "First-user source — Direct ≈ 64% of ~2.8K users"
  x-axis ["Direct 64%", "Google 9%", "LinkedIn 3%", "Other 24%"]
  y-axis "Users" 0 --> 2000
  bar [1800, 249, 74, 677]

Most people arrive direct (bookmark, pasted link, typed domain). Organic search and LinkedIn are smaller. Other includes a long tail of referrals — some legitimate, some junk. Same shape as the commit chart: spikes and paths, not a smooth growth curve.

The public trail is the point: I ship in focused bursts, leave a measurable record, and keep front-end systems maintainable after the spike — architecture, product UI, GenAI/automation glue, and the ops that keep a site alive.

Next step: Product CV · LinkedIn · one-front.com

Michael Wybraniec

Michael Wybraniec

System Design, GenAI Automation & Architecture