Official website for the International Educational Foundation (IEF), a 501(c)(3) nonprofit organization dedicated to empowering K–12 students through native-language education.
🌐 Live site: https://ief-global.org
📖 இந்த ஆவணம் தமிழிலும் கிடைக்கிறது — README-ta.md (Tamil version).
| Layer | Technology |
|---|---|
| Markup | HTML5 with SSI-style includes (compiled) |
| Styling | Tailwind CSS (CDN) |
| Interactivity | Alpine.js (CDN) |
| Fonts | Noto Sans (Latin) + Noto Sans Tamil (Tamil) — Google Fonts |
| Build | Python compile script (html/compile_site.py) |
| CI/CD | GitHub Actions (.github/workflows/deploy.yml) |
| Hosting | Cloudflare Pages |
| DNS | Cloudflare |
All site source lives under html/. The build script wipes and regenerates dist/
(generated output — gitignored, never edited by hand).
ief-web/
├── html/ # ← SITE SOURCE (edit everything here)
│ ├── assets/ # Static assets (images, logos, QR codes), committed to git
│ │ ├── logo.webp
│ │ ├── hero-bg.webp
│ │ ├── picture-00.webp # Community photos (picture-00 through picture-11)
│ │ ├── ...
│ │ ├── headshot-sm.webp # Board member headshots
│ │ └── zelle-qr.webp # Donation QR code
│ │
│ ├── parts/ # Shared HTML components (SSI includes)
│ │ ├── nav-en.html # English navigation bar
│ │ ├── nav-ta.html # Tamil navigation bar
│ │ ├── donate-modal.html# Donation modal (Stripe + Zelle)
│ │ ├── footer-en.html # English footer
│ │ └── footer-ta.html # Tamil footer
│ │
│ ├── en/ # English pages
│ │ ├── index.html
│ │ └── gallery.html
│ │
│ ├── ta/ # Tamil pages
│ │ ├── index.html
│ │ └── gallery.html
│ │
│ ├── index.html # Root language-redirect (→ /en or /ta)
│ └── compile_site.py # SSI include compiler / build script
│
├── dist/ # GENERATED OUTPUT — gitignored, do not edit
├── .github/workflows/
│ └── deploy.yml # GitHub Actions CI (build + deploy)
├── deploy.sh # Manual local build/deploy helper
├── docker-compose.yml # Optional nginx SSI dev preview (+ Tailscale sidecar)
├── nginx.conf
├── wrangler.toml # Cloudflare Pages configuration
├── .gitignore
├── LICENSE
└── README.md
The site is fully bilingual. Every page exists in two versions:
| Path | Language |
|---|---|
/en/ |
English |
/ta/ |
Tamil (தமிழ்) |
- Shared components (nav, footer, donate modal) live in
/parts/and are compiled into each page at build time. - The donate modal uses Alpine.js
langstate ('en'or'ta') to switch label text dynamically at runtime. - Both language versions share one font stack —
'Noto Sans', 'Noto Sans Tamil', sans-serif— so Latin text renders in Noto Sans and Tamil text in Noto Sans Tamil, two sibling families that harmonize by design. The rule lives onbodyin each page's<style>block, so sizing can be tuned in a single place.
- Python 3.x
- A local web server that supports static files (e.g. VS Code Live Server,
python -m http.server, or similar)
# Clone the repo
git clone https://github.com/ief-admin/ief-web.git
cd ief-web
# Run the SSI compile step to resolve <!--#include virtual="..."--> directives.
# This wipes and regenerates dist/ and copies html/assets/ into dist/assets/.
# On Windows, use `python` if `python3` is not on PATH.
python3 html/compile_site.py
# Serve the compiled output locally
cd dist && python -m http.server 8080
# Then open http://localhost:8080/en/ in your browserNote: The raw source files use
<!--#include virtual="...">directives for shared components. These are not processed by browsers directly — always runhtml/compile_site.pyfirst to produce the final HTML before previewing or deploying.
Deployment is handled by GitHub Actions (.github/workflows/deploy.yml), which builds
the site with python3 html/compile_site.py and deploys the resulting dist/ to
Cloudflare Pages. Both the integration and production branches deploy automatically:
| Branch | Deploys to | URL |
|---|---|---|
develop |
Cloudflare Preview | https://develop.ief-site.pages.dev |
main |
Cloudflare Production | https://ief-global.org |
| CI Setting | Value |
|---|---|
| Trigger | Push to develop or main (plus manual workflow_dispatch) |
| Build command | python3 html/compile_site.py |
| Output directory | dist/ |
| Cloudflare project | ief-site |
| Auth | CLOUDFLARE_API_TOKEN + CLOUDFLARE_ACCOUNT_ID (GitHub Actions secrets) |
Work on develop, validate the change on the preview URL, then merge develop into main
to promote it to production. See WORKFLOW.md for the full edit → commit →
deploy loop.
For an out-of-band deploy, use the deploy.sh helper. It needs a local .env with
CLOUDFLARE_* credentials (gitignored). Cloudflare auth is an API token, not OAuth.
./deploy.sh # build + deploy
./deploy.sh --build # build only (regenerate dist/)
./deploy.sh --deploy # deploy the existing dist/ without rebuilding- Convert your image to
.webpformat (use Squoosh orcwebpCLI for best results). - Name it sequentially:
picture-12.webp,picture-13.webp, etc. - Place it in
html/assets/(committed to git). - Add an entry to the
photoItemsarray in bothhtml/en/gallery.htmlandhtml/ta/gallery.html:
// en/gallery.html
{ url: '/assets/picture-12.webp', title: 'Your English Caption' }
// ta/gallery.html
{ url: '/assets/picture-12.webp', title: 'உங்கள் தமிழ் தலைப்பு' }- If the photo should also appear on the home page, add it to
photoItemsinhtml/en/index.htmlandhtml/ta/index.htmlas well.
- Upload the video to the IEF YouTube channel and copy its video ID (the part after
?v=in the URL). - Add an entry to
videoItemsin both the gallery files and the home page files:
// en/gallery.html & en/index.html
{ type: 'video', url: 'YOUR_VIDEO_ID', title: 'Your English Title' }
// ta/gallery.html & ta/index.html
{ type: 'video', url: 'YOUR_VIDEO_ID', title: 'உங்கள் தமிழ் தலைப்பு' }Contributors are managed via GitHub repository access. Contact the repository admin to request access.
| Role | Permission level |
|---|---|
| Core developer | Maintain |
| Contributor | Write |
| Read-only reviewer | Read |
main ← production (auto-deploys to ief-global.org)
develop ← integration branch (auto-deploys to the preview URL)
feature/<name> ← individual feature branches
fix/<name> ← bug fix branches
Do day-to-day work on develop and validate on the preview URL. Promote to production by
merging develop into main (open a Pull Request and get at least one review) only
after the preview looks right.
| Field | Value |
|---|---|
| Legal Name | International Educational Foundation, Inc. |
| Tax Status | 501(c)(3) Non-Profit, Tax-Exempt |
| EIN | 32-0103781 |
| General Contact | info@ief-global.org |
| Website Admin | admin@ief-global.org |
This codebase is proprietary and maintained by the International Educational Foundation, Inc. All rights reserved. Content, images, and branding may not be reproduced without written permission.