@mgks/docmd 0.1.2 → 0.1.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (38) hide show
  1. package/.github/workflows/deploy-docmd.yml +2 -2
  2. package/README.md +3 -1
  3. package/assets/css/welcome.css +378 -0
  4. package/assets/images/preview-dark-1.png +0 -0
  5. package/assets/images/preview-dark-2.png +0 -0
  6. package/assets/images/preview-dark-3.png +0 -0
  7. package/assets/images/preview-light-1.png +0 -0
  8. package/assets/images/preview-light-2.png +0 -0
  9. package/assets/images/preview-light-3.png +0 -0
  10. package/config.js +8 -3
  11. package/docs/cli-commands.md +1 -2
  12. package/docs/configuration.md +34 -22
  13. package/docs/content/frontmatter.md +2 -2
  14. package/docs/content/index.md +5 -4
  15. package/docs/content/markdown-syntax.md +4 -4
  16. package/docs/content/no-style-example.md +110 -0
  17. package/docs/content/no-style-pages.md +202 -0
  18. package/docs/contributing.md +7 -0
  19. package/docs/deployment.md +22 -31
  20. package/docs/getting-started/basic-usage.md +3 -2
  21. package/docs/getting-started/index.md +3 -3
  22. package/docs/getting-started/installation.md +1 -1
  23. package/docs/index.md +137 -53
  24. package/docs/overview.md +56 -0
  25. package/docs/plugins/sitemap.md +1 -1
  26. package/docs/theming/assets-management.md +1 -1
  27. package/docs/theming/available-themes.md +29 -51
  28. package/package.json +1 -1
  29. package/src/assets/css/docmd-main.css +2 -1
  30. package/src/assets/css/docmd-theme-ruby.css +606 -0
  31. package/src/commands/build.js +239 -203
  32. package/src/commands/dev.js +75 -30
  33. package/src/commands/init.js +2 -0
  34. package/src/core/file-processor.js +67 -5
  35. package/src/core/html-generator.js +16 -3
  36. package/src/plugins/sitemap.js +15 -1
  37. package/src/templates/layout.ejs +1 -1
  38. package/src/templates/no-style.ejs +159 -0
@@ -23,11 +23,11 @@ jobs:
23
23
  - name: Set up Node.js ⚙️
24
24
  uses: actions/setup-node@v4
25
25
  with:
26
- node-version: '22' # Use Node.js 22
26
+ node-version: '22'
27
27
  cache: 'npm'
28
28
 
29
29
  - name: Install Dependencies 📦
30
- run: npm ci # Use ci for cleaner installs in CI
30
+ run: npm ci
31
31
 
32
32
  - name: Build docmd's Own Docs 🛠️
33
33
  run: node ./bin/docmd.js build
package/README.md CHANGED
@@ -11,7 +11,7 @@
11
11
 
12
12
  <p align="center">
13
13
  <a href="https://www.npmjs.com/package/@mgks/docmd"><img src="https://img.shields.io/npm/v/@mgks/docmd.svg" alt="npm version"></a>
14
- <a href="https://www.npmjs.com/package/@mgks/docmd"><img src="https://img.shields.io/npm/dm/@mgks/docmd.svg" alt="npm downloads"></a>
14
+ <a href="https://www.npmjs.com/package/@mgks/docmd"><img src="https://img.shields.io/npm/d18m/@mgks/docmd.svg" alt="npm downloads"></a>
15
15
  <a href="https://github.com/mgks/docmd/blob/main/LICENSE"><img src="https://img.shields.io/github/license/mgks/docmd.svg" alt="license"></a>
16
16
  </p>
17
17
 
@@ -24,6 +24,8 @@ Docmd (`docmd`) is a Node.js command-line tool dedicated to generating beautiful
24
24
  - 🚀 **Fast & Lightweight** - Static site generation with minimal JS
25
25
  - 🧩 **Custom Components** - Callouts, cards, steps, and more
26
26
  - 🔌 **Built-in Plugins** - SEO, Analytics, and Sitemap support
27
+ - 🎭 **No-Style Pages** - Create custom standalone pages with complete HTML control
28
+ - 🖌️ **Custom Styling** - Add custom CSS/JS and HTML directly in frontmatter
27
29
  - 💻 **Simple CLI** - Easy `init`, `dev`, and `build` commands
28
30
  - 🌐 **Deploy Anywhere** - Deploy the generated sites anywhere (GitHub Pages, Netlify, Vercel, etc.).
29
31
 
@@ -0,0 +1,378 @@
1
+ :root {
2
+ --primary-color: #047bf1;
3
+ --primary-hover: #026ed9;
4
+ --text-color: #333;
5
+ --text-light: #666;
6
+ --bg-color: #fff;
7
+ --bg-secondary: #f8f9fa;
8
+ --border-color: #eaeaea;
9
+ --shadow-color: rgba(0, 0, 0, 0.08);
10
+ --container-padding: 5rem;
11
+ }
12
+
13
+ @media (prefers-color-scheme: dark) {
14
+ :root {
15
+ --primary-color: #047bf1;
16
+ --primary-hover: #026ed9;
17
+ --text-color: #e0e0e0;
18
+ --text-light: #aaa;
19
+ --bg-color: #121212;
20
+ --bg-secondary: #1e1e1e;
21
+ --border-color: #333;
22
+ --shadow-color: rgba(0, 0, 0, 0.3);
23
+ }
24
+ }
25
+
26
+ [data-theme="light"] {
27
+ --primary-color: #047bf1;
28
+ --primary-hover: #026ed9;
29
+ --text-color: #333;
30
+ --text-light: #666;
31
+ --bg-color: #fff;
32
+ --bg-secondary: #f8f9fa;
33
+ --border-color: #eaeaea;
34
+ --shadow-color: rgba(0, 0, 0, 0.35);
35
+
36
+ }
37
+
38
+ [data-theme="dark"] {
39
+ --primary-color: #1955b6;
40
+ --primary-hover: #084dbd;
41
+ --text-color: #e0e0e0;
42
+ --text-light: #aaa;
43
+ --bg-color: #121212;
44
+ --bg-secondary: #1e1e1e;
45
+ --border-color: #333;
46
+ --shadow-color: rgba(0, 0, 0, 0.87);
47
+
48
+ }
49
+
50
+ * {
51
+ margin: 0;
52
+ padding: 0;
53
+ box-sizing: border-box;
54
+ }
55
+
56
+ body {
57
+ font-family: 'Inter', -apple-system, BlinkMacSystemFont, sans-serif;
58
+ line-height: 1.5;
59
+ color: var(--text-color);
60
+ background-color: var(--bg-color);
61
+ height: 100vh;
62
+ display: flex;
63
+ overflow: hidden;
64
+ }
65
+
66
+ .landing-container {
67
+ display: flex;
68
+ width: 100%;
69
+ height: 100%;
70
+ padding: 0 var(--container-padding);
71
+ max-width: 1600px;
72
+ margin: 0 auto;
73
+ }
74
+
75
+ .content-side {
76
+ flex: 1;
77
+ padding: 3rem 2rem 3rem 0;
78
+ display: flex;
79
+ flex-direction: column;
80
+ justify-content: center;
81
+
82
+ }
83
+
84
+ .preview-side {
85
+ flex: 1;
86
+ display: flex;
87
+ align-items: center;
88
+ justify-content: flex-start;
89
+ position: relative;
90
+ overflow: visible;
91
+ }
92
+
93
+ .header-top {
94
+ position: absolute;
95
+ top: 2rem;
96
+ right: 3rem;
97
+ z-index: 100;
98
+
99
+ }
100
+
101
+ .theme-toggle {
102
+ background: var(--bg-secondary);
103
+ border: 1px solid var(--border-color);
104
+ color: var(--text-color);
105
+ width: 40px;
106
+ height: 40px;
107
+ border-radius: 50%;
108
+ display: flex;
109
+ align-items: center;
110
+ justify-content: center;
111
+ cursor: pointer;
112
+ transition: all 0.2s ease;
113
+ }
114
+
115
+ .theme-toggle:hover {
116
+ background: var(--border-color);
117
+ }
118
+
119
+ .logo {
120
+ margin-bottom: 1.5rem;
121
+ display: flex;
122
+ align-items: center;
123
+ }
124
+
125
+ .logo svg {
126
+ height: 48px;
127
+ width: auto;
128
+ }
129
+
130
+ .logo-text {
131
+ font-family: 'PT Mono', monospace;
132
+ font-weight: 700;
133
+ font-size: 2em;
134
+ margin-left: .25em;
135
+
136
+ }
137
+
138
+ h1 {
139
+ font-size: 3rem;
140
+ font-weight: 700;
141
+ margin-bottom: 1rem;
142
+ letter-spacing: -0.02em;
143
+ }
144
+
145
+ .tagline {
146
+ font-size: 1.25rem;
147
+ color: var(--text-light);
148
+ margin-bottom: 2rem;
149
+ font-weight: 400;
150
+ }
151
+
152
+ .features {
153
+ display: grid;
154
+ grid-template-columns: repeat(2, 1fr);
155
+ gap: 1.5rem;
156
+ margin-bottom: 2rem;
157
+ }
158
+
159
+ .feature {
160
+ display: flex;
161
+ align-items: flex-start;
162
+ gap: 0.75rem;
163
+ }
164
+
165
+ .feature-icon {
166
+ background-color: var(--primary-color);
167
+ color: white;
168
+ width: 32px;
169
+ height: 32px;
170
+ border-radius: 6px;
171
+ display: flex;
172
+ align-items: center;
173
+ justify-content: center;
174
+ flex-shrink: 0;
175
+ }
176
+
177
+ .feature-text {
178
+ font-size: 0.9rem;
179
+ }
180
+
181
+ .feature-text strong {
182
+ display: block;
183
+ margin-bottom: 0.25rem;
184
+ }
185
+
186
+ .buttons {
187
+ display: flex;
188
+ gap: 1rem;
189
+ margin-bottom: 2rem;
190
+ }
191
+
192
+ .btn {
193
+ display: inline-flex;
194
+ align-items: center;
195
+ gap: 0.5rem;
196
+ padding: 0.75rem 1.5rem;
197
+ border-radius: 8px;
198
+ font-weight: 600;
199
+ font-size: 1rem;
200
+ text-decoration: none;
201
+ transition: all 0.2s ease;
202
+ }
203
+
204
+ .btn-primary {
205
+ background-color: var(--primary-color);
206
+ color: white;
207
+ border: none;
208
+ }
209
+
210
+ .btn-primary:hover {
211
+ background-color: var(--primary-hover);
212
+ }
213
+
214
+ .btn-secondary {
215
+ background-color: var(--bg-secondary);
216
+ color: var(--text-color);
217
+ border: 1px solid var(--border-color);
218
+ }
219
+
220
+ .btn-secondary:hover {
221
+ background-color: var(--border-color);
222
+ }
223
+
224
+ .social-links {
225
+ display: flex;
226
+ gap: 1rem;
227
+ padding: 0 .25em;
228
+
229
+ }
230
+
231
+ .social-link {
232
+ color: var(--text-light);
233
+ transition: color 0.2s ease;
234
+ }
235
+
236
+ .social-link:hover {
237
+ color: var(--primary-color);
238
+ }
239
+
240
+ .preview-stack {
241
+ position: relative;
242
+ width: 100%;
243
+ height: 400px;
244
+ transform: translateX(15%);
245
+ perspective: 1000px;
246
+
247
+ }
248
+
249
+ .preview-image {
250
+ position: absolute;
251
+ width: 100%;
252
+ max-width: 700px;
253
+ height: 400px;
254
+ border-radius: 20px;
255
+ box-shadow: 0 25px 50px -12px var(--shadow-color);
256
+ transition: all 0.3s ease;
257
+ overflow: hidden;
258
+
259
+ }
260
+
261
+ .preview-image img {
262
+ width: 100%;
263
+ height: 100%;
264
+ object-fit: cover;
265
+ object-position: left top;
266
+ border-radius: 8px;
267
+ pointer-events: none;
268
+ }
269
+
270
+ .preview-image.top {
271
+ z-index: 3;
272
+ transform: rotate(3deg) translateY(-10%) translateX(7%);
273
+
274
+ }
275
+
276
+ .preview-image.middle {
277
+ z-index: 2;
278
+ transform: rotate(-3deg) translateY(1%) translateX(-2%);
279
+
280
+ }
281
+
282
+ .preview-image.bottom {
283
+ z-index: 1;
284
+ transform: rotate(-8deg) translateY(10%) translateX(-10%);
285
+
286
+ }
287
+
288
+ body[data-theme="light"] .preview-image .light-img {
289
+ display: block;
290
+ }
291
+
292
+ body[data-theme="light"] .preview-image .dark-img {
293
+ display: none;
294
+ }
295
+
296
+ body[data-theme="dark"] .preview-image .light-img {
297
+ display: none;
298
+
299
+ }
300
+
301
+ body[data-theme="dark"] .preview-image .dark-img {
302
+ display: block;
303
+ }
304
+
305
+ @media (max-width: 1400px) {
306
+ :root {
307
+ --container-padding: 3rem;
308
+ }
309
+
310
+ .preview-stack {
311
+ transform: translateX(15%);
312
+ }
313
+ }
314
+
315
+ @media (max-width: 1200px) {
316
+ :root {
317
+ --container-padding: 2rem;
318
+ }
319
+
320
+ .preview-side {
321
+ display: none;
322
+ }
323
+
324
+ .content-side {
325
+ max-width: 100%;
326
+ padding: 3rem 0;
327
+ }
328
+
329
+ .header-top {
330
+ right: 2rem;
331
+ }
332
+ }
333
+
334
+ @media (max-width: 768px) {
335
+ :root {
336
+ --container-padding: 1.5rem;
337
+ }
338
+ body {
339
+ overflow: auto;
340
+ }
341
+
342
+ .content-side {
343
+ padding: 2rem 0;
344
+ }
345
+
346
+ h1 {
347
+ font-size: 2.5rem;
348
+ }
349
+
350
+ .features {
351
+ grid-template-columns: 1fr;
352
+ }
353
+
354
+ .buttons {
355
+ flex-direction: column;
356
+ }
357
+
358
+ .header-top {
359
+ padding: 1rem 0;
360
+ text-align: center;
361
+ right: 1rem;
362
+ }
363
+ h1 {
364
+ font-size: 2.5rem;
365
+ }
366
+ .tagline{
367
+ font-size: 1em;
368
+ font-weight: 500;
369
+ }
370
+ .landing-container {
371
+ padding: 1rem;
372
+ flex-direction: column;
373
+ }
374
+ }
375
+ .social-links .lucide-heart-handshake {
376
+ color: rgb(205, 39, 39);
377
+
378
+ }
Binary file
Binary file
Binary file
package/config.js CHANGED
@@ -31,7 +31,7 @@ module.exports = {
31
31
 
32
32
  // Custom JavaScript Files
33
33
  customJs: [ // Array of paths to custom JS files, loaded at end of body
34
- '/assets/js/docmd-image-lightbox.js', // Image lightbox functionality
34
+ '/assets/js/docmd-image-lightbox.js', // Image lightbox functionality
35
35
  ],
36
36
 
37
37
  // Plugins Configuration (Object format)
@@ -77,7 +77,8 @@ module.exports = {
77
77
  // Navigation Structure (Sidebar)
78
78
  // Icons are kebab-case names from Lucide Icons (https://lucide.dev/)
79
79
  navigation: [
80
- { title: 'Home', path: '/', icon: 'home' },
80
+ { title: 'Welcome', path: '/', icon: 'feather' },
81
+ { title: 'Overview', path: '/overview', icon: 'home' },
81
82
  {
82
83
  title: 'Getting Started',
83
84
  icon: 'rocket',
@@ -96,6 +97,8 @@ module.exports = {
96
97
  { title: 'Markdown Syntax', path: '/content/markdown-syntax', icon: 'code-2' },
97
98
  { title: 'Images', path: '/content/images', icon: 'image' },
98
99
  { title: 'Custom Containers', path: '/content/custom-containers', icon: 'box' },
100
+ { title: 'No-Style Pages', path: '/content/no-style-pages', icon: 'layout' },
101
+ { title: 'No-Style Example', path: '/content/no-style-example', icon: 'sparkles' },
99
102
  ],
100
103
  },
101
104
  { title: 'Configuration', path: '/configuration', icon: 'settings' },
@@ -124,7 +127,9 @@ module.exports = {
124
127
  { title: 'Deployment', path: '/deployment', icon: 'upload-cloud' },
125
128
  { title: 'Contributing', path: '/contributing', icon: 'users-2' },
126
129
 
127
- { title: 'GitHub', path: 'https://github.com/mgks/docmd', icon: 'github', external: true }
130
+ { title: 'GitHub', path: 'https://github.com/mgks/docmd', icon: 'github', external: true },
131
+ { title: 'Discussions', path: 'https://github.com/mgks/docmd/discussions', icon: 'message-square', external: true },
132
+ { title: 'Issues', path: 'https://github.com/mgks/docmd/issues', icon: 'badge-alert', external: true }
128
133
  ],
129
134
 
130
135
  // Footer Configuration
@@ -85,8 +85,7 @@ This provides a fast feedback loop, allowing you to see your changes almost inst
85
85
  * **Description:** Preserves existing asset files instead of updating them. Use this flag if you've customized any of the default assets and want to keep your modifications.
86
86
  * **Example:** `docmd dev --preserve`
87
87
 
88
- * `-p, --port <port_number>` (Future Option)
89
- * **Description:** While not yet implemented, a future version might allow specifying a custom port for the development server. Currently, it defaults to port 3000 or the next available port if 3000 is in use.
88
+ **Note:** The development server starts on port 3000 by default. If port 3000 is already in use, the server will automatically try the next available port (3001, 3002, etc.) until it finds an open port.
90
89
 
91
90
  ## Global Options (Apply to all commands)
92
91
 
@@ -24,7 +24,7 @@ module.exports = {
24
24
  outputDir: 'site',
25
25
 
26
26
  theme: {
27
- name: 'default', // Name of the built-in theme to use (e.g., 'default', 'classic')
27
+ name: 'sky', // Name of the built-in theme to use (e.g., 'sky', 'default')
28
28
  defaultMode: 'light', // 'light' or 'dark'
29
29
  enableModeToggle: true, // Show UI button to toggle light/dark modes
30
30
  customCss: [ // Array of paths to your custom CSS files
@@ -37,20 +37,32 @@ module.exports = {
37
37
  // '/js/extra-functionality.js', // Loaded at the end of the body
38
38
  ],
39
39
 
40
- plugins: [
41
- // Example: Enable built-in SEO enhancements
42
- // ['seo', {
43
- // defaultDescription: 'A fantastic site about interesting things.',
44
- // openGraph: { defaultImage: '/assets/images/og-social-default.png' },
45
- // twitter: { cardType: 'summary_large_image', siteUsername: '@MyProject' }
46
- // }],
47
-
48
- // Example: Enable Google Analytics (Universal Analytics)
49
- // ['analytics-google-ua', { trackingId: 'UA-XXXXXXXXX-Y' }],
40
+ plugins: {
41
+ // SEO Plugin Configuration
42
+ seo: {
43
+ defaultDescription: 'A fantastic site about interesting things.',
44
+ openGraph: {
45
+ defaultImage: '/assets/images/og-social-default.png'
46
+ },
47
+ twitter: {
48
+ cardType: 'summary_large_image',
49
+ siteUsername: '@MyProject'
50
+ }
51
+ },
50
52
 
51
- // Example: Enable Google Analytics 4
52
- // ['analytics-google-v4', { measurementId: 'G-XXXXXXXXXX' }],
53
- ],
53
+ // Google Analytics 4
54
+ analytics: {
55
+ googleV4: {
56
+ measurementId: 'G-XXXXXXXXXX'
57
+ }
58
+ },
59
+
60
+ // Sitemap generation
61
+ sitemap: {
62
+ defaultChangefreq: 'weekly',
63
+ defaultPriority: 0.8
64
+ }
65
+ },
54
66
 
55
67
  navigation: [
56
68
  { title: 'Home', path: '/', icon: 'home' }, // Icon names correspond to SVGs
@@ -137,15 +149,15 @@ Configures the visual theme of your site.
137
149
  * **Paths:** Should be relative to the `outputDir` root (e.g., `'/js/my-analytics-alternative.js'`).
138
150
  * **Example:** `customJs: ['/assets/js/interactive-component.js']`
139
151
 
140
- ## `plugins` (Array)
141
- * **Type:** `Array`
142
- * **Default:** `[]`
143
- * **Description:** An array to configure and enable plugins. `docmd` will ship with some core "local" plugins (like SEO and Analytics) that you can enable here. Future versions might support third-party plugins.
144
- * **Format:** Each item in the array is typically another array: `['plugin-name', { pluginOptions }]` or a direct `require()` for local project plugins (advanced usage).
152
+ ## `plugins` (Object)
153
+ * **Type:** `Object`
154
+ * **Default:** `{}`
155
+ * **Description:** An object to configure and enable plugins. `docmd` ships with core plugins like SEO, Analytics, and Sitemap that you can configure here.
156
+ * **Format:** Each key in the object represents a plugin name, and its value is an object containing the plugin's configuration options.
145
157
  * **Built-in Plugin Examples:**
146
- * `['seo', { defaultDescription: '...', openGraph: { ... }, ... }]`
147
- * `['analytics-google-ua', { trackingId: 'UA-...' }]`
148
- * `['analytics-google-v4', { measurementId: 'G-...' }]`
158
+ * `seo: { defaultDescription: '...', openGraph: { ... }, ... }`
159
+ * `analytics: { googleV4: { measurementId: 'G-XXXXXXXXXX' } }`
160
+ * `sitemap: { defaultChangefreq: 'weekly', defaultPriority: 0.8 }`
149
161
  * **See Also:** [Plugins](/plugins/)
150
162
 
151
163
  ## `navigation` (Array of Objects)
@@ -26,7 +26,7 @@ tags:
26
26
  * **`title`** (String, Required)
27
27
  * **Purpose:** This is the primary title of the page.
28
28
  * **Usage:**
29
- * Used for the HTML `<title>` tag (e.g., `Page Title | Site Title`).
29
+ * Used for the HTML `<title>` tag (e.g., `Page Title : Site Title`).
30
30
  * Often used as the main heading (`<h1>`) on the page by default (though themes can customize this).
31
31
  * Used as the display text for links in the navigation sidebar if the path matches.
32
32
  * **Example:** `title: "Installation Guide"`
@@ -68,7 +68,7 @@ This guide will walk you through installing our application...
68
68
  ```
69
69
 
70
70
  In this example:
71
- * The browser tab will show "Installation Steps | Your Site Title".
71
+ * The browser tab will show "Installation Steps : Your Site Title".
72
72
  * The `<meta name="description">` will be set.
73
73
  * The `order: 1` field is available if you later want to sort "guides" pages by this value.
74
74
 
@@ -9,9 +9,10 @@ docmd uses Markdown files to create beautiful documentation. This section covers
9
9
 
10
10
  ## Available Guides
11
11
 
12
- - [**Frontmatter**](/content/frontmatter) - Learn how to add metadata to your pages
13
- - [**Markdown Syntax**](/content/markdown-syntax) - Basic and advanced Markdown features
14
- - [**Images**](/content/images) - How to add and style images in your documentation
15
- - [**Custom Containers**](/content/custom-containers) - Special content blocks like callouts and cards
12
+ - [**Frontmatter**](/content/frontmatter/) - Learn how to add metadata to your pages
13
+ - [**Markdown Syntax**](/content/markdown-syntax/) - Basic and advanced Markdown features
14
+ - [**Images**](/content/images/) - How to add and style images in your documentation
15
+ - [**Custom Containers**](/content/custom-containers/) - Special content blocks like callouts and cards
16
+ - [**noStyle Pages**](/content/no-style-pages/) - Create custom standalone pages with complete HTML control
16
17
 
17
18
  Choose a topic from the sidebar to get started.
@@ -51,7 +51,7 @@ You can use all standard Markdown elements:
51
51
  ```markdown
52
52
  [Link Text](https://www.example.com)
53
53
  [Link with Title](https://www.example.com "Link Title")
54
- [Relative Link to another page](../section/other-page.md)
54
+ [Relative Link to another page](../section/other-page/)
55
55
  ```
56
56
  *Note: For internal links to other documentation pages, use relative paths to the `.md` files. `docmd` will convert these to the correct HTML paths during the build.*
57
57
 
@@ -152,7 +152,7 @@ Because `markdown-it` is configured with `html: true`, you can embed raw HTML di
152
152
  </div>
153
153
  ```
154
154
 
155
- For most formatting needs, standard Markdown and `docmd`'s [Custom Containers](./custom-containers.md) should suffice.
155
+ For most formatting needs, standard Markdown and `docmd`'s [Custom Containers](/content/custom-containers/) should suffice.
156
156
 
157
157
  # Advanced Markdown Capabilities
158
158
 
@@ -264,7 +264,7 @@ $$
264
264
  ## Container Extensions
265
265
 
266
266
  Beyond standard Markdown, docmd provides custom containers for enhanced formatting.
267
- These are detailed in the [Custom Containers](./custom-containers.md) guide, and include:
267
+ These are detailed in the [Custom Containers](/content/custom-containers/) guide, and include:
268
268
 
269
269
  ::: callout info
270
270
  Use containers for callouts, cards, and steps to structure your documentation.
@@ -274,4 +274,4 @@ Use containers for callouts, cards, and steps to structure your documentation.
274
274
 
275
275
  Markdown provides a powerful yet simple way to write and format documentation. With docmd's extensions and customizations, you can create rich, beautiful documentation that's easy to maintain.
276
276
 
277
- For more examples and practical applications, check the rest of the documentation or browse the source of this page by viewing its Markdown file.
277
+ For more examples and practical applications, check the rest of the documentation or browse the source of this page by viewing its Markdown file.