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 |
| 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 |
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β 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)
# 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/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 devAPI_BASE_URL=http://localhost:8000/api/v1 # Server-side API URL
NEXT_PUBLIC_API_URL=http://localhost:8000/api/v1 # Client-side API URLSECRET_KEY=your-secret-key
DATABASE_URL=postgres://user:pass@localhost:5432/aetherport
DEBUG=Trueaetherport/
βββ 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 deployThe frontend is configured for Vercel with preview deployments for PRs.
# Automatic via GitHub integration, or manually:
vercel --prodSee LICENSE for details.
Made with π by etherchild