Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
122 commits
Select commit Hold shift + click to select a range
f6a356f
Merge pull request #24 from MWDelaney/dev
MWDelaney Jul 18, 2022
a600032
:arrow_up: Bump terser from 5.12.0 to 5.14.2
dependabot[bot] Aug 4, 2022
804ee26
Merge pull request #27 from MWDelaney/dependabot/npm_and_yarn/terser-…
MWDelaney Aug 4, 2022
c25ba07
Update navigation.njk
MWDelaney Aug 29, 2022
83a1b1b
:art: Switch from CJS to ESM
MWDelaney Aug 29, 2022
d731f9b
Merge branch 'master' of github.com:MWDelaney/ZeroPoint
MWDelaney Aug 29, 2022
1a49d10
:rocket: Updates learned from feature additions
MWDelaney Sep 19, 2022
90ae76f
:art: Typo
MWDelaney Sep 19, 2022
30e53ff
:memo: Document code
MWDelaney Sep 19, 2022
ec26d7b
:fire: Update gitignore
MWDelaney Sep 19, 2022
b0d5e6d
:art: Better environment variables
MWDelaney Oct 10, 2022
042a6dc
:construction_worker: Release action
MWDelaney Jun 2, 2023
d5ce975
Replace rollup with esbuild
MWDelaney Apr 25, 2024
0e427ae
Merge pull request #34 from MWDelaney/esbuild
MWDelaney Apr 25, 2024
3216a83
Update README.md
MWDelaney Apr 25, 2024
01dbb0f
Update README.ZeroPoint.md
MWDelaney Apr 25, 2024
92514b9
Native support for GitHub pages
MWDelaney Apr 26, 2024
4ee2e6d
Update action.yml
MWDelaney Apr 29, 2024
5f285d9
Update deploy-github-pages.yml
MWDelaney Apr 29, 2024
0de592c
Add a checking step
MWDelaney Apr 29, 2024
b877411
Improve actions
MWDelaney Apr 29, 2024
ea34c67
Check if GitHub Pages is enabled before deploying to it
MWDelaney Apr 29, 2024
8010f69
Simplify
MWDelaney Apr 29, 2024
b35aa48
Update readme
MWDelaney Apr 29, 2024
d1ff1f1
Readme refresh
MWDelaney Apr 30, 2024
e1c9ac7
Readme refresh
MWDelaney Apr 30, 2024
d64ef69
update nvmrc
MWDelaney Apr 30, 2024
6d8139d
Fix dependencies
Aug 27, 2024
7d843a0
Upgrade to Eleventy 3.0! 🎉
MWDelaney Oct 2, 2024
0f53d97
Update README.ZeroPoint.md
MWDelaney Oct 14, 2024
592492e
Update README.ZeroPoint.md
MWDelaney Oct 14, 2024
6e33dcf
Markdown
MWDelaney Oct 14, 2024
31e3a47
Better self-documentation
MWDelaney Oct 14, 2024
4e591aa
Convert to ESM, fix Sass warnings
MWDelaney Oct 14, 2024
097df44
Updates
MWDelaney Oct 18, 2024
ddfbf85
Break out transforms; replace htmlmin with beautify
MWDelaney Nov 4, 2024
66a744c
Updated .eleventy.js
MWDelaney Nov 5, 2024
05b36c5
remove Netlify plugins
MWDelaney Nov 5, 2024
4c13843
Update dependencies
MWDelaney Nov 18, 2024
5504fdf
Update workflow
MWDelaney Nov 20, 2024
bab0a31
Update workflow
MWDelaney Nov 20, 2024
8b08413
Change workflow trigger
MWDelaney Nov 20, 2024
4c82bbd
Update actions
MWDelaney Nov 20, 2024
10ab005
Order
MWDelaney Nov 20, 2024
e3e37f7
Add template instructions to README
MWDelaney Nov 22, 2024
8794b73
Template button
MWDelaney Nov 22, 2024
3b9056b
Remove image shortcode, replace with eleventyImageTransformPlugin
MWDelaney Dec 2, 2024
ab08392
Update README.md
MWDelaney Dec 2, 2024
cfe73a7
Create release action
MWDelaney Dec 12, 2024
4500f22
Updated github actions, fix path issues with image plugin
MWDelaney Dec 16, 2024
aaaa1b0
⬆️ Upgrade esbuild and esbuild-sass-plugin
MWDelaney Apr 15, 2025
835440c
⬆️ Update the lockfile so GitHub stops warning me about it
MWDelaney Apr 22, 2025
735a87d
⬆️ Upgrade to Eleventy 3.1.0
MWDelaney May 21, 2025
9c10177
Update action.yml
MWDelaney Jun 24, 2025
4da3b3b
Update action.yml
MWDelaney Jun 24, 2025
783fea6
Add GitHub deployment integration
MWDelaney Jun 24, 2025
c70d81f
Alternate spelling for build command
MWDelaney Jun 25, 2025
09262dc
Remove unnecessary passthrough
MWDelaney Jul 25, 2025
c9e0597
Update README to reflect project starter status
MWDelaney Aug 25, 2025
bb02d11
Add comments
MWDelaney Aug 28, 2025
12649aa
Add comments
MWDelaney Aug 29, 2025
c7e389c
Get ready for the Process
MWDelaney Sep 4, 2025
7c691d6
Remove minification
MWDelaney Sep 4, 2025
5ec4759
Update readme
MWDelaney Sep 5, 2025
e3d26d8
move content
MWDelaney Sep 5, 2025
9c8982a
Add modern linting, linting commands, make code conformant to new sta…
MWDelaney Sep 5, 2025
344c5d0
ci workflow
MWDelaney Sep 5, 2025
80ebd4b
next version number
MWDelaney Sep 5, 2025
57d0a31
Permalink default logic, pagefind
MWDelaney Sep 6, 2025
3e20f82
Search page
MWDelaney Sep 6, 2025
0aa98f8
Noscript message
MWDelaney Sep 6, 2025
5bef5b5
i18n readiness
MWDelaney Sep 6, 2025
3065795
i18n readiness
MWDelaney Sep 6, 2025
da80263
Remove metagen plugin, replace with simplified meta partial; simplify…
MWDelaney Sep 8, 2025
13a5b40
Updated README
MWDelaney Sep 8, 2025
af8bc4e
Fix build
MWDelaney Sep 9, 2025
b9feebe
Fix build
MWDelaney Sep 9, 2025
7f65e9b
Fix build
MWDelaney Sep 9, 2025
d45c967
Fix build
MWDelaney Sep 9, 2025
5365a26
Fix build
MWDelaney Sep 9, 2025
f2d8500
Fix build
MWDelaney Sep 9, 2025
00587fc
Don't publish blogs from the future
MWDelaney Sep 10, 2025
a95cf82
Comments, node update, xml_sitemap updates
MWDelaney Sep 10, 2025
70c7367
Rebrand script
MWDelaney Sep 10, 2025
eeaa4d6
Proper node version
MWDelaney Sep 10, 2025
7f85d18
fix duplicate tests
MWDelaney Sep 11, 2025
6bcea53
Condense and rewrite config; update dependencies
MWDelaney Sep 11, 2025
b5e1e60
Simplify and fix bugs in rebranding
MWDelaney Sep 15, 2025
7369fef
Add logo to README
MWDelaney Sep 15, 2025
e5f0407
Add logo to README
MWDelaney Sep 15, 2025
5dbce8c
Merge branch 'main' into next
MWDelaney Sep 15, 2025
4b20691
Merge pull request #43 from MWDelaney/next
MWDelaney Sep 15, 2025
97bf177
Create .template
MWDelaney Sep 16, 2025
a96a86e
Strip spaces from project name replacement
MWDelaney Sep 16, 2025
fda7e1e
Merge pull request #44 from MWDelaney/next
MWDelaney Sep 16, 2025
1625535
Add passthrough for images not directly associated with content
MWDelaney Sep 23, 2025
452bba9
Add passthrough for images not directly associated with content
MWDelaney Sep 23, 2025
777f0f3
Add URL to site data
MWDelaney Sep 23, 2025
ccd6cdf
Add bundle config
MWDelaney Sep 25, 2025
5ba4900
Remove superfluous workflow --example is stored in another repo
MWDelaney Sep 25, 2025
44380d7
Come crawling back to keeping everything in
MWDelaney Sep 26, 2025
546d3c1
Update readme
MWDelaney Sep 26, 2025
c2a6cb2
Update readme
MWDelaney Sep 26, 2025
42dd6cd
Path fix
MWDelaney Sep 29, 2025
102bef6
fix path
MWDelaney Oct 3, 2025
27e13ae
Fix rebrand script; add Windows workarounds
MWDelaney Oct 14, 2025
26a6e1f
Merge pull request #45 from MWDelaney/fix-rebrand
MWDelaney Oct 14, 2025
429a5f6
Set layout to false in xml_sitemap.njk
retlehs Oct 27, 2025
30d40ce
Fix sitemap URL and last modified date formatting
retlehs Oct 27, 2025
e210663
Fix sitemap wrapped in paragraph tags
retlehs Oct 27, 2025
a34ee45
Merge pull request #46 from retlehs/patch-1
MWDelaney Oct 27, 2025
6aaf287
Update README to remove npm commands
MWDelaney Nov 6, 2025
12bbcd3
Fix slugify bug(ify)
MWDelaney Jan 19, 2026
800042e
Merge pull request #49 from MWDelaney/slugify-fix
MWDelaney Jan 19, 2026
beb7096
Update README.md
MWDelaney Mar 28, 2026
84a4b0e
Rebranding
MWDelaney Mar 30, 2026
d02cee6
Fix package name
MWDelaney Apr 5, 2026
95256cd
Rebrand rethink
MWDelaney May 18, 2026
a335606
More rethinking
MWDelaney May 18, 2026
0cd7614
Update launch.json
MWDelaney May 19, 2026
f28c64f
Expose external links by default; re-arrange build commands
MWDelaney May 19, 2026
398e623
Update dependencies
MWDelaney Aug 10, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
263 changes: 69 additions & 194 deletions .eleventy.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,213 +8,88 @@
* - `src/config/shortcodes.js`
* - `src/config/watchtargets.js`
* - `src/config/templateLanguages.js`
* - `src/config/filters.js`
* - `src/config/transforms.js`
*/

/**
* Passthroughs and file copies are defined as named exports in /src/config/passthroughs.js
*/
const passthroughs = require('./src/config/passthroughs');

/**
* Collections are defined as named exports in /src/config/collections.js
*/
const collections = require('./src/config/collections');

/**
* Watch targets are defined as named exports in /src/config/watchtargets.js
*/
const watchtargets = require('./src/config/watchtargets');

/**
* Plugins are defined as named exports in /src/config/plugins.js
*/
const plugins = require('./src/config/plugins');

/**
* Shortcodes are defined as named exports in /src/config/shortcodes.js
*/
const shortcodes = require('./src/config/shortcodes');

/**
* Custom template languages are defined as named exports in /src/config/templateLanguages.js
*/
const templateLanguages = require('./src/config/templateLanguages');

/**
* Any additional requirements can be added here
*/
const fs = require("fs");
const chalk = require("chalk");
const htmlmin = require("html-minifier");

/**
* Eleventy configuration
* https://www.11ty.dev/docs/config/
*/
module.exports = function (eleventyConfig) {

/**
* Start pretty console output
*/
console.group("\n", " 🪐");
console.log(chalk.white(" |"));

/**
* Echo the registered collections in the terminal
* Create collections from /src/config/collections.js
*/
console.group(
chalk.white(" ├── ") +
chalk.yellow("📚 Collections ") +
chalk.gray("(/src/config/collections.js)")
);

Object.keys(collections).forEach((collectionName, index) => {
let len = Object.keys(collections).length - 1;
let pre = (index === len ? "└── " : "├── ");
console.log(
chalk.white("│ " + pre) +
chalk.green(collectionName)
);

collections[collectionName](eleventyConfig);
});

console.groupEnd();
console.log(chalk.white(" |"));

/**
* Echo the registered collections in the terminal
* Add Eleventy plugins from /src/config/plugins.js
*/
console.group(
chalk.white(" ├── ") +
chalk.yellow("🔌 Plugins ") +
chalk.gray("(/src/config/plugins.js)")
);

Object.keys(plugins).forEach((pluginName, index) => {
let len = Object.keys(plugins).length - 1;
let pre = (index == len ? "└── " : "├── ");
console.log(
chalk.white("│ " + pre) +
chalk.green(pluginName)
);

plugins[pluginName](eleventyConfig);
});

console.groupEnd();
console.log(chalk.white(" |"));
/**
* Echo the registered shortcodes in the terminal
* Add shortcodes from /src/config/shortcodes.js
*/
console.group(
chalk.white(" └── ") +
chalk.yellow("⏩ Shortcodes ") +
chalk.gray("(/src/config/shortcodes.js)")
);

Object.keys(shortcodes).forEach((shortcodeName, index) => {
let len = Object.keys(shortcodes).length - 1;
let pre = (index === len ? "└── " : "├── ");
console.log(
chalk.white(" " + pre) +
chalk.green(shortcodeName)
);

shortcodes[shortcodeName](eleventyConfig);
});

console.groupEnd();

/**
* Add passthrough copy from /src/config/passthroughs.js
*/
Object.keys(passthroughs).forEach((passthroughName) => {
eleventyConfig.addPassthroughCopy(passthroughs[passthroughName]())
});

/**
* Add watch targets from /src/config/watchtargets.js
*/
Object.keys(watchtargets).forEach((watchtargetName) => {
eleventyConfig.addWatchTarget(watchtargets[watchtargetName]())
});

/**
* Add template languages from /src/config/templateLanguages.js
*/
Object.keys(templateLanguages).forEach((templateLanguageName) => {
eleventyConfig.addTemplateFormats(templateLanguageName);
eleventyConfig.addExtension(templateLanguageName, templateLanguages[templateLanguageName]())
});

/**
* End pretty console output
*/
console.log("\n");
console.groupEnd();

/**
* Minify HTML output
*/
eleventyConfig.addTransform("htmlmin", function(content, outputPath) {
// Eleventy 1.0+: use this.inputPath and this.outputPath instead
if( this.outputPath && this.outputPath.endsWith(".html") ) {
let minified = htmlmin.minify(content, {
useShortDoctype: true,
removeComments: true,
collapseWhitespace: true
});
return minified;
}

return content;
});
// Node.js imports
import { readFileSync } from 'fs';
import { join, dirname } from 'path';
import { fileURLToPath } from 'url';

// Local imports
import build from './src/config/build.js';

/** ANSI color codes for styling terminal output without external dependencies */
const colors = { yellow: '\x1b[33m', gray: '\x1b[90m', white: '\x1b[97m', magenta: '\x1b[35m', reset: '\x1b[0m' };

/** Registry of all Eleventy configuration modules with display metadata for the tree view */
const tasks = [
{ icon: '📚', name: 'Collections', path: './src/config/collections.js' },
{ icon: '🔌', name: 'Plugins', path: './src/config/plugins.js' },
{ icon: '⏩', name: 'Shortcodes', path: './src/config/shortcodes.js' },
{ icon: '🔍', name: 'Filters ', path: './src/config/filters.js' },
{ icon: '🔀', name: 'Transforms', path: './src/config/transforms.js' },
{ icon: '🚚', name: 'Passthroughs', path: './src/config/passthroughs.js' },
{ icon: '📜', name: 'Template Languages', path: './src/config/templateLanguages.js' },
{ icon: '👀', name: 'Watch Targets', path: './src/config/watchtargets.js' }
];

/** Reads project name and author from package.json for display in the configuration tree */
const getProjectInfo = () => {
try {
const packageJson = JSON.parse(readFileSync(join(dirname(fileURLToPath(import.meta.url)), 'package.json'), 'utf8'));
return { name: packageJson.name, author: packageJson.author };
} catch (error) {
throw new Error(`Failed to read package.json: ${error.message}`);
}
};

/**
* Minify XML output
*/
eleventyConfig.addTransform("xmlmin", function(content, outputPath) {
// Eleventy 1.0+: use this.inputPath and this.outputPath instead
if( this.outputPath && this.outputPath.endsWith(".xml") ) {
let minified = htmlmin.minify(content, {
collapseWhitespace: true
/** Displays a folder tree-style visualization showing which config modules loaded and their functions */
const displayConfigTree = (loadedTasks, siteName, author) => {
console.log(`\n 🪐 ${colors.magenta}${siteName}${colors.reset}\n ${colors.gray}by ${author}${colors.reset}\n ${colors.gray}│${colors.reset}`);
const tasksWithChildren = loadedTasks.filter(task => Object.keys(task.config).length > 0);
for (const task of loadedTasks) {
const taskNames = Object.keys(task.config);
if (taskNames.length > 0) {
const isLast = tasksWithChildren.indexOf(task) === tasksWithChildren.length - 1;
const connector = isLast ? '└──' : '├──';
console.log(` ${colors.gray}${connector}${colors.reset} ${task.icon} ${colors.yellow}${task.name}${colors.reset} ${colors.gray}(${task.path.replace('./', '/')})${colors.reset}`);
taskNames.forEach((taskName, index) => {
const itemConnector = index === taskNames.length - 1 ? '└──' : '├──';
const prefix = isLast ? ' ' : ` ${colors.gray}│${colors.reset} `;
console.log(`${prefix}${colors.gray}${itemConnector} ●${colors.reset} ${colors.white}${taskName}${colors.reset}`);
});
return minified;
if (!isLast) console.log(` ${colors.gray}│${colors.reset}`);
}
}
console.log('');
};

return content;
});

/** Main Eleventy configuration function - dynamically loads and executes all config modules */
export default async function(eleventyConfig) {
const { name: siteName, author } = getProjectInfo();
const loadedTasks = await Promise.all(tasks.map(async (task) => ({ ...task, config: (await import(task.path)).default })));

/**
* Configure dev server
* https://www.11ty.dev/docs/watch-serve/#eleventy-dev-server
*/
eleventyConfig.setServerOptions({
showAllHosts: true,
});
// Execute all task configurations
for (const task of loadedTasks) {
const taskNames = Object.keys(task.config);
taskNames.forEach(taskName => task.config[taskName](eleventyConfig));
}

/**
* Enable quiet mode
*/
displayConfigTree(loadedTasks, siteName, author);
build(eleventyConfig);
eleventyConfig.setServerOptions({ showAllHosts: false });
eleventyConfig.setQuietMode(true);


/**
* Return the config to Eleventy
*/
return {
dir: {
input: "src",
output: "public",
input: 'src',
output: 'public',
includes: 'assets/views',
layouts: 'assets/views/layouts',
data: 'data',
data: 'data'
},
templateFormats: ['njk', 'md', '11ty.js'],
templateFormats: ['njk', 'md', '11ty.js']
};
};
}
42 changes: 0 additions & 42 deletions .eslintrc.js

This file was deleted.

Empty file removed .github/.gitkeep
Empty file.
36 changes: 36 additions & 0 deletions .github/actions/build/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
name: '🏗️ Build Site'
description: 'Build the site for deployment'

inputs:
github_token:
description: 'The GitHub token to use'
required: true

runs:
using: 'composite'
steps:

# Set up Node.js environment
- name: ⚙️ Setup Node.js
uses: actions/setup-node@v4
with:
node-version-file: '.nvmrc'
cache: 'npm'

# Install dependencies
- name: 🔧 Install Dependencies
shell: bash
run: |
npm install --include=optional sharp

# Build the site
- name: 🏗️ Build Site
shell: bash
run: npm run production

# Upload the public directory as an artifact
- name: 📤 Upload Artifact
uses: actions/upload-artifact@v4
with:
name: public
path: public
Loading
Loading