← Back to projects
OwnerLive in production · Post-MVP · Active users
Visit site ↗

An academic content-sharing platform for African students. Students upload, discover, and share study materials. Creators earn real money from views via mobile money payouts.

Next.jsPostgreSQLPrisma ORMSupabaseRailwayVercelGumroadResend

MaterialCrate


The problem

African university students sit on mountains of study material: notes, past papers, summaries, solution sets. And they have no good way to share or monetise them. Global platforms like Scribd exist but aren't designed for this market. They don't support mobile money, they're expensive, and they have no concept of a local student creator economy.

There was also a trust problem. Without any anti-plagiarism infrastructure, a sharing platform would fill up with duplicated or lifted content fast, killing its value for everyone.

MaterialCrate is my answer to both gaps.


My role

I founded, architected, built, and operate MaterialCrate end to end. Every line of backend code, every database schema, the subscription logic, the plagiarism detection system, the mobile money integration, the deployment pipeline. All me. I'm also the product manager, support team, and (occasionally) the content moderator.

This isn't a side project. It's a live product with real users and real payouts happening.


Key decisions

Token economy over pure subscription. Students pay tokens to view premium content; creators earn tokens from views that convert to mobile money payouts. This lets low-income students participate at whatever level they can afford, while creating real earning potential for content creators.

Mobile money, not Stripe. Stripe doesn't work in most of Africa. I integrated mobile money payouts directly. Deliberate design choice for the market, not an afterthought.

Anti-plagiarism infrastructure from scratch. Academic content needs trust. I built a two-layer system: SHA-256 hashing catches exact duplicates, and MinHash combined with Locality-Sensitive Hashing (LSH) handles chunk-level similarity detection. Plagiarism is flagged before content goes live.

Gumroad for subscription billing. Free, pro, and premium tiers run through Gumroad. This keeps billing complexity off my plate without sacrificing the subscription model.

HubChat integration for AI features. Each post gets AI-assisted tooling via HubChat: summarisation, Q&A, study aids. No need to build that infrastructure myself.


Stack

  • Database: PostgreSQL managed by Prisma ORM
  • Hosting: Supabase (database), Railway (API server), Vercel (frontend)
  • Subscriptions: Gumroad
  • Transactional email: Resend
  • AI features: HubChat per-post integration

Challenges & solutions

Surviving a forced hosting migration on a live product. The original deployment ran on Render. Mid-operation, pricing changes made it unworkable. I migrated the full stack to Supabase + Railway + Vercel without downtime and with active users on the platform. No staging environment. No war room. Just careful execution. It was the hardest operational challenge so far.

Designing for unreliable connectivity. Zambian internet is inconsistent. The platform had to tolerate slow and interrupted connections gracefully, which shaped decisions around aggressive caching, lazy loading, and clean failure states.

The plagiarism detector's false-positive rate. The first version of the MinHash implementation had a similarity threshold that was too aggressive. It flagged legitimately similar content (standard textbook summaries, for example) as plagiarism. Tuning the LSH band and row configuration took several iterations to get right without letting actual duplicates through.


Outcome

MaterialCrate is live, past MVP, and has an active user base of students creating and consuming content. The creator economy is working. Payouts are happening. The plagiarism system is catching duplicates in production.

MaterialCrate feed view

MaterialCrate profile and payout view