Skip to content

etherOnGitHub/aetherport

Repository files navigation

Aetherport

A full-stack portfolio and project hub for aetherwave β€” showcasing projects, interactive experiences, and personal branding. Built with a modern turborepo monorepo architecture.


πŸ› οΈ Tech Stack

Frontend (apps/web)

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

Infrastructure & Tooling

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                       β”‚β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Data Flow

  1. Next.js frontend makes server-side requests to the Django API
  2. Server fetch (lib/server-api/) fetches data with ISR caching (5s revalidation)
  3. Django REST API serves JSON data from PostgreSQL via ViewSets
  4. JWT tokens handle authentication for protected routes

πŸ“„ Site Components

Pages

Route Description
/ Home page with splash screen and bio section
/projects Portfolio grid displaying all projects
/projects/[slug] Individual project detail page

UI Components

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

API Endpoints (/api/v1/)

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

Data Models

  • Project: Portfolio items with title, slug, tagline, description, images, tags, links, and metadata
  • Tag: Categorization for projects (many-to-many relationship)

πŸš€ Getting Started

Prerequisites

  • 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

Backend Setup

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

Frontend Setup

# From root directory
npm install

# Start development (uses Turborepo)
npm run dev

# Or just the web app
cd apps/web
npm run dev

Environment Variables

Frontend (apps/web)

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

πŸ“¦ Project Structure

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

🌐 Deployment

Backend (Fly.io)

The backend is configured for Fly.io deployment with automatic migrations on release.

cd apps/api/backend
fly deploy

Frontend (Vercel)

The frontend is configured for Vercel with preview deployments for PRs.

# Automatic via GitHub integration, or manually:
vercel --prod

πŸ“ License

See LICENSE for details.


Made with πŸ’œ by etherchild

About

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published