Automating Full-Page Screenshots with Playwright in CI
9 min readHow I replaced manual landing-page screenshots with a weekly Playwright job that captures desktop and mobile views, then bundles them into a static archive site
How I replaced manual landing-page screenshots with a weekly Playwright job that captures desktop and mobile views, then bundles them into a static archive site
How to stop a site full of short-lived pages from accumulating near-identical "this page has ended" entrypoints, using a data registry, one shared page, and a middleware rewrite.
Making a Slack bot invite meeting participants to a Google Calendar event. Service accounts cannot add attendees without domain-wide delegation, so the bot authenticates as a real user via an OAuth refresh token and patches the event on that user's calendar copy, with a fallback that never blocks the submission.
How I sped up CI and release pipelines for a large Next.js app: disabling inline ESLint and type checking in next build, running them as parallel jobs, linting only changed files, and fixing broken caches.
Migrating a custom-server Next.js app from Sentry v8 to v10: a server config that was never loaded, source map options that had been silently ignored since v8, a shared library shipping a second SDK copy, and the sendDefaultPii change.
A Cloud Run service kept hitting its memory limit at startup. The cause: uv run re-syncs the environment by default, reinstalling the dev dependency group at runtime even though the image was built with --no-dev. The fix is --no-sync (and --no-install-project for better layer caching).
A fullstack workflow tool for designers receiving creative work requests, built with Next.js 16, Drizzle on Cloud SQL Postgres, and Slack SSO. Deployed to Cloud Run with GitHub Actions CI/CD. Covers stack planning, AI-assisted development setup, and GCP infrastructure.
A Slack bot powered by Vertex AI Gemini with GCS-based knowledge base, deployed to Cloud Run with GitHub Actions CI/CD. Covers Python dev setup with uv, Flask REST APIs, Gemini integration, and cloud infrastructure.
Five internal operations automations driven by Slack Workflow Builder forms, wired to Google Sheets, Google Calendar, GitHub, and an AI coding agent. A Flask + slack-bolt bot on Cloud Run reads each form submission and turns it into the right action: a private DM, a spreadsheet row plus calendar event, an owner mention, an auto-generated pull request, or a real calendar invite.
AWS, K8s, GHA, Docker
Node.js, Python
React, Next.js, TypeScript
End-to-end features
Monitoring, Datadog