Company ·DarDev Team · 5 min read

Why we dogfood our own stack

DarDev runs Twenty CRM, Listmonk, Stalwart, and news.dardev.net on dardev-vps—the same stack we document for clients under Deployed Realities.

DarDev engineers operating production infrastructure on dardev-vps

Dogfooding at DarDev means we run the same infrastructure we describe in proposals: Twenty CRM for contacts, Listmonk for product lists, Stalwart for outbound SMTP, a sync worker between them, and news.dardev.net as the public face—all on dardev-vps beside other production services. If a deploy script, consent rule, or DNS pattern is not good enough for our own outreach, we do not sell it as enterprise-grade.

That posture is what Deployed Realities means in practice, not only on marketing pages. We feel certificate expiry, Postgres rate limits, and webhook retries before a client does. This article explains what we operate daily on dardev-vps, why it beats reference architectures in slide decks, and the boundaries we enforce so dogfooding stays honest.

What runs on dardev-vps today

  • Twenty CRM at crm.dardev.net—prospect records, Hesabi views, DarDev Services tracks, API keys
  • Listmonk at mail.dardev.net—product lists, campaigns, subscribe forms, analytics
  • Stalwart MTA at mta.dardev.net with outbound identity on send.dardev.net
  • Sync worker on port 3100—Twenty webhooks to Listmonk membership with opt-in gates
  • DarDev News static site at news.dardev.net—articles, subscribe API, contact routing
  • Host nginx TLS in front of localhost-bound Compose services; Portainer for stack lifecycle

The monorepo dardev-mailer holds compose files, sync worker code, news content validators, and deploy scripts. GitLab CI builds images, runs article validation, and deploys over SSH on protected branches—the same pipeline discipline we document in kubernetes-native-product-pipeline and integrations-we-actually-run. Portainer is ops UI; git remains source of truth.

Why dogfooding the mailer stack matters

B2B outreach in Tunisia and MENA fails quietly when CRM imports silently become marketing lists, when SPF/DKIM do not match the From domain, or when bulk-import rate limits stall a Friday campaign. We hit those edges on our own OECT accountant imports and Startup Tunisia SMB tracks before recommending CRM-to-email patterns to partners.

Cold prospects stay in Twenty only until explicit opt-in—documented in crm-driven-product-lists. Outbound campaigns use send.dardev.net, not @dardev.net root mail. Root domain stays on Zoho for inbound; marketing SMTP identity is isolated on a subdomain with its own SPF, DKIM, and DMARC on GoDaddy DNS. PTR for the VPS points to mta.dardev.net at OVH. We learned that split by operating it, not by reading a deliverability checklist.

Incidents that only show up when you operate it

  • Twenty bulk-import throttling stored in Postgres keyValuePair—env vars alone were insufficient on self-hosted Twenty
  • Sync worker health checks must pass before verify-news.sh treats a deploy as good
  • Compose overlay docker-compose.dardev-vps.yml keeps mailer ports isolated on dardev-vps
  • News article rewrites run validate-article.py in CI; template padding never reaches production HTML
  • CRM dashboard widgets broke when views used wrong widget types—fixed with scripts we now run on our own workspace

Each item became a runbook section or script in the repo because we needed it on a Tuesday night, not because a consultant suggested it. That is the feedback loop Deployed Realities promises: production pain becomes public documentation on news.dardev.net and dardev.net.

How dogfooding shapes what we sell

Platform buyers ask whether we run GitLab, Kubernetes, observability, and mail infrastructure ourselves. We answer with URLs and architecture articles—including inside-unified-mailer-stack—not hypothetical diagrams. Services buyers see the same dardev-vps patterns scaled to client clusters; product buyers see Hesabi and DarDevLab features that survived our own fiscal and learning workflows.

We also say no when dogfooding exposes limits. EscaHire stays on waitlist—we never describe it as generally available. We do not blur Hesabi Tunisia compliance with Morocco or Algeria availability. We do not pretend a single VPS is multi-region active-active. Honest limits are part of the stack we operate.

Engineers reviewing production dashboards for CRM and mailer services
Dogfooding means on-call familiarity with the same Compose stacks and nginx routes we document for partners.

Weekly habits that keep dogfooding real

  1. Deploy from git

    Merge to main triggers CI deploy scripts; emergency Portainer restarts get backported to compose files.

  2. Review metrics

    Grafana panels for disk, error rates, and cert windows—same Telegram routing we recommend in alert guides.

  3. Exercise consent paths

    Subscribe forms on news.dardev.net use double opt-in; CRM tags never auto-map to marketing lists on import.

  4. Publish what broke

    News articles and runbooks update when DNS, rate limits, or sync rules change—Deployed Realities stays current.

For the full policy framing, read deployed-realities-explained and how solutions versus platform products split buyer journeys. Dogfooding connects those narratives to crm.dardev.net and mail.dardev.net you can inspect.

What does dogfooding mean at DarDev specifically?

We operate Twenty CRM, Listmonk, Stalwart, sync worker, and news.dardev.net on dardev-vps for our own CRM, campaigns, and documentation. Patterns we recommend to clients are ones we depend on weekly—not lab demos.

Why dardev-vps instead of a greenfield cloud account?

It mirrors how many Tunisian and MENA teams actually host: a capable VPS, host nginx TLS, Docker Compose, and careful port maps beside existing services. Dogfooding there keeps our deploy scripts and coexistence rules honest.

How do you prevent cold CRM imports from becoming spam?

Prospect imports land in Twenty only. Listmonk lists update through the sync worker after explicit opt-in or product-interest flags—never on CSV import alone. Outbound mail uses send.dardev.net with aligned DNS.

Does dogfooding mean every DarDev product runs on the same VPS?

No. Hesabi TTN infrastructure and DarDevLab have their own production shapes. The Unified Mailer stack and news site share dardev-vps; we document boundaries rather than drawing one box for everything.

What should I ask a vendor who claims they dogfood?

Request production URLs, on-call owners, and a recent incident write-up. If they cannot show CRM, mail, or CI patterns they run themselves, treat Deployed Realities language as marketing until proven.

Get company news

Releases and announcements — confirm from your inbox.

Subscribe to updates