Golden Mac-Eteli
Back to Projects
Bloggr
Productfull stack

Bloggr

Private-beta AI content strategist: ingest a website into a living Business Profile, then write by chatting with a LangGraph agent that researches, remembers the business, and publishes to Bloggr, Framer, or any frontend via a public API.

About the Project

Bloggr is a private-beta AI content strategist, not a ChatGPT wrapper or a CMS with AI bolted on. You paste a website; it becomes the brief. The dashboard opens to the strategist chat — not a post list — and every draft is bound by a living Business Profile: audience, voice, goals, and guardrails. Workspaces keep each brand isolated. Published posts leave through Bloggr, Framer CMS, or a workspace-scoped public API — the same API this portfolio is built to consume.

Problem

The blank page is not the problem. The workflow is. ChatGPT forgets the business after every session. Typical AI writers still export somewhere else. Teams either embed a heavy CMS or rebuild auth, drafts, search, and publishing from scratch. Founders and small teams need a strategist that already knows the business and a publish path that does not start over on every post.

Features I Handled

Described using the STAR method — Situation, Task, Action, Result.

Feature 1

Website Ingest and Business Profile

Situation

Onboarding a content tool usually means a 20-field wizard that still forgets the brand by the next session.

Task

Turn a public website into a living profile the agent can read, correct, and reuse across every post.

Action

Built website ingest via Tavily extract or HTTP fetch, then an LLM proposal for industries, audience, voice, goals, competitors, and guardrails. The profile is the workspace constitution; chat can correct it, and memory keeps preferences so the next post is not a re-brief.

Result

Setup is a URL, not a form. Drafts start on-brand, and off-brief topics get a warning before the agent writes.

Feature 2

Orchestratorv2 Strategist

Situation

Generic chat UIs generate text without research provenance, quality gates, or control over what goes live.

Task

Ship a conversation-first agent that researches, writes, scores, and only publishes with explicit approval.

Action

Implemented Conversation Intelligence into a LangGraph orchestrator with research, writing, and content-optimization skills. Writing consumes a persisted Tavily research package instead of searching ad hoc. SEO/GAO scoring gates drafts. Destructive publish and schedule actions interrupt for human confirmation.

Result

Users steer in natural language and stay in control of what ships. The AI feels like a strategist, not a text generator with a chat skin.

Feature 3

Headless API and Framer Publish

Situation

Custom sites and Framer properties needed published content without exposing admin credentials or claiming destinations that were not built.

Task

Give each workspace a read-only public API and a real CMS publish path, plus schedule and calendar.

Action

Shipped workspace-scoped API keys (x-access-key-id / x-secret-key) for published posts and categories, Next.js BFF proxies so secrets never reach the browser, and live publish to Bloggr and Framer CMS with scheduling and a publishing calendar.

Result

Frontends consume the same published catalog. WordPress, Webflow, and Ghost are not claimed — live destinations today are Bloggr and Framer.

Architecture & Technical Decisions

Bloggr is a modular monolith: an Express API with tsyringe DI and a separate Next.js dashboard. The dashboard is chat-first (orchestratorv2). Custom frontends never talk to admin credentials — they hit a public REST API through a BFF.

Microservices?

No — modular monolith

Serverless?

No — long-running Node API + workers

Auth model

JWT (dashboard) + workspace-scoped API keys

Frontend pattern

Chat-first dashboard + headless public API

Architecture pattern
Modular monolith (Repository → Service → Controller, tsyringe DI) plus LangGraph agent runtime
Hosting & deployment
Long-running Node API with Redis/Bull workers; Next.js dashboard on Netlify/Vercel-style SSR. Not serverless.
Data layer
PostgreSQL (Drizzle) for users, workspaces, posts, API keys, and billing; MongoDB for orchestrator threads, checkpoints, and long-term memory artifacts
Integrations & services
OpenAI, Tavily, Brevo, Stripe, Framer CMS, public REST API
flowchart LR
  dashboard[NextjsDashboard] --> orchestrator[Orchestratorv2]
  orchestrator --> skills[ResearchWritingOptimize]
  orchestrator --> api[ExpressModularMonolith]
  skills --> tavily[Tavily]
  skills --> openai[OpenAI]
  portfolio[CustomFrontends] --> proxy[NextjsBFFProxy]
  proxy --> publicApi[PublicBlogAPI]
  publicApi --> api
  framer[FramerCMS] --> api
  api --> postgres[(PostgreSQL)]
  api --> mongo[(MongoDB)]
  api --> redis[(Redis)]