Skip to content
TopiquPublic

About

Your Company Blog on Autopilot

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

2,562 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Topiqu AI Blog

A multi-tenant publishing platform with an AI-assisted editor and AI visibility monitoring.

Nuxt, Vue, TypeScript, Tailwind CSS, Pinia, Bun, PostgreSQL, Docker, AWS and Vitest

Features · Quick start · Stack · Verification · Production · Documentation


Features

  • 📝 AI-assisted publishing — Tiptap editor, article generation, drafts and translations.
  • 🌐 Client sites — isolated tenants, subdomains, custom domains and configurable site widgets.
  • 🔎 SEO & AI visibility — search insights, citation monitoring and content opportunities.
  • 💬 Community — comments, follows and reader notifications.
  • 💳 Billing — Stripe subscriptions and credit top-ups.
  • 🔐 Access & localization — tenant access policies, OTP / 2FA and English, Czech, German and French.

Quick start

Requirements: Bun 1.4.2, Node 24.21.0 and Docker. Versions are pinned in .prototools and .node-version; Node is needed for Vue type checking and browser tests.

1. Configure your environment

Copy .env.example to .env and configure the services needed for your work.

2. Install dependencies and generate the ORM

bun install --frozen-lockfile
bun run zenstack:generate

3. Start the database, seed it and launch Nuxt

bun run db:up
bun run db:migrate:deploy
bun run db:seed
bun --bun run dev

The database and cache start through db:up; dev starts Nuxt only.

Database management

db:reset and db:fresh delete local database and cache volumes.

bun run db:down    # stop local services
bun run db:reset   # delete volumes and recreate services
bun run db:fresh   # reset, migrate and seed

ZenStack generates ignored schema metadata and TypeScript types in generated/zenstack/. The application uses ZenStack ORM directly; Prisma is an internal migration dependency of the ZenStack CLI.

Stack

Area Technology
Application Nuxt 4 · Vue 3.5 · TypeScript
UI Nuxt UI 4 · Tailwind CSS 4 · Reka UI
State & queries Pinia · Pinia Colada
Data ZenStack ORM 3 · PostgreSQL · pgvector
Editor Tiptap 3 with custom extensions
AI AI SDK 7 · Claude Haiku 5.5 · OpenAI
Runtime Bun 1.4.2 · Node 24.21.0
Integrations and tooling
  • Authentication: Better Auth, ZenStack adapter, argon2 and OTP / 2FA.
  • Billing: Stripe subscriptions and credit top-ups.
  • Media & email: AWS S3 / Rekognition / SES, Sharp, MJML 5, PDFKit and Takumi OG images.
  • Cache: optional Redis / Valkey.
  • AI visibility: native search adapters for visibility providers; each key in .env.example enables one.
  • Testing: Vitest, Nuxt Test Utils, jsdom and Playwright.
  • Code quality: ESLint, Prettier and vue-tsc.

Verification

Generate the ZenStack artifacts before checking a fresh checkout.

bun run zenstack:generate
bun run lint
bun run typecheck
bun run openapi:check
bun run test
bun run prettier
Watch mode and coverage
bun run test:watch
bun run test:coverage
Database and browser tests

PostgreSQL integration and browser tests require a separate disposable database in TEST_DATABASE_URL; they can apply migrations and clear test data. Never point this variable at a development or production database you want to keep.

bun x --no-install playwright install chromium webkit
bun run test:e2e
bun run test:e2e:release
Live AI checks

These checks call provider APIs and consume credits. Model IDs are centralized in modelRegistry.ts.

bun run ai:smoke
bun run eval:ai
bun run knowledge:eval

Production build

bun --bun run build    # generate ZenStack artifacts, then build Nuxt
bun --bun run preview

Apply database migrations with bun run release (targets DATABASE_URL). bun run build:docker is an alias for the same build.

Docker and runtime details

The Dockerfile uses the same pinned Bun version and installs from the frozen lockfile, including the compatibility patch in patches/. Its prerelease stage runs bun release with the supplied DATABASE_URL before building. The final image contains only .output and starts server/index.mjs with Bun. CI applies migrations to its disposable database before the production browser smoke tests.

When invoking Nuxt through Node instead of Bun, use a supported Node version (^22.21.0, ^24.11.0 or >=26.0.0).

Documentation

Source layout
app/                 Pages, components, composables, stores and styles
server/              Nitro APIs, routes, tasks and server utilities
shared/              Shared schemas, types and utilities
prisma/              ZenStack source schema and SQL migrations
generated/zenstack/  Generated ORM schema and types (ignored)
extensions/          Custom Tiptap extensions
emails/              MJML templates and translations
i18n/                Application translations for en, cs, de and fr
scripts/             Verification, backfill and maintenance commands
tests/               Unit, server, database, evaluation and browser tests
patches/             Reproducible dependency compatibility patches

Use translated UI strings, Vue Composition API with script setup and TypeScript, and template-first SFCs. Prefer Nuxt UI components and Tailwind utilities. Update MAP.md when changing the structure or adding functionality.

About

Your Company Blog on Autopilot

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages