Dashboards & Reporting
Social Engagement Ops Dashboard
An internal ops console for participating in online communities the legitimate way: useful replies, disclosed promotion, and a clear record of everything posted. It is deliberately not an autoposter or fake-engagement tool — a person reviews and approves every draft, and the only writes to social platforms are manual copy-paste with the resulting permalink logged back in. The frontend is a single React 19 + TypeScript app; persistence and all outbound integrations run through guarded Vite dev-server middleware.
Stack
Concepts
How it works
The whole flow, traced from your first tap.
- 01
Browser (React UI)
Set up accounts and the communities worth your time
You record each real account (platform, handle, owner, niche, status, weekly action limit) and the communities you participate in with their rules and a quality score. It all lives in one typed app-state object, cached to localStorage for an instant render.
React 19TypeScriptlocalStorage - 02
Browser + Vite middleware
Queue genuine opportunities to reply to
You add threads and posts as opportunities (community, assigned account, intent, priority, context, due date). Search proxies help you find live threads, and Reddit URLs are normalized to clean thread permalinks so comment-anchored links from search engines do not slip through.
Reddit public JSONBrave / Serper / Tavily proxies - 03
Browser (React UI)
Draft a reply, then have a human approve it
The draft studio turns an opportunity into an editable draft in helpful, short, expert, or soft-mention mode. Each draft gets a low/medium/high risk score based on promo intent, sales phrasing, and length, and it cannot move past the approve step until a person signs off. The first reply is steered to answer the question, not to promote.
Draft studioRisk scoring - 04
Browser (React UI)
See exactly what to do today, paced by the rules
The Today tab suggests one or two next actions under encoded pacing rules: one post per platform per day, a two-per-day ceiling, minimum gap days on the launch sequence, a rest-day hint after five straight days, and a crossover lock that hides brand-promo items until ten real comments are logged with permalinks.
Cadence engineCrossover lock - 05
Browser + Vite middleware (Node)
Post manually, then log the permalink
You post by hand and paste the live URL back in; the permalink is required to mark anything posted. The save is debounced to the state endpoint, written atomically (temp file, rename, .bak), and guarded by an mtime revision check so a CLI edit and an open tab never overwrite each other.
Atomic file writesmtime 409 concurrency - 06
Vite middleware + External
Verify replies and watch account health
After 24h the dashboard fetches reply counts and the latest reply through the server-side Reddit JSON proxy (throttled, with a mark-handled flow). Account health rolls up weekly action utilization and open queue per account, and a usage banner reads the Postgres usage table to show how much of each search provider's monthly free cap you have spent.
Reddit reply checkerPostgres usage banner
The problem
Running real engagement across several accounts and communities by hand gets messy fast: you lose track of which threads you meant to reply to, whether a draft was reviewed, what you actually posted, and whether you are respecting each community's promo rules and per-account weekly limits. Off-the-shelf growth tools solve this by automating mass posting and fake engagement, which violates platform terms and burns accounts.
What we built
A dense, utilitarian dashboard organized around the real daily loop. Accounts, communities, opportunities, drafts, posted activity, and queues all live in one typed app-state object. A Today tab surfaces what to do now; a draft studio turns an opportunity into an editable draft; nothing reaches posted without passing through a human approve step and recording the live permalink. Guardrails are baked in: drafts are scored low/medium/high risk for promo intent, sales language, and over-length, and every mark-posted flow requires the comment URL so follow-up never gets lost.
Cadence rules and optimistic concurrency
Two things make the engineering interesting. First, a real cadence engine encodes the anti-spam pacing as code: one post per platform per day with a two-per-day ceiling, per-item minimum gap days on the launch sequence, a rest-day hint after five consecutive posting days, and a crossover lock that refuses to suggest any brand-promotion item until ten genuine comments have been logged with permalinks. Second, persistence is a local JSON file served by a Vite plugin using atomic temp-file-plus-rename writes with a .bak, and mtime-based optimistic concurrency: every save carries the file revision it last read, and the server returns 409 with the current file if it changed underneath you, so a CLI edit and an open browser tab never silently clobber each other.
Outcome
A working daily-driver that keeps multi-account engagement organized, reviewable, and compliant, while staying honest about its limits: localhost-only middleware with no auth, manual posting only, and official/public read APIs only. Search proxies log every call to a Postgres usage table so an in-app banner can show how close each free tier is to its monthly cap before you spend it.
Interested in something similar?
Tell us what you need and we'll figure out how to ship it.