AI Agent Guide: BeatPass Documentation
Purpose: Create accurate, user-focused documentation for all BeatPass features—new docs, updates, and release notes.Quick Start
What Type of Documentation?
New Documentation
Creating docs for features that aren’t documented yet
Update Existing
Fixing or refreshing current documentation
Release Notes
Announcing new features and changes
Section 1: Universal Principles (Apply to ALL Documentation)
Core Mandates
- Verify First, Write Second — Never document without confirming feature exists
- Exact UI Labels — Use bold text for buttons, menus, sections:
**Billing** - No Technical Jargon —
music.createpermission → “ability to upload tracks” - User-Focused — Write “you can” not “we have added”
- Root-Relative Links —
/help/pathnot../pathorhttps://... - Font Awesome 6 Icons Only — The icon library is
fontawesome. Never use Lucide icon names. - WCAG AA Compliance — All colors must meet minimum 4.5:1 contrast ratio against their background.
- Use Snippets for Repeated Content — Never duplicate content that exists as a reusable snippet. Import from
/snippets/instead.
Audience Separation Rule
CRITICAL: Maintain clear separation between user-facing and technical documentation:| Location | Audience | Language |
|---|---|---|
Documentation/help/ | End users (non-technical) | Plain English, no code |
Documentation/developers/ | Developers (technical) | Technical terms, code examples OK |
Documentation/help/release-notes/ | End users (non-technical) | Plain English, benefits-focused |
/help/:
- ❌ NO code examples
- ❌ NO API endpoint references
- ❌ NO technical implementation details
- ❌ NO database column names
- ❌ NO internal architecture explanations
- ✅ YES plain English explanations
- ✅ YES user actions and outcomes
- ✅ YES benefits and value propositions
- Reference the developers documentation: “See API Reference for technical details”
- Keep the main content focused on user actions
- Don’t explain how it works, explain how to use it
The Golden Rule
NEVER document a feature without verifying it exists in the codebase.Before writing a single sentence:
Critical Verification Checklist
For every documentation task:- Feature existence — Found in codebase
- UI elements — Exact labels from components
- Navigation — Actual menu paths verified
- Database values — Queried if applicable (pricing, settings)
- No hallucination — Only documented verified facts
Common Verification Commands
Prohibited Content
| Never Use | Why | Instead |
|---|---|---|
| Internal permission names | Users don’t see these | Plain English descriptions |
| Database column names | Technical implementation detail | User-facing descriptions |
Route paths like /api/v1/... | Internal only | ”the API” or feature name |
| Code variable names | Not user-facing | Human-readable terms |
| Assumed navigation | Often wrong | Verified exact paths |
| Emoji | Use Mintlify icons | <Icon icon="check" /> |
| Lucide icon names | Wrong library | Use Font Awesome 6 names (see below) |
| Code examples | Technical, for /developers/ | Describe what user does |
| API endpoints | Technical, for /developers/ | Link to dev docs |
| Implementation details | Technical, for /developers/ | Focus on user actions |
<Tooltip> for inline definitions of domain jargon and technical terms (first occurrence per page only). See Mintlify Reference for syntax and rules.
Section 1.5: Icon Library, Links & Accessibility (CRITICAL)
Icon Library: Font Awesome 6 ONLY
The BeatPass docs use Font Awesome 6 ("icons": { "library": "fontawesome" } in docs.json). This is NOT Lucide. Using Lucide icon names will cause icons to silently fail to render.
BEFORE using any icon, verify it exists at fontawesome.com/icons.
Common Lucide → Font Awesome 6 Mistakes
| ❌ Lucide (WRONG) | ✅ Font Awesome 6 (CORRECT) |
|---|---|
activity | chart-line |
alert-circle | circle-exclamation |
alert-triangle | triangle-exclamation |
bar-chart | chart-bar |
check-circle | circle-check |
cloud-upload | cloud-arrow-up |
disc | compact-disc |
edit | pen-to-square |
external-link | arrow-up-right-from-square |
eye-off | eye-slash |
file-plus | file-circle-plus |
file-text | file-lines |
help-circle | circle-question |
layout-dashboard | table-columns |
megaphone | bullhorn |
message-square | comment |
mic-2 | microphone |
monitor | desktop |
refresh / refresh-cw | arrows-rotate |
rotate-ccw | rotate-left |
scale | scale-balanced |
settings | gear |
share-2 | share-nodes |
smartphone | mobile-screen-button |
trash-2 | trash-can |
trending-up | arrow-trend-up |
x | xmark |
x-circle | circle-xmark |
zap | bolt |
Validation Rule
NEVER use an icon name without verifying it at fontawesome.com/icons. If the icon doesn’t exist in FA6, it will render as blank — no error, no warning, just an invisible icon.
Link Rules
Internal doc links — Use root-relative paths:Rule: If the link target is a page inside the Mintlify docs (exists as anCard.mdxfile), use a root-relative path. If it’s an app page, external site, or non-doc resource, use a fullhttps://URL.
href validation — Before using any href on a <Card> component:
- If it starts with
/help/or/developers/or/release-notes/→ verify the.mdxfile exists on disk AND is listed indocs.jsonnavigation - If it points to an app page → use
https://open.beatpass.ca/... - If the target file was moved or renamed → update ALL references across the entire docs
WCAG AA Color Compliance
All colors indocs.json must pass WCAG AA (minimum 4.5:1 contrast ratio for normal text against their background).
| Color | Minimum Ratio vs White | Minimum Ratio vs Dark (#050505) |
|---|---|---|
primary | 4.5:1 | 3:1 |
light | 3:1 | 4.5:1 |
dark | 4.5:1 | 3:1 |
- Primary:
#187AB4(4.63:1 vs white ✅) - Light:
#5BC0F0(9.94:1 vs dark ✅) - Dark:
#1F8AC8(5.36:1 vs dark ✅)
Never change the primary color without verifying WCAG AA compliance. Use a contrast checker like webaim.org/resources/contrastchecker.
Mintlify CLI Known Issues
mint broken-links false positives (v4.2.329): The CLI only resolves links pointing to directory/index.mdx paths. Links to direct .mdx files (e.g., /help/account-settings/account-details) are reported as broken even when the file exists and is in docs.json. Use mint validate as the authoritative build check.
Section 2: Writing New Documentation
When to Create New Docs
- Feature exists but has no documentation
- User confusion reported (support tickets)
- Complex workflow needs explanation
- Gap in current documentation coverage
The 6-Step Process
Step 1: Research
Questions to answer:- What does this feature do?
- Who uses it? (audience)
- How do they access it? (navigation)
- What are prerequisites?
- What are the outcomes?
Step 2: Verify Everything
- Menu items from database query
- Button text from component files
- Pricing from products/prices tables
- File formats from settings table
Step 3: Determine Structure
| Doc Type | Structure |
|---|---|
| Overview | What → Why → Who → Where → Related links |
| How-to | Prerequisites → Steps → Verification → Troubleshooting |
| Reference | Tables, specifications, lists |
| Tutorial | Context → Steps → Practice → Next steps |
Step 3.5: Check for Applicable Snippets
Before writing, check if reusable snippets cover any content you need:| Content Pattern | Snippet to Import |
|---|---|
| Platform fee callout | PlatformFee from /snippets/callouts/platform-fee.mdx |
| ”Need Help?” section | NeedHelp from /snippets/sections/need-help.mdx |
| ”Still Need Help?” section | StillNeedHelp from /snippets/sections/still-need-help.mdx |
| Support contact line | SupportContact from /snippets/sections/support-contact.mdx |
| Subscription required | SubscriptionRequired from /snippets/callouts/subscription-required.mdx |
| Stripe Connect required | StripeConnectRequired from /snippets/callouts/stripe-connect-required.mdx |
| Producer-only feature | ProducerOnly from /snippets/warnings/producer-only.mdx |
| API invite-only warning | ApiInviteOnly from /snippets/warnings/api-invite-only.mdx |
| Plan comparison table | PlanComparisonTable from /snippets/data/plan-comparison-table.mdx |
Step 4: Create File
Naming:- lowercase-with-hyphens.mdx
- Descriptive but concise
- Group in subfolders if related
Step 5: Write Content
Frontmatter + snippet imports template:- Introduction: 2-3 sentences
- Prerequisites: Bullet list (if needed)
- Steps: Numbered, exact UI labels in bold
- No technical jargon
- Specific numbers, not vague terms
Step 6: Cross-Link
- Link to related documentation
- Update parent index to include new doc
- Link FROM related docs TO this one
New Documentation Checklist
- Feature verified to exist
- Navigation paths verified
- UI labels exact and bolded
- No technical jargon
- Frontmatter complete
- Root-relative links for internal docs, full URLs for app pages
- All icon names verified against Font Awesome 6 (NOT Lucide)
- Snippets checked — used for all applicable patterns (fees, warnings, support sections)
- No inline duplication of content that exists in
/snippets/ - Snippet imports use absolute paths (
/snippets/...) - Related docs cross-linked
- Parent index updated
Section 3: Updating Documentation
When to Update
- UI text changed (button names, menu items)
- Navigation paths changed
- Pricing or plans changed
- Feature behavior changed
- Error found in current docs
- Feature removed or deprecated
The Update Process
Step 1: Read Current Doc
Identify all claims and instructions that need verification.Step 2: Verify Current State
Run same verification as for new docs:Step 3: Identify Changes
Compare doc vs. reality:| Current Doc Says | Verified Reality | Action |
|---|---|---|
| ”Settings → Subscription" | "Profile avatar → Billing” | Update navigation |
| ”$19/month" | "$29/month” | Update pricing |
| ”Cancel Subscription" | "Cancel plan” | Update button text |
| Feature exists | Feature removed | Add deprecation notice |
Step 4: Make Minimal Changes
- Change only what’s wrong
- Preserve correct content
- Maintain existing tone
- Keep structure if possible
Step 5: Check Related Docs
If navigation changed, update ALL docs with that path:Update vs. Rewrite Decision
| Situation | Action |
|---|---|
| Single element changed (button name) | Update |
| Navigation path changed | Update |
| Pricing changed | Update |
| Minor feature changes | Update |
| Major redesign | Rewrite |
| Multiple fundamental errors | Rewrite |
| Feature removed | Update with deprecation notice |
Update Checklist
- Current doc fully read
- All claims verified
- Outdated content identified
- Minimal targeted changes made
- Related docs checked for same errors
- Tone and style preserved
- No accidental content deletion
- Snippet opportunities identified — inline content replaced with snippet imports where applicable
- Existing snippet imports verified — still using correct paths and names
Section 4: Release Notes
Release notes announce changes to users. BeatPass uses a two-part system:- Individual release note pages — Detailed pages in
release-notes/v3.0/with full content - Unified changelog —
release-notes/changelog.mdxusing MintlifyUpdatecomponents with tag filters and RSS feed (/release-notes/changelog/rss.xml)
Quick Reference
| Type | Template | Severity | Icon |
|---|---|---|---|
| Feature | template-feature.mdx | minor | star |
| Improvement | template.mdx | patch | bolt |
| Bugfix | template.mdx | patch | wrench |
| Security | template-security.mdx | hotfix | shield |
| Hotfix | template-hotfix.mdx | hotfix | circle-exclamation |
| Major Release | template-major-release.mdx | major | rocket |
The 9-Step Process
- Select template based on type
- Determine metadata (audience, tags, components, severity)
- Verify feature existence (search codebase)
- Write individual page (summary, what’s new, why it matters, how to use)
- Apply style (present tense for features, past for fixes, bold UI refs)
- Validate (checklist + Mintlify components)
- Place individual file in
release-notes/v3.0/{version}.mdx - Add changelog entry —
Updatecomponent at top ofrelease-notes/changelog.mdx - Update docs.json — Add page to correct month group in “What’s New” tab
Individual Page Specifics
Frontmatter:- Summary — 2-3 sentences, lead with benefit
- What’s New — 3-7 bullets, active voice
- Why It Matters — 2-4 bullets, user value
- How to Use — Steps if applicable
- Migration Guide — If breaking changes
- Past tense for fixes (“Fixed…”, “Resolved…”)
- Present tense for features (“Adds…”, “Improves…”)
- Time-bounded (dated)
- Severity classification
- Audience-specific
Changelog Entry Specifics
Add anUpdate component at the top of release-notes/changelog.mdx:
Feature, Bug Fix, Security, Performance, UI/UX, Billing, Producer, Mobile, Platform, API, Notifications
RSS note: If the entry contains Mintlify components or HTML, add an rss prop:
Release Note Checklist
- Feature existence verified
- Template selected correctly
- Frontmatter complete
- Tags from taxonomy
- Severity appropriate
- Version bump calculated (see Section 4.5)
- Summary leads with benefit
- 3-7 bullets in What’s New
- Past tense for fixes, present for features
- UI references exact and bold
- Individual page named correctly:
release-notes/v3.0/{version}.mdx - Changelog
Updateentry added at top ofchangelog.mdx -
Updatelabel format:"Month Day, Year" -
Updatetags: 1-3 Title Case from approved set -
docs.jsonnavigation updated (correct month group) -
.envAPP_VERSION updated (see Section 4.5) -
package.jsonversion updated -
public/version.jsonversion updated
template.mdx for the complete changelog workflow
Section 4.5: Version Management (Release Notes Only)
When creating release notes, you MUST also version-bump the BeatPass application following Semantic Versioning (SemVer) standards.Single Source of Truth
The app version is stored in.env as APP_VERSION. This is the only runtime source.
settings.version row exists).
Semantic Versioning Rules
| Release Type | Severity | Version Change | Example |
|---|---|---|---|
| Bug fix, patch | patch | Increment PATCH | 3.0.8 → 3.0.9 |
| New feature (backward compatible) | minor | Increment MINOR, reset PATCH | 3.0.8 → 3.1.0 |
| Breaking change, API change | major | Increment MAJOR, reset MINOR/PATCH | 3.0.8 → 4.0.0 |
| Security/Hotfix (urgent) | hotfix | Increment PATCH | 3.0.8 → 3.0.9 |
Version Bump Process
When creating a release note:- Read current version from
.envfile (line withAPP_VERSION=) - Determine severity from release note type (see Quick Reference table above)
- Calculate new version:
patchorhotfix: X.Y.Z → X.Y.(Z+1)minor: X.Y.Z → X.(Y+1).0major: X.Y.Z → (X+1).0.0
- Update ALL three files:
| File | Change |
|---|---|
.env | APP_VERSION=3.1.0 |
package.json | "version": "3.1.0" (line 4) |
public/version.json | "version": "3.1.0" |
- Clear config cache:
php artisan config:clear
Frontmatter Integration
Include the new version in release note frontmatter:Version Bump Checklist
- Current version verified from
.env(APP_VERSION=X.Y.Z) - Severity determined from release note type
- New version calculated correctly per SemVer rules
-
.envupdated with newAPP_VERSION -
package.jsonupdated with matching version -
public/version.jsonupdated with matching version - Version bump matches severity in frontmatter
- For
majorreleases: Breaking changes documented - For
majorreleases: Migration guide included - Config cache cleared after
.envchanges
Common Version Scenarios
Scenario 1: Bug Fix ReleaseSection 5: Quality Checklist (All Documentation)
Pre-Publication Verification
Content:- All claims verifiable in codebase
- Feature existence confirmed
- UI labels exact (verified against components)
- Navigation paths tested mentally
- No technical jargon users don’t see
- No hallucinated features
- Tooltips added for domain jargon and technical terms (first occurrence per page)
- Tooltip
tiptext is 1-2 sentences, BeatPass-contextual, no code - No duplicate tooltips for the same term on the same page
- Snippets used for all applicable repeated content (platform fee, need help, warnings)
- No hardcoded values that exist in snippets (contact email, fee amounts, plan prices)
- Active voice (present for features, past for fixes)
- User-focused (“you” not “we”)
- Specific numbers (“95% faster” not “much faster”)
- UI elements in bold:
**Button Name** - Contractions used for approachable tone
- Paragraphs under 4 lines
- Frontmatter complete (audience, title, description)
- Root-relative links for doc pages:
/help/path - Full URLs for app pages:
https://open.beatpass.ca/... - All icons verified against Font Awesome 6 (not Lucide)
- Mintlify components used correctly
- No emoji (use icons)
- Valid Markdown/MDX syntax
- Card
hreftargets verified (file exists + in docs.json nav)
- Related docs linked
- Parent index updated (for new docs)
- No orphaned pages
Common Mistakes to Avoid
| Mistake | Example | Fix |
|---|---|---|
| Assumed navigation | ”Settings → Subscription" | "Profile avatar → Billing” |
| Wrong button name | ”Cancel Subscription" | "Cancel plan” |
| Technical jargon | ”music.create permission" | "ability to upload tracks” |
| Generic names | ”the Cancel button" | "Cancel plan” |
| Wrong pricing | ”$19/month" | "$29/month” (verify DB) |
| Non-existent features | ”Demo downloads” | Remove (doesn’t exist) |
| Emoji | 🎉 | Use <Icon icon="party-horn" /> |
| Relative links | ../billing/ | /help/billing/ |
| Lucide icon names | icon="edit" | icon="pen-to-square" (FA6) |
| App URLs as doc paths | href="/login" | href="https://open.beatpass.ca/login" |
| Deprecated FA names | icon="bar-chart" | icon="chart-bar" (FA6) |
| Missing tooltips on jargon | ”contribution value” (plain text) | <Tooltip tip="...">contribution value</Tooltip> |
| Duplicate tooltip on same page | Tooltip on every mention | Tooltip on first occurrence only |
| Inline “Need Help?” section | Custom support footer | <NeedHelp /> snippet |
| Inline platform fee callout | Custom fee explanation | <PlatformFee /> snippet |
| Hardcoded contact email | contact@beatpass.ca in prose | <SupportContact /> or <NeedHelp /> snippet |
Section 6: Quick Reference
File Paths and Commands
Documentation location:- Documentation Standards — Universal standards
- New Doc Guide — Creating new docs
- Update Guide — Updating existing docs
- Mintlify Reference — Components
- Verification Standards — Detailed verification