In development · early accessOwn product

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
Amigo World's Worlds page showing a live event card with a countdown, competition entries and a join button.
Worlds: live and upcoming community events. Local build running on the app's demo data.

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.

The Support Hub with requests for feedback on songs and projects, credits and reputation counters.
Support Hub, where people trade honest feedback. Demo data.
Worlds on a phone with a bottom navigation bar.
The mobile layout with bottom navigation.

06

Challenges

  1. 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.

  2. 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.

  3. 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.

↑ ↓ to move · Enter to openAMIGODEV