- S3 for object storage. One bucket per site, no shared hosting.
- CloudFront for global CDN delivery, caching, and explicit cache invalidation as part of the deploy ritual.
- Route 53 for DNS — apex domain, subdomains, and email-safe records documented at handoff.
- ACM for TLS certificates. HTTPS enforced, HTTP redirected, renewal handled by the platform.
-
Static build pipeline in Node — partials,
sitemap, robots.txt generated into
/dist/, then synced to S3.
The real stack, documented.
A page for engineers and recruiters who want to know what Age Evolution is actually running. Frontend delivery, backend products, workflow architecture, data model thinking, the AI-ready layer, and the deployment discipline that ties it together.
S3 + CloudFront + Route 53 + ACM.
Every static front door — including this site, business client work, and product marketing pages — runs the same AWS pattern. Fast, reproducible, and inspectable.
Flask + Gunicorn + Nginx on EC2.
The backend pattern proven inside NexGEN. Nothing exotic, nothing experimental. Production-minded by design.
- Flask as the application framework. Lightweight, explicit, and easy to reason about.
- Gunicorn as the production WSGI server — not the development server in disguise.
- Nginx as the reverse proxy, TLS terminator, and static asset server in front of Gunicorn.
- EC2 for compute. Right-sized, monitorable, with a documented runbook at handoff.
- S3 for media and document storage when the product needs it.
- Route 53 + ACM for custom domain and HTTPS on the backend, same as the frontend pattern.
State, roles, queues, events.
The operational backbone of every product. Same shape across healthcare, education, and the workflow systems we deliver as a solution.
State
Every entity has an explicit state. Transitions are enforced server-side. No “sort of in progress.”
Roles
Permissions are derived from identity + state. The right role sees the right work, and only that work.
Queues
Each role gets a queue scoped to their ownership. No shared inboxes pretending to be accountability.
Events
Every state transition is logged with actor, timestamp, and context. Dashboards, audit, and history all read from events.
Entities, visits, records, timelines.
The data model is shaped so the platform primitives line up with the real-world concepts of each industry. The vocabulary changes by industry; the underlying shape does not.
- Entities. First-class real-world things: patients, students, applications, documents. Structured, queryable, identifiable.
- Visits / interactions. Discrete operational moments — appointments, admissions inquiries, intake submissions. Each is owned, dated, and routed.
- Records. The documents, forms, and structured data attached to an entity. Tagged, access-controlled, searchable.
- Timelines. The reconstructed history of any entity, derived from events without a separate reporting pipeline.
- Identity & roles. Who can act on which entities, in which states, with which permissions.
Assistive, accountable, auditable.
AI is on the roadmap as orchestration on top of the platform primitives — not as an autonomous decision-making layer. The architecture supports adding AI surfaces when the team is ready.
- Structured input. Forms and entities shaped so summaries and routing can read directly from them.
- Event stream. The same event log that powers dashboards is what AI surfaces will consume.
- Document tagging. Documents are first-class, tagged, and indexed so AI review is practical.
- Human-in-the-loop by default. Every AI-assisted action has an approval, override, and audit trail.
- Reversible adoption. Workflows degrade gracefully if AI is turned off, removed, or fails.
Git, build, sync, invalidate.
The deploy ritual is documented and reproducible. No clicking through control panels. No editing files on a server.
- Git as the source of truth. Every site and product is versioned. Every deploy starts from a known commit.
-
Build step. Static sites run through
node build.jsto compose pages from shared partials, generate sitemap and robots, and produce/dist/. -
Deploy to S3.
aws s3 cporaws s3 syncfor static assets, depending on whether the migration to a unified build is complete. -
Cache invalidation.
aws cloudfront create-invalidationfor the affected paths so visitors see the new version within minutes. - Backend deploys follow the same shape: pull from Git, run migrations, restart Gunicorn, reload Nginx if needed.
- Rollback posture. Git history is the rollback. No mystery snapshots.
The pages that put this architecture to work.
Architecture is only interesting because it shows up in real products and services.
Engineer or recruiter? Want to talk about the stack? Want this stack running for your project? Start with a short conversation.
Start a conversation