Skip to content
View johnmugabe's full-sized avatar
🎯
Focusing
🎯
Focusing

Organizations

@263tickets @HykAfrica @67even

Block or report johnmugabe

Block user

Prevent this user from interacting with your repositories and sending you notifications. Learn more about blocking users.

You must be logged in to block users.

Content in all repositories owned by your account will be closed.
Maximum 250 characters. Please don’t include any personal information such as legal names or email addresses. Markdown is supported. This note will only be visible to you.
Report abuse

Contact GitHub support about this user’s behavior. Learn more about reporting abuse.

Report abuse
johnmugabe/README.md

John Mugabe

Full-Stack Developer · Platform & Product · Harare, Zimbabwe
Building event ticketing and payment infrastructure for Africa, by Africa.

Email LinkedIn Website 67even Open to work


<?php

declare(strict_types=1);

/**
 * John Mugabe - Full-Stack Developer
 *
 * 11 years shipping production web platforms, from Laravel monoliths to
 * multi-app TypeScript monorepos. Currently building 263tickets Discover:
 * a multi-sided event ticketing platform for Africa, by Africa, with native
 * mobile-money rails, WhatsApp-first ticket delivery, and inventory that
 * survives an arena on-sale.
 *
 * Clean code, tested behaviour, correctness under load, and money that
 * always adds up.
 *
 * @author  John Mugabe <jonesmugabe08@gmail.com>
 * @see     https://github.com/johnmugabe
 * @see     https://github.com/67even
 * @see     https://github.com/RealNerdZW
 * @see     https://johnmugabe.online
 */
final readonly class AboutMe
{
    public function __construct(
        public string $name = 'John Mugabe',
        public string $title = 'Full-Stack Developer · Platform & Product',
        public string $location = 'Harare, Zimbabwe',
        public string $timezone = 'Africa/Harare',
        public int $yearsOfExperience = 11,
        public string $currentFocus = 'Payments integrity, inventory at scale, and AI-augmented delivery',
        public string $philosophy = 'Clean code, tested behaviour, delighted users',
        public bool $openToWork = true,
        public bool $openToCollaboration = true,
    ) {
    }

    /** @return array<string, string> */
    public function contact(): array
    {
        return [
            'email'      => 'jonesmugabe08@gmail.com',
            'linkedin'   => 'linkedin.com/in/johnmugabejnr',
            'github'     => 'github.com/johnmugabe',
            'openSource' => 'github.com/67even',
            'website'    => 'johnmugabe.online',
        ];
    }

    /** @return list<array{role: string, company: string, website: string}> */
    public function experience(): array
    {
        return [
            ['role' => 'Co-Founder & CTO',          'company' => 'Innfuture Technologies', 'website' => 'https://www.innfuture.co.zw'],
            ['role' => 'Lead Platform Architect', 'company' => '263tickets',             'website' => 'https://www.263tickets.co.zw'],
        ];
    }

    /** @return list<string> */
    public function recentlyShipped(): array
    {
        return [
            'Zimbabwe payments cutover: EcoCash, InnBucks and ZimSwitch on a custodial ledger',
            'Closed three inventory leaks with Redis hold-restoration sweeps',
            'Apple & Google Wallet pass pipeline, with revocable device tokens',
            'Gated livestreaming: signed HLS, access codes, device binding',
            'Enterprise WhatsApp management: consent, STOP semantics, broadcasts, inbox',
            'Admin control plane: RBAC, tamper-evident audit trail, emergency kill switches',
            'Buyer account hub: wallet, refund requests, DSAR export, payment methods',
            'Four coexisting design-token systems across web, organiser, admin and mobile',
            'Open-source developer guides and Claude skills for Paynow and EcoCash (github.com/67even)',
        ];
    }

    /** @return list<array{name: string, description: string, stack: list<string>, features: list<string>}> */
    public function currentProjects(): array
    {
        return [
            [
                'name'        => '263tickets Discover',
                'description' => 'Event ticketing for Africa, by Africa: organisers, attendees, venues and partners',
                'stack'       => ['Next.js', 'NestJS', 'Drizzle', 'PostgreSQL', 'Redis', 'Temporal', 'Typesense', 'Expo'],
                'features'    => [
                    'Native mobile-money rails on a custodial ledger',
                    'Oversell-proof inventory holds under on-sale load',
                    'WhatsApp-first ticket delivery with a consent ledger',
                    'Apple & Google Wallet passes with live updates',
                    'Gated livestreaming over signed HLS',
                    'Offline-capable door scanning',
                ],
            ],
            [
                'name'        => 'E-commerce Platform',
                'description' => 'Scalable e-commerce solution with a microservices architecture',
                'stack'       => ['Laravel', 'Vue.js', 'MySQL', 'Redis'],
                'features'    => ['Microservices', 'Real-time Analytics', 'Payment Integration'],
            ],
        ];
    }

    /** @return array<string, string> Zimbabwean payment rails, documented for other developers */
    public function openSource(): array
    {
        return [
            'ecocash-instant-payment-api' => 'EcoCash Instant Payment (EIP) guide, tested clients in 5 languages, and a Claude skill',
            'paynow-integration-skill'    => 'Paynow checkout integration guide and Claude skill',
            'paynow-billpay-skill'        => 'Paynow bill payments guide and Claude skill',
            'innbucks-merchant-api-integration'  => 'Integrate InnBucks: generate a payment code, show it with its QR code and deep link, confirm payment and go live.',
        ];
    }

    /** @return array<string, list<string>> */
    public function platformEngineering(): array
    {
        return [
            'Inventory at Scale' => ['Atomic Redis Lua Holds', 'TTL + Heartbeat Extension', 'Cache Pre-warming', 'k6 On-Sale Rehearsals'],
            'Durable Workflows'  => ['Temporal', 'Idempotent Activities', 'continueAsNew Fan-out', 'Reconciliation Sweeps'],
            'Realtime'           => ['Soketi (Pusher protocol)', 'Scoped Channels', 'Live Availability Push'],
            'Architecture'       => ['Modular Monolith', 'Bounded Contexts', 'Boundary Lint Gates', 'Domain-Event Outbox'],
            'Reliability'        => ['Idempotency Keys', 'Poll-Reconciliation over Webhooks', 'Process-Safety Nets', 'Graceful Degradation'],
        ];
    }

    /** @return array<string, list<string>> */
    public function fintech(): array
    {
        return [
            'Payment Rails'   => ['EcoCash', 'InnBucks', 'ZimSwitch', 'Paynow', 'Custodial Ledger'],
            'Money Modelling' => ['Integer Minor Units', 'ISO 4217 Currency Codes', 'Multi-currency (USD / ZiG / ZAR)', 'Never Floats'],
            'Integrity'       => ['Signature-verified Webhooks', 'Enquiry-endpoint Reconciliation', 'Double-entry Ledgers', 'Dispute-grade Audit Trails'],
            'Compliance'      => ['PCI SAQ-A Scope', 'Hosted / Tokenised Card Flows', 'No PAN or CVV Ever Stored'],
        ];
    }

    /** @return array<string, list<string>> */
    public function backend(): array
    {
        return [
            'PHP 8.x'         => ['Laravel', 'Symfony', 'Livewire'],
            'TypeScript/Node' => ['NestJS', 'Node.js 22', 'Fastify', 'Zod-validated Boundaries'],
            'Databases'       => ['PostgreSQL', 'MySQL', 'Redis', 'Typesense', 'pgvector', 'Elasticsearch'],
            'Data Access'     => ['Drizzle ORM', 'Eloquent', 'Query Tuning', 'Forward-only Migrations'],
            'APIs'            => ['REST (versioned)', 'OpenAPI Contracts', 'GraphQL', 'WebSocket Services'],
            'Async & Jobs'    => ['Temporal Workflows', 'Queue Systems', 'Scheduled Reconciliation', 'Outbox Events'],
        ];
    }

    /** @return array<string, list<string>> */
    public function frontend(): array
    {
        return [
            'JavaScript'              => ['React 19', 'Next.js App Router / RSC', 'TypeScript', 'Vue.js 3', 'Alpine.js'],
            'State & Forms'           => ['TanStack Query', 'React Hook Form', 'Zod', 'Server Actions'],
            'Styling'                 => ['Tailwind CSS v4', 'Design Tokens', 'shadcn/ui on Radix', 'SASS/SCSS'],
            'Motion'                  => ['Motion', 'GSAP', 'Lenis', 'Lottie / Rive', 'prefers-reduced-motion'],
            'Mobile'                  => ['Expo', 'React Native', 'NativeWind', 'Offline-first SQLite'],
            'Build Tools'             => ['Turborepo', 'Turbopack', 'Vite', 'pnpm Workspaces', 'Biome'],
            'Progressive Enhancement' => ['PWAs', 'Offline-first', 'Performance Budgeting'],
        ];
    }

    /** @return array<string, list<string>> */
    public function design(): array
    {
        return [
            'Tools'          => ['Figma', 'Adobe XD', 'Sketch'],
            'User Research'  => ['User Personas', 'Journey Mapping', 'Usability Testing'],
            'Design Systems' => ['Multi-brand Token Architectures', 'Component Libraries', 'Automated Token Linting'],
            'Accessibility'  => ['WCAG 2.1', 'Screen Readers', 'Keyboard Navigation'],
        ];
    }

    /** @return array<string, list<string>> */
    public function ai(): array
    {
        return [
            'Tooling'    => ['Vercel AI SDK', 'Claude (Opus / Sonnet / Haiku)', 'Claude Skills', 'Structured Output via Zod', 'Prompt Caching'],
            'Surfaces'   => ['Semantic Discovery & Re-ranking', 'Content Generation', 'Moderation Triage', 'Fraud Scoring', 'Pricing Suggestions'],
            'Retrieval'  => ['pgvector', 'Embedding Pipelines', 'Hybrid Search with Typesense'],
            'Guardrails' => ['Per-request Spend Caps', 'Human-in-the-loop Gates', 'Explainable Recommendations', 'Full Decision Audit'],
        ];
    }

    /** @return array<string, list<string>> */
    public function security(): array
    {
        return [
            'AuthN / AuthZ'   => ['Clerk', 'JWT Verification', 'RBAC as Policy Code', 'Two-Admin Approval on High-Risk Actions'],
            'Data Protection' => ['Column-level PII Encryption (KMS)', 'Log Redaction', 'Secret Scanning', 'Rate Limiting & Anti-bot'],
            'Auditability'    => ['Append-only Audit Log', 'Merkle-chained Tamper Evidence', 'Impersonation Tracing'],
            'Privacy Law'     => ['GDPR', 'POPIA', 'Zimbabwe Cyber & Data Protection Act', 'DSAR Export + Erasure'],
        ];
    }

    /** @return array<string, list<string>> */
    public function devOps(): array
    {
        return [
            'Containers'    => ['Docker', 'Docker Compose', 'Kubernetes'],
            'Cloud'         => ['Vercel', 'Railway', 'Cloudflare (R2 / WAF / Stream)', 'AWS', 'DigitalOcean', 'Forge & Envoyer'],
            'CI/CD'         => ['GitHub Actions', 'Pre-commit Gates', 'Preview Deploys', 'Feature-flagged Dark Launches'],
            'Observability' => ['OpenTelemetry', 'Grafana Cloud (Loki / Tempo / Mimir)', 'Sentry', 'SLO-based Alerting'],
        ];
    }

    /** @return array<string, list<string>> */
    public function principles(): array
    {
        return [
            'Code Quality'          => ['Test-Driven Development', 'Clean Architecture', 'SOLID', 'Design Patterns'],
            'Collaboration'         => ['Agile', 'Code Reviews', 'Architecture Decision Records', 'Docs Shipped in the Same PR'],
            'User Focus'            => ['User-Centred Design', 'Performance First', 'Progressive Enhancement', 'Continuous Feedback'],
            'AI-Augmented Delivery' => ['Agentic Workflows with Claude Code', 'Multi-agent Adversarial Audits', 'Spec-driven Implementation', 'Human Review Before Merge'],
        ];
    }

    /** @return list<string> */
    public function education(): array
    {
        return [
            'Information Technology',
            'UI UX Design',
            'Full-Stack Web Development',
            'X-Platform Mobile Development',
            'Google Skillshop',
        ];
    }

    /** @return list<array{name: string, description: string, stack: list<string>, url?: string}> */
    public function sideProjects(): array
    {
        return [
            [
                'name'        => 'iZambezi CSS',
                'description' => 'Custom CSS framework for rapid UI development',
                'url'         => 'https://izambezi.vercel.app',
                'stack'       => ['CSS', 'SCSS', 'JavaScript'],
            ],
            [
                'name'        => 'GuideFlow',
                'description' => 'GuideFlow is a modular, framework-agnostic product tour library with a built-in finite state machine engine, AI-powered tour generation,                                     analytics, and A/B testing.',
                'stack'       => ['React', 'Vue', 'Svelte', 'JavaScript'],
            ],
        ];
    }
}

echo (new AboutMe())->openToCollaboration ? "Let's build something. 👋" : '';

Open source

Developer guides for Zimbabwean payment rails, each with tested code, a documentation site and an installable Claude skill.

Repository What it is
ecocash-instant-payment-api · docs EcoCash Instant Payment (EIP) API: sandbox to go-live, clients in PHP, Node.js, Python, Java and C#, and a Claude skill
paynow-integration-skill · docs Paynow checkout integration guide and Claude skill
paynow-billpay-skill · docs Paynow bill payments guide and Claude skill
innbucks-merchant-api-integration · docs InnBucks merchant API developer guide and Claude skill

Side projects

  • iZambezi CSS: a custom CSS framework for rapid UI development

Harare, Zimbabwe · Africa/Harare (UTC+2) · jonesmugabe08@gmail.com

Pinned Loading

  1. izambezi izambezi Public

    CSS library for Zimbabwe's popular Logos

    HTML 2 2

  2. 67even/paynow-integration-skill 67even/paynow-integration-skill Public

    Claude skill for the Paynow Zimbabwe payment gateway: PHP/Laravel, Node.js/Express and raw HTTP, plus a corrected API reference, hash tooling and a codebase auditor. Verified against the real SDKs,…

    Python 1 1

  3. innbucks-merchant-api-integration innbucks-merchant-api-integration Public

    Forked from 67even/innbucks-merchant-api-integration

    InnBucks Merchant API developer guide: payment codes, QR and deep links, code inquiry, agent deposits and reversals, with PHP/Laravel, Node.js and Python examples and a Claude skill.

    Python

  4. paynow-billpay-skill paynow-billpay-skill Public

    Forked from 67even/paynow-billpay-skill

    A Claude skill for integrating Paynow BillPay: vend ZESA tokens, airtime and bill payments without double-charging anyone, and pass go-live UAT the first time.

    PHP

  5. paynow-integration-skill paynow-integration-skill Public

    Forked from 67even/paynow-integration-skill

    Claude skill for the Paynow Zimbabwe payment gateway: PHP/Laravel, Node.js/Express and raw HTTP, plus a corrected API reference, hash tooling and a codebase auditor. Verified against the real SDKs,…

    Python