This project is tested with BrowserStack
This project is open source and licensed under the MIT License. It exists to support accessibility-first web development and nonprofit ministry use.
Open-source codebase for preserving and relaunching the DCCI Ministries website.
- Tech: Angular/Ionic, Firebase Hosting
- Accessibility-first, archival “Archives” section, plus remastered posts
- Copy env examples: cp src/environments/environment.example.ts src/environments/environment.ts cp src/environments/environment.prod.example.ts src/environments/environment.prod.ts
sql Copy Edit 2) Fill in local values (do not commit). 3) Install & start: npm i npm run start
makefile Copy Edit
PRs welcome. Please keep code accessible (WCAG), avoid adding secrets to Git.
This project uses a dual-layer architecture:
- Purpose: Crawlable, indexable HTML pages for search engines
- Location:
public-site/directory - Routes:
/,/welcome/,/articles/,/articles/{slug}/,/contact/,/privacy/,/terms/, etc. - Content: Static HTML pages with real text content, mission statements, and prominent CTAs linking to the interactive app
- Build:
cd public-site && npm run build - Dev:
cd public-site && npm run dev - Deployment: Built files are copied into
dist/app/during full build
- Purpose: Full-featured interactive SPA with authentication, comments, bookmarks, etc.
- Location: Root directory (
src/app/) - Routes:
/app/**(e.g.,/app/welcome,/app/articles,/app/article/{slug}) - Admin Routes:
/admin/**(protected, noindex headers) - Build:
npm run build(Angular/Ionic) - Dev:
npm run start - Deployment: Built to
dist/app/(Astro files are merged in)
-
Ionic App (port 4200):
npm run start
-
Astro SEO Site (port 4321):
cd public-site npm run dev
Build both layers:
npm run build:allThis:
- Builds Angular/Ionic to
dist/app/ - Builds Astro to
dist/public-site/ - Copies Astro output into
dist/app/(preserving Ionic'sindex.html)
- Astro SEO pages: Served directly as static HTML (e.g.,
/welcome/,/articles/{slug}/) - Ionic SPA: Served via
/app/**routes →index.html - Admin routes:
/admin/**→index.html(withX-Robots-Tag: noindex, nofollowheaders)
firebase-admin is server-only and must NEVER be imported in client code:
- ✅ Allowed: Astro frontmatter, API routes,
src/lib/firebaseAdmin.ts - ❌ Forbidden: Client components,
<script>tags in Astro files
Build check: npm run check:firebase-admin (runs automatically before build)
Code: MIT (see LICENSE)
Content: see CONTENT-LICENSE.md
