Opinly Docs
Publish your Opinly content in your own app, and measure what it earns.
Opinly generates SEO-optimized blog content for your business. These docs cover the two ways you build on it.
Content — the Opinly SDK publishes your content inside your own application: no separate CMS, no markdown files, no iframe. You fetch posts over a versioned REST API and render them with your own UI. It's headless and framework-agnostic, shipping data and rendering primitives only — you own the layout.
Analytics — the pixel tracks what that content does. Which campaigns bring visitors, which visitors convert, and which of them turn into revenue. First-party, on your domain, no ad network in the middle.
The two work together — attributing a sale back to the post that earned it is the point — but you can use either on its own.
The package family
You only install the packages your framework needs. Everything builds on two foundations — a data client and an agnostic core — with thin framework adapters on top.
Every framework package also ships the analytics pixel, so the package you install for content is the same one you use for tracking — see Install the pixel.
| Package | Role |
|---|---|
@opinly/backend | Data client. Fetches your content over the /v1 REST API. Zero framework deps. |
@opinly/shared | Agnostic core. Content rendering (HTML + element walker), SEO/JSON-LD builders, sitemap/RSS helpers, URL + image helpers. Zero framework deps. |
@opinly/react | Render content as React elements (<OpinlyContent>). |
@opinly/vue | Render content as Vue components (<OpinlyContent>). |
@opinly/svelte | Render content in Svelte (<OpinlyContent>). |
@opinly/next | Next.js glue: image rewrites, generateMetadata, JSON-LD <script>. |
@opinly/nuxt | Nuxt SEO helper: opinlyHead() → useHead(). |
@opinly/sveltekit | SvelteKit SEO component: <OpinlySeo> → <svelte:head>. |
How it fits together
@opinly/backend ──fetch──▶ your route ──render──▶ @opinly/react / vue / svelte
│
└──SEO──▶ @opinly/next / nuxt / sveltekit- Fetch the content for a route with
@opinly/backend(opinly.posts(),opinly.post(slug), …). - Render the post body with your framework's renderer (
<OpinlyContent>). - Add SEO (metadata + JSON-LD) with your framework's meta-adapter.
Track what it earns
Pick your framework
Next.js
App Router: fetching, rendering, metadata, JSON-LD, sitemap & RSS.
Nuxt
Server fetch with useAsyncData, Vue rendering, SEO via useHead.
SvelteKit
Server load functions, Svelte rendering, SEO into <svelte:head>.
React
Any React app — Vite, Remix, Astro islands. No Next.js required.
Vue
Any Vue 3 app. No Nuxt required.
REST API
The raw /v1 HTTP contract — call it from any language.
New here?
Start with Sign up & get your API key, then the Quickstart to fetch and render a post in five minutes.
Using an AI builder (Lovable, v0, Bolt, Cursor)? Every page here is available as plain Markdown for your LLM — use the Copy for LLM button on any page, or feed it
/llms-full.txt(the whole docs site as one file).