GeoAlgeria is a small pnpm monorepo of open Algeria datasets published to npm. This file is the short version of how work flows here; deeper docs are linked.
Before writing code, data, copy, package descriptions, or issue/PR titles, read
CONTEXT.md, the project's canonical glossary, and use its terms,
avoiding the synonyms each lists under _Avoid_. If a concept is missing or a
term conflicts, update CONTEXT.md rather than drifting to a synonym (that's the
/domain-modeling skill).
| Path | Package | Contents |
|---|---|---|
packages/schema/ |
@geoalgeria/schema |
shared v2 contract – types, validator, canonical metadata/manifest builders, emit helpers; a dev dependency of every generator, not itself a dataset |
packages/dataset/ |
geoalgeria |
wilayas, dairas, communes (+ mirrored postal data) |
packages/poste/ |
@geoalgeria/poste |
post offices & ATMs (Algérie Poste) |
packages/emploi/ |
@geoalgeria/emploi |
employment agencies (ANEM: AWEM + ALEM) |
packages/mobilis/ |
@geoalgeria/mobilis |
Mobilis agencies & approved points of sale (mobilis.dz) |
packages/telecom/ |
@geoalgeria/telecom |
cross-operator 5G coverage (Djezzy, Mobilis, Ooredoo) |
packages/aviation/ |
@geoalgeria/aviation |
civil airports with ICAO codes (ANAC) |
packages/banques/ |
@geoalgeria/banques |
licensed banks, institutions & branches (RIB/SWIFT) |
packages/livraison/ |
@geoalgeria/livraison |
delivery carriers & geocoded stop-desks |
packages/jeunesse/ |
@geoalgeria/jeunesse |
youth establishments (Ministry of Youth and Sports) |
packages/sports/ |
@geoalgeria/sports |
sports facilities – stadiums, pools, courts, tracks (Ministry of Youth and Sports) |
packages/enseignement-superieur/ |
@geoalgeria/enseignement-superieur |
higher-education network – universities, grandes écoles, ENS, centres + private & other-ministry institutions (MESRS) |
packages/tourisme/ |
@geoalgeria/tourisme |
tourism infrastructure – hotels, attractions, historic sites, thermal springs, parks (ASAL, OSM, Wikidata) |
packages/formation-professionnelle/ |
@geoalgeria/formation-professionnelle |
vocational training – CFPA, INSFP, DFEPs, private centers (MFEP / takwin.dz) |
packages/djezzy/ |
@geoalgeria/djezzy |
Djezzy boutiques – geocoded retail stores with category & hours (djezzy.dz) |
packages/ooredoo/ |
@geoalgeria/ooredoo |
Ooredoo stores – 572 EO/CSO/ESO with real coordinates & wilaya/commune linkage (ooredoo.dz locator API); completes the telecom retail trio |
packages/mosquees/ |
@geoalgeria/mosquees |
mosques – Wikidata + OpenStreetMap composite, bilingual, all 69 wilayas |
packages/sante/ |
@geoalgeria/sante |
public health establishments – EPH, EPSP, EHS, CHU (Ministry of Health), bilingual, geocoded via OSM + Wikidata |
packages/cliniques/ |
@geoalgeria/cliniques |
clinics & proximity-care facilities – 1,894 polycliniques, salles de soins, centres de santé, maternités & private clinics from OpenStreetMap, classified by type, bilingual, 66 wilayas; the community tier of the health sector, disjoint from sante (registry tier) |
packages/protection-civile/ |
@geoalgeria/protection-civile |
civil protection (fire & rescue) units – 880 DGPC units nationwide, Arabic-named, address/phone/fax, status tier, geocoded, official-primary (dgpc.dz), post-2026-reform wilaya linkage |
packages/culture/ |
@geoalgeria/culture |
cultural atlas – protected sites, museums, theatres, libraries + cultural establishments (Ministry of Culture), bilingual, fully geocoded |
packages/agriculture/ |
@geoalgeria/agriculture |
agriculture-sector institutions – services directorates (DSA), forest conservations, research/training institutes, chambers of agriculture, public offices & groups (Ministry of Agriculture), bilingual, geocoded |
packages/industrie-pharmaceutique/ |
@geoalgeria/industrie-pharmaceutique |
approved pharmaceutical manufacturers – 171 medicine (PP) & medical-device (DM) makers from the Ministry of Pharmaceutical Industry (MIP) fabrication register, bilingual, typed by nature, geocoded to commune/wilaya centroid |
packages/pharmacies/ |
@geoalgeria/pharmacies |
pharmacies (officines) – 3,797 geocoded across 67 wilayas, bilingual where named, phone/hours/dispensing where tagged, wilaya/commune-linked (OpenStreetMap, ODbL); honest ~half coverage |
packages/pharma/ |
@geoalgeria/pharma |
pharma umbrella – re-exports industrie-pharmaceutique + pharmacies in one install |
packages/ecoles/ |
@geoalgeria/ecoles |
schools – 11,855 primaires/CEM/lycées/préscolaires classified by cycle, bilingual, all 69 wilayas (OpenStreetMap, ODbL) |
packages/gares-routieres/ |
@geoalgeria/gares-routieres |
intercity bus stations – 74 SOGRAL gares routières, 52 wilayas, geocoded with surfaces (live.sogral.com) |
packages/ferroviaire/ |
@geoalgeria/ferroviaire |
rail & urban transit – 692 train/tram/metro/aerial-tramway/gondola nodes (SNTF/SETRAM/SEMA), Wikidata + OSM composite, bilingual |
packages/buses/ |
@geoalgeria/buses |
urban bus networks – 50 ETUSA (Alger) lines, line-level v1 (fr.wikipedia) |
packages/transport/ |
@geoalgeria/transport |
transport umbrella – re-exports aviation + ferroviaire + gares-routieres + buses |
The postal data under packages/dataset/data/poste/ is a generated mirror;
edit it in packages/poste, then npm run fetch there. Never hand-edit the mirror.
sources/ holds the committed raw captures the fetchers build from — one
canonical latest capture per (package, source), written only via
scripts/lib/source-store.mjs, so refreshes are reviewable git diffs and every
converted package rebuilds offline (--cache). Rules in
sources/README.md. Unconverted packages still cache raw
pulls in gitignored research/<pkg>/ until they are next touched.
- Branch off
main:fix/commune-name,feat/emploi-coords,chore/ci. - Edit data, keeping the rules in
CONTRIBUTING.md: sorted, UTF-8, sourced (JORA / Algérie Poste / ONS), bilingual FR/AR. pnpm validate: schema + integrity checks. Must pass.- Add a changeset if a published package changed:
pnpm changeset(data semver: major = breaking schema · minor = new data/format · patch = corrections). - Commit with Conventional Commits:
feat(emploi): ...,fix(dataset): ...,chore(ci): .... - Open a PR to
main. CI (Node 22 & 24) runs lockfile/audit/validate/smoke.
Maintainers push small data fixes straight to main with a changeset; the
release machinery below handles versioning either way.
We use Changesets + a "Version Packages" PR + staged Trusted Publishing:
- Land changes with changesets on
main. - The Release workflow opens/updates a
chore: version packagesPR that bumps versions and CHANGELOGs. Merging that PR is the release trigger. - On merge, packages are staged on npm (OIDC, no token) and per-package GitHub Releases are cut with CSV/GeoJSON/SQL bundles attached.
- Approve the staged packages (2FA) to make them live, then
pnpm purge-cdn.
Full details and one-time setup: RELEASING.md.
- Strategy, positioning, and launch copy live in
.agents/(gitignored: local working files, not published):product-marketing.md,launch-plan.md,launch-posts.md,launch-discussions.md,release-notes-templates.md. - The Announce workflow turns each release into a Discussion + social drafts.
Release-note structure:
.github/RELEASE_TEMPLATE.md(committed); the marketing copy built from it:.agents/release-notes-templates.md. - Publishing public content (social posts, seeded discussions) under the owner's identity needs explicit human go-ahead; automation drafts, humans post.
- Hand-edit generated mirrors (
packages/dataset/data/poste/). - Push a bump without a changeset, or a changeset without a source for the data.
- Commit anything from
.agents/; it's intentionally local.
Configuration for the mattpocock/skills engineering-skills workflow (/grill-with-docs → /to-spec → /to-tickets → /implement, plus /triage, /wayfinder, /research, /tdd, /code-review).
Internal issues for both GeoAlgeria repositories live in the private
yasserstudio/geoalgeria.com GitHub repository. This public repository's issue
tracker is community intake only. Local .scratch/ files are temporary planning
artifacts, not the durable backlog. See docs/agents/issue-tracker.md.
The five canonical roles (needs-triage, needs-info, ready-for-agent,
ready-for-human, wontfix) are GitHub labels on the private tracker. See
docs/agents/triage-labels.md.
Single-context: one CONTEXT.md + docs/adr/ at the repo root (created lazily by /domain-modeling). See docs/agents/domain.md.