Full-stack social platform

Linstagram

A full-stack social product built to explore graph-backed relationships, search, and cloud architecture in one deployed system.

Overview

I built Linstagram as a full-stack social platform that could hold both product-facing UI work and deeper backend and infrastructure decisions in the same system.

The project gave me room to work through search, graph-backed relationships, media flows, AWS services, and deployment tradeoffs in one application, with real decisions around latency, cost, and operational complexity.

Product Scope

The application covers the core product surface you would expect from a social platform: user accounts, profiles, posting, comments, likes, follows, search, and mobile-friendly flows.

I wanted it to feel like a coherent product rather than a collection of isolated screens, which meant treating feed behavior, post creation, discovery, profile flows, and responsive layouts as one connected experience.

Demo

For portfolio review only. Not affiliated with Meta.

New user signup is currently limited by AWS sandbox restrictions on email and SMS delivery. Use one of the test accounts below to access the app.

UsernamePassword
linstatest01Linstatest01!
linstatest02Linstatest02!

Stack & Architecture

Front-End

  • React + SSR
  • Redux
  • TypeScript
  • JavaScript
  • HTML
  • CSS
  • styled-components
  • Jest
  • Facebook Lexical

Back-End

  • Node.js
  • Koa
  • JWT
  • Redis
  • ElasticSearch
  • JanusGraph
  • AWS S3, SES, SNS, SQS
  • AWS Location Services
  • Axios

Infrastructure, DevOps & Tools

  • Docker / Docker Compose
  • GitHub
  • Serverless Framework
  • AWS EC2, Lambda, CloudFront
  • NGINX
  • Jira
  • Grafana
  • Kibana
  • Insomnia REST Client

Key Technical Decisions

One of the most important tradeoffs was cost. AWS Neptune was the original graph database target, but even the smallest managed configuration did not make sense for a non-revenue project. I chose to self-host JanusGraph on an existing EC2 instance instead.

I also tested moving the REST API to AWS Lambda, but cold starts introduced too much latency for a user-facing application. In practice, a continuously running EC2 instance was the better balance between performance and cost.

Screenshots

Signup form
User registration with validation and backend integration.
Main feed
A personalized feed showing posts from followed users.
Explore page and search
Explore flow with search-driven discovery.
Create post flow
Media posting flow with captions, location, and additional settings.
Comment modal
Comment flow with replies and social interaction controls.
Profile page
Profile view with post grid, bio, and user details.
Edit profile page
Profile editing flow for bio, avatar, and additional user details.
Metrics dashboard
Operational visibility through Grafana metrics.

Mobile Views

Create post on mobile
The post creation flow as it appears on mobile.
Mobile feed layout
The main feed designed to stay usable on mobile, not just scale down from desktop.

What's Next

The natural next steps are notification and messaging systems, stronger frontend metrics collection, and deeper operational automation around CI/CD and deployment.

There is also room to improve some graph query patterns to reduce transactional friction and tighten up the backend data layer.

Links