Gambia’s mobile numbers are moving from 7 digits to 9. Migrate9 helps you update a contacts export so both the old and new numbers sit side by side, without uploading anyone’s address book to a server.
Drop in a .vcf file, review what changed, assign an operator when we’re not sure, then download a new file you can import back into your phone.
Everything runs in your browser. Contacts never leave the device.
Built by Integify.
- You export contacts as a vCard (
.vcf) from your phone or computer. - You open that file in Migrate9.
- We look for Gambian numbers (
+220,00220, or plain220…) that are still 7 digits locally. - For Africell, QCell, and Comium we insert the right 2-digit prefix so the number becomes 9 digits.
- Gamcel numbers starting with
9are flagged as pending (their scheme isn’t locked in yet). - Ambiguous numbers get an “unknown” status; you pick the operator in the UI.
- You download a new
.vcfthat keeps the original TEL lines and adds the updated ones.
The app is also installable as a PWA (Add to Home Screen / Install), so it can feel more like a small local tool than a website.
| Operator | Prefix | Typical local starts |
|---|---|---|
| Africell | 87 |
40, 41, 2, 7 |
| QCell | 83 |
50-53, 58, 59, 3 |
| Comium | 86 |
6, 8 |
| Gamcel | n/a | 9… (shown as pending for now) |
The rules live in src/lib/numbering.ts. If regulators or operators publish updates, that’s the file to change, and the tests to update with it.
- React 18 + TypeScript
- Vite 6
- Vitest for unit tests
- Service worker + web manifest for offline / install
No backend. No analytics SDK. No auth.
You’ll need Node.js 18+ (20 LTS is a safe bet).
npm install
npm run devOpen the URL Vite prints (usually http://localhost:5173).
Useful scripts:
npm run build # typecheck + production build → dist/
npm test # run unit tests oncesrc/
main.tsx # UI: import, review table, filters, download, PWA install
styles.css # layout and theme
lib/
numbering.ts # detect operator + build 9-digit form
numbering.test.ts
vcard.ts # parse/rewrite .vcf, build review list
vcard.test.ts
pwa.ts # install prompt helpers + SW registration
public/
sw.js
manifest.webmanifest
icons/
If you’re changing conversion behavior, start in numbering.ts / vcard.ts and keep the tests green. UI-only work mostly stays in main.tsx and styles.css.
Migrate9 is designed so contact data stays on the machine that opened the file. Please don’t add features that send .vcf contents (or derived contact data) to a remote API unless that’s an explicit, discussed product decision with a clear opt-in.
We’re bringing in outside help on this repo. See CONTRIBUTING.md for how we like PRs, branches, and reviews to work.
Issues and pull requests are welcome, especially around numbering edge cases, vCard quirks from different phone exports, and accessibility.
Private / all rights reserved unless a license file is added later. If you’re an external contributor, assume you need an explicit agreement before reusing the code elsewhere.