Cape Town, South Africa · Open to opportunities

Sicelamandla Zikhali

Software Engineer Full-Stack Product Builder

I turn real-world problems into reliable software — from thoughtful interfaces and internal tools to backend services, data workflows and production systems.

Based in Cape Town · Open to permanent, contract and part-time opportunities

Selected work

A selection of products and engineering projects spanning live applications, full-stack systems, data workflows, and tools designed to solve practical problems.

Live product Live at paperiser.co.za. Supports ABSA statements only, in digital (text) PDF form; scans and photos are not read yet. Under active development.

Paperiser

From a pile of PDFs to numbers you can trust.

Turns ABSA bank statement PDFs into clean, verified Excel or CSV files, and matches invoices and receipts to the payments that settled them.

PDFXLSX · CSV

Architecture

Your browserworkspace pageCloudflare Workerpaperiser.co.za · proxyPython app on Cloud RunJohannesburg · FastAPIparsers · checks · matchingin memory · not stored

How it works

  1. AddDrop in bank statements, invoices, receipts and supplier statements. Locked files ask for a password.
  2. CheckEvery balance is verified against the statement. Anything that does not add up is flagged.
  3. FixChange categories for one row, many rows or every similar row, and confirm which payment each document belongs to.
  4. ExportDownload Excel or CSV, plus a workbook of matched deals.

Problem

Bank statements arrive as PDFs. Getting them into a spreadsheet by hand is slow and error-prone, and a single misread number quietly undermines any bookkeeping built on top of it. Tying each payment to the invoice or receipt that explains it is another manual job.

Approach

Read digital statements deterministically, check the arithmetic in several independent ways, and show the result in a small workspace where the user can review and correct before exporting. Anything that does not add up is flagged rather than silently included.

My role

Designed, built, deployed and maintain it.

Key decisions

  • Verifiable numbers over clever guesses: each row’s balance must equal the previous balance plus its amount, and statement totals are compared with the statement’s own summary where it has one.
  • Deterministic parsing first. Language models are not used to invent numbers.
  • Privacy by default: files are processed in memory and not stored, there are no accounts needed to use the converter, and the page keeps the working state, so closing the tab forgets it.
  • Rules the user can read and edit: categories come from built-in rules for the bank’s own transaction types plus the user’s own rules, where the first match wins.
  • Start on a free tier and keep the service portable, hosting it in South Africa so statements are processed in-country.
What's built
  • Python package with parsers for ABSA Transaction History, Cheque account statements (including password-protected files) and credit card statements, plus a command-line tool.
  • Web workspace for many files at once: filter and sort, change categories for one row, several rows or all similar rows, review rules, then download Excel or CSV. Each row shows which file and page it came from.
  • Combining statements of one account with gap and overlap reports, and a monthly summary.
  • Reconciliation of digital invoices, receipts and supplier statements against bank rows, with suggested matches that always list their reasons.
  • Containerised and deployed on Google Cloud Run in Johannesburg behind a Cloudflare Worker, with upload and rate limits.

The vision

Turn bank statements into trustworthy, usable financial information: first for individuals (clean data, categories, budgets, tax), then for businesses that need to understand financial behaviour from statements, across one or many accounts, at a price small businesses can afford.

  • Verifiable numbers over clever guessesEvery figure traces back to a checked statement row.
  • Privacy by defaultProcessing stays in memory by default; any storage will be opt-in and deletable.
  • Deterministic firstLanguage models may explain and help repair rows that fail checks, never invent numbers.
  • A human decides about peopleThe product informs; it does not decide to refuse someone.

Roadmap

A draft roadmap: these are directions, not commitments, and each phase gets its own spec before work starts.

  1. Live now
    Statements you can trust
    • ABSA Transaction History, Cheque account and credit card statements
    • Several independent checks on every file
    • Combine statements of one account, with gap and overlap reports
    • Categories and your own rules, a web workspace and a command-line tool
    • Invoices and receipts matched to the payments that settled them
    • Nothing stored on the server
  2. Phase 2
    Personal finance
    • Opt-in encrypted vault for saved statements, rules and edits
    • Several accounts per person, with transfers between own accounts recognised
    • Recurring items, budgets and charts
    • A tax helper, scoped with a tax professional
  3. Phase 3
    Statement analysis for business
    • Income, commitments and affordability findings, each linked to its source rows
    • Authenticity checks: balance chains, gaps between statements, edits that break the arithmetic
    • Explained reports with a clear “what we could not verify” section, no opaque score
    • Gated on qualified legal advice (POPIA and credit rules); billing starts here
  4. Phase 4
    Teams and platform
    • Organisations, roles and seats with isolated data
    • A public API with keys and webhooks
    • Optional bank-connection sources alongside uploaded PDFs
    • Language-model explanations, always behind the deterministic checks

More projects

Ongoing project In progress. Schedule features are planned, not confirmed as complete.

Kasilator

A mobile-first transport utility designed around everyday South African taxi journeys, combining fare-change calculation with planned access to transport schedules.

Problem
Working out taxi change quickly is stressful for people who do not feel confident with arithmetic, and public transport times are hard to find.
Approach
Designed as a thin client with limited offline, network-independent access.
My role
Co-founder. Developed the app with Expo, React Native and TypeScript, and took on project ownership, project management, UX design and branding.
University group project Completed university project.

QuizGen

A final-year university group project exploring automated generation of Data Structures questions at several difficulty levels, for quizzes, assignments and online assessments.

My role: Built in Java as part of a student team.

Learning projects Learning exercises.

Early learning projects

Practice builds from my time at Zaio, inspired by familiar products to learn real patterns: an e-commerce shopping app, a Property24-inspired app (React and Firebase, including database security rules) and a Facebook-style login page. Learning exercises, not affiliated with the original companies.

About

I'm a Cape Town-based software engineer who enjoys turning real-world problems into useful, dependable software. My experience spans frontend and full-stack product development, backend microservices, data-oriented applications, integrations, and the systems that help applications run in production.

I've worked with teams across e-commerce and software product development, building customer-facing experiences as well as administration and operational tools. I care about understanding the problem before choosing the solution, keeping systems maintainable, collaborating well, and following a feature through from planning to release and support.

I'm a continuous learner and a practical problem-solver. The idea of Jugaad — there is always a way, and if you can't find it, you make it — resonates with me, but I also value sound architecture, readable code, testing and reliability. Outside day-to-day engineering, I enjoy teaching Computer Science and Mathematics and helping others grow their technical skills.

How I use AI

I use AI-assisted development as an engineering tool for exploration, debugging, codebase analysis, planning and review. I still care about understanding the system, validating changes, testing behaviour, and making deliberate decisions about privacy and security.

Capabilities

I work across the product lifecycle: understanding the problem, shaping a technical approach, building the feature, integrating services and data, and helping it run reliably in production.

Product engineering

Gathering operational and customer problems and turning them into shipped features, from planning through release and support.

Frontend and user-facing apps

Svelte/SvelteKit, React and TypeScript web applications, plus mobile work in React Native and Kotlin/Android.

Backend services and APIs

Services in Rust, Go, Python and Scala, with gRPC and Protocol Buffers for inter-service communication, and authentication, roles and multi-tenant access.

Data and messaging

MySQL, TiDB, PostgreSQL, MongoDB and Redis for data and caching, Elasticsearch / OpenSearch for search, and NATS and RabbitMQ for messaging between services.

Production operations

Docker and Kubernetes deployments, CI/CD, OpenTelemetry tracing, and troubleshooting and support for customers and operational teams, including peak periods.

Tools and technologies

Backend and APIs

  • Rust microservices
  • Go services
  • Python applications
  • Scala / Akka HTTP
  • gRPC
  • Protocol Buffers
  • Authentication, roles and multi-tenancy

Engineering practice

  • End-to-end feature delivery
  • Software design
  • Reusable components
  • Code review
  • Debugging and production support
  • Agile / Scrum
  • Mentoring
  • AI-assisted development

Experience

  1. Nov 2024 – Present

    Software Engineer · Zulzi

    Remote · Full-time

    E-commerce services and applications. Full-stack across several products, from the database up to the screen.

    • Backend: asynchronous Rust services (Tokio, Tonic, SQLx) and Go services, talking to each other over gRPC and Protocol Buffers, with NATS and RabbitMQ for messaging.
    • Data and search: MySQL, TiDB and PostgreSQL for storage, Redis for caching, and Elasticsearch / OpenSearch for search.
    • Reliability: OpenTelemetry tracing with Jaeger, durable workflows with Temporal, container-based integration tests, and local Kubernetes deployments.
    • Frontend: SvelteKit administration and operations portals styled with Tailwind CSS, tested with Vitest and Playwright, with maps and routes through Mapbox and Google Maps.
    • Mobile and data tooling: customer-facing experiences in Svelte, React Native and Kotlin/Android, plus Python and Streamlit tools for data analysis.
    • Authentication, roles, permissions and multi-tenant access, and reporting applications for operations teams.
    • Turned operational and customer problems into features, with production troubleshooting and support, including peak periods and system overload; code reviews, pull-request testing and bug fixes.
  2. Sep 2022 – Nov 2024

    Software Developer · Chouette Software Solutions

    Hybrid · Full-time

    Frontend specialist on React and TypeScript single-page applications.

    • Built features for single-page applications, working with browser storage, IndexedDB, caching and background service-worker processes.
    • Developed reusable UI components and SCSS/CSS patterns, applying SOLID principles.
    • Integrated the frontend with backend APIs and Amazon S3.
    • Reviewed pull requests, tested edge cases, fixed bugs and presented completed features at sprint reviews.
    • Worked in Scrum using Azure DevOps for repositories, CI/CD and planning.
  3. Sep 2021 – Apr 2022

    Backend Engineer · Full Facing (Pty) Ltd

    Hybrid · Contract

    • Learned Scala and functional programming and contributed to an established project.
    • Implemented microservices with Scala and Akka HTTP, and inter-service communication with RabbitMQ.
    • Worked with MongoDB, Docker, AWS, GitHub CI/CD and microservice deployment.
  4. Dec 2020 – Dec 2021

    Web Developer · Zaio

    • Practised web development through mock applications, adding features beyond the initial requirements. These were learning projects, not products for the companies that inspired them.
    • Worked with JavaScript, HTML, CSS, React, React Native, Node.js, MongoDB, Firebase and Sass/SCSS.
  5. Apr 2022 – Present

    Computer Science and Mathematics Tutor · JiffyTutors

    Remote · Part-time

    • Tutors undergraduate pure Mathematics and Computer Science courses, helping students understand technical concepts and build problem-solving skills.
  6. Jan 2020 – Jan 2023

    Computer Lab Assistant · University of Cape Town

    Part-time

    • Supported students in the computer labs, particularly with Python and Java, and recorded hardware and technical issues for repair.
    • Helped with basic software and connectivity problems and referred complex access issues to ICTS.
  7. Jan 2018 – Jan 2023

    Tutor · UCT HelpAtScience Initiative

    Part-time

    • Supported first-year students in Science subjects after hours and during breaks, tutoring pure Mathematics and Computer Science.
    • Mathematics
    • Computer Science

Education & recognition

Education

BSc in Computer Science and Mathematics
University of Cape Town, 2017–2023

Certification

Claude in Action — Anthropic (2026)
Advancing in Anthropic’s agentic programming.
Verify this certificate(opens in a new tab)

Highlights

  • One of the top 200 matriculants in KwaZulu-Natal Province
  • First in the high school
  • Participated in the Mid-Year Bootcamp for Umlazi District matriculants
  • Zaio Elite Web Developer

Get in touch

Have a product idea, an engineering challenge, or an opportunity to collaborate? I'd be happy to hear about it.

Email sicela.zikhali@gmail.com

This site sets no cookies, uses no analytics and collects no visitor data. Emailing me sends your message to my inbox, nowhere else.