A full-stack portfolio and project hub for aetherwave β showcasing projects, interactive experiences, and personal branding. Built with a modern turborepo monorepo architecture.
Technology
Purpose
Next.js 16
React framework with App Router, SSR & ISR
React 19
UI library with React Compiler support
TypeScript 5
Type-safe development
Tailwind CSS 4
Utility-first styling
ESLint
Linting and code quality
Backend (apps/api/backend)
Technology
Purpose
Django 5.2
Python web framework
Django REST Framework
RESTful API toolkit
Simple JWT
Token-based authentication
PostgreSQL 15
Relational database
Gunicorn
Production WSGI server
WhiteNoise
Static file serving
Technology
Purpose
Turborepo
Monorepo build orchestration
Docker Compose
Local containerized development
Fly.io
Backend deployment platform
Vercel
Frontend deployment
ποΈ Architecture Overview
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β TURBOREPO MONOREPO β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β βββββββββββββββββββββββββββ βββββββββββββββββββββββββββββββ β
β β apps/web β β apps/api/backend β β
β β (Next.js 16) β β (Django 5.2) β β
β β β β β β
β β β’ Server Components ββββΆ β β’ REST API (/api/v1/) β β
β β β’ Client Components β β β’ JWT Authentication β β
β β β’ Server Actions β β β’ Projects & Tags CRUD β β
β β β’ Tailwind CSS β β β’ PostgreSQL Database β β
β βββββββββββββββββββββββββββ βββββββββββββββββββββββββββββββ β
β β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β packages/ ββ
β β β’ config/ - Shared Tailwind configuration ββ
β β β’ tsconfig/ - Shared TypeScript configuration ββ
β β β’ images/ - Shared image assets ββ
β β β’ ui/ - Shared UI components ββ
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Next.js frontend makes server-side requests to the Django API
Server fetch (lib/server-api/) fetches data with ISR caching (5s revalidation)
Django REST API serves JSON data from PostgreSQL via ViewSets
JWT tokens handle authentication for protected routes
Route
Description
/
Home page with splash screen and bio section
/projects
Portfolio grid displaying all projects
/projects/[slug]
Individual project detail page
Component
Purpose
Navbar
Responsive navigation with mobile hamburger menu
Bars
Decorative UI element
Splash
Hero/splash section on homepage
Bio
About/introduction section with canvas effects
Projects
Grid layout for project cards
CanvasContext
Interactive canvas with pixel sort effects
ApiStatus
Real-time API health indicator
AuthModal
Authentication modal dialog
Endpoint
Method
Description
/projects/
GET
List all projects
/projects/{slug}/
GET
Get project by slug
/tags/
GET, POST
List/create tags
/auth/token/
POST
Obtain JWT token pair
/auth/token/refresh/
POST
Refresh access token
Project : Portfolio items with title, slug, tagline, description, images, tags, links, and metadata
Tag : Categorization for projects (many-to-many relationship)
Node.js 18+
Python 3.11+
Docker & Docker Compose (for containerized development)
PostgreSQL 15 (or use Docker)
Option 1: Docker Development (Recommended)
# Clone the repository
git clone https://github.com/yourusername/aetherport.git
cd aetherport
# Start all services
docker-compose up --build
# Access the application
# Frontend: http://localhost:3000
# Backend: http://localhost:8000/api/v1/
Option 2: Local Development
cd apps/api/backend
# Create virtual environment
python -m venv venv
source venv/bin/activate # On Windows: venv\Scripts\activate
# Install dependencies
pip install -r requirements.txt
# Set environment variables
cp .env.example .env # Create and configure .env
# Run migrations
python manage.py migrate
# Start development server
python manage.py runserver
# From root directory
npm install
# Start development (uses Turborepo)
npm run dev
# Or just the web app
cd apps/web
npm run dev
API_BASE_URL = http://localhost:8000/api/v1 # Server-side API URL
NEXT_PUBLIC_API_URL = http://localhost:8000/api/v1 # Client-side API URL
Backend (apps/api/backend)
SECRET_KEY = your-secret-key
DATABASE_URL = postgres://user:pass@localhost:5432/aetherport
DEBUG = True
aetherport/
βββ apps/
β βββ web/ # Next.js frontend
β β βββ src/app/ # App Router pages & components
β β βββ lib/ # API clients & types
β β βββ public/ # Static assets
β βββ api/backend/ # Django backend
β βββ aether/ # Django project settings
β βββ projects/ # Projects app (models, views, serializers)
β βββ accounts/ # User accounts app
β βββ core/ # Core utilities
βββ packages/
β βββ config/ # Shared Tailwind config
β βββ tsconfig/ # Shared TypeScript config
β βββ images/ # Shared image assets
β βββ ui/ # Shared UI components
βββ docker-compose.yml # Local development containers
βββ turbo.json # Turborepo configuration
βββ package.json # Root workspace config
The backend is configured for Fly.io deployment with automatic migrations on release.
cd apps/api/backend
fly deploy
The frontend is configured for Vercel with preview deployments for PRs.
# Automatic via GitHub integration, or manually:
vercel --prod
See LICENSE for details.
Made with π by etherchild