Markdown Studio

AI profile authoring — hand a template to your assistant

This page lets you describe a template in plain English and have any AI assistant generate an importable profile for Markdown Studio’s Print / Export PDF feature. Copy the block below into your assistant, add your description, and import the JSON it returns.

For the human-readable explanation of every field, see Print & branding profiles.


How to use it

  1. Copy the entire prompt block in the next section into your AI assistant.
  2. After it, describe what you want, e.g. “A profile for federal court motions: Times-like serif, double-spaced, justified, 0.5-inch first-line indent, 1-inch margins, page numbers, no date, centred headings, black-and-white.”
  3. Save the assistant’s reply as my-template.print-profile.json.
  4. In Markdown Studio: Print / Export PDF → Import, and pick the file.

Copy-paste prompt block

You are generating a "print profile" for the app **Markdown Studio**. Output
**one JSON object only** — no prose, no Markdown fences, no comments (JSON does
not allow comments or trailing commas). The object must be directly importable.

REQUIRED keys:
- "id": string. A stable kebab-case slug, e.g. "acme-report".
- "name": string. Human label, e.g. "Acme — Report".

OPTIONAL keys (omit any you don't need; these are the defaults):
- "companyName": string|null = null        // header/footer company name
- "logoPath": null                          // ALWAYS null; logos are added in-app
- "logoAlign": "left"|"center"|"right" = "left"
- "fontFamily": string = "Roboto"           // MUST be one of the allowed fonts below
- "primaryColor": integer = 4279903102      // ARGB decimal (see COLOURS)
- "textColor": integer = 4279900698         // ARGB decimal
- "accentColor": integer|null = null        // links; null = use primaryColor
- "headerText": string|null = null          // null => use document title if showTitleInHeader
- "footerText": string|null = null
- "showTitleInHeader": boolean = true
- "showPageNumbers": boolean = true
- "showDate": boolean = true
- "accentRule": boolean = true              // thin rule under header / above footer
- "footerCentered": boolean = false         // single centred footer line w/ page count
- "coverLogo": boolean = false              // logo once at top instead of running header
- "headingRule": boolean = false            // coloured underline beneath h2/h3
- "confidentialLabel": string|null = null   // e.g. "CONFIDENTIAL" badge in header
- "watermarkText": string|null = null       // diagonal background watermark
- "marginCm": number = 2.0                  // page margin, cm; RANGE 1.0–3.5; 2.54 = 1 inch
- "legalMode": boolean = false              // court output: monochrome chrome, uniform 12pt body,
                                            // continuous spacing rhythm, text flows across pages
- "justifyBody": boolean = false            // justify body paragraphs
- "lineSpacingMultiple": number = 1.0       // 1.0 single, 1.5, 2.0 double; RANGE 1.0–2.0
- "firstLineIndentIn": number = 0.0         // first-line indent in INCHES; RANGE 0.0–1.0
- "centerHeadings": boolean = false         // centre headings (captions/titles)

ALLOWED fontFamily values (exact, case-sensitive; anything else falls back to
Roboto): "Roboto", "Inter", "Lato", "Open Sans", "Montserrat", "Merriweather",
"Noto Serif". For legal/formal documents prefer "Noto Serif" or "Merriweather".

COLOURS — every colour is a 32-bit ARGB integer written in DECIMAL (JSON has no
hex). Format 0xAARRGGBB: AA = alpha (ALWAYS FF = opaque), then R,G,B.
Convert a web hex #RRGGBB with: decimal = 4278190080 + R*65536 + G*256 + B.
Ready-made values:
  black          #000000 -> 4278190080
  near-black text#1A1A1A -> 4279900698
  white          #FFFFFF -> 4294967295
  slate          #37474F -> 4281812815
  navy           #0D3B66 -> 4279057254
  indigo         #1A237E -> 4279903102
  brand blue     #4C6FFF -> 4283199487
  teal           #00695C -> 4278217052
  green          #2E7D32 -> 4281236786
  purple         #6A1B9A -> 4285143962
  red            #B71C1C -> 4290190364
  orange         #EF6C00 -> 4293880832
For legal/black-and-white output set primaryColor AND textColor to 4278190080
(black) and legalMode = true.

RULES:
- Output valid JSON: double-quoted keys/strings, no comments, no trailing commas.
- Respect the numeric RANGES above (values outside are clamped on import, so stay
  inside them).
- Keep "logoPath" null — the user attaches the logo in the app afterward.
- Choose an "id" that is a unique kebab-case slug.

Now produce the profile for this request:
<DESCRIBE YOUR TEMPLATE HERE>

Minimal valid output

The smallest acceptable object:

{ "id": "blank", "name": "Blank" }

Everything else defaults. A realistic answer fills in the keys that matter for the request and leaves the rest out.

Worked example

Request appended to the prompt:

A profile for state-court pleadings: serif, double-spaced, justified, 0.5” first-line indent, 1” margins, centred headings, page numbers, no date, black-and-white.

Expected output:

{
  "id": "state-pleading",
  "name": "State Pleading",
  "fontFamily": "Noto Serif",
  "primaryColor": 4278190080,
  "textColor": 4278190080,
  "showDate": false,
  "showTitleInHeader": false,
  "showPageNumbers": true,
  "accentRule": false,
  "marginCm": 2.54,
  "legalMode": true,
  "justifyBody": true,
  "lineSpacingMultiple": 2.0,
  "firstLineIndentIn": 0.5,
  "centerHeadings": true
}

Validation checklist

Before importing, confirm the JSON:

If the import is rejected, it’s almost always a stray comment, a trailing comma, or a colour written in hex instead of decimal.