Skills nodejs-project-arch

Node.js project architecture standards for AI-assisted development. Enforces file splitting (<400 lines), config externalization, route modularization, and admin dashboards. Use when creating new Node.js projects, refactoring large single-file codebases, or when AI context window is being consumed by oversized files. Covers H5 games (Canvas/Phaser/Matter.js), data tools (crawlers/scrapers), content platforms, monitoring dashboards, API services, and SDK libraries.

install
source · Clone the upstream repo
git clone https://github.com/openclaw/skills
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/openclaw/skills "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/abczsl520/nodejs-project-arch" ~/.claude/skills/openclaw-skills-nodejs-project-arch && rm -rf "$T"
OpenClaw · Install into ~/.openclaw/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/openclaw/skills "$T" && mkdir -p ~/.openclaw/skills && cp -r "$T/skills/abczsl520/nodejs-project-arch" ~/.openclaw/skills/openclaw-skills-nodejs-project-arch && rm -rf "$T"
manifest: skills/abczsl520/nodejs-project-arch/SKILL.md
source content

Node.js Project Architecture for AI-Friendly Development

Architecture standards that keep files small enough for AI agents to read/edit without blowing the context window.

Core Rules

  • Single file max 400 lines,
    index.html
    max 200 lines,
    server.js
    entry max 100 lines
  • All tunable values in
    config.json
    , loaded at runtime, editable via admin dashboard
  • Backend:
    routes/
    by domain,
    services/
    for shared logic,
    db.js
    for database
  • Frontend: HTML skeleton only, JS/CSS in separate files
  • Every project gets
    admin.html
    +
    routes/admin.js
    for config hot-reload

Project Type Selection

Determine project type, then read the corresponding reference:

TypeSignalsReference
H5 GameCanvas, Phaser, Matter.js, game loop, spritesreferences/game.md
Data ToolCrawler, scraper, scheduler, data sync, analyticsreferences/tool.md
Content/UtilityGenerator, library, publisher, file processingreferences/tool.md
Dashboard/MonitorCharts, real-time, alerts, metricsreferences/tool.md
API ServiceREST endpoints, middleware, microservicereferences/tool.md
SDK/LibraryShared module, build step, multi-consumerreferences/sdk.md

Quick Start (All Types)

  1. Identify project type from table above
  2. Read the corresponding reference file
  3. Create directory structure per the reference
  4. Extract hardcoded values →
    config.json
  5. Split large files by function (each <400 lines)
  6. Add
    routes/admin.js
    +
    admin.html
  7. Frontend:
    config.js
    fetches
    /api/config
    at startup, code reads
    GAME_CONFIG.xxx
    or
    APP_CONFIG.xxx
  8. Test locally → backup → deploy

config.json Pattern (Universal)

// Server: load and serve config
const config = JSON.parse(fs.readFileSync('./config.json', 'utf8'));
app.get('/api/config', (req, res) => {
  const safe = { ...config };
  delete safe.admin; // strip secrets
  res.json(safe);
});

// Admin: hot-reload
app.post('/admin/config', requireAdmin, (req, res) => {
  fs.writeFileSync('./config.json.bak', fs.readFileSync('./config.json'));
  fs.writeFileSync('./config.json', JSON.stringify(req.body, null, 2));
  Object.assign(config, req.body);
  res.json({ ok: true });
});

Admin Dashboard Pattern (Universal)

admin.html
auto-generates form from config structure:

  • Password login (
    x-admin-password
    header)
  • Visual config editor with save + hot-reload
  • Stats overview (users/data/uptime)
  • Config backup history + restore

Why This Matters

Large single files consume massive context tokens when AI reads them:

  • 3000-line file → ~40K tokens per read (20% of 200K window)
  • 200-line module → ~2.7K tokens per read (1.3% of window)
  • Result: 10-15 productive rounds vs 3-5 before context compression