Tech Stack
Key Features
Intelligent Subdomain Routing
Express middleware parses hostnames and routes to person-specific content automatically. brian.m.malec.malec.wiki, bmalec.malec.wiki, brian.malec.wiki all resolve to the same portfolio.
Configuration-Driven
Adding a family member requires only a JSON config entry and an HTML directory. No code changes, no redeployment of the routing logic.
Cost Efficiency
Consolidated from multiple hosting accounts ($50+/month) to a single Azure App Service ($13/month). One wildcard SSL certificate covers all subdomains.
Automated CI/CD
Azure DevOps pipeline handles builds and deployments. Push to master triggers automatic deployment to production.
Health Monitoring
Built-in health check endpoint for Azure monitoring. Debug API endpoint for subdomain troubleshooting during development.
Project Documentation
Each family member can have unlimited project detail pages with consistent design templates and navigation.
Architecture
Subdomain Routing
The core routing middleware extracts subdomains from incoming requests and maps them to person-specific content directories using a JSON configuration file.
const subdomainRouter = (config) => (req, res, next) => { const host = req.hostname; const parts = host.split('.'); // Extract subdomain from request const subdomain = parts.slice(0, -2).join('.'); // Find matching person in config const person = Object.values(config.people) .find(p => p.subdomains.includes(subdomain)); if (person) { req.person = person; req.personPath = `/people/${person.id}`; } next(); };