Skip to content
Projects
Live2026

Social Engine

Fullstack social platform with feed, authentication, posts, profiles, comments, likes and content discovery.

Role
Fullstack Developer
Status
Live
Social Engine
// Overview

Social Engine is a fullstack social platform built as a portfolio project to demonstrate clean architecture across frontend, backend and database layers. The frontend was built with SvelteKit, Svelte 5, TypeScript and TailwindCSS, while the API was built in Go with Fiber, GORM and PostgreSQL. The project supports registration, login, short posts with hashtags, a public feed, likes, comments, public profiles, explore pages and trending topics. One of its key features is the ability to run in two modes: offline, using mocked data to explore the interface without a backend, and online, connected to the real Go API with PostgreSQL. The architecture was designed to feel like a real product, with httpOnly session cookies, a typed frontend API client, layered backend structure, migrations, Docker Compose, Swagger documentation and CI workflow with tests.

Key features

  • Authentication with register, login, JWT, bcrypt and httpOnly session cookies.
  • Public feed with posts, automatic hashtags and single-post pages.
  • Like/unlike system with per-user state.
  • Post comments.
  • Public profiles with stats, customizable avatar and banner.
  • Explore page with suggested people, posts and tag filtering.
  • Trending page with hot hashtags and top posts.
  • Offline mode with mocked data and online mode connected to the real API.
  • Polished UI with microinteractions, transitions and prefers-reduced-motion support.
// Architecture

Architecture

The browser talks to the SvelteKit server, which keeps the session in an httpOnly cookie and calls the Go API server-side. The Go API owns business logic, validation, authentication and persistence with PostgreSQL.

  • Flow: Browser → SvelteKit server → Go API → PostgreSQL.
  • Auth tokens are never exposed directly to the browser.
  • The frontend uses a typed client for the API.
  • Layered backend: handlers, models / domain logic and repositories.
  • A frontend mock layer mirrors the API contract.
  • Migrations and Docker Compose for the local environment.
  • Swagger for API documentation.
  • GitHub Actions for tests and a coverage gate.
// Challenges & solutions

Challenges & solutions

Optional backend during development

Problem

Creating a complete product experience while keeping the backend optional during development.

Solution

I implemented two execution modes: offline with mocked data and online connected to the real API, controlled by an environment flag.

Secure authentication

Problem

Keeping authentication secure without exposing tokens directly to the browser.

Solution

The session is stored in an httpOnly cookie on the SvelteKit server, while authenticated calls to the Go API happen server-side.

Organized, evolvable backend

Problem

Keeping the backend organized and easy to evolve.

Solution

The API was structured in layers, with HTTP handlers, domain logic, repositories, validation, standardized errors and structured logging.

// What I learned
  • How to connect SvelteKit and Go in a real fullstack architecture.
  • How to protect sessions with httpOnly cookies and server-side calls.
  • How to build a frontend that works with both mocked data and a real API.
  • How to structure a layered Go API.
  • How to think about product, UX and architecture together.
// Tech stack
SvelteKitSvelte 5TypeScriptGoPostgreSQLDockerTailwindCSSFiberGORMJWTSwaggerGitHub Actions