Cloud — Deploy Your Site
Your project is on GitHub. Now let's make it live.
Pycora Pro works with any static host. This guide covers the three most popular free options:
| Provider | Free Tier | Best For |
|---|---|---|
| Cloudflare Pages | Unlimited bandwidth | Global speed, custom domains |
| Netlify | 100 GB bandwidth | Simplicity, form handling |
| Vercel | 100 GB bandwidth | Next.js fans, easy setup |
Pick one. You can switch later.
Before You Deploy
Make sure:
- Your project is on GitHub (see GitHub Setup)
- You have an account on at least one of: Cloudflare, Netlify, Vercel
Common Build Settings
All three providers need the same build settings. Note these down:
| Setting | Value |
|---|---|
| Build command | pip install --break-system-packages python-frontmatter markdown PyYAML Jinja2 && python3 ssg.py |
| Output directory | output |
| Python version | 3.8 or higher (default is fine) |
Option A — Deploy to Cloudflare Pages
Step 1 — Connect GitHub
- Open https://dash.cloudflare.com/
- Go to Workers & Pages → Create → Pages → Connect to Git
- Authorize Cloudflare to access your GitHub account
- Select your
pycora-prorepository - Click Begin setup
Step 2 — Configure Build
| Field | Value |
|---|---|
| Project name | pycora-pro (or any name) |
| Production branch | main |
| Framework preset | None |
| Build command | pip install --break-system-packages python-frontmatter markdown PyYAML Jinja2 && python3 ssg.py |
| Build output directory | output |
Step 3 — Deploy
- Click Save and Deploy
- Wait 1–2 minutes
- Your site is live at
https://pycora-pro.pages.dev
Step 4 — Add a Custom Domain (Optional)
- In Cloudflare Pages, open your project
- Go to Custom domains → Set up a domain
- Enter your domain (e.g.,
yourdomain.com) - Follow the DNS instructions
- Wait for DNS propagation (5–30 minutes)
Option B — Deploy to Netlify
Step 1 — Connect GitHub
- Open https://app.netlify.com/
- Click Add new site → Import an existing project
- Choose GitHub
- Authorize Netlify
- Select your
pycora-prorepository
Step 2 — Configure Build
| Field | Value |
|---|---|
| Branch to deploy | main |
| Build command | pip install python-frontmatter markdown PyYAML Jinja2 && python ssg.py |
| Publish directory | output |
Step 3 — Deploy
- Click Deploy site
- Wait 1–2 minutes
- Your site is live at
https://your-site.netlify.app
Step 4 — Add a Custom Domain (Optional)
- Open your site in Netlify
- Go to Site configuration → Domain management → Add a domain
- Enter your domain
- Follow the DNS instructions
Option C — Deploy to Vercel
Step 1 — Connect GitHub
- Open https://vercel.com/new
- Click Continue with GitHub
- Authorize Vercel
- Import your
pycora-prorepository
Step 2 — Configure Build
| Field | Value |
|---|---|
| Framework Preset | Other |
| Build Command | pip install python-frontmatter markdown PyYAML Jinja2 && python ssg.py |
| Output Directory | output |
| Install Command | pip install python-frontmatter markdown PyYAML Jinja2 |
Step 3 — Deploy
- Click Deploy
- Wait 1–2 minutes
- Your site is live at
https://your-project.vercel.app
Step 4 — Add a Custom Domain (Optional)
- Open your project in Vercel
- Go to Settings → Domains
- Enter your domain
- Follow the DNS instructions
Automatic Rebuilds
Once deployed, every push to GitHub triggers a new build:
git add .
git commit -m "Update content"
git push
Cloudflare/Netlify/Vercel detects the push, rebuilds, and deploys — usually in under a minute.
You do not need to run any command manually.
Verifying Your Deployment
After deployment, check:
- ✅ Homepage loads
- ✅ About, Contact, Journal, Projects pages work
- ✅ Blog posts and projects open
- ✅ Images display correctly
- ✅
sitemap.xmlandrobots.txtexist - ✅
404.htmlworks (visit a nonexistent URL)
If any link is broken, check the build logs in your provider's dashboard.
Troubleshooting
Build fails with "command not found: python3"
Change python3 to python in the build command.
Build fails with "No module named 'frontmatter'"
The pip install step did not run. Make sure the build command includes pip install ... before python ssg.py, joined with &&.
Build succeeds but site is blank
Check that output/ is the correct output directory. Some providers expect dist/ or build/ by default.
Custom domain not working
- Check DNS records — they must point to the provider
- Wait up to 48 hours for propagation
- Clear your browser cache
Sitemap shows the wrong domain
Open _data/site.yaml and set:
url: https://yourdomain.com
Commit and push. The site rebuilds.
What's Next?
Your site is live. Now let's set up cloud CMS access so you can edit content from anywhere.