
TL;DR
One dev, one CLI, 24 subdomains, and a lot of parallel agents. The playbook for shipping an AI app portfolio.
Read next
A field note on adding pricing, Pro, apps, sponsors, partners, hiring, consulting, newsletter, and weekly rollup paths to DevDigest without turning the site into vague growth copy.
8 min readThe DevDigest blog is no longer just a folder of markdown files. It is becoming a small content operating system: posts, tags, RSS, search, llms.txt, route discovery, content expansion reports, and app-linked build logs.
9 min readThe DevDigest tools directory is not just a list of links. One registry now feeds tool pages, category filters, comparison routes, RSS, JSON APIs, search, sitemap discovery, and content expansion loops.
9 min read| Official Sources | |
|---|---|
| Claude Code Overview | Anthropic's agentic coding assistant documentation |
| Claude Code Sub-agents | Parallel agent orchestration and task delegation |
| Next.js 16 Documentation | App Router, React 19, and deployment guides |
| Convex Documentation | Reactive backend with real-time sync and server functions |
| Clerk Documentation | Authentication, OAuth, and organization support |
| Coolify Documentation | Self-hosted PaaS for deploying and managing applications |
There are currently 24 apps on the Developers Digest network. Fitness tracker, cron scheduler, video clipper, CLI directory, MCP directory, skills marketplace, AI model comparison, overnight agents, agent hub, content calendar, voice tools, and a dozen more. Every one lives on its own subdomain under developersdigest.tech.
For the implementation path around this, pair it with Claude Code Agent Teams, Subagents, and MCP: The 2026 Playbook and Why Skills Beat Prompts for Coding Agents in 2026; those guides connect the idea to a shippable TypeScript stack.
One developer. No team. Most are running in production. Some are fully shipped. A lot of them are half working. I want to be honest about that because the interesting thing is not that they all work. The interesting thing is that 24 of them exist at all, and that a single dev can keep pushing them forward in parallel without the whole thing collapsing.
This post is the meta-story. The stack, the pattern, the agent loop, what broke, and the tactical lessons I would give to anyone trying to run a similar portfolio.
Every app uses the same spine so I do not have to think about infrastructure per project:
That is it. No Vercel. No AWS. No Kubernetes. No per-app decisions about hosting, auth, or database. The stack is the same every time, so bootstrapping a new app is closer to copy-paste than to architecture.
The reason this matters: when the stack is identical, the agents do not need to relearn anything. Whatever works for one app works for the next.
The hub is the /apps page on developersdigest.tech. It is driven by a single file, app/apps/apps-data.ts, which is the source of truth for every product in the network. Each entry looks like this:
{
slug: "fit",
name: "Fit",
host: "fit.developersdigest.tech",
url: "https://fit.developersdigest.tech",
description: "Log workouts in plain English...",
category: "SaaS Products",
badge: "Popular",
searchKeywords: ["fitness", "habits", "tracking"],
}
One row per app. The registry feeds the /apps directory, the JSON-LD metadata, the search index, and the hero terminal. Adding a new product is one commit to apps-data.ts plus a Cloudflare DNS record. That is the whole onboarding.
Each sub-brand gets its own subdomain because the alternative (everything under one domain) would turn every design and auth decision into a coordination problem. Subdomains give each app its own identity, its own design freedom, its own deploy cadence, and crucially its own blast radius when something breaks.
The loop that keeps 24 apps moving forward without me turning into a tech lead in my own life:
APPS-TIGHTEN-STATUS.md) that I can skim in 60 seconds.dd-cron. Consolidate magic numbers in dd-fitness. Delete the dead /app directory in dd-canvas. Each agent has one target, one set of files, zero coordination overhead.A real slice from this week's status file:
iter 1 (cron 73814f48, first run)
- dd-clipper 8fe1af6: mockClips/Transcript/runMockPipeline deleted, empty state honest
- dd-fitness 8452cd7: DEFAULT_TARGETS consolidated across 5 components, tests green
Deploy queue (staggered):
1. contentcal (credit check fix)
2. dd-academy (real streak)
3. dd-cron (fake key gone)
4. dd-content-engine (fake key gone)
5. dd-fitness (rebuild)
6. dd-canvas (rebuild)
That is the whole workflow. Audit, fan out, commit, deploy one at a time. The cron runs the loop on its own. I check in, read the status file, approve or redirect.
Get the weekly deep dive
Tutorials on Claude Code, AI agents, and dev tools - delivered free every week.
From the archive
Apr 19, 2026 • 10 min read
Apr 19, 2026 • 12 min read
Apr 19, 2026 • 11 min read
Apr 19, 2026 • 13 min read
The honest tier list looks like this:
dd-canvas.Why put this in a public post? Because pretending the portfolio is 24-for-24 production apps would be a lie, and the interesting thing is the mechanism, not the polish. Half-built is the natural state of a portfolio that is growing faster than any single dev can finish individual products. The loop is designed to close those gaps over time, not to avoid ever having them.
The credibility move is saying "here is what is real, here is what is not, here is the queue." That beats a glossy launch page that falls over on first click.
Seven tactical takeaways from running this loop for the past few months:
Shipping an app with mockClips, mockTranscript, and runMockPipeline feels fast. It is not. It is a landmine. Every mock is a lie you will have to explain to a user who clicked something and got nothing back. Killing mocks early forces you to either wire the real thing or ship an honest empty state. Both are better than fake data.
A single Hetzner box running Coolify cannot build 10 Next.js 16 apps at the same time without tipping over. I learned this by watching my build queue return 500s while docker builder prune -f crawled. The fix is operational, not architectural. One deploy per iteration. Verify. Move on.
I tried a single "audit the portfolio" agent. It produced beautiful generic slop. Switching to one agent per app, each reading only that app's repo, produced actionable status reports that fit on a page. Narrow scope, narrow context, narrow output.
Every app in the network is one row in apps-data.ts. That single file drives the /apps page, search, metadata, and terminal navigation. When a new app ships, it is one commit. When an app gets renamed, it is one commit. There are no scattered references to update.
Next.js 16 plus Convex plus Clerk plus Coolify is the same every time. The agents do not waste context figuring out which auth system this app uses or how this one deploys. The marginal cost of a new app is the feature work, not the infrastructure tax.
Kimi handles the high-volume grunt work. Killing mocks, renaming files, fixing lint, writing boilerplate. Claude Code gets the tasks that require judgment. Refactors that cross files. Decisions about architecture. Anywhere the wrong call costs a day of rework.
The temptation is to hide the half-working apps until they are done. The problem is they are never done. There is always another feature, always another edge case. Publishing the registry and the status file publicly forces the work to move forward because the gap is visible. "DD Build has no repo" is a lot harder to ignore when the row is live on the /apps page.
The entire loop is driven by the dd CLI. One command to scaffold a new app (dd new), one to audit (dd audit), one to deploy (dd deploy). Each command is a thin wrapper over the same agent and infrastructure stack, but it turns the workflow into muscle memory.
If you want to see the apps, the registry is live at /apps. If you want to see the CLI that glues the network together, it is at cli.developersdigest.tech. And if you want the longer writeup of how the main site was built, the case study has the receipts.
One developer running 24 apps works because the stack is identical, the registry is one file, the loop is automated, and the honesty is public. The agents do the grunt work. The CLI does the orchestration. The status file keeps me in the loop without making me the bottleneck.
It is not that any of these apps are individually revolutionary. They are not. The interesting thing is that 24 of them exist on the same spine, maintained by one person, with a system that lets them keep improving in parallel without any single app starving the others.
That is the playbook. The portfolio is the product.
By using the same stack everywhere and automating the audit-fix-deploy loop. When every app uses Next.js 16, Convex, Clerk, and Coolify, the agents do not waste context learning infrastructure per project. The loop runs on its own: one audit agent per app produces a status file, parallel subagents fix specific issues, and staggered deploys prevent build queue overload. The developer reviews and redirects instead of doing the grunt work.
For a single developer running many apps, the stack should be identical everywhere. The recommended combination is Next.js 16 with React 19 and the App Router, Convex for the reactive backend, Clerk for auth, and Coolify on Hetzner for hosting. This removes per-app infrastructure decisions and lets coding agents reuse everything they learn from one project on the next.
Staggered deploys. A single Hetzner box running Coolify cannot build multiple Next.js 16 apps simultaneously without running out of memory. The fix is operational: deploy one app per iteration, verify health, then move to the next. The deploy queue is explicit and ordered in the workflow, not left to chance.
Use both for different tasks. Kimi handles high-volume grunt work - killing mocks, renaming files, fixing lint, writing boilerplate - because it offers unlimited usage. Claude Code handles tasks that require judgment - refactors that cross files, architectural decisions, anything where the wrong call costs a day of rework. Match the agent to the complexity of the task.
A single file that is the source of truth for every product in your network. Each app is one row with its slug, name, host, URL, description, and category. That file drives the apps page, search index, JSON-LD metadata, and terminal navigation. Adding a new app is one commit to the registry file plus a DNS record. No scattered references to update.
Ship them with honest empty states instead of mock data. Mock data is a lie that will break user trust on first click. An honest empty state says "this feature is coming" and lets users understand what is real. Publishing the status file publicly forces progress because the gap between promise and reality is visible.
One agent per app reads the repo, runs the build, and produces a short status report identifying what is real versus mock. The outputs go to a shared status file. Based on the audit, parallel subagents spawn to fix specific issues - each scoped to one app and one concrete fix. Every agent commits to its own repo with atomic, scoped messages. The loop runs automatically and surfaces only the decisions that need human input.
Minutes. Copy the stack from an existing app, add one row to the registry file with the app's metadata, create a Cloudflare DNS record pointing the subdomain to the same ingress, and deploy. The identical stack means no infrastructure decisions per project. The registry-driven directory means no pages to update. The marginal cost of a new app is the feature work, not the setup.
Technical content at the intersection of AI and development. Building with AI agents, Claude Code, and modern dev tools - then showing you exactly how it works.
The TypeScript toolkit for building AI apps. Unified API across OpenAI, Anthropic, Google. Streaming, tool calling, stru...
View ToolAnthropic's agentic coding CLI. Runs in your terminal, edits files autonomously, spawns sub-agents, and maintains memory...
View ToolFrontend stack for agent-native apps. React hooks, prebuilt copilot UI, AG-UI runtime, frontend tools, shared state, and...
View ToolAnthropic's Python SDK for building production agent systems. Tool use, guardrails, agent handoffs, and orchestration. R...
View ToolSchedule jobs in plain English. See what ran, what broke, what's next.
View AppSpec out AI agents, run them overnight, wake up to a verified GitHub repo.
View AppLearn AI-assisted development by building, not by watching.
View AppConfigure Claude Code for maximum productivity -- CLAUDE.md, sub-agents, MCP servers, and autonomous workflows.
AI AgentsStep-by-step guide to building an MCP server in TypeScript - from project setup to tool definitions, resource handling, testing, and deployment.
AI AgentsDeep comparison of the top AI agent frameworks - LangGraph, CrewAI, Mastra, CopilotKit, AutoGen, and Claude Code.
AI Agents
Nimbalyst Demo: A Visual Workspace for Codex + Claude Code with Kanban, Plans, and AI Commits Try it: https://nimbalyst.com/ Star Repo Here: https://github.com/Nimbalyst/nimbalyst This video demos N...

Composio: Connect AI Agents to 1,000+ Apps via CLI (Gmail, Google Docs/Sheets, Hacker News Workflows) Check out Composio here: http://dashboard.composio.dev/?utm_source=Youtube&utm_channel=0426&utm_...

Check out Replit: https://replit.com/refer/DevelopersDiges The video demos Replit’s Agent 4, explaining how Replit evolved from a cloud IDE into a platform where users can build, deploy, and scale ap...

A field note on adding pricing, Pro, apps, sponsors, partners, hiring, consulting, newsletter, and weekly rollup paths t...

The DevDigest blog is no longer just a folder of markdown files. It is becoming a small content operating system: posts,...

The DevDigest tools directory is not just a list of links. One registry now feeds tool pages, category filters, comparis...

How a single developer shipped 100+ features in one day using Claude Code, parallel agents, and the never-ending todo sy...

A tour of every app and tool in the Developers Digest network - from AI model comparisons to cron job scheduling.
How to spec agent tasks that run overnight and wake up to verified, reviewable code. The spec format, pipeline, and revi...

AI-generated interfaces tend to look the same - gradient-heavy, emoji-laden, and generic. The style guide method gives y...

A practical guide to using Claude Code in Next.js projects. CLAUDE.md config for App Router, common workflows, sub-agent...

A practical guide to building AI agents with TypeScript using the Vercel AI SDK. Tool use, multi-step reasoning, and rea...

New tutorials, open-source projects, and deep dives on coding agents - delivered weekly.