Harry MbwasiPortfolio / 2026

Preparing your view

Code / Design / ArtworkA few things coming into focus.
Harry
Mbwasi
Let’s talk

Software engineering / graphic design

Software.Graphics.Products.

Portrait of Harry Mbwasi wearing a black shirt.

Hi, my name is Harry Mbwasi, a software engineering student at the University of Dodoma (UDOM), I build real solutions as a developer and a graphic designer at Techpreneurs Solution.

My value

Solving social problems digitally.

I have prior experience in Python through Django and Tkinter / CustomTkinter frameworks, making Unity multiplayer games, and using Java and Kotlin for Android mobile app development.

Software

I have made many projects that shape me towards making professional and impactful software, while ensuring that digital products are secure and well protected to avoid data from getting stolen or being altered.

Graphic design

Posters, banners, brochures, magazines, calendars and flyers. I also deal with making 2D digital art panels for use as wallpapers or printed portraits.

Studying
BSc Software Engineering
Second year, University of Dodoma
Working
Developer and graphic designer
Techpreneurs Solution
Based in
Dodoma, Tanzania
Tools
Python / Django / Tkinter / CustomTkinter / Java / Kotlin / Android / C# / C++ / Unity / Adobe Photoshop / Adobe Illustrator / Adobe InDesign / CorelDRAW

Project Gallery

Choose a work path
  1. 01 / Engineering

    Ventiqa

    Digital invitations, live RSVP tracking and QR check-in for Tanzanian events. A Django platform, live at ventiqa.co.tz.
    Date
    May 2026
    Role
    Engineering
    Built with
    Django, Python, PostgreSQL, Redis, Docker, Cloudinary

    An event platform for Tanzanian organisers. Build a guest list, send every guest their own invitation card over WhatsApp or SMS, watch the replies arrive, then scan people in at the door. It is running in production at ventiqa.co.tz.

    This is client work at Techpreneurs Solution, where I am a developer and graphic designer.

    What it does

    Four steps, which is the whole product:

    • Build the list. Upload from Excel, or add guests one at a time.
    • Send invitations. Each guest gets their own card, delivered over WhatsApp or SMS.
    • Track replies. Watch who is coming as the answers come in.
    • Run the door. Scan each guest in and count the room live.

    It is priced per invitation record rather than per event, which suits organisers running one wedding as well as a company running a season of seminars.

  2. 02 / Engineering

    Mineral tracker

    A Django system for mineral stock and transport, built around four roles that each see a different slice of the same data.
    Date
    January 2026
    Role
    Engineering
    Built with
    Django, Python, PostgreSQL, django-allauth

    A management system for mineral stock and its movement, what is held, what is moving, and who signed for it.

    Shipment tracking: a table of five shipments listing mineral, truck plate, route, weight, departure and arrival. Gypsum and copper ore are still in transit and show a dash where the arrival time will go.

    The records in these screenshots are sample data, entered to exercise the dashboards. They are not real trading figures.

    Roles are the design

    The system defines four roles, administrator, operations manager, financial manager and store keeper, and they are the organising idea rather than a permissions afterthought. Each role opens onto a different part of the same records, which is what separates a tool that a warehouse actually uses from a CRUD interface with everything visible to everyone.

    Login is required everywhere: there is no page that shows a record to someone who has not signed in, and no route that quietly leaks one.

    What that separation looks like in practice: the financial manager opens onto money, and the store keeper opens onto stock. Neither screen is a filtered version of the other.

    The financial manager’s view: five totals across the top — inflow, outflow, gross profit, government tax at eighteen per cent, and net profit, all in Tanzanian shillings — above a table of recent payments and two panels tracking debt owed by and to the business.

    The store keeper’s view: stock balances by item on the left, the latest inbound and outbound movements on the right, each one carrying a reference such as a goods-received number.

    Tax is computed rather than typed: the rate is a setting, and the dashboard derives government tax and net profit from the inflows and outflows already recorded, so the figure cannot drift from the payments it is drawn from.

  3. 03 / Engineering

    ScamShield

    An Android app that watches incoming texts for scam patterns and walks Tanzanian users through reporting them to the TCRA.
    Date
    September 2026
    Role
    Engineering
    Built with
    Android, Java, Gradle

    Scam texts are a daily tax on people with phones in Tanzania. Reporting one means going to the Tanzania Communications Regulatory Authority on short code 15040, which is not something most people have to hand when a message arrives. ScamShield watches incoming SMS, flags what looks like a scam, and carries the user through reporting it.

    The app brings message checking, a local history and reporting into one place. Automatic reading, sharing, pasting, screenshots and manual entry give users several ways to check the same kind of message.

    Getting a message in

    The decision worth pointing at is that there is no single way to submit a message. The analyse screen offers five, because the way a scam text reaches someone is not consistent:

    • Read SMS automatically once the permission is granted, so incoming messages are scanned without being handed over.
    • Share straight from Messages or any other app.
    • Paste the text.
    • Screenshot (OCR), extracting the text from an image. The case that matters when someone forwards a picture of a message rather than the message.
    • Manual input, typing it out.

    From the user’s side those are one feature. Underneath they are five quite different paths, and building all of them is a judgement about how people actually receive the thing you are asking them to check.

    What it claims, and where it runs

    The Privacy and Security notice beside the About dialog. The first states that messages are checked on this phone only, that nothing is uploaded, and that the history lives in a local database cleared when you delete it. The second states that ScamShield checks SMS for known scam wording and numbers, keeps a local history, and helps you report to TCRA on 15040.

    Two screens do most of the honest work. The privacy notice says messages are checked on the phone only, nothing is uploaded, and the local history is cleared when the app is deleted. The about dialog says plainly what the detection is: it checks messages for known scam wording and numbers. Not a model, not a service, a pattern match running locally.

    That is the right shape for this problem. An app that asks to read every text you receive and then sends them somewhere is a worse deal than the scams it protects against, and putting that on a screen the user can actually find beats putting it in a privacy policy.

    History, and what the user controls

    Scam history filtered by risk level, showing its empty state, beside Android’s notification settings for ScamShield listing the channels the app declares.

    History filters by risk level, and its empty state reads “No scam history yet, start reporting scams!” rather than “No data”. On the right is Android’s own notification settings, and what it shows is the app’s doing: ScamShield declares separate notification channels rather than one, so someone who wants scam alerts but not everything else can have exactly that. Neither is hard; both are the kind of thing that usually gets skipped.

    Screens captured from the app walkthrough.

  4. 04 / Engineering

    The Outbreak

    A hidden-role LAN game in Unity. Roles are dealt in secret, and the bunker they are dealt in is generated by code, not hand-built.
    Date
    September 2026
    Role
    Engineering
    Built with
    Unity, C#, Netcode for GameObjects, URP 2D

    A top-down 2D game played over a local network. One machine hosts, everyone else finds the game on the LAN and clicks it. No matchmaking service, no accounts, no internet.

    The lobby holds until three players are in, and then, in its own words, roles are dealt in secret and nobody can tell you apart. Survivors and infected look identical. That is the game: not a shooter with a co-op mode bolted on, but a social-deduction round where the map is the pressure and the other players are the problem.

    The Outbreak is a student game project in development, with the focus on reaching a playable final build.

    The preview above shows the bunker lobby before a round begins. One player is standing by while the interface waits for three players and explains that roles will be assigned in secret.

Photo composites

One image at a time.

Photographs blended in Photoshop into surreal, cinematic scenes. Use the arrows to move through the work.

  1. A man sitting cross-legged on the back of a whale that swims through water covering an empty road, with a city skyline behind and a small drone above.
    01 / 07Stillness on the road
  2. A planet rising over dark water, with a small figure in the foreground.
    02 / 07Planet rise
  3. A soldier in green forest light with a cybernetic eye, embers in the air and a figure behind.
    03 / 07AI warfare
  4. A yellow sports car lit from below on grass, against a night waterfront skyline with a ferris wheel.
    04 / 07Night drive
  5. A figure silhouetted in a doorway against a bright projection.
    05 / 07Doorway
  6. A wet street at night under a yellow neon sign reading Dock Street, with a taxi passing.
    06 / 07Dock Street
  7. A figure walking away down a neon-lit street between tall buildings.
    07 / 07Neon walk