Back to work

Cross-platform campus platform

CBU-FIND

A lost-and-found app for campus, so a missing item is posted, claimed and handed over in one place instead of scattered across group chats.

Completed 2026 Public repository
Responsive CBU Find report feed populated with meaningful lost and found items and matched report states
From the current build.
Role
Product Designer & Full-Stack Developer
Status
Completed
Year
2026
Stack
Kotlin · Jetpack Compose · Vinext / React · TypeScript · Firebase · Cloudflare Workers · Cloudinary

Latest project update

Completed and verified the shared Android/web workflow with meaningful reports, deterministic claim acceptance, private handover conversations, message controls, report resolution, moderation and resilient error states.

01 · Context

The problem

Lost-property information shared through chats, noticeboards and word of mouth is fragmented, difficult to search and easy to miss.

The response

CBU-FIND gives Android and web users one Firebase-backed campus record for publishing reports, verifying ownership claims, opening private handover chats only after acceptance, and closing the recovery loop when an item is returned.

02 · Contribution

What I built

  • 01

    Designed and built the native Android experience with Kotlin, Jetpack Compose, Material 3 and adaptive light/dark themes.

  • 02

    Built the responsive Vinext/React web client against the same authentication, report, claim, conversation and moderation contracts.

  • 03

    Implemented a trusted Hono, Zod and JOSE Cloudflare Worker API for validation, rate limiting, notification queues, audit-safe errors and sensitive mutations.

  • 04

    Integrated Firebase Authentication, Firestore real-time listeners, Cloud Messaging, App Check and Crashlytics across the system.

  • 05

    Implemented short-lived signed Cloudinary uploads for report media and chat attachments while retaining compatibility with legacy URL-only records.

  • 06

    Created security rules, additive migration tools and automated Worker, web, Android and Firestore-rule tests.

03 · What it does

What it does
today.

Email/password and Google authentication with password recovery
Android and responsive web clients sharing live data
Lost/found reports with signed images, search and filters
Deterministic found-it and ownership claims
Owner acceptance before private messaging
Real-time inbox, unread state and media attachments
Sender-controlled message editing and deletion
Blocking, abuse reporting and privacy-limited moderation
Push-notification preferences and private message previews
Matched, resolved and reopened report lifecycle
Queued account deletion and history anonymisation
Light, dark and system appearance modes

04 · Screens

See it
working.

Screenshots and recordings from the real build, with the notes that belong to them.

CBU Find web report feed showing four meaningful campus reports and matched states
The responsive web feed exposes the same searchable lost-and-found records as Android, including clear lost, found, active and matched states.
CBU Find Android create-report form for a lost or found item
The Android report flow captures type, category, campus location, compressed photos, a useful description and private handover details.
CBU Find claims page showing accepted found-it and ownership claims
A deterministic claim must be accepted by the report owner before the matching report changes state and a private conversation becomes available.
CBU Find private handover conversation with meaningful messages and report resolution control
Accepted participants can arrange a safe campus handover, edit or delete their own messages, report abuse and close the report when the item is returned.

05 · Engineering

Hard parts,
clear decisions.

Real-time reads with trusted writes

Firestore listeners preserve immediate cross-client updates, while business mutations pass through the Worker so claim races, suspensions, blocks, notifications and audit errors follow one policy.

Compatibility without destructive migration

Additive schemas and fallback reads preserve existing users, URL-only images, reports and conversations while new records gain structured assets, claims and moderation metadata.

Production behavior on free infrastructure

The backend combines Firebase Spark, Cloudflare Workers and Queues, and Cloudinary signed media while surfacing quota or connectivity failures as actionable states instead of false empty screens.

06 · Reflection

What I learned

Cross-platform contract designCompose and responsive React architectureFirebase real-time securityTrusted edge API designRace-safe claim workflowsQueued FCM deliveryPrivacy-limited moderationLegacy schema migration

Where it stands

I tested it with two accounts: four reports filed, reciprocal claims matched, and three-message handover conversations exchanged, all through the live web client on the same Firebase project the Android app uses.

Open to opportunities

Let’s discuss your role,
product or technical challenge.

Open to graduate software roles, internships, freelance builds, hackathons and collaborations, in Zambia or remotely.

Start a conversation

Navigate the system

Where should we go?