A modern, production-ready portfolio website built with Django 6.0, HTMX, Alpine.js, and Tailwind CSS v4. Designed to showcase AI-assisted web development services, projects, and technical writing to potential clients.
- Home — Full-viewport hero with animated gradient orbs, stats bar, bento grid value proposition, process timeline, featured projects, testimonials, and recent blog posts
- Services — 7 service cards (Web Dev, REST APIs, HTMX+Alpine.js Frontend, Legacy Migration, AI Integrations, Technical Consultation, Support & Maintenance) with 3-tier pricing (Starter $1.5k, Growth $5k, Enterprise Custom)
- Projects — Filterable grid (All / AI-Assisted / Web Apps / APIs) with HTMX-powered filtering, detailed STAR case study pages with prev/next navigation
- About — Bio section, 12-item skills grid, 3-step approach, testimonials, CTA
- Blog — Paginated listing with cover images, tags, reading time; detail pages with social share buttons (Twitter, LinkedIn), prev/next navigation
- Contact — Django form with Name, Email, Subject (dropdown), Budget, Message fields; validation, success messages, sidebar with email/social links
- Dark/light mode with manual toggle (localStorage-persisted) using class-based Tailwind dark mode
- Responsive design (mobile hamburger menu, adaptive grids)
- Custom CSS animations: gradient-shift, floating orbs, fade-up entrance, scroll-triggered reveals
- Hover micro-interactions on cards, buttons, stats
- Reusable template partials:
button.html,badge.html,card.html,section_header.html
- RSS feed at
/blog/feed/viadjango.contrib.syndication - Sitemap at
/sitemap.xmlcovering static pages, projects, and blog posts - robots.txt at
/robots.txtdisallowing admin paths - JSON-LD structured data (Person + WebSite schemas)
- Custom error pages for 400, 403, 404, 500 with branded styling
- Docker multi-stage build (Node.js → Tailwind CSS → Python/Gunicorn)
- docker-compose.yml with PostgreSQL 16 + health checks
- 9 unit tests for the contact form (passing)
Every project includes 1 month of post-deployment support at no extra cost. Ongoing support & maintenance is available as a paid service.
| Layer | Technology |
|---|---|
| Backend | Django 6.0, Python 3.13 |
| Frontend | HTMX 2.x, Alpine.js 3.x, Tailwind CSS v4 |
| Database | PostgreSQL 16 (production) / SQLite (development) |
| Static Files | Whitenoise |
| Styling | Tailwind CSS v4 (standalone CLI) |
| Deployment | Docker + docker-compose, Gunicorn |
git clone <your-repo-url>
cd freelance
python -m venv venv
source venv/bin/activate # On Windows: venv\Scripts\activatepip install -r requirements.txt
npm install # Tailwind CSS CLIcp .env.example .envEdit .env with your settings. Generate a secret key:
python -c "from django.core.management.utils import get_random_secret_key; print(get_random_secret_key())"npm run tw:build:once
python manage.py migrate
python manage.py createsuperuserpython manage.py runserverVisit http://127.0.0.1:8000 to see the site. Access the admin at /admin/.
# Set environment variables
cp .env.example .env
# Edit .env with your production values
# Build and run
docker compose up --buildThe web service will be available at http://localhost:8000.
.
├── config/ # Django project settings, URLs, WSGI/ASGI
├── portfolio/ # Portfolio app (home, projects, about, services)
│ ├── sitemaps.py # Sitemap configuration
│ └── context_processors.py # Navigation context processor
├── blog/ # Blog app (posts, RSS feed)
│ └── feeds.py # RSS feed configuration
├── contact/ # Contact app (form, model, tests)
├── templates/
│ ├── base.html # Base template with SEO, JSON-LD, theme
│ ├── partials/ # Reusable UI components
│ └── portfolio/ # Page templates
├── static/
│ └── css/
│ ├── main.css # Tailwind v4 input with custom theme
│ └── tailwind.css # Compiled output (auto-generated)
├── Dockerfile # Multi-stage production build
├── docker-compose.yml # PostgreSQL + Django services
└── .dockerignore
python manage.py testAdd your real content through the Django admin panel:
- Go to
/admin/and log in with your superuser credentials - Create Technologies, Projects, and Testimonials under "Portfolio"
- Create Blog Posts under "Blog"
- View submitted Contact messages under "Contact"
Before deploying, update:
-
SECRET_KEYin.env(generate a strong random key) -
DEBUG=Falsein.env -
ALLOWED_HOSTSwith your domain - Enable
CompressedManifestStaticFilesStorageinsettings.py - Wire up
DATABASE_URLparsing (e.g.,dj-database-url) - Set
SECURE_SSL_REDIRECT,SESSION_COOKIE_SECURE,CSRF_COOKIE_SECURE - Update social links and email in templates
Personal portfolio — all rights reserved.