Topic

Technical

Engineering notes from the team — TypeScript patterns, monorepo trade-offs, infrastructure decisions and the build tooling behind Procaptcha.

How to Stop PHP Form Spam (Without a Plugin)
CAPTCHA Jun 24, 2026

How to Stop PHP Form Spam (Without a Plugin)

If your PHP mail script is being abused by bots, stop the bot before mail() runs — server-side CAPTCHA verification in a few lines of PHP, via Procaptcha.

Chris Taylor

Chris Taylor

6 min
Faking browsers is easy — but not at scale
Technical May 21, 2026

Faking browsers is easy — but not at scale

131,819 residential US IPs threw 1.4M brute-force attempts at one mobile-only customer in 30 days — all collapsing onto a handful of fingerprints.

Chris Taylor

Chris Taylor

6 min
How to Add CAPTCHA to Fastly CDN
Technical Jan 20, 2026

How to Add CAPTCHA to Fastly CDN

Learn how to integrate Procaptcha with Fastly CDN to protect your website from bot attacks while maintaining performance and user privacy.

Chris Taylor

Chris Taylor

4 min
We suffered MongooseJS so you don't have to
Technical Dec 2, 2025

We suffered MongooseJS so you don't have to

We investigate how MongooseJS's type safety can silently add bugs to your code base.

George Oastler

George Oastler

6 min
We cut our Mongo DB costs by 90% by moving to Hetzner
CAPTCHA Nov 12, 2025

We cut our Mongo DB costs by 90% by moving to Hetzner

We moved MongoDB Atlas off AWS and onto self-hosted Hetzner boxes — 90% cost cut, no performance loss. Here's the setup, the Ansible, and what broke.

Chris Taylor

Chris Taylor

3 min
Reactive Frameworks Cheatsheet - React, Vue, Svelte and Angular
Technical May 19, 2025

Reactive Frameworks Cheatsheet - React, Vue, Svelte and Angular

Maxim Akimov

Maxim Akimov

10 min
PHP Views Package - Templating Made Easy with Blade and Model-Driven Approach
Technical May 19, 2025

PHP Views Package - Templating Made Easy with Blade and Model-Driven Approach

Maxim Akimov

Maxim Akimov

10 min
Streamlining Releases: Building Scalable CICD Pipelines with Changesets
Technical May 6, 2025

Streamlining Releases: Building Scalable CICD Pipelines with Changesets

Overcome common challenges and scale your CICD pipelines for seamless versioning, releases and deployments.

George Oastler

George Oastler

17 min
Independent vs Locked Versioning in a Workspace
Technical May 3, 2025

Independent vs Locked Versioning in a Workspace

Locked vs independent versioning in a monorepo workspace — the tradeoffs on release cadence, dependency drift and CI overhead, and which one fits your team.

George Oastler

George Oastler

6 min
Mastering Versioning: A Guide to Software Stability
Technical May 2, 2025

Mastering Versioning: A Guide to Software Stability

Semver rules, dependency traps and the pitfalls that break stable builds — how we manage versioning at Prosopo without wrecking downstream consumers.

George Oastler

George Oastler

10 min
Monorepo vs Multirepo Architecture: How to Decide?
Technical May 1, 2025

Monorepo vs Multirepo Architecture: How to Decide?

Monorepo vs multirepo — tradeoffs on tooling, CI cost, dependency drift and team autonomy. Which one actually fits your project, and when to switch.

George Oastler

George Oastler

10 min
How to Test Your Ansible Playbooks Locally
CAPTCHA Jul 30, 2024

How to Test Your Ansible Playbooks Locally

Testing your Ansible playbooks locally can save you time and effort. Here are some tips to help you get started.

Chris Taylor

Chris Taylor

10 min
tsx vs ts-node: Time to Drop ts-node for tsx
CAPTCHA Jun 26, 2024

tsx vs ts-node: Time to Drop ts-node for tsx

tsx vs ts-node compared: why tsx runs TypeScript faster than ts-node, and how to migrate your Node.js scripts away from ts-node today.

Chris Taylor

Chris Taylor

4 min
actions/cache@v3 restore: GitHub Actions Cache Fix
CAPTCHA Jun 18, 2024

actions/cache@v3 restore: GitHub Actions Cache Fix

Fix GitHub Actions caching with actions/cache@v3 and actions/cache/restore: share caches across branches and evict old caches faster.

George Oastler

George Oastler

10 min
TypeScript: Branded Types 🔧
CAPTCHA Apr 22, 2024

TypeScript: Branded Types 🔧

How to brand TypeScript types for norminal typing, providing an automated and easy-to-use way of making a type nominal.

George Oastler

George Oastler

10 min
Using Vite To Rebuild Local Dependencies in an NPM Workspace
Technical Apr 18, 2024

Using Vite To Rebuild Local Dependencies in an NPM Workspace

Vite ignores local workspace packages because they sit outside its module graph — the config trick that forces Vite to rebuild sibling npm packages.

Chris Taylor

Chris Taylor

6 min
Vite: How to handle `.node` files
CAPTCHA Apr 8, 2024

Vite: How to handle `.node` files

Vite can't bundle `.node` native binaries — it treats them as raw JS and blows up. Our custom rollup plugin that copies `.node` files through the build.

George Oastler

George Oastler

10 min
TypeScript: Mapped Type Magic 🪄
CAPTCHA Mar 13, 2024

TypeScript: Mapped Type Magic 🪄

TypeScript mapped types can make Cat === Dog — a weird paradox. How to brand identical structural types so the compiler can tell them apart.

George Oastler

George Oastler

10 min
How to deploy Procaptcha on your website or app
Technical Sep 20, 2023

How to deploy Procaptcha on your website or app

How to switch from Google's reCAPTCHA to Prosopo Procaptcha and protect your website or app from bots for free.

Chris Taylor

Chris Taylor

3 min
Prosopo Radar logo

Welcome legitimate users and agents. Stop the bots.

AI agents now act on behalf of real people — shopping, researching, booking. Block them all and you lose customers; allow them all and you invite abuse. Prosopo establishes trust on every request, so the legitimate humans and agents get through and the bad bots don't.

Smarter detection, transparent pricing, and complete privacy — no cookies, no tracking, no data sold on. Sign up for free and protect your site in minutes.