§01
Overview
- What it is: Astervis — a startup (build-in-public, with pitch decks) in the telephony / contact-center domain. The self-hosted product deploys to client servers (PBX/Asterisk) via a custom Go installer; there's a SaaS dashboard, licensing, AI features (AI Gateway, embeddings), and a full marketing engine (landing, blog, video, B2B outreach, analytics). This is "all of our own": product, delivery infra, GTM tooling.
- Type / status / role: web-app (SaaS + self-hosted) · active (latest commit 2026-05-26) · solo (248 of 286 commits are the user; 42 are Ilhombek2110).
- Activity window: 2025-10-24 → 2026-05-26, ~7 months of dense development, alive. NOTE: the main product code (
astervis/) and the site (astervis_sale_new/) live in git submodules (separate repos), so 286 meta-repo commits SIGNIFICANTLY understate the real volume — what's visible here is mostly the Go installer, design docs, submodule bumps, and pitch.
§02
Stack
- Languages: TypeScript (primary for apps), Go (installer), SQL (Drizzle/Postgres), JS.
- Frameworks/libraries:
- Frontend: Next.js 16 (App Router), React 19, Tailwind CSS 4, shadcn/ui, next-intl (ru/en/uz).
- Backend: Elysia.js on Bun, PostgreSQL + Drizzle ORM, Redis; the API compiles to a single binary via
bun build --compile. - Auth: Better Auth + RBAC (Google/GitHub OAuth).
- AI: Vercel AI SDK (
@ai-sdk/google|anthropic|openai), a separateai-gatewayapp (Elysia, port 4000),ai-worker, packagesai-core(Zod schemas/prompts/providers) andai-evals. - Go installer: Cobra CLI, charmbracelet/huh (TUI forms), pterm, lego/v4 (ACME/Let's Encrypt), go-redis, lib/pq, go-toml.
- Video: Remotion (programmatic generation of promos/IG carousels).
- Edge: Cloudflare Workers (CDN distribution of installer binaries via R2, wrangler).
- Infra/deploy: Turborepo + Bun v1.3.2 monorepo; Docker Compose (core product); GitHub Actions (
installer-release.ymloninstaller-v*tags → cross-platform binary build → R2 + GitHub Release); one-liner install viacurl … | bash; DNSimple for subdomain provisioning. Pitch deck as a generated PDF (port 3005). - Data: PostgreSQL, Redis, TimescaleDB (the installer has
timescaledb_data), CDC connector (change data capture). - Notable tooling: heavy AI tooling in the repo —
.claude/,.codex/,.agents/,.mcp.json,skills-lock.json,AGENTS.md; marketing CLI for GA4, GSC, Polar (payments), LinkedIn, Twitter/X, Instagram, Blog, B2B outreach.
§03
What was shipped
Conclusions from code/diffs (not commit text). In the meta-repo, the user's authored code is mainly the Go installer + design docs + release plumbing:
- Go installer (the core authored code here): ~25 releases (v0.0.57 → v0.0.74) over April–May 2026.
internal/modules:docker(compose, health, diskspace, iptables-recovery, compose migration),ssl(Let's Encrypt + remote),license(token, fingerprint, verify, state),cdc/connector,sangoma/firewall_watchdog,wizard(TUI),agent+api(REST agent on port 9876, certificate_renewal, update_manager, license_checker). - Design docs/plans: WhatsApp channel for Open Lines — design spec (
8731f32, +753) + implementation plan (536618f, +4049); AI pricing redesign plan (75bf32a, +209); HA migration runbook. - Release infra: CI workflow_dispatch escape hatch (
e023868), Cloudflare Worker for binary distribution. - Big tooling drop:
ae140f4(177 files, +31084) — submodule + docs + tooling. - Product submodule bumps: dozens of
Update astervis submodule to v1.0.19x…208— the product is actively evolving in a separate repo (WhatsApp channel, ai-gateway embedding tracking, etc.). - Volume: 286 meta-repo commits (248 by the user) over 7 months + invisible volume in the submodules (the product reached v1.0.208 — ~200+ releases).
§04
Technical challenges
- Idempotent self-hosted deploy with auto-recovery of Docker iptables (
447d789, installer v0.0.74,internal/docker/): oniptables: No chain/target/match by that name(firewalld/nftables reload wiped the Docker daemon'sDOCKERNAT chain), the installer detects it (IsDockerIptablesError), restarts the daemon (RestartDockerDaemon— systemctl → service fallback, withcontext.WithTimeout(90s)), waits 8s and retriesuponce; before start it always runsdocker compose down(without-v) to clear stuckCreatedcontainers holding ports 5432/6380/9092. On failure — a human-readable instruction instead of a raw stack trace. → Demonstrates: deep understanding of Docker networking/iptables, host-level resilience, idempotency, careful error UX. A strong DevOps/Go signal. - Networking/infra edge cases in the installer (from CHANGELOG/diffs):
host.docker.internalloopback MySQL resolution (04c3333); MySQL bind 0.0.0.0 + remote-grant for the backend container (c8ba8d4); Let's Encrypt for IP-only mode (b9b5ed9); disk precheck against the docker partition (d08b4b5); recursive chown of timescaledb_data (d8b5a81); mount/etc/machine-idinstead of a pinned-MAC hack for license fingerprint (82765d8); Sangoma firewall watchdog — host-level NAT recovery (a1211ea, +206). → Real-world operations across mixed Linux (Ubuntu/Debian/CentOS/RHEL/Sangoma/FreeBSD). - Self-hosted product licensing (
internal/license/): token + fingerprint + verify + state — anti-piracy hardware binding via/etc/machine-id. → Product thinking (on-prem monetization). - Three-layer binary distribution: CI (GitHub Actions on tags) → Cloudflare Worker (CDN from R2) → API (
/api/releasesmetadata +install.shbootstrap). → A full supply chain for self-hosted software. - Compiled Elysia.js API (
bun build --compileto a single binary) + RBAC via Better Auth + subdomain provisioning via DNSimple on/api/plans. → Modern edge / Bun stack, non-standard production choices. - AI layer as separate apps/packages (
apps/ai-gatewayElysia,packages/ai-coreZod + providers,ai-evals,ai-worker): a structured AI roadmap by phases (docs/ai-research/roadmap/phase-{0-5}), embedding tracking. → A mature architecture for AI features, not "I bolted on ChatGPT".
§05
AI-assisted development
- Sessions found: 21
.jsonlfor the project root (plus 6 more nested encoded directories for submodule paths of the monorepo:…-astervis,…-astervis-sale-new,…-apps-api,…-packages-db,…-installer,…-scripts-polar— but transcripts are concentrated in the root). ~43k transcript lines total — very high intensity. - What was done with AI: development along the AI roadmap, installer (infra fixes), design docs (WhatsApp channel spec/plan), marketing automation, pitch.
- AI workflow patterns: mature, systematic AI-driven dev — the repo pins
AGENTS.md,skills-lock.json(lock of the skills set),.mcp.json(MCP servers), multi-tooling (.claude/+.codex/+.agents/= Claude Code + Codex + others). CLAUDE.md sets the vocabulary, port map, required skills (/ai-sdk,/ai-elements,/vercel-react-best-practices), and mandates reading the roadmap before any task. A reference example of an "AI-native" development process.
§06
Achievements & metrics
- Monorepo scale: 7 apps in
astervis_sale_new/apps(admin, ai-gateway, ai-worker, api, docs, pitch-deck, web) + 14 shared packages (ai-core, ai-evals, analytics, auth, cache, cli, db, email, entities, ui, intercom…); the core productastervis/(backend, new_admin, queue, replication, nginx) reached v1.0.208. - Installer OS support: Ubuntu, Debian, CentOS, RHEL, Sangoma Linux, FreeBSD; cross-compilation + checksums.
- Installer releases: ~18+ versions in ~2 months (v0.0.57→0.0.74).
- GTM infra: integrations with GA4, GSC, Polar, LinkedIn, Twitter, Instagram, Intercom, PostHog.