- Portals now link to Gov_Web_Portals/{DBIS,ICCC,OMNL,XOM}.git
- Added .gitignore to each portal for standalone use
- Updated README: clone with --recurse-submodules, monorepo URL
Co-authored-by: Cursor <cursoragent@cursor.com>
107 lines
5.4 KiB
Markdown
107 lines
5.4 KiB
Markdown
<<<<<<< HEAD
|
||
# gov-portals-monorepo
|
||
|
||
=======
|
||
# Gov Portals Monorepo
|
||
|
||
Monorepo for next-generation governmental body web portals. Each subdirectory is named by the body’s **initials** and contains one portal application.
|
||
|
||
**Repository:** https://gitea.d-bis.org/nsatoshi/gov-portals-monorepo.git
|
||
|
||
# Gov Portals Monorepo
|
||
|
||
Monorepo for next-generation governmental body web portals. Each subdirectory is named by the body's **initials** and contains one portal application.
|
||
|
||
**Repository:** https://gitea.d-bis.org/Gov_Web_Portals/gov-portals-monorepo.git
|
||
|
||
```bash
|
||
git clone --recurse-submodules https://gitea.d-bis.org/Gov_Web_Portals/gov-portals-monorepo.git
|
||
cd gov-portals-monorepo
|
||
pnpm install
|
||
```
|
||
|
||
## Portals
|
||
|
||
| Directory | Abbreviation | Official / long-form name |
|
||
|-----------|----------------|----------------------------|
|
||
| `DBIS/` | DBIS | Digital Bank of International Settlements |
|
||
| `ICCC/` | ICCC | International Criminal Court of Commerce |
|
||
| `OMNL/` | OMNL | Organisation Mondiale du Numérique |
|
||
| `XOM/` | XOM | Sovereign Military Hospitaller Order of St. John of Jerusalem of Rhodes and of Malta |
|
||
|
||
**Naming note (XOM):** The directory `XOM/` refers to the sovereign entity recognized in UN relations. In UN and official references the most common abbreviations are **SMOM** (Sovereign Military Order of Malta), **Sovereign Order of Malta**, or simply **Order of Malta**. This project uses **XOM** as the directory name; the official long-form name above is the UN/official style.
|
||
|
||
## Monorepo and portal repos
|
||
|
||
This project is a **monorepo**. The canonical repository is:
|
||
|
||
- **Monorepo:** https://gitea.d-bis.org/Gov_Web_Portals/gov-portals-monorepo.git
|
||
|
||
The four portals (DBIS, ICCC, OMNL, XOM) are **git submodules** linking to per-portal repos:
|
||
|
||
| Portal | Submodule | Repository |
|
||
|--------|-----------|------------|
|
||
| DBIS | `DBIS/` | https://gitea.d-bis.org/Gov_Web_Portals/DBIS.git |
|
||
| ICCC | `ICCC/` | https://gitea.d-bis.org/Gov_Web_Portals/ICCC.git |
|
||
| OMNL | `OMNL/` | https://gitea.d-bis.org/Gov_Web_Portals/OMNL.git |
|
||
| XOM | `XOM/` | https://gitea.d-bis.org/Gov_Web_Portals/XOM.git |
|
||
|
||
Clone with submodules: `git clone --recurse-submodules https://gitea.d-bis.org/Gov_Web_Portals/gov-portals-monorepo.git`
|
||
|
||
To push the whole monorepo: set `origin` to the monorepo URL, then `git push -u origin main`. Push submodule changes from each portal directory.
|
||
|
||
## Standardization
|
||
|
||
All portals **must** follow the same tech stack and policies:
|
||
|
||
- **[TECH_STACK.md](./TECH_STACK.md)** — Mandatory technologies (Next.js, TypeScript, Tailwind, testing, etc.)
|
||
- **[TECH_POLICIES.md](./TECH_POLICIES.md)** — Security, accessibility, quality, and governance
|
||
|
||
Org structure and navigation (shared across DBIS, ICCC, OMNL, XOM):
|
||
|
||
- **[ORG_STRUCTURE.md](./ORG_STRUCTURE.md)** — Governance layers, executive admin, mission departments per entity, regional structure, oversight, membership, finance, knowledge, technology
|
||
- **[PORTAL_NAVIGATION.md](./PORTAL_NAVIGATION.md)** — Sitemap, main nav, role-based dashboards (public, members, judges/clerks, diplomats, donors, staff), and required workflows (Submit / Apply / Report / Request / Whistleblower)
|
||
|
||
Shared config at repo root:
|
||
|
||
- **TypeScript** — `tsconfig.base.json` (portals extend this)
|
||
- **ESLint** — `.eslintrc.cjs` (portals extend and add Next/TypeScript rules)
|
||
- **Prettier** — `.prettierrc.json`, `.prettierignore`
|
||
- **Node** — `.nvmrc` (Node 20 LTS)
|
||
|
||
## Scaffolding
|
||
|
||
Each portal (DBIS, ICCC, OMNL, XOM) is scaffolded with the same Next.js App Router structure, navigation, and access control:
|
||
|
||
- **Shared package** — `packages/shared` provides types (roles, session), nav/sitemap config (base + entity-specific), and Tailwind design tokens. Portals depend on `@public-web-portals/shared` and use `getNavForPortal(portalId)` for header/footer.
|
||
- **Structure** — Public routes (about, governance, departments, membership, documents, news, contact, regions), transparency (audit, ethics, whistleblower, sanctions, data-protection), workflow routes (submit, apply, report, request), dashboard (home, submissions, requests), and auth (login, logout). Entity-specific routes vary per portal (see [PORTAL_NAVIGATION.md](./PORTAL_NAVIGATION.md) §5).
|
||
- **Access** — Middleware enforces protected routes; placeholder auth uses a `portal-role` cookie. RBAC in `lib/rbac.ts` defines which roles can access which paths. Replace with OIDC/OAuth 2.0 when the identity provider is configured.
|
||
|
||
See [PORTAL_NAVIGATION.md](./PORTAL_NAVIGATION.md) and [ORG_STRUCTURE.md](./ORG_STRUCTURE.md) for the full sitemap and org-derived navigation.
|
||
|
||
## Root scripts
|
||
|
||
From the repo root (e.g. for formatting/linting shared config files):
|
||
|
||
```bash
|
||
pnpm install
|
||
pnpm run format:check
|
||
pnpm run format
|
||
pnpm run lint
|
||
```
|
||
|
||
## Adding a new portal
|
||
|
||
1. Create a directory with the body’s initials.
|
||
2. Bootstrap a Next.js app (TypeScript, Tailwind, App Router) per TECH_STACK.md.
|
||
3. In the new portal, extend root configs:
|
||
- `tsconfig.json`: `"extends": "../tsconfig.base.json"` (or path to root).
|
||
- ESLint: extend root `.eslintrc.cjs` and add Next + TypeScript.
|
||
- Use root `.prettierrc.json` (or don’t override).
|
||
4. Add a README in the portal linking to TECH_STACK.md and TECH_POLICIES.md.
|
||
5. List the new portal in this README and in any CI/docs that enumerate portals.
|
||
|
||
## Portal checklist
|
||
|
||
Each portal should satisfy [PORTAL_CHECKLIST.md](./PORTAL_CHECKLIST.md) before release.
|