nuffread.com Source Code

Peer-to-peer book marketplace built with Graphql, Next.js, Ionic, and Tailwindcss.

nuffread.com

Duration

Jan 2019 - Present

Team

  • Nain Miranda (Research & Marketing)

Role

  • Design
  • Prototyping
  • Architecting
  • Deployment

Tech Stack

  • Graphql
  • Express
  • PostgreSQL
  • Next.js
  • React
  • Ionic
  • Tailwindcss
  • Apollo
  • TypeScript
  • SCSS
  • Vercel
  • Heroku

Overview

Textbook costs amount to a significant part of the cost of higher education. College students on a tight budget often resort to buying used textbooks from other students. There was a need for a marketplace purpose-built and dedicated to facilitating exchage books. We created nuffread.com to solve this specific need.

Architecture

nuffread.com is an on-going project built as multiple clients sharing a Graphql API on top of a PostgreSQL database all written in TypeScript.

I built the legacy prototype with Ionic React as an client-side rendered SPA. We set the goal to have a prototype built before Spring 2020. I used Ionic React because of out time-to-market requirement. The legacy web client is built and deployed with Netlify.

nuffread.com

I knew Ionic React would not be a good long-term solution. In Summer 2021 I began the process of porting the web client over to a Next.js server-side rendered application styled with Tailwind CSS and deployed to Vercel. I also built a administrative backend client with the same stack.

flowchart TD Mixpanel(Mixpanel) API{Graphql API} API --> DB[(Heroku Postgres)] API -.-> Sendgrid(Twilo SendGrid) Admin[admin.nuffread.com] --> API Beta --> API Web --> API Mobile --> API Beta[beta.nuffread.com] -.-> Mixpanel Web[www.nuffread.com] -.-> Mixpanel Mobile[Mobile] -.-> Mixpanel

The backend is composed of a Graphql API built with Apollo Server with PostgreSQL as a datastore deployed to Heroku. We use SendGrid as our email and text message delivery service. The API implements subscriptions needed for the instant messaging feature. For now subscriptions rely on an in-memory Pub/Sub engine. As we grow, we’ll look at moving at either RabbitMQ or Google Cloud Pub/Sub depending on our needs.