Amigo World
My own social platform, now being rebuilt from its first Firebase version. Posts, profiles, Explore, notifications, encrypted one-to-one messages, 24-hour Moments, live events called Worlds and a Support Hub for honest feedback.
- My role
- Everything: product, design, front end, database, security and operations
- Type
- Own product
- Category
- Web application, Community

01
Overview
Amigo World began as a small Firebase social app with a feed, profiles and a global chat. The current rebuild is a typed React application with a PostgreSQL backend, designed for the features a real community needs: safety tools, moderation and reliable messaging.
It is in early access. Some features are live-tested end to end; others are tested locally and still waiting for live checks.
- React
- TypeScript
- Vite
- PostgreSQL (Neon)
- Supabase (schema origin)
- Cloudflare R2
- Web Push
- Vercel
- GitHub Actions
02
The problem
A social app is mostly the parts nobody sees: who can see a post, what happens after a block, how reports reach a moderator, and how messages stay private. Those have to be enforced by the server, not hidden by the interface.
03
Approach
Screens talk to a DataSource interface with three implementations: the legacy Firebase app (kept as the rollback path), the PostgreSQL backend and an in-memory demo. That let the rebuild proceed without touching the version people were already using.
Visibility, blocking, suspension and rate limits are enforced in the database. Media goes to a private Cloudflare R2 bucket through short-lived signed links that the database authorises.
Live checks run from GitHub Actions against preview and production deployments: media, push, Worlds and messaging journeys, with test accounts cleaned up afterwards.
04
Architecture
- Client
- React 19, TypeScript and Vite with React Router. Plain CSS with design tokens.
- Backend
- PostgreSQL on Neon with Neon Auth and the Data API. The schema was first written as Supabase migrations.
- Media
- Private Cloudflare R2 bucket; uploads and reads use signed links issued only after a database check.
- Messages
- End-to-end encrypted one-to-one messages using the Matrix Olm/Megolm implementation (vodozemac); the server stores ciphertext only.
- Operations
- Vercel deployments, GitHub Actions smoke tests, privacy-safe error reports and performance measurements.
05
Key features
Feed and profiles
Latest and Following feeds, likes, replies, photo posts, profiles with posts, replies and media tabs, and follow lists.
Explore and search
People and post search with Top, People, Posts and Media tabs, and suggestions.
Notifications
Follows, likes, replies and mentions, grouped, with read state and an unread badge.
Worlds
Admin-created live events with countdowns, posts, live chat and an optional competition with a leaderboard.
Support Hub
Ask for feedback on a song, video or project and help others in return, with credits and reputation.
Moderation
Reports, suspension, warnings, blocking, rate limits and an admin queue with an audit log.


06
Challenges
Rebuilding without breaking the live app
Problem
Existing users were on Firebase; a big-bang switch would risk their accounts and posts.
What I did
A DataSource seam, a repeatable read-only migration with validation reports, and the Firebase build kept as an instant rollback.
Private messages that stay private
Problem
Admins and the database should not be able to read conversations.
What I did
Messages are encrypted on the device; moderators only see what a reporter chooses to share.
Photos on slow networks
Problem
Full-size images made the feed slow on mobile data.
What I did
Feed-sized copies, tiny blurred previews stored with each post, and cacheable signed links. Measured on a 4G profile, the first feed photo went from 6.0 s to 4.0 s.
07
Where it stands
Built
- Feed, profiles, Explore, notifications, Worlds and Support Hub
- Encrypted one-to-one messages with photos
- Moderation, blocking, suspension and rate limits
- Media storage on Cloudflare R2 and Web Push
Planned or in progress
- Final legal text before public launch
- Voice notes and video posts
- Creator programme (designed, not open)
Not yet publicly launched.