@tantainnovative/create-ndpr
v0.1.0
Published
CLI scaffolder for NDPA compliance with @tantainnovative/ndpr-toolkit
Readme
create-ndpr
CLI scaffolder for NDPA compliance using @tantainnovative/ndpr-toolkit.
Usage
npx @tantainnovative/create-ndprOr with the short alias (once published to npm):
npx create-ndprRun this from the root of an existing project. The CLI detects your stack and generates the right files with no manual copy-pasting.
What it does
Detects your project setup — checks for
next.config.*,expressinpackage.json, anapp/directory (App Router vs Pages Router),prisma/schema.prisma, anddrizzle.config.*.Prompts for a few details:
- Organisation name
- DPO (Data Protection Officer) email address
- Framework (auto-detected, can override)
- ORM: Prisma / Drizzle / None
- Which compliance modules to include
Generates files tailored to your stack.
What it generates
| File | When |
|------|------|
| .env.example | Always |
| prisma/schema.prisma | ORM = Prisma (skips if already exists) |
| src/drizzle/ndpr-schema.ts | ORM = Drizzle |
| app/ndpr-layout.tsx | Next.js App Router |
| app/api/consent/route.ts | Next.js + consent module |
| app/api/dsr/route.ts | Next.js + dsr module |
| app/api/breach/route.ts | Next.js + breach module |
| pages/api/consent.ts | Next.js Pages Router + consent |
| pages/api/dsr.ts | Next.js Pages Router + dsr |
| pages/api/breach.ts | Next.js Pages Router + breach |
| src/ndpr/index.ts | Express |
| src/ndpr/routes/consent.ts | Express + consent module |
All generated files use {{ORG_NAME}} and {{DPO_EMAIL}} substituted with your answers.
Modules
| Module | NDPA reference | Description |
|--------|---------------|-------------|
| consent | §25–26 | Consent collection, storage, and withdrawal |
| dsr | §34–38 | Data subject rights request intake and tracking |
| breach | §40 | 72-hour breach notification workflow |
| policy | — | Privacy policy scaffolding |
| dpia | — | Data Protection Impact Assessment |
| lawful-basis | §25 | Lawful basis register |
| cross-border | §43 | Cross-border data transfer management |
| ropa | Accountability | Record of Processing Activities |
After generation
With Prisma
# Copy .env.example → .env and set DATABASE_URL
cp .env.example .env
# Install dependencies
pnpm add @prisma/client @tantainnovative/ndpr-toolkit
pnpm add -D prisma
# Run migrations
pnpm prisma migrate dev --name ndpr-initWith Drizzle
cp .env.example .env
pnpm add drizzle-orm @paralleldrive/cuid2 @tantainnovative/ndpr-toolkit
pnpm add -D drizzle-kit
pnpm drizzle-kit pushNext.js — wire up the layout
// app/layout.tsx
import NDPRLayout from '@/app/ndpr-layout';
export default async function RootLayout({ children }) {
return (
<html lang="en">
<body>
<NDPRLayout>
{children}
</NDPRLayout>
</body>
</html>
);
}Express — mount the router
import express from 'express';
import { createNDPRRouter } from './src/ndpr';
const app = express();
app.use(express.json());
app.use('/api/ndpr', createNDPRRouter());Requirements
- Node.js 18+
- Zero external dependencies — works with
npxout of the box
Links
- Toolkit docs: https://ndpr-toolkit.tantainnovative.com
- GitHub: https://github.com/tantainnovative/ndpr-toolkit
- NDPC: https://ndpr.gov.ng
