Open Source · Next.js + Preact

Markdesk

A complete help center with markdown articles, product updates, contact form, and an embeddable beacon widget.

npx skills add charlieclark/markdesk
View on GitHub

Features

Everything you need for a self-hosted help center.

📝

Markdown Articles

Write help articles in markdown with frontmatter. Organized by category with full-text search.

📢

Product Updates

Changelog entries with badge categories. Show new updates as modal popups in the beacon.

💬

Beacon Widget

Embeddable ~47KB Preact widget with search, articles, contact form, and update notifications.

📧

Contact Form

Built-in contact form with support for SendGrid, Resend, or Nodemailer (SMTP).

🎨

Configurable

Single config file for branding, colors, email provider, footer links, and more.

⚡

Next.js 16

Built on Next.js with static generation, API routes, and Tailwind CSS.

Quick Start

Up and running in under a minute.

# Set up with the Vercel Skill
npx skills add charlieclark/markdesk

# Or clone manually
git clone https://github.com/charlieclark/markdesk.git my-help-center
cd my-help-center && rm -rf .git

# Configure, install, and run
# Edit markdesk.config.ts
npm install && npm run dev

Configuration

All settings live in a single markdesk.config.ts file.

{
  name: 'My Product',
  siteUrl: 'https://help.example.com',
  productUrl: 'https://example.com',
  supportEmail: 'support@example.com',
  fromEmail: 'help@example.com',
  colors: { primary: '#4b68af' },
  emailSender: 'resend',
  footer: { termsUrl: '', privacyUrl: '' },
  allowedOrigins: [],
  beacon: { title: 'Help' },
}

Beacon API

Embed the beacon on any site with two script tags.

<script>
  window.MarkdeskConfig = {
    helpCenterUrl: 'https://help.example.com',
    title: 'Help',
  };
</script>
<script src="https://help.example.com/beacon.js" async></script>

JavaScript API

Method Description
Markdesk.open('answers')Open beacon to Answers tab
Markdesk.open('updates')Open beacon to Updates tab
Markdesk.open('ask')Open beacon to Contact tab
Markdesk.close()Close the beacon
Markdesk.toggle()Toggle beacon open/closed
Markdesk.identify({email})Pre-fill contact form email
Markdesk.showModal()Enable update modal (when autoShowModal is false)
Markdesk.article(slug)Open a specific article

Email Providers

The contact form supports three email providers out of the box.

Provider Config Value Environment Variable
Resend'resend'RESEND_API_KEY
SendGrid'sendgrid'SENDGRID_API_KEY
Nodemailer'nodemailer'SMTP_HOST, SMTP_PORT, SMTP_USER, SMTP_PASS
Copied to clipboard