diff --git a/scripts/build/processors/defaultDocsProcessor.mjs b/scripts/build/processors/defaultDocsProcessor.mjs
index 09e0617..39775c1 100644
--- a/scripts/build/processors/defaultDocsProcessor.mjs
+++ b/scripts/build/processors/defaultDocsProcessor.mjs
@@ -25,14 +25,14 @@ export const defaultDocsProcessorConfig = {
   // eslint-disable-next-line no-warning-comments
   // TODO: remove this variant when all components are updated to use latest auro-library
   // AND the default README.md is updated to use the new paths
-  readmeVariant: "_updated_paths"
+  remoteReadmeVariant: "_updated_paths"
 };
 
 /**
  * @param {ProcessorConfig} config - The configuration for this processor.
  * @returns {import('../utils/sharedFileProcessorUtils').FileProcessorConfig[]}
  */
-export const fileConfigs = (config = defaultDocsProcessorConfig) => [
+export const fileConfigs = (config) => [
   // README.md
   {
     identifier: 'README.md',
@@ -59,7 +59,7 @@ export const fileConfigs = (config = defaultDocsProcessorConfig) => [
     identifier: 'api.md',
     input: fromAuroComponentRoot("/docs/partials/api.md"),
     output: fromAuroComponentRoot("/demo/api.md"),
-    postProcessors: [templateFiller.formatApiTable],
+    preProcessors: [templateFiller.formatApiTable],
   }
 ];
 
diff --git a/scripts/utils/auroLibraryUtils.mjs b/scripts/utils/auroLibraryUtils.mjs
index 150688e..3e9e50d 100644
--- a/scripts/utils/auroLibraryUtils.mjs
+++ b/scripts/utils/auroLibraryUtils.mjs
@@ -8,17 +8,13 @@
 import * as fs from 'fs';
 import * as path from 'path';
 import chalk from 'chalk';
+import { fileURLToPath } from 'url';
+
 import {Logger} from "./logger.mjs";
 
 export default class AuroLibraryUtils {
   getDirname() {
-    if (typeof __dirname === 'undefined') {
-      Logger.warn('Unable to determine project root as __dirname is not defined. Assuming current directory is okay!', true);
-      return '';
-    }
-
-    // eslint-disable-next-line no-undef
-    return __dirname;
+    return fileURLToPath(import.meta.url);
   }
 
   get getProjectRootPath() {
diff --git a/scripts/utils/sharedFileProcessorUtils.mjs b/scripts/utils/sharedFileProcessorUtils.mjs
index 6fc57aa..e6019f7 100644
--- a/scripts/utils/sharedFileProcessorUtils.mjs
+++ b/scripts/utils/sharedFileProcessorUtils.mjs
@@ -1,7 +1,6 @@
-import path from 'path';
 import * as mdMagic from 'markdown-magic';
 import fs from 'node:fs/promises';
-import { fileURLToPath } from 'url';
+import path from "node:path";
 
 import AuroLibraryUtils from "./auroLibraryUtils.mjs";
 import { AuroTemplateFiller } from "./auroTemplateFiller.mjs";
@@ -75,8 +74,12 @@ export const nonEsmComponents = ['combobox', 'datepicker', 'menu', 'pane', 'sele
  */
 // TODO: test this in auro-flight before merging to main
 export function fromAuroComponentRoot(pathLike) {
-  const currentDir = fileURLToPath(new URL('.', import.meta.url))
-  return path.join(currentDir, `${auroLibraryUtils.getProjectRootPath}${pathLike}`)
+  if (pathLike.startsWith('/')) {
+    // remove the first slash
+    return path.join(auroLibraryUtils.getProjectRootPath, pathLike.slice(1))
+  }
+
+  return path.join(auroLibraryUtils.getProjectRootPath, pathLike)
 }
 
 
@@ -149,6 +152,7 @@ export function generateReadmeUrl(branchOrTag = 'master', variantOverride = '')
  * @property {string | InputFileType} input - path to an input file, including filename
  * @property {string} output - path to an output file, including filename
  * @property {Partial<MarkdownMagicOptions>} [mdMagicConfig] - extra configuration options for md magic
+ * @property {Array<(contents: string) => string>} [preProcessors] - extra processor functions to run on content AFTER markdownmagic and BEFORE templateFiller
  * @property {Array<(contents: string) => string>} [postProcessors] - extra processor functions to run on content
  */
 
@@ -241,17 +245,24 @@ export async function processContentForFile(config) {
   // 3a. Read the output file contents
   let fileContents = await fs.readFile(output, {encoding: 'utf-8'});
 
-  // 3b. Replace template variables in output file
+  // 3b. Run any pre-processors
+  if (config.preProcessors) {
+    for (const processor of config.preProcessors) {
+      fileContents = processor(fileContents)
+    }
+  }
+
+  // 3c. Replace template variables in output file
   fileContents = templateFiller.replaceTemplateValues(fileContents);
 
-  // 3c. Run any post-processors
+  // 3d. Run any post-processors
   if (config.postProcessors) {
     for (const processor of config.postProcessors) {
       fileContents = processor(fileContents)
     }
   }
 
-  // 3d. Write the final file contents
+  // 3e. Write the final file contents
   if (!await AuroFileHandler.tryWriteFile(output, fileContents)) {
     throw new Error(`Error writing "${bareFileName}" file to output ${output}`);
   }