Jerome GaoFull Stack Engineer
All projectsIndependent product

Independent product

RateEverything

A cross-media rating product with separate user, admin, Node.js, and Python services sharing one PostgreSQL model.

Role
Independent Full Stack Engineer and product owner
Timeframe
Feb 2025 - Present
Status
Live

I built and deployed the system from Next.js and React administration through NestJS, FastAPI, PostgreSQL, automated tests, and cloud delivery.

Context

RateEverything explores a simple product question: why should film, television, music, books, podcasts, and other media live in unrelated rating histories? The product brings those categories into one account and one discovery model.

My role

I designed and built the system as an independent project. That includes the public Next.js experience, the React administration portal, the NestJS product API, the FastAPI administration API, the shared PostgreSQL schema, tests, CI, and deployment.

Service boundaries

The NestJS service owns the main product contract and uses Prisma for relational access. The FastAPI service gives administration workflows a small typed Python boundary through SQLModel. They share the database, so schema changes and ownership rules have to be deliberate; a second service is useful only when its responsibility is clearer than the coordination cost it introduces.

Quality and delivery

Jest covers service logic and Cypress covers important browser paths. The public site is deployed on Vercel. Requests under rating.ospreypulse.com/api are proxied to the NestJS API on GCP Cloud Run, with PostgreSQL hosted separately. Stable public paths keep provider URLs out of the browser-facing contract.

What I would strengthen next

The next step is stronger schema-compatibility checks between Prisma and SQLModel, richer moderation audit events, and contract tests around the proxy boundary. The product also needs clearer recommendation evaluation before recommendation features become a central claim.

Evidence

Full-stack evidence

A visible path from client experience to production operations.

  1. 01User web

    Next.js rating experience

    Responsive discovery and rating flows use TypeScript, Zustand, explicit loading states, and indexable routes.

  2. 02Admin

    React operations portal

    A separate Vite application provides CRUD and moderation workflows for media records and supporting data.

  3. 03Node API

    NestJS product service

    Authenticated REST modules, validation, and Prisma own the main consumer-facing product contract.

  4. 04Python API

    FastAPI administration service

    SQLModel and typed Python endpoints support focused administration workflows against the same database.

  5. 05Data

    Shared PostgreSQL model

    Both services coordinate around one relational schema instead of duplicating the core media domain.

  6. 06Delivery

    Tests and multi-cloud deployment

    Jest and Cypress cover key paths; the public frontend runs on Vercel and the API runs on GCP Cloud Run.

Architecture

System flow

The boundaries that kept product work, data, and external side effects understandable.

  1. 01

    User and admin clients

    Next.js and Vite/React present different workflows over shared media concepts.

  2. 02

    NestJS and FastAPI

    Service boundaries follow consumer and administration responsibilities.

  3. 03

    PostgreSQL

    Prisma and SQLModel map to one durable relational source.

  4. 04

    CI and deployment

    Tests run before independent frontend and API releases.

Results

What shipped

  • Shipped a live cross-media rating product and administration workflow.
  • Demonstrated a practical Node.js and Python service split over one PostgreSQL domain.
  • Kept public API traffic under the product domain through a Vercel proxy to Cloud Run.
Contact

Discuss this work

I can go deeper on the trade-offs, implementation boundaries, and what I would change today.

Email Jerome