A complete help center with markdown articles, product updates, contact form, and an embeddable beacon widget.
npx skills add charlieclark/markdesk
Everything you need for a self-hosted help center.
Write help articles in markdown with frontmatter. Organized by category with full-text search.
Changelog entries with badge categories. Show new updates as modal popups in the beacon.
Embeddable ~47KB Preact widget with search, articles, contact form, and update notifications.
Built-in contact form with support for SendGrid, Resend, or Nodemailer (SMTP).
Single config file for branding, colors, email provider, footer links, and more.
Built on Next.js with static generation, API routes, and Tailwind CSS.
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
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' },
}
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>
| 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 |
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 |