A modern Node.js application that creates GitHub issues and HackMD documents for Node.js team meetings. This tool automates the process of reading meeting configuration, fetching calendar events, creating meeting minutes documents, and posting GitHub issues.
Create a new API token for the meeting artifacts tool
Optionally, create or join a team workspace for better organization
📁 Project Structure
create-node-meeting-artifacts/
├── src/
│ ├── config.mjs # Environment configuration (API tokens)
│ ├── constants.mjs # Application constants
│ ├── github.mjs # GitHub API integration
│ ├── calendar.mjs # Calendar integration
│ ├── hackmd.mjs # HackMD API integration
│ ├── meeting.mjs # Config loading + template rendering
│ ├── types.d.ts # Type definitions
│ └── utils/ # Date and URL helpers
├── meetings/ # One <group>.meeting.json per meeting group
├── templates/
│ └── meeting.mustache # Single shared template (issue + minutes)
├── .nvmrc # Node.js version
├── .env.example # Environment variables example
├── create-node-meeting-artifacts.mjs # Main application
├── TEMPLATES_DOCUMENTATION.md # Meeting config reference
└── README.md # This file
📝 Meeting Configurations
Every meeting group is described by a single JSON file in the meetings/
directory, named <group>.meeting.json (for example, tsc.meeting.json). Each
file follows an identical format, and the same shared
templates/meeting.mustache renders both the
GitHub issue and the HackMD minutes for every group — so every meeting’s
artifacts look the same.
See TEMPLATES_DOCUMENTATION.md for a full reference
of every field, including the optional ones (github.agendaLabel,
github.issueLabels, joining.notes, observers, and curated agenda sections).
➕ Adding New Meeting Groups
Adding a group is a single step: create its config file.
1. Create the meeting config
Add meetings/<group>.meeting.json following the format above. The filename stem
(<group>) is what you pass on the command line and to the workflows.
2. That’s it
The GitHub Actions workflows discover meeting groups automatically:
The scheduled workflow builds its matrix by listing meetings/*.meeting.json.
The manual workflow reads the owner straight from the JSON file.
No workflow edits and no package.json scripts are needed.
🏗️ Development
Environment Setup
Clone the repository
Install dependencies: npm install
Copy .env.example to .env and configure your credentials
Create meeting artifacts: npm run dev -- <group> (e.g. npm run dev -- tsc)
Code Quality
npm run lint # Run ESLint
npm run lint:fix # Fix ESLint issues automatically
npm run format # Format code with Prettier
npm run format:check # Check code formatting
npm run check # Run both linting and formatting checks
🚀 Usage
Local Development
# Using npx
npx --env-file=.env . tsc
# Direct execution (with a `.env` file)
node --env-file=.env create-node-meeting-artifacts.mjs tsc
# Preview the rendered issue without creating anything
node --env-file=.env create-node-meeting-artifacts.mjs tsc --dry-run
The CLI accepts the following flags:
--dry-run: render and print the issue without creating an issue or document
--force: create a new issue/document even if one already exists
--verbose: enable debug logging from the GitHub client
📂 Output
The application creates:
GitHub Issue: Posted to the configured repository with meeting details and agenda
HackMD Document: Meeting minutes document in Markdown format with collaborative editing
Console Output: Links to both the created issue and HackMD document
🔧 Configuration
Environment Variables
Required
GITHUB_TOKEN: GitHub Personal Access Token
HACKMD_API_TOKEN: HackMD API token for creating and managing documents
Meeting Configuration
Each meeting is configured by a meetings/<group>.meeting.json file. See
TEMPLATES_DOCUMENTATION.md for the complete field
reference.
Node.js Meeting Artifacts Creator
A modern Node.js application that creates GitHub issues and HackMD documents for Node.js team meetings. This tool automates the process of reading meeting configuration, fetching calendar events, creating meeting minutes documents, and posting GitHub issues.
📋 Requirements
🔑 Authentication Setup
GitHub Authentication
repo(Full control of private repositories)user(Read user information)HackMD Authentication
📁 Project Structure
📝 Meeting Configurations
Every meeting group is described by a single JSON file in the
meetings/directory, named<group>.meeting.json(for example,tsc.meeting.json). Each file follows an identical format, and the same sharedtemplates/meeting.mustacherenders both the GitHub issue and the HackMD minutes for every group — so every meeting’s artifacts look the same.See TEMPLATES_DOCUMENTATION.md for a full reference of every field, including the optional ones (
github.agendaLabel,github.issueLabels,joining.notes,observers, and curatedagendasections).➕ Adding New Meeting Groups
Adding a group is a single step: create its config file.
1. Create the meeting config
Add
meetings/<group>.meeting.jsonfollowing the format above. The filename stem (<group>) is what you pass on the command line and to the workflows.2. That’s it
The GitHub Actions workflows discover meeting groups automatically:
meetings/*.meeting.json.No workflow edits and no
package.jsonscripts are needed.🏗️ Development
Environment Setup
npm install.env.exampleto.envand configure your credentialsnpm run dev -- <group>(e.g.npm run dev -- tsc)Code Quality
🚀 Usage
Local Development
The CLI accepts the following flags:
--dry-run: render and print the issue without creating an issue or document--force: create a new issue/document even if one already exists--verbose: enable debug logging from the GitHub client📂 Output
The application creates:
🔧 Configuration
Environment Variables
Required
GITHUB_TOKEN: GitHub Personal Access TokenHACKMD_API_TOKEN: HackMD API token for creating and managing documentsMeeting Configuration
Each meeting is configured by a
meetings/<group>.meeting.jsonfile. See TEMPLATES_DOCUMENTATION.md for the complete field reference.