Architecture, deployment, and content delivery infrastructure
The IOMARS website is built as a modern, static site with dynamic content management capabilities. The architecture leverages a JAMstack approach for optimal performance, security, and scalability.
The site uses a multi-stage build process that transforms content and generates static HTML:
content/news/, converts to HTML, and injects into news.html between marker commentscontent/minutes/ with PDF links and summaries
Note: All build scripts use HTML comment markers (e.g., <!-- NEWS_START -->) to identify injection points, allowing static HTML to be dynamically updated during builds.
The site is hosted on Netlify, which provides:
Cloudflare sits in front of Netlify, providing:
Visitor requests www.iomars.im from their browser
Cloudflare DNS resolves domain to nearest Cloudflare edge server
Cloudflare checks if content is cached at the edge location
Hit: Content served directly from edge (< 50ms)
Miss: Request forwarded to Netlify origin server
Netlify serves pre-built static HTML/CSS/JS from its CDN
Cloudflare caches response at edge for subsequent requests
Compressed, optimized content delivered to user's browser
The Decap CMS provides a user-friendly interface for non-technical users to manage content:
User logs in at /admin/ using Netlify Identity (email/password or OAuth)
User creates or edits content using rich text editor interface for News, Minutes, or Certificates
Images and PDFs uploaded directly through CMS interface to appropriate directories
CMS commits changes to GitHub via Git Gateway, creating markdown file with YAML frontmatter
Netlify detects Git commit, triggers build process, and executes prebuild scripts
New static site deployed to Netlify, Cloudflare cache invalidated, content live in ~2 minutes
IOMARS/
├── public/ # Static assets
│ ├── admin/ # Decap CMS configuration
│ │ └── config.yml # CMS collections and fields
│ ├── certs/ # Contest certificate PDFs
│ ├── images/ # Site images
│ │ └── news/ # News article images
│ └── media/ # Banner images
├── content/ # Markdown content
│ ├── news/ # News articles
│ ├── minutes/ # Meeting minutes
│ └── certificates/ # Contest certificates
├── src/ # Source files
│ ├── main.js # JavaScript entry point
│ ├── style.css # Global styles
│ ├── themes.css # Theme definitions
│ └── footer.js # Footer component
├── *.html # Page templates
├── build-news.js # News builder
├── build-minutes.js # Minutes builder
├── build-certificates.js # Certificates builder
├── inject-solar.js # Solar conditions injector
├── build-commits.js # Commit history builder
├── vite.config.js # Vite configuration
├── tailwind.config.js # Tailwind configuration
├── netlify.toml # Netlify build settings
└── package.json # Dependencies and scripts