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.
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.
- 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)]