Balqalam — Social
بالقلم — مدرستك كلها في مكان واحد. Balqalam is the school management brand. The product
used to be called Hogwarts; that name is retired from everything public, and the hogwarts brand
in this Hub is hidden and carries no briefs. Every school post goes out as Balqalam, on the
Bilqalam بالقلم Facebook Page.
The strategy behind this page is Balqalam Marketing Strategy v2 (2026-09-27). This page is the
part of it the social pipeline executes: /calendar and the Monday seeder read the briefs in
content/social/pillars.json, /draft reads this page for voice and claims, the media lane reads
each brief's visual, and /publish delivers to the Page after a human approves.
Goal
Social is a trust asset for sales: a school owner checks the Page before a demo, and an active, calm, Arabic-first Page removes doubt. The company metric is active paying schools; the Page's own signal is messages from decision-makers (owners, principals, registrars, finance leads), not followers, likes or reach.
Positioning
- Business model: SaaS, per-school subscription. B2B — the owner signs.
- Language: Arabic first. Plain modern standard Arabic (rung 2); English is the mirror.
- Message: your whole school in one place — admission, attendance, fees, results and family communication — in an Arabic system that starts from the data the school already has.
- Markets: one Page, two tracks. Sudan is the proof track (the live pilot, the warm network); the Gulf (Saudi, UAE) is the cash track. Knowledge posts are written for any Arabic-speaking school; a post that talks price, payment or regulation names one country.
Audience
| Persona | Wants | Fears | What the post says |
|---|---|---|---|
| School owner (signs) | Control, financial visibility | Cost, failure, the vendor vanishing, data lock-in | The whole school in front of you, and your data stays yours |
| General manager | Less chaos across departments | Staff pushback, disruption mid-year | We start from your existing Excel file |
| Registrar / admissions | No more retyping family data | Errors, lost follow-ups | The parent types it once |
| Finance lead | Due, late and discounted fees at a glance | Lost receipts, scattered ledgers | Fees, invoices and receipts in one record |
| IT / procurement | Isolation, export, roles, hosting | Unproven compliance promises | Precise answers, no invented certificates |
Teachers and parents read the Page too; knowledge posts reach them, but every post is written to one persona and every ask points at the decision-maker.
Channel mix
| Priority | Channel | Role |
|---|---|---|
| Now | Facebook — the Balqalam Page | The only publishing channel. Every approved piece lands here |
| Now | Follow-up only: a manual copy-out variant a person forwards to a school that already replied. Never broadcast | |
| Later | When the Gulf track has a live conversation | |
| Parked | Instagram, TikTok | Instagram returns once linked to the brand Page (today's handle is personal); TikTok when someone can make two videos a week without slowing the rest |
Content pillars
| Pillar | Share | Purpose | Examples |
|---|---|---|---|
school-operations | 35% | The owner recognises the problem | Absence, fee chaos, admission season, one staff member holding everything |
product-proof | 30% | Show it works — real screens only | Screen captures, workflows, Arabic interfaces |
learning-science | 20% | Authority, a quality audience | Retrieval practice, spacing, feedback — evidence labelled |
trust | 15% | Remove fears, explain the offer | Data ownership, the pilot, a fair comparison |
Cadence and calendar — the editorial queue
Balqalam does not use the weekly seeder. Its posts come from an editorial queue: ninety
numbered, undated drafts written ahead of time from the product itself, loaded into
/social/publish in order. The team takes the next one whenever it posts — daily, or with gaps;
nothing is dated, so nothing slips.
| Piece | Where |
|---|---|
The drafts (001–090, Arabic first, English sibling) | content/social/queue/balqalam/NNN-<slug>.md |
| The plan — 13 themed weeks × 7 slots, each tied to a feature | content/social/queue/balqalam/plan.json |
| The drafting contract | content/social/queue/balqalam/SPEC.md |
| The product facts each draft came from | hogwarts <feature dir>/SPOTLIGHT.md (named in each draft's frontmatter) |
| Loader (strict craft gate, idempotent) | node scripts/social-drafts.mjs queue --brand balqalam [--dry] |
The seven-slot rhythm, repeated: a school-day pain · a product proof · one persona's view · learning science (evidence labelled) · trust · a short how-to · a question to owners and principals. Evenings (19:00–23:00 local) are the window.
To write the next ninety: add rows to plan.json, write 091-… onward against SPEC.md, run the
loader with --dry, then without. Replace or extend the set at a quarterly review rather than let
it repeat unexamined.
Voice
- Arabic is written, never translated. A concrete school scene before any abstraction
(
content/social/scenes.json→balqalam). - Intelligent, direct, calm. No hype words (ثورة، يغيّر كل شيء، الأول بلا منافس), no corporate filler, no emoji beyond one.
- One persona, one idea, one ask per post.
- The ask has no link. Close by inviting a message to the Page (راسلونا على الصفحة) —
copy.mdxcheck 6: "if there is no link, say what to do instead". One ask, last. - Evidence posts separate three layers and never blend them: what the study found · what it may mean for a school · what Balqalam actually does. Label evidence strong, promising, preliminary or unsupported. No brain imagery, no dopamine, no learning styles, no correlation as causation.
Claims
The canonical registry is hogwarts/content/docs-en/marketing-brief.mdx. A draft that needs a
number, result or feature not listed as allowed there is refused, not softened.
Allowed: about 28 capability areas and about 60 features · Arabic is the default (2,247 Arabic strings) · King Fahad Schools, Khartoum, as the one live pilot — no results, no quotes without recorded approval · Free up to 100 students and 10 teachers · Excel import with Arabic headers · opens in the browser and installs to the home screen · data exports as CSV or JSON · built for slow connections · the MENA-10 pilot: three months free, then an annual contract.
Never: the Hogwarts name or wordmark · hours or money saved, percentages, uptime · "paying customers" or any school count beyond the one pilot · offline · native or store app · advanced analytics · payment gateways by count · automatic submission to ADEK or any regulator · compliance with PDPL, GDPR or FERPA · a student's face without written consent.
Media
- Idea posts carry a
visualin their brief (plateorlifestyle): calm school settings, desks, rooms, hands — no faces of children. The media lane compiles it against the brand kit (content/media/brand-kit.json→balqalam); the mark is the quill, never the Hogwarts wordmark. - Proof posts carry no generated visual on purpose. They attach a real Arabic screenshot
of the shipped screen — the hogwarts repo root holds
*-ar.pngcaptures, and/recordmakes fresh ones — never a mocked or generated interface. - Text-bearing cards (lists, carousels) render on the template lane (
/carousel), not as images.
Measure and kill
/measure reads each post at 24 hours, 7 days and 30 days. Record who engaged (owner, teacher,
parent, student), not just how many. Four weeks without a single message from a decision-maker
means change the angle, not the volume. Boost nothing until the week-8 review shows which posts
bring decision-makers.
Wiring
| Piece | Value |
|---|---|
| Product id | balqalam (env suffix BALQALAM) |
| Facebook Page | Bilqalam بالقلم — profile.php?id=61592684345321 |
| Graph Page id | 1218016808068580 — not the 61592684345321 in the profile URL, which is the profile number and returns error_subcode: 33 from Graph |
| Env | FACEBOOK_PAGE_ID_BALQALAM, FACEBOOK_PAGE_ACCESS_TOKEN_BALQALAM |
| Meta app | Gabriel (874547138717755) — the same Business app that carries the other Pages; renamed from "Hogwarts Social" 2026-08-19 so the app name is brand-neutral across four Pages |
| Domain / UTM | balqalam.com |
The Page token is minted the same way as the others: a user grant on the Business app with the
Balqalam Page ticked in Meta's granular-consent dialog, exchanged for a long-lived user token, then
/me/accounts for the Page token — which must come back with expires_at: 0. A permission grant made before this Page existed does not cover it: the granular scopes name
page ids explicitly, and clicking Generate Access Token in the Graph API Explorer silently
re-issues the old grant rather than offering the new Page. The step that actually adds it is
Edit settings → Select all → Continue → Save in the login dialog. Do not revoke the app to
force a fresh dialog — that would invalidate the three working permanent Page tokens.
Wired and verified 2026-08-19: checkFacebookHealth("balqalam") returns Bilqalam بالقلم, and
the hogwarts / mkan / databayt tokens survived the re-consent unchanged.