A personal academic portfolio site built with Python + Flask.
All content lives in app.py as plain Python dicts — no database, no CMS.
- Python 3.10 or newer (python.org)
- pip (comes with Python)
# If you cloned from GitHub:
git clone https://github.com/nyxaeed/nyxaeed.github.io.git
cd nyxaeed.github.io
# Or just unzip the downloaded folder and cd into it:
cd saeed-flaskpython -m venv venvActivate it:
# macOS / Linux
source venv/bin/activate
# Windows (Command Prompt)
venv\Scripts\activate.bat
# Windows (PowerShell)
venv\Scripts\Activate.ps1pip install -r requirements.txtpython app.pyOpen http://localhost:5000 in your browser. ✅
The server auto-reloads when you edit app.py or any template.
Everything is in app.py — find the # ── DATA ── section at the top.
| Variable | What it controls |
|---|---|
PROFILE |
Name, role, bio, tagline, social links |
SKILLS |
Skill groups and items |
EXPERIENCE |
Work history (title, company, bullets) |
EDUCATION |
Degrees and institutions |
PROJECTS |
Research project cards |
PUBLICATIONS |
Publication list |
AWARDS |
Honors and awards |
After editing, just save — the dev server reloads automatically.
Place a photo at static/img/avatar.jpg (square crop recommended).
If no photo is found, the site shows your initials SF as a fallback.
# On the server, install deps
pip install -r requirements.txt
# Run with Gunicorn (production WSGI server)
gunicorn -w 4 -b 0.0.0.0:8000 app:appPoint Nginx to port 8000 as a reverse proxy.
- Push code to a GitHub repo
- Go to railway.app → New Project → Deploy from GitHub repo
- Railway auto-detects Flask and deploys — live URL in ~1 minute
- Push code to GitHub
- Go to render.com → New Web Service
- Set Start Command:
gunicorn -w 4 -b 0.0.0.0:8000 app:app - Deploy — free HTTPS URL provided automatically
GitHub Pages only hosts static files. To use it with Flask, use Frozen-Flask:
pip install Frozen-FlaskAdd to app.py:
from flask_frozen import Freezer
freezer = Freezer(app)
if __name__ == '__main__':
freezer.freeze() # generates /build folderThen push the /build folder contents to your gh-pages branch.
saeed-flask/
├── app.py ← Flask app + ALL content data
├── requirements.txt
├── README.md
├── templates/
│ └── index.html ← Jinja2 template (HTML structure)
└── static/
├── css/
│ └── style.css ← All styles
├── js/
│ └── main.js ← Scroll effects, nav
└── img/
└── avatar.jpg ← Your photo (add this yourself)