From nja
Use when generating feature modules from an Arrows.app diagram or any Neo4j-style entity-relationship JSON (a `{nodes, relationships, style}` export) in a nestjs-neo4jsonapi + nextjs-jsonapi monorepo. Triggers include "generate modules from this diagram", "import the arrows/ER JSON", "scaffold from <name>.json", or turning a graph data-model export into modules.
How this skill is triggered — by the user, by Claude, or both
Slash command
/nja:nja-arrowsThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Translate an **Arrows.app** export (`{ nodes, relationships, style }`) into confirmed `structure/<module>.json` files, then hand off to **`nja-generate`** for the actual scaffolding. The diagram is the **single source of truth** for entities, fields, and edges; everything Arrows can't express is **asked and confirmed per node — never invented**.
Translate an Arrows.app export ({ nodes, relationships, style }) into confirmed structure/<module>.json files, then hand off to nja-generate for the actual scaffolding. The diagram is the single source of truth for entities, fields, and edges; everything Arrows can't express is asked and confirmed per node — never invented.
Core principle: the diagram says WHAT exists; the user confirms the SHAPE. You translate and ask — you do not back-fill from prior knowledge, and you do not silently drop or fold anything.
{nodes, relationships, style} graph export) and asked to create the corresponding modules.When NOT to use: authoring a single module from a text description (use nja-generate directly); editing an existing module's bespoke logic.
{ nodes, relationships, style }. If not, stop.references/arrows-mapping.md (the encoding rules). Per node: name = caption, fields from node.properties. Per relationship: owner = fromId (toNode: true), relationshipName = type, edge fields from relationship.properties.structure/<module>.json and require explicit confirm/edit before writing or generating anything. One node at a time.
c. On confirmation: write structure/<module-kebab>.json (a one-element array, fresh UUID v4 moduleId).
d. Invoke the nja-generate skill for that structure file (it builds, dry-runs, generates, and lists the manual steps). Then move to the next node.Decide by querying the repo — never by node colour, position, or any visual cue:
| Class | Test | Action |
|---|---|---|
| foundation | name resolves to a framework entity (User, Company, …) — present as a ModuleId seeded by the package, importable from @foundation | skip generation; relationships route to it with directory: "@foundation" |
| existing | a ModuleId.<Name> and/or apps/api/src/features/**/<kebab> already exist | skip generation (don't clobber); only its NEW edges are handled via step 5 |
| net-new | neither of the above | generate |
properties is a { key: value } map → fields. Key = field name, a trailing ! = required (else optional). Value = type, normalized (case-insensitive; BlockNote→blocknote). See references/arrows-mapping.md for the full type table.properties become that relationship's edge fields[] (same rule).properties has NO known fields — ASK the user; do not invent any. (A module still needs a display field, usually name — ask, don't assume.)name/description/etc. from memory). The diagram is the source of truth; empty properties → ask.references/arrows-mapping.md — exact parse rules: caption→names, properties→fields, type normalization table, edge ownership/direction, alias detection, ordering.nja-generate's references/schema-reference.md — the target structure/*.json schema (do not duplicate it).npx claudepluginhub carlonicora/nja --plugin njaCreates, edits, and optimizes skills for Claude Code, including drafting, evaluating with test prompts, iterating on performance, and improving skill descriptions for better triggering accuracy.