# Build brief — a focused alternative to Zernio

> **Verdict:** Not faithfully · **Buildability:** 6/100 · **Category:** Social Media
> **Source:** https://www.canitbevibecoded.com/zernio
> Independent editorial assessment from Can It Be Vibe Coded? Not affiliated with, endorsed by, or derived from Zernio. Verify current pricing and capabilities before acting.

## Context

**Zernio** — Developer API for 15+ social platforms plus messaging infra: WhatsApp, SMS, RCS, voice calls, and provisionable phone numbers. It currently costs $6/mo.

The scheduler is the easy 10 percent and an agent can build it in a sitting. The other 90 percent is approval-gated: Instagram, TikTok, LinkedIn, Threads, YouTube, and Pinterest publishing all require a reviewed developer app (Meta App Review, TikTok audit, LinkedIn partner access), and X's API starts at $200/mo. Past the gate, the real product is upkeep: OAuth token refresh and revocation handling across 15 networks, per-platform media validation and transcoding, rate-limit cooldowns, and error remediation when platforms change behavior. Then there is the half that is not software at all: Zernio provisions real phone numbers across dozens of countries and runs WhatsApp Business, SMS, RCS, and voice calling on them, which means carrier relationships, per-country regulatory documents, and Meta business verification. No coding agent can conjure a phone number or pass KYC for you. Add the rest of the surface (unified DM/comment inbox, analytics, ads management across six ad platforms) and this is infra plus compliance, not a focused implementation of code.

This brief describes a focused, single-operator replacement for the part of Zernio that is genuinely reproducible. It is deliberately narrower than the product it replaces, and it says so in writing. Build the useful core; do not pretend to have rebuilt the rest.

## What you are building

Expose a small REST API that accepts a post with media and a schedule time, queues it, and publishes to networks with open APIs (Bluesky, Mastodon, Telegram, Discord, Reddit) with retries and per-target status.

- Draft, queue, and track content for the few networks you actually use.
- A responsive interface with real empty, loading, success, and error states.

## Requirements

### Functional

- Hosted scheduler, database, and job queue.
- Media storage with per-platform validation and transcoding.

### Data and integrations

- Reviewed developer app per closed platform (Meta App Review, TikTok audit, LinkedIn partner program, Pinterest; X API paid tier).
- OAuth flows plus token storage, refresh, and revocation handling.
- Webhook receivers for platform callbacks.
- For messaging: WhatsApp Business API access, phone numbers with per-country KYC, and SMS/voice carrier contracts (or reselling Twilio, the kind of subscription you were replacing).

Each of these needs a real account, credential, or quota. Set them up before writing feature code.

### Non-functional

- Accessibility: semantic markup, labelled controls, visible focus, and reduced-motion support.
- Security: server-side secrets, validated input, and no credentials in the client bundle.
- Reliability: retries with backoff on external calls, and a clear failure state when a provider is down.
- Portability: the operator can export their data and leave without losing it.

## Implementation brief

Build me a personal social publishing API to replace Zernio. Requirements:

- Node + Fastify + better-sqlite3, single API key from .env, runs on my
  always-on box.
- Adapters ONLY for networks that hand out credentials on signup: Bluesky
  (app password via @atproto/api), Mastodon (access token), Telegram channel
  (bot token), Discord (webhook URL), Reddit (script app). One small adapter
  file per network so a sixth is addable later; scaffold nothing I don't use.
- POST /posts accepts text, image URLs, scheduledFor (ISO, my timezone), and
  a list of target accounts; media is downloaded once to media/ and checked
  for type and size before the post is accepted.
- A node-cron tick every minute publishes due posts: mark a row as sending
  before publishing so nothing ever double-posts, per-target status, 3
  retries with backoff, partial failures don't block other targets.
- GET /posts and GET /posts/:id return queue state and per-network
  permalinks; a plain localhost page lists the queue and recent failures.
- Optional webhook: POST to a URL from .env on published and failed.
- Binds to localhost only. No accounts, no telemetry.
- Out of scope: the approval-gated networks (Instagram, TikTok, LinkedIn,
  Threads, YouTube, Pinterest), DMs, comments, analytics, and ads. Skip
  anything that needs a phone number (WhatsApp, SMS, calls): numbers,
  carrier access, and KYC cannot be vibecoded.
- README: how to get each credential (Bluesky app password, Mastodon token,
  Telegram bot via BotFather, Reddit script app), plus an honest note that
  the closed networks need app review or paid API tiers.

## Delivery standard

- Inspect the repository first, then write a short implementation plan before writing code.
- Deliver the smallest complete end-to-end workflow first; every primary control must work against persisted data.
- Use real validation and storage; never substitute fake dashboards, decorative controls, hard-coded success states, or mock integrations.
- Include responsive layouts plus genuine empty, loading, success, validation, and failure states.
- Keep secrets server-side in environment variables, provide .env.example, and never commit credentials or user data.
- Add structured logs around every external call and return actionable errors without leaking sensitive details.
- Write unit tests for the core logic and one automated test of the main user journey.
- Finish with a README covering setup, architecture, data location, backups, tests, deployment, and known limitations.

## Acceptance criteria

- [ ] A clean install starts the app using only the README and .env.example.
- [ ] The primary journey works from first visit through saved result, reload, edit, export, and deletion where applicable.
- [ ] Invalid input, missing configuration, provider failure, and an empty database each have a usable state.
- [ ] The interface works at 390px and 1440px, is keyboard navigable, and shows visible focus on every control.
- [ ] Tests, type checking, linting, and a production build all pass with no ignored failures.
- [ ] No part of the interface implies a live integration, security guarantee, or scale capability that was not actually built and verified.

## Non-goals

Do not build these, and do not claim to have replaced them:

- Publishing to approval-gated networks at all (Instagram, TikTok, LinkedIn, Threads, YouTube) without your own reviewed apps.
- Token lifecycle handling: refresh, revocation detection, reconnect flows across 15 networks.
- Platform error remediation, retry logic, and rate-limit cooldowns that keep queues alive.
- The media pipeline: per-platform validation, compression, transcoding, re-hosting.
- The entire messaging stack: phone numbers provisioned per country with KYC handled, WhatsApp Business templates and broadcasts, SMS, RCS, and voice calling.
- Everything else beyond posting: unified DM/comment/review inbox, contacts, analytics, ads APIs, conversion tracking.

## What you still own after launch

- Secure credentials, rotate secrets, and handle provider rate limits.
- Run migrations, backups, restores, and dependency updates.
- Test the critical journey after every model, API, or hosting change.
- Monitor failures and fix the edge cases a first prompt will miss.
- Maintain every third-party integration as APIs and OAuth rules change.

## Risk

**High consequence.** Use this as a prototype or personal aid. Keep a qualified human and an established provider in the loop for consequential decisions.

Editorial confidence in this assessment: high. No reviewed project implementation is linked yet.

## Prior art

Working open-source software you can read, fork, or borrow from before starting:

- [Postiz](https://github.com/gitroomhq/postiz-app) — Open-source social scheduler with an API; still requires bringing your own approved platform apps

---

Generated by [Can It Be Vibe Coded?](https://www.canitbevibecoded.com) · Full report: https://www.canitbevibecoded.com/zernio
