Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Final presentation (BS Capstone)

Download the PowerPoint

Team introduction

Nathan Lodge

  • Role: Frontend Developer, Designer, DevOps
  • Responsibilities: Design and build frontend, deploy app

Slater Leonardo

  • Role: Backend Developer, DB Admin
  • Responsibilities: Build API, design database

Emotial overview

The social platform for sharing your thoughts and feelings.

  • Full featured text-based social media
  • Unique emoji reaction system
  • User accounts
  • Avatars / banners
  • Following / friends
  • Posts (with images, GIFs, or a video)
  • Replies
  • Sharing
  • Hashtags / mentions
  • Realtime notifications
  • Multiple themes

Timeline

WeekHighlights
1Init frontend and backend, wired up boilerplate, set up hosting
2-3Profiles, avatars / banners / media, followers, search, live notifications, basic mobile layout
4Auth pages and login / signup, set up themes
5Frontend polish, Docker / CI, account settings, and media cropping
6Admin functionality, mentions / hashtags, emoji styles
7Shares, emoji picker, image uploading / CDN, Open Graph, reaction list
8Feed sorting, theme accents, friends / suggestions, drag-and-drop media
9Live new post updates, crop / zoom polish, and remaining bug fixes

Database ERD

Obstacles overcome

Frontend

  • Rich text editor with mentions, hashtags, and links
  • Media normalization / uploading in the background
  • Type safety between frontend and backend
  • Emoji styles

Backend

  • Creating an OpenAPI specification
  • Server-sent events
  • PostgreSQL on a large scale application

Technical design

Frontend

  • Next.js app with React client components fetching data via TanStack Query
  • API client generated from the backend's OpenAPI spec, keeping types in sync automatically
  • User interactions update the UI optimistically, then sync with the server in the background
  • Live feed and notification updates arrive over server-sent events

Backend

  • Go REST API built on Gin and Huma. Huma generates the OpenAPI spec from models and handlers
  • API handlers to service layer to GORM to Postgres
  • Auth with JWTs stored as a cookie
  • Live feed and notification updates are pushed over server-sent events

Deployments We deploy the app on one of Slater's servers. We use Docker to deploy frontend, backend, Postgres, and MinIO containers, which all connect over the local network.

Summary

Overall this project was fun for us. We had a lot of support and good ideas going in, so our focus was on executing and making the platform feel nice to use.

Live Demo

emotial.app

Sharing on Mobile

Open Graph