Contribute

We are a community of software engineers building in our spare time. No deadlines—only steady progress, learning, and shared outcomes.

Why contribute

  • Build a real, useful product for schools in Sudan
  • Grow an open-source community and shared economy
  • Learn modern stack: Next.js, TypeScript, Tailwind, Prisma, Neon, shadcn/ui

Revenue share model (transparent and fair)

  • Source of income: subscriptions, services, sponsorships
  • Distribution: a community treasury allocates revenue to contributors
  • Tracking: contributions logged in public (issues, PRs, changelog)
  • Payout cadence: periodic when meaningful revenue accumulates

We will refine the exact formula with the community. Initial principle: sustained impact and maintenance count more than one-off tasks.

Areas to contribute

  • Features: attendance, grading, timetable, parent portal
  • Docs: architecture, i18n, onboarding, how-tos
  • UI: shadcn/ui patterns, accessibility, RTL polish
  • Data: Prisma models, migrations, seeds
  • DX: ESLint/Prettier rules, scripts, templates
  • DevOps: CI, error tracking, observability

Workflow (no deadlines)

  1. Pick an issue or propose one
  2. Discuss scope briefly, avoid bikeshedding
  3. Open PR early and iterate in small steps
  4. Update docs or changelog when it helps others

Local setup

pnpm install
pnpm dev

Optional: configure your .env per README.md and set DATABASE_URL for Neon. If you changed Prisma models or env, also run:

pnpm prisma generate
pnpm prisma migrate dev --name init

Run pnpm build before pushing.

Code style

  • Linting: see /docs/eslint
  • Formatting: see /docs/prettier
  • Components: follow shadcn/ui naming, colocate actions.ts, validation.ts, content.tsx

PR checklist

  • Small, focused changes; describe the why
  • Screenshots for UI updates (LTR/RTL if applicable)
  • Tests or manual steps described when risky
  • Add a brief line to /docs/changelog if notable

Community etiquette

  • Be kind; assume good intent
  • Prefer clarity over cleverness
  • Teach through code and docs

If you’re unsure where to start, comment on an issue and we’ll guide you.