Writing

Blog

Notes on frontend engineering, SEO, AI, analytics, and building real products.

42 posts

August 31, 20267 min read

My AVA Hosting VPS Averaged 32.73% CPU Steal Despite “Guaranteed Resources — No Sharing”

My AVA Hosting KVM VPS averaged 32.73% CPU steal, 0% CPU idle and almost 99% CPU pressure under normal production traffic. AVA advertises guaranteed CPU resources without sharing; this is a first-hand debugging story about what Linux actually reported inside the VM.

AVA HostingVPSLinuxCPU stealVPS performance
August 31, 20269 min read

My FDCServers VPS Worked Fine for More Than 3 TB of Traffic. Then Disk Reads Started Taking 18 Seconds

My FDCServers VPS initially handled real traffic normally and transferred more than 3 TB of data. Then ordinary workload began triggering severe virtual-disk stalls: CPU I/O wait reached 100%, Linux I/O pressure approached 100%, read latency reached 18.7 seconds, and flush latency exceeded 53 seconds.

FDCServersVPSLinuxDisk I/ODevOps
August 31, 20268 min read

My REGXA VPS Showed 94% CPU Steal — Even With No Traffic

I investigated severe performance problems on a REGXA KVM VPS and found 92–94% CPU steal, multi-second localhost requests, growing connection queues, and HTTP 504 responses taking more than two minutes. Removing all production traffic made CPU steal rise to 94.17%, and REGXA support later attributed it to resource contention on shared infrastructure.

REGXAVPSLinuxCPU stealvirtualization
August 28, 202616 min read

Two Months with Bunny Storage Behind Nginx: Why I Moved Images, Video, and Audio to a Dedicated Media Server

For two months I used Bunny Storage as a private origin behind my own Nginx cache rather than through Bunny CDN. Production logs exposed long-tail connection timeouts on cold media and a separate MP4 problem with Nginx Slice and inconsistent ETags, which eventually led me to a simple private media origin.

Bunny StorageNginxVideo cachingCache missMedia server
August 20, 20269 min read

SSIMULACRA2 for WebP-to-AVIF Transcoding: Why I Use 60 for Sources and 65 for Lossy Derivatives

When AVIF is encoded from an already-lossy WebP, SSIMULACRA2 measures only the second generation of loss. I ended up using 60/58 for clean sources and 65/63 for known lossy derivatives.

AVIFWebPSSIMULACRA2Image CompressionWeb Performance
August 17, 202612 min read

DeepSeek Raised Its Prices — I Found the Same V4 Flash Cheaper Than the Old Rate

On August 17, my DeepSeek API spend suddenly rose to roughly five times its usual level. I then found and tested another provider offering the same DeepSeek-V4-Flash-0731 checkpoint at prices about 45% below DeepSeek's old rates.

DeepSeekRunwareLLM APIAI infrastructureOpen-weight models
August 13, 202613 min read

How I Convert Animated WebP, GIF and APNG to H.264 MP4 Without Breaking Frames or Timing

My production pipeline reconstructs the complete frames users actually see, preserves source timing, chooses one CFR for each final MP4, uses the smallest common canvas without upscaling, encodes compatible H.264 segments, concatenates them without a second lossy encode, and validates both the file and its HTTP delivery. In one measured run, 217 animated WebP files totaling 1.49 GB became one 78.49 MB H.264 MP4.

H.264FFmpegMP4Animated WebPGIFAPNGVideo CompressionMedia Pipeline
August 13, 202618 min read

I Was Alerting on Everything: How I Turned Browser Error Spam into Useful Production Monitoring

My frontend reporter treated ad blockers, GTM failures, AbortError, opaque Script error events, and real Next.js chunk failures alike. I rebuilt the signal around ownership, user impact, evidence, correlation, and recovery.

Browser Error MonitoringFrontend ObservabilityJavaScript ErrorsProduction MonitoringNext.jsWeb Performance
August 13, 202620 min read

Why Old Next.js Tabs Break After a Deployment: Stale HTML, Missing Chunks, and Version Skew

After a deployment, my production telemetry captured a failed first-party Next.js chunk. The log proved the script failed, not why. This article uses that incident to explain old tabs, stale HTML, missing /_next/static assets, version skew, retention, deploymentId, rollout order, monitoring, and controlled recovery.

Next.jsDeploymentVersion SkewWeb CachingFrontend ReliabilityStatic Assets
August 13, 202613 min read

The One-Tick Bug That Broke My CFR: Why 5580 Was Not 5625 and 3751 Was Not 3750

My validator repeatedly rejected a 16 fps MP4 because a packet lasted 5580 ticks instead of 5625, then later caught a 3751-tick packet where 24 fps required exactly 3750. The two failures taught me to separate source timing, CFR quantization, MP4 time base, PTS/DTS, muxing, and packet-level validation.

FFmpegH.264CFRVideo timestampsMP4Media pipeline
August 13, 202612 min read

How I Cut a Production Video from ~280 MB to ~50 MB with H.264

One concrete production video fell from roughly 280 MB to roughly 50 MB after I rebuilt the H.264 policy around CRF 28, x264 veryslow, a 720p-class ceiling, useful frame rates, and a conservative decoder contract. An earlier stage of the same optimization had already reduced the file from about 350 MB to 238 MB, while a wider audit showed that multi-megabit H.264 files were common in the old library.

H.264FFmpegx264Video CompressionWeb PerformanceMedia Optimization
April 16, 20267 min read

I Built Gitae to Diagnose Website Outages Beyond “Up or Down”

I built Gitae to answer a practical question: is a site really unavailable, or is the failure local? It combines external VDS checks from Moscow and Helsinki with DNS, HTTPS/TLS, ports, routing, IP, hosting, and CMS signals—and treats every result as evidence, not proof.

GitaeWebsite diagnosticsWebsite monitoringDNS checkSSL checkPingTraceroutePort checkerHosting checkSEO
April 14, 20266 min read

Why TypeScript Works So Well with Codex for Production Software

For production work, TypeScript gives Codex something prompts alone cannot: machine-checkable contracts, fast compiler feedback, and a safer path through large refactors.

TypeScriptCodexAI codingSoftware deliveryJavaScriptDeveloper workflow
April 6, 20265 min read

I Built Jurfi.com: A Browser-Based Legal Document Studio for Structured Drafts

I built Jurfi.com to turn forms and templates into structured legal working drafts in the browser, with local draft storage, an explicit review step, and no claim that software can replace a lawyer.

JurfiJurfi.comLegal documentsLegalTechSaaSDocument draftingBrowser tools
April 5, 20268 min read

My First SaaS Revenue: What One Payment Actually Proved

My first payment from a SaaS product I built myself was small, but it changed the quality of the evidence I had. Here is what one transaction can validate, what it cannot, and why repetition matters more than the milestone itself.

SaaSFirst revenueProduct validationPaymentsProduct analyticsIndie development
April 3, 202610 min read

How I Use Codex to Review 15 Projects Without Giving Up Manual Control

Reviewing 15 software projects used to mean drowning in repetitive checks. Codex now helps me audit bugs, tests, SEO, translations, localization, and consistency much faster—but I still treat every AI finding as a lead, not a verdict, and every change as something I must verify.

CodexAI codingCode reviewSoftware testingDeveloper workflowLocalizationTechnical SEODeveloper productivity
April 2, 20268 min read

Why I Spend the Last 3–5% of My ChatGPT Plus Codex Limit on Big Engineering Tasks — Update: It Stopped Working in Summer 2026

Update: by summer 2026 this stopped being a reliable workflow for me. The 5-hour counter disappeared from my account, only the weekly allowance remained visible, and long-running work could stop when that weekly allowance was exhausted.

CodexChatGPT PlusAI coding toolsDeveloper workflowSoftware engineeringTypeScript migrationESLint cleanupRefactoringCodex usage limits2026 update
April 1, 202612 min read

I Published 10,000 AI SEO Articles. My Site Eventually Fell to Zero Indexed Pages

Mass AI publishing looked like a shortcut: Google crawled all 10,000 generated article URLs, but only about 1,000 were actually indexed, appeared in Search, and brought real traffic. Then those pages disappeared too, until the entire site reached zero indexed pages. Here is what that failure taught me about AI, SEO, translation, and using AI as an assistant instead of an autonomous publisher.

AI SEOGenerative AIGoogle SearchScaled contentIndexingAI-assisted writingMultilingual SEO
March 31, 20266 min read

Five Years With an 8GB/256GB M1 MacBook: Why I Still Haven’t Replaced It

I bought the base M1 MacBook with 8GB of memory and a 256GB SSD for around $1,000 and used it roughly 15 hours a day for development, media work, writing, learning, and side projects. Five years later, I can clearly see its limits, but I’m considering an upgrade because my workload grew—not because the machine stopped being useful.

MacBookAppleM1Apple SiliconSoftware DevelopmentLong-Term ReviewHardware Longevity
March 30, 20268 min read

I Translated My Blog Into 20 Languages With ChatGPT — and Started Getting Search Traffic From Around the World

AI changed the economics of multilingual publishing for me. I went from writing a blog in one language to publishing each article in up to 20 languages, creating new organic search entry points for readers around the world.

AI localizationMultilingual SEOChatGPTNext.jsInternational SEOBlogging
March 27, 20265 min read

I Launched QRViz as a Free Static QR Code Generator — and Bet Distribution on SEO

QRViz is a browser-based static QR code generator, not a campaign platform. I launched qrviz.com as a free QR code generator with no ad budget, paid acquisition plan, or monetization funnel. I’m relying entirely on SEO, which makes discovery the biggest uncertainty — and that is part of why this small launch matters to me.

QR code generatorQrvizProduct launchSide projectsSEOWeb developmentProduct development
February 18, 20264 min read

Why Getting Customers Felt Harder Than Building a SaaS

A first-hand lesson from building a SaaS: engineering gave me clear, checkable feedback, while distribution, positioning, messaging, and retention required a different and much less predictable loop.

SaaS growthCustomer acquisitionProduct marketingBootstrappingIndie hackingDistribution
February 17, 20269 min read

I Built a SaaS Product Solo. Turning On Payments Changed the Job

I built a SaaS product alone in evenings, weekends, and holidays. Once payments went live, bugs, onboarding, access, retention, reliability, and trust became part of operating a real product.

SaaSSolo developmentProduct launchPaymentsReliabilityProduct operations
January 22, 20264 min read

I Got 550 Views from One Image, Voiceover, and Subtitles: What Three Shorts Tests Actually Taught Me

A simple YouTube Short built from one static image, a voiceover, and subtitles reached 550 views. After three early tests, the useful lesson was not a proven formula, but a repeatable way to experiment without confusing a promising signal with proof.

YouTube ShortsContent ExperimentsShort-form VideoVideo EditingCapCutCreator Workflow
January 20, 20265 min read

I Saw Nearly 6,000 Applications on a Moscow Frontend Job. What That Does—and Doesn't—Say About Russia's IT Market

In late 2023, recruiters told me 300–500 applicants per opening was already difficult. On January 20, 2026, I saw a mid-level frontend role in Moscow approaching 6,000 applications within hours. Here is what I think that signals, what it does not prove, and how I would read those numbers as a candidate.

CareerIT Job MarketFrontendRussiaMoscowHiringJob Search
January 1, 20268 min read

How DeepSeek Changed My Node.js Side-Project Workflow: 4,000+ Commits in Six Months

My 2025 GitHub graph went from nearly empty to more than 4,000 commits in the second half of the year. Here is what AI coding changed in my Node.js side-project workflow, where it saved time, where it failed, and why verification mattered more than generation speed.

Node.jsDeepSeekAI CodingDeveloper ProductivitySide ProjectsSoftware Engineering
December 30, 20256 min read

My First TikTok at 28: What a Vertical Product Demo Taught Me About Traffic

At 28, I posted my first TikTok and cross-posted the same product demo to Reels and Shorts. The useful lesson was not the view count: it was how much a 9:16 frame changes a desktop interface, and how to measure short-form traffic without confusing reach with acquisition.

TikTokProduct MarketingProduct DemosAnalyticsIndie Dev
November 16, 20256 min read

I Bought a 25-Year-Old Domain. Then 1,000+ Requests a Day Hit Dead URLs

After launching on a domain first registered in 2000, I saw more than 1,000 daily requests for legacy URLs and 900+ Yandex Webmaster errors overnight. Here is what I could actually prove, why I used targeted 410 responses, and how I would audit an aged domain now.

SEOHTTPDevOpsDomainsWeb Crawling
November 14, 20256 min read

I Had 12,500 Pages Indexed in Yandex but Almost No Russian Traffic: The Cloudflare Problem I Missed

Yandex had indexed 12,500 pages, yet traffic from Russia was almost zero. I traced the problem to the network path, removed Cloudflare’s proxy, rebuilt caching, compression, and basic protection with Nginx on my VDS, and restored reachability. The important lesson was to separate indexing, user access, and traffic.

DevOpsSEONginxCloudflareNetworkingInfrastructure
October 27, 20256 min read

My Static Next.js Site Gets Thousands of Vulnerability Scans a Day. Nginx Barely Notices

My logs are full of probes for WordPress, PHP backdoors, .env files, and .git/config. On this static Next.js + Nginx site, they mostly become cheap misses and 404s, and the CPU load stayed flat. Here is what that does—and does not—say about static-site security.

SecurityNext.jsNginxDevOpsStatic HostingAttack Surface
October 27, 20254 min read

Yandex Sent Traffic to My New Site While Google Barely Moved

On the same new project, Google Search produced only about 300 clicks over a long period while Yandex Webmaster showed a strong rise, including +500% clicks. Here is what those numbers prove, what they do not, and how I would investigate the gap without confusing crawling, indexing, ranking, and traffic.

SEOGoogle SearchYandexGoogle Search ConsoleYandex WebmasterTechnical SEO
October 17, 20255 min read

Yandex Indexed 4,278 of My Next.js Pages Overnight — What That Actually Proved

Yandex suddenly indexed 4,278 of my statically generated Next.js pages. It was a real technical milestone, but not proof of rankings or traffic. Here is what the result did and did not tell me about SSG and programmatic SEO.

SEONext.jsSSGYandexProgrammatic SEOIndexing
October 16, 20256 min read

My First Month of SEO: 632 Organic Visitors and a Bot-Traffic Reality Check

I used a personal side project to prepare for a larger SEO initiative at work. After one month it had 632 organic visitors, but an 83-visitor day showed how easily suspicious traffic and analytics artifacts can distort the story.

SEOWeb AnalyticsBot TrafficYandex MetricaSEO Experiments
October 6, 20255 min read

I Almost Ignored Yandex Webmaster. Two Weeks Later, It Was Sending More Traffic Than Google

I built a Next.js side project to learn SEO before an SEO-critical work project. In the first two weeks I recorded 58 visitors from Google and 200 from Yandex—and learned why indexing, diagnostics, and traffic need to be measured separately.

SEONext.jsGoogle SearchYandexSearch ConsoleIndexing
October 5, 20256 min read

Yandex Metrica vs Google Analytics: Why I Preferred Metrica After One Week

I ran Google Analytics and Yandex Metrica side by side on a new project for one week. Metrica won my attention because Webvisor made individual user journeys easier to inspect—but that is a workflow preference, not proof that one analytics platform is universally better.

Web AnalyticsUXSession ReplayYandex MetricaGoogle AnalyticsGA4
October 3, 20255 min read

Yandex Crawled My Blog Without /en. 308 Redirects Kept the URLs Alive

After I added about 3,000 /en/blog/... pages to a sitemap, I saw Yandex try the corresponding /blog/... paths. Existing 308 redirects kept those requests from becoming 404s. The useful lesson was not that Yandex “broke” my sitemap, but how much resilience a clean redirect layer can add.

SEOYandexSitemap308 RedirectTechnical SEOCrawling
October 2, 20255 min read

Two New Sites Spiked in Google, Then Traffic Fell 10×

On two launches in a row, I saw Google impressions surge immediately and traffic fall roughly tenfold within days. The pattern was real; the popular “honeymoon” explanation is not something I can prove.

SEOGoogle SearchSearch ConsoleOrganic TrafficTechnical SEO
October 1, 20255 min read

2,000 Pages Disappeared from Yandex Search Overnight. Here’s What That Actually Told Me

I opened Yandex Webmaster and found that 2,000 of roughly 8,000 pages were no longer participating in search. The 25% drop looked dramatic, but the useful lesson was learning not to confuse an observed search-status change with a proven cause.

SEOYandex WebmasterIndexingSearch VisibilityTechnical SEO
July 11, 20253 min read

I Asked More Than 10 Questions at MoscowJS 66—and Won Two Prizes

At MoscowJS 66, I asked more than 10 questions across talks on Telegram bots, LangChain.js, site-builder architecture, and TypeScript type testing. Two were selected as the best questions, and I left with two prizes.

EventsJavaScriptTypeScriptAILangChain.jsCommunityMoscowJS
June 23, 20255 min read

What I Took From PiterJS #79: Legacy Monoliths, FrontOps, Web Performance, and Better Questions

PiterJS #79 in St. Petersburg focused on maintaining what already exists: a legacy monolith, FrontOps, and web-performance metrics. I left with practical notes, two Q&A prizes, and a reminder that offline meetups are most valuable when you participate.

PiterJSJavaScriptFrontOpsDockerWeb PerformanceCommunity
June 17, 20256 min read

I Launched a Next.js Blog in 21 Languages. Here’s What 439 Google Impressions Actually Told Me

In its first week, my 21-language Next.js blog recorded 439 Google impressions and 5 clicks. Later, 436 of 471 pages were indexed. The useful lesson was learning to separate visibility, indexing, and actual search performance.

Next.jsSEOI18nMultilingual SEOGoogle SearchWeb Development
June 7, 20253 min read

MoscowJS 65 After Six Years With JavaScript: Why I Still Go to Local Meetups

I attended MoscowJS 65 at T Bank on June 5, 2025. Its four talks approached AI from different angles, but my main takeaway was simpler: local meetups still give me something documentation and recordings cannot fully replace.

JavaScriptMoscowJSMeetupsDeveloper CommunityAI