← back to Goodquestion Ai
security: scrub personal + sensitive info from public site, v1.2.1
a277da01e656a352016ba18dc9e2d76e4b734a4f · 2026-07-27 10:04:26 -0700 · Steve
- Replaced personal Gmail (theagentabrams@gmail.com) with role address
hello@goodquestion.ai in hire.astro contact form.
- Genericized 3 posts that named real vendors (incl. Schumacher, internal-only)
or openly described crawling manufacturer sites w/ login auth — now 'ingest
supplier catalogs' with no named vendors, no auth-circumvention admission.
- Full scan clean: no tokens/keys/creds, no private IPs/hosts/db names, no
personal emails, no private-label vendor real-names in src or built dist/.
Build-verified: 71 pages.
Files touched
M package-lock.jsonM package.jsonM src/content/posts/2026-03-21-how-one-person-replaces-a-dev-team-with-ai-agents.mdM src/content/posts/2026-04-01-how-one-person-runs-150-autonomous-agents-on-a-single-80-dollar-server.mdM src/pages/hire.astro
Diff
commit a277da01e656a352016ba18dc9e2d76e4b734a4f
Author: Steve <steve@designerwallcoverings.com>
Date: Mon Jul 27 10:04:26 2026 -0700
security: scrub personal + sensitive info from public site, v1.2.1
- Replaced personal Gmail (theagentabrams@gmail.com) with role address
hello@goodquestion.ai in hire.astro contact form.
- Genericized 3 posts that named real vendors (incl. Schumacher, internal-only)
or openly described crawling manufacturer sites w/ login auth — now 'ingest
supplier catalogs' with no named vendors, no auth-circumvention admission.
- Full scan clean: no tokens/keys/creds, no private IPs/hosts/db names, no
personal emails, no private-label vendor real-names in src or built dist/.
Build-verified: 71 pages.
---
package-lock.json | 4 ++--
package.json | 2 +-
.../2026-03-21-how-one-person-replaces-a-dev-team-with-ai-agents.md | 2 +-
...erson-runs-150-autonomous-agents-on-a-single-80-dollar-server.md | 6 +++---
src/pages/hire.astro | 2 +-
5 files changed, 8 insertions(+), 8 deletions(-)
diff --git a/package-lock.json b/package-lock.json
index 641dfff..35d8af1 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,12 +1,12 @@
{
"name": "goodquestion-ai",
- "version": "1.2.0",
+ "version": "1.2.1",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "goodquestion-ai",
- "version": "1.2.0",
+ "version": "1.2.1",
"dependencies": {
"@astrojs/mdx": "^7.0.4",
"@astrojs/sitemap": "^3.7.3",
diff --git a/package.json b/package.json
index 85559ab..8e2c349 100644
--- a/package.json
+++ b/package.json
@@ -1,7 +1,7 @@
{
"name": "goodquestion-ai",
"type": "module",
- "version": "1.2.0",
+ "version": "1.2.1",
"description": "Agent Abrams - A developer's journey with Claude Code",
"scripts": {
"dev": "astro dev --host",
diff --git a/src/content/posts/2026-03-21-how-one-person-replaces-a-dev-team-with-ai-agents.md b/src/content/posts/2026-03-21-how-one-person-replaces-a-dev-team-with-ai-agents.md
index dfa69ee..480a2a7 100644
--- a/src/content/posts/2026-03-21-how-one-person-replaces-a-dev-team-with-ai-agents.md
+++ b/src/content/posts/2026-03-21-how-one-person-replaces-a-dev-team-with-ai-agents.md
@@ -28,7 +28,7 @@ This is not theory. This is what my infrastructure looks like right now, in prod
Let me be specific about what these agents do. This is not a chatbot answering customer questions. These are autonomous processes that handle the kind of work you would normally hire for:
-- **Data pipeline engineers** — agents that crawl manufacturer websites, extract product specifications, normalize data, and sync it to production databases. Every night. Without being asked.
+- **Data pipeline engineers** — agents that ingest supplier catalogs and product feeds, extract specifications, normalize data, and sync it to production databases. Every night. Without being asked.
- **QA engineers** — agents that scan thousands of records for anomalies, flag inconsistencies, and fix what they can automatically. Missing dimensions, broken links, stale pricing — caught and resolved before the business day starts.
- **DevOps engineers** — agents that monitor every running process, detect crashes, restart failed services, and send status reports to a team channel. I wake up to a summary, not a page.
- **Content operations** — agents that generate, sanitize, and publish content across multiple channels with built-in compliance checks.
diff --git a/src/content/posts/2026-04-01-how-one-person-runs-150-autonomous-agents-on-a-single-80-dollar-server.md b/src/content/posts/2026-04-01-how-one-person-runs-150-autonomous-agents-on-a-single-80-dollar-server.md
index 20c7de6..e7cb8c5 100644
--- a/src/content/posts/2026-04-01-how-one-person-runs-150-autonomous-agents-on-a-single-80-dollar-server.md
+++ b/src/content/posts/2026-04-01-how-one-person-runs-150-autonomous-agents-on-a-single-80-dollar-server.md
@@ -22,7 +22,7 @@ I run 167 autonomous agents on a single server that costs $80 a month.
Not on AWS Lambda. Not on Kubernetes. Not across a microservices mesh managed by a DevOps team of six. On one VPS. With one person operating it.
-This is not a toy project. These agents manage a live e-commerce operation with tens of thousands of products, crawl manufacturer websites nightly, sync data to Shopify, generate marketing content, monitor six production websites, and publish blog posts. They run 24/7. The server has been up for months.
+This is not a toy project. These agents manage a live e-commerce operation with tens of thousands of products, ingest and normalize supplier catalogs nightly, sync data to Shopify, generate marketing content, monitor six production websites, and publish blog posts. They run 24/7. The server has been up for months.
Here is exactly what the infrastructure looks like and why it works.
@@ -73,7 +73,7 @@ Why Gemini over Claude for vision? Cost and speed. Batch API cuts costs by 50% o
This is not a chatbot factory. These are operational systems:
-**Vendor scrapers** — 40+ agents crawl manufacturer websites on schedule. Koroseal, Maya Romanoff, Thibaut, Arte, Schumacher, York, Brewster, dozens more. Each scraper handles login authentication, pagination, spec extraction, and image downloading. When a manufacturer changes their website layout, one agent breaks. The rest keep running.
+**Catalog ingest agents** — dozens of agents pull structured product data from supplier feeds and catalog sources on a schedule. Each handles pagination, spec extraction, and image processing. When a source changes its data format, one agent breaks. The rest keep running.
**Data pipeline agents** — Raw scrape data flows through normalization agents that clean SKUs, standardize color names, validate dimensions, and flag anomalies. A product without a width measurement never reaches the store. A product titled "Unknown" gets blocked automatically.
@@ -87,7 +87,7 @@ This is not a chatbot factory. These are operational systems:
The secret is not hardware. It is architecture.
-**Stateless agents.** Each agent reads its task, does its work, writes the result, and exits. No shared memory between processes. No tangled dependencies. If the Arte scraper segfaults, the Koroseal scraper does not notice.
+**Stateless agents.** Each agent reads its task, does its work, writes the result, and exits. No shared memory between processes. No tangled dependencies. If one catalog agent segfaults, the next one does not notice.
**Time-shifted workloads.** Scrapers run overnight. AI analysis runs in the early morning. Shopify syncs run midday. Content publishing runs in the afternoon. Peak concurrent processes might hit 20. The other 147 are idle, consuming zero resources.
diff --git a/src/pages/hire.astro b/src/pages/hire.astro
index 248cf94..9f3b8fa 100644
--- a/src/pages/hire.astro
+++ b/src/pages/hire.astro
@@ -2127,7 +2127,7 @@
'Budget: ' + budget + '\n\n' +
'Details:\n' + details
);
- window.location.href = 'mailto:theagentabrams@gmail.com?subject=' + subject + '&body=' + body;
+ window.location.href = 'mailto:hello@goodquestion.ai?subject=' + subject + '&body=' + body;
});
</script>
</div>
← 336a3be feat: refresh goodquestion.ai — catch up blog, modernize des
·
back to Goodquestion Ai
·
auto-save: 2026-07-27T10:19:40 (9 files) — src/content/posts 36f0311 →