Modern, responsive, Christ-centered digital ministry website for Zion Gospel Ministry.
- Full multi-page navigation:
- Home
- About Us
- Sermons
- Bible Studies
- Ministries
- Events
- Missions
- Prayer
- Resources
- Contact
- Light and dark mode support.
- Mobile-first responsive layout.
- Data-driven sections using JSON files.
- Search and filtering for sermons and Bible studies.
- Prayer request and testimony forms (static demo handlers).
- Scripture memory tracker (local storage based).
- PWA support (manifest + service worker).
assets/css/style.css: Shared design system.assets/js/site.js: Shared page logic, dynamic rendering, interactions.assets/js/bible.js: Bible reading/search/text-to-speech functionality.assets/data/*.json: Content for sermons, events, studies, devotions, verses, missions, prayer wall.manifest.webmanifest: PWA metadata.sw.js: Service worker cache strategy.
This project is fully static and can be deployed on:
- GitHub Pages
- Netlify
- Vercel static hosting
- Any static web server
This repo now includes a staged GitHub Actions pipeline at .github/workflows/staged-release.yml.
Release order:
- Validate HTML structure and local asset references.
- Package one static artifact.
- Deploy to
devenvironment. - Run smoke checks in
dev. - Deploy the same artifact to
prod. - Run smoke checks in
prod.
Create two GitHub Environments in your repository:
devprod
Set these values in each environment:
- Variable:
DEPLOY_REGION - Variable:
BASE_URL - Secret:
DEPLOY_WEBHOOK_URL(optional; if missing, deployment runs in dry-run mode)
Recommended protection:
- Add required reviewers for
prodto force manual approval after dev passes.
Use these templates to keep env/region intent explicit:
deploy/config/dev.jsondeploy/config/prod.json
Use the page allowlist manifest:
deploy/pages-manifest.json
How it works:
devcan include all pages (for full internal testing).prodstarts with onlyindex.html.- When a page is approved, add it to
prodand push again.
Example rollout:
- Start:
"prod": ["index.html"] - Add About page:
"prod": ["index.html", "about.html"] - Add Sermons page:
"prod": ["index.html", "about.html", "sermons.html"]
The deploy pipeline will package only the approved files for each environment.
You can run the workflow manually and decide whether to continue to production using the deploy_prod input.
- Form submissions are currently local/static stubs. Connect real form endpoints (Formspree, Getform, custom backend) before production.
- Member portal is currently a prototype UI and requires secure backend authentication for production use.
The Message Us form is now wired to a backend endpoint: /api/contact.
api/server.js: Express + Nodemailer API.api/.env.example: Required environment variables.api/package.json: API dependencies and scripts.
- Install API dependencies:
cd apinpm install
- Create
.envfrom.env.exampleand fill SMTP credentials. - Start API:
npm start
- Serve website and API behind the same host/reverse proxy, or use an absolute API URL in the form
action.
- GitHub Pages cannot run server-side code directly.
- Deploy the
apifolder to a backend host (Render, Railway, Fly.io, Azure, etc.). - If backend is on another domain, update CORS
ALLOWED_ORIGINSin API config. - Point form
actionto your deployed API URL (for example:https://your-api-domain.com/api/contact).
The contact form supports separate API base URLs by environment:
data-api-dev: used onlocalhostor127.0.0.1data-api-prod: used on all other hosts
Current form configuration in contact.html:
data-api-dev="http://127.0.0.1:8787"data-api-prod="https://api.ziongospelministry.org"action="/api/contact"
This means the same HTML works in both environments without manual form action edits.