Skip to content

Commit 6958dbd

Browse files
authored
Merge pull request #13 from Umplify/content-amendment
Add CLAUDE guide; refocus site for Azure & production
2 parents 67c4049 + f278a6c commit 6958dbd

29 files changed

Lines changed: 1027 additions & 333 deletions

CLAUDE.md

Lines changed: 177 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,177 @@
1+
# CLAUDE.md
2+
3+
This file gives Claude (and any other AI assistant) the working context required to safely edit the Umplify website. The site is a Jekyll project deployed via GitHub Pages at [https://umplify.com](https://umplify.com).
4+
5+
## What this site is
6+
7+
Umplify is a Toronto-based AI transformation and Azure cloud platform engineering partner. The website is a marketing and lead-generation site for software-led businesses, ISVs, scale-ups, and enterprise teams in Canada and the United States.
8+
9+
Primary visitor goals (in priority order):
10+
11+
1. Book a free discovery call (`/contact/`).
12+
2. Understand the AI transformation and Azure platform service offering.
13+
3. Read insight content on the blog at `/blog/`.
14+
15+
## Tech stack
16+
17+
- **Static site generator:** Jekyll, deployed via GitHub Pages.
18+
- **Theme:** [`mmistakes/minimal-mistakes`](https://github.com/mmistakes/minimal-mistakes) v4.24.0 via `remote_theme` (do not vendor the theme).
19+
- **Markdown:** kramdown with GFM input.
20+
- **Plugins (must stay GitHub Pages compatible):**
21+
- `jekyll-paginate`
22+
- `jekyll-sitemap`
23+
- `jekyll-gist`
24+
- `jekyll-feed`
25+
- `jekyll-include-cache`
26+
- `jekyll-redirect-from`
27+
- **Hosting:** GitHub Pages with custom domain via `CNAME`.
28+
- **Analytics:** Google gtag (`G-WSEKFYVPNE`) configured in `_config.yml`.
29+
30+
If a change requires a plugin not on the GitHub Pages allow-list, do not add it. Find another approach.
31+
32+
## Repository layout
33+
34+
```
35+
_config.yml Site config (title, plugins, defaults, analytics)
36+
_data/
37+
navigation.yml Top nav order and labels
38+
ui-text.yml Theme UI strings (do not edit lightly)
39+
_includes/ Theme overrides and partials
40+
head/custom.html Custom head: favicon, OG tags, JSON-LD schemas
41+
masthead.html Top nav (overrides theme default)
42+
footer.html, etc.
43+
_layouts/ Theme layouts (single, splash, home, archive, etc.)
44+
_pages/ All non-blog pages (services, home, about, contact, faq)
45+
_posts/ Blog articles. Filename pattern: YYYY-MM-DD-slug.md
46+
_sass/ Theme SCSS overrides
47+
assets/
48+
images/
49+
revamp/ Current hero/diagram SVGs
50+
splash/ Feature-row icons
51+
logos/ Brand logos
52+
robots.txt Allows all, points to sitemap.xml
53+
CNAME umplify.com
54+
```
55+
56+
## Content authoring rules
57+
58+
### Brand voice
59+
60+
- **Plain, senior, production-first.** The reader is a CTO, VP Engineering, founder, or senior architect. Speak in their language.
61+
- **No fluff.** Every sentence either establishes credibility or drives a decision.
62+
- **No em dashes (—).** Use commas, periods, semicolons, parentheses, or restructure the sentence. (See `memory/feedback_no_em_dashes.md` in the user's memory.)
63+
- **Canadian English** spellings where they differ (e.g., "modernize" is fine, "centre" not "center" only in proper nouns; the site uses US-style "modernize/optimize").
64+
- **Avoid hype words:** "revolutionary", "cutting-edge", "10x", "game-changer", "transformative" without proof.
65+
- **Outcomes before features.** Lead with what the reader gets, then explain how.
66+
- **CTA ladder.** Every important page should end with at least one primary CTA (`Book a free discovery call`) and one secondary (e.g., `How we engage`, `Read the FAQ`).
67+
68+
### Page front matter conventions
69+
70+
Service pages should look like this:
71+
72+
```yaml
73+
---
74+
title: "Service Name"
75+
permalink: /service-slug/
76+
layout: single
77+
author_profile: false
78+
service_schema: true # renders Schema.org Service JSON-LD via _includes/head/custom.html
79+
excerpt: "One sentence used for meta description and OG/Twitter card."
80+
header:
81+
overlay_color: "#08142C"
82+
overlay_filter: "0.22"
83+
overlay_image: /assets/images/revamp/hero-ai.svg # AI pages
84+
# or /assets/images/revamp/hero-cloud.svg # platform/Azure pages
85+
redirect_from: # optional, requires jekyll-redirect-from
86+
- /old-url/
87+
---
88+
```
89+
90+
Landing pages (home, ai-transformation, cloud-solutions) use `layout: splash` and feature rows. See `_pages/home.md` for the canonical pattern.
91+
92+
### Permalinks
93+
94+
Service pages use top-level slugs (`/agentic-workflow-design/`). Legacy URLs under `/cloud-solutions/...` are kept as `redirect_to:` stubs for SEO continuity. Do not break existing permalinks. If a page is retired, replace its content with a stub:
95+
96+
```yaml
97+
---
98+
title: "..."
99+
permalink: /old/url/
100+
sitemap: false
101+
redirect_to: /new/url/
102+
---
103+
```
104+
105+
### Internal linking
106+
107+
Every service page should:
108+
109+
1. Link to at least three related service pages.
110+
2. Link to `/contact/`.
111+
3. Link to `/how-we-engage/` if appropriate.
112+
113+
Use markdown link syntax with leading slash: `[Label](/path/)`.
114+
115+
### Images
116+
117+
- Hero/header images live in `assets/images/revamp/`.
118+
- Feature row icons live in `assets/images/splash/`.
119+
- Always include alt text on `![alt](path)`.
120+
- SVG is preferred. Avoid raster heroes when an SVG exists.
121+
- The site `og_image` is `/assets/images/revamp/hero-ai.svg`. Some social platforms reject SVG OG images; prefer setting a page-specific `header.overlay_image` so the head template emits a usable URL.
122+
123+
### SEO and structured data
124+
125+
`_includes/head/custom.html` already emits:
126+
127+
- `Organization` JSON-LD on every page.
128+
- `Service` JSON-LD when a page has `service_schema: true` in its front matter.
129+
- `FAQPage` JSON-LD on `/faq/` (kept in sync with `_pages/faq.md`).
130+
- `BlogPosting` JSON-LD on blog posts.
131+
132+
If you add a new FAQ question on `_pages/faq.md`, also update the `FAQPage` JSON-LD block in `_includes/head/custom.html`. They must stay synchronized.
133+
134+
If you add a new service page, set `service_schema: true` to get Service JSON-LD for free.
135+
136+
### Navigation
137+
138+
Top nav is driven by `_data/navigation.yml`. Keep the list short (target eight items or fewer). New service detail pages should be cross-linked from the relevant landing page (`/ai-transformation/` or `/cloud-solutions/`), not added to the top nav.
139+
140+
## Blog posts
141+
142+
Blog posts live in `_posts/` with filenames `YYYY-MM-DD-slug.md`. They are excluded from the audit process Claude runs on marketing pages. **Do not modify blog articles unless explicitly asked.** When writing new posts:
143+
144+
- No em dashes (this is a project-wide rule, not blog-only).
145+
- Use the same kramdown/GFM conventions as existing posts.
146+
- Posts inherit `layout: single` and other defaults from `_config.yml`.
147+
148+
## Local development
149+
150+
```bash
151+
bundle install
152+
bundle exec jekyll serve
153+
# open http://127.0.0.1:4000/
154+
```
155+
156+
Built output goes to `_site/`. **Never commit `_site/`.**
157+
158+
## Things to avoid
159+
160+
1. **Em dashes anywhere in site content.**
161+
2. Adding plugins outside the GitHub Pages allow-list.
162+
3. Editing files inside the `mmistakes/minimal-mistakes` theme directly. Override via `_includes/`, `_layouts/`, or `_sass/` instead.
163+
4. Changing existing permalinks without a `redirect_from:` (or `redirect_to:` stub) covering the old URL.
164+
5. Committing build artifacts (`_site/`, `.jekyll-cache/`, `.sass-cache/`).
165+
6. Hard-coding the site URL. Use `{{ site.url }}` or `| absolute_url` / `| relative_url` filters.
166+
167+
## Useful tasks for Claude
168+
169+
- **Add a new service page.** Copy the front matter pattern above, set `service_schema: true`, write the body, cross-link from `_pages/ai-transformation.md` or `_pages/cloud-solutions.md`, and link related pages from inside the new page.
170+
- **Retire a page.** Replace its content with the `redirect_to:` stub pattern shown above and verify nothing else in the repo links to it (`grep -r "/old-url/" _pages _data _includes`).
171+
- **Add a new FAQ question.** Edit both `_pages/faq.md` and the `FAQPage` JSON-LD block inside `_includes/head/custom.html`.
172+
- **Update the brand description.** Update `_config.yml` (`title`, `description`, `subtitle`) and re-check `_includes/head/custom.html` `Organization` JSON-LD if structural details change.
173+
- **Audit content for em dashes before commit.** `grep -rn "—" _pages _data _includes _config.yml _posts`. The result should be empty.
174+
175+
## Contact for questions
176+
177+
Repository owner: Arash Sabet (`arash.sabet@umplify.com`). The site reflects positioning that has been deliberately chosen; large strategic shifts (positioning, pricing language, ICP) should be confirmed before being shipped.

_config.yml

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,11 @@ minimal_mistakes_skin : "default"
1111

1212
# Site Settings
1313
locale : "en-US"
14-
title : "Umplify | AI Transformation and Cloud Platform Engineering"
14+
title : "Umplify | AI Transformation and Azure Cloud Platform Engineering"
1515
title_separator : "|"
16-
subtitle : "Your AI and Cloud transformation partner"
16+
subtitle : "AI-ready systems. Production-grade Azure platforms."
1717
name : "Umplify Technologies Inc."
18-
description : "Umplify helps businesses in the Greater Toronto Area and across Canada become AI-ready through AI transformation services, enterprise AI integration, agentic workflows, and Azure cloud platform engineering."
18+
description : "Umplify is a Toronto-based AI transformation and Azure cloud platform engineering partner. We design agentic workflows, enterprise AI integrations, private knowledge systems, and production-grade Azure architecture for software-led businesses across Canada."
1919
url : "https://umplify.com"
2020
baseurl :
2121
repository : "Umplify/umplify"
@@ -180,13 +180,15 @@ plugins:
180180
- jekyll-gist
181181
- jekyll-feed
182182
- jekyll-include-cache
183+
- jekyll-redirect-from
183184

184185
whitelist:
185186
- jekyll-paginate
186187
- jekyll-sitemap
187188
- jekyll-gist
188189
- jekyll-feed
189190
- jekyll-include-cache
191+
- jekyll-redirect-from
190192

191193
category_archive:
192194
type: liquid

_data/navigation.yml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,10 @@ main:
33
url: /
44
- title: "AI Transformation"
55
url: /ai-transformation/
6-
- title: "Cloud Platform Engineering"
6+
- title: "Azure Platform"
77
url: /cloud-solutions/
8+
- title: "How We Engage"
9+
url: /how-we-engage/
810
- title: "Blog"
911
url: /blog/
1012
- title: "FAQ"

_includes/head/custom.html

Lines changed: 105 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,25 +25,86 @@
2525
"@context": "https://schema.org",
2626
"@type": "Organization",
2727
"name": "Umplify Technologies Inc.",
28+
"alternateName": "Umplify",
2829
"url": "{{ site.url }}",
2930
"logo": "{{ absolute_logo }}",
3031
"description": "{{ site.description | escape }}",
32+
"foundingLocation": {
33+
"@type": "Place",
34+
"name": "Toronto, Ontario, Canada"
35+
},
3136
"areaServed": [
3237
{"@type": "AdministrativeArea", "name": "Greater Toronto Area"},
33-
{"@type": "Country", "name": "Canada"}
38+
{"@type": "Country", "name": "Canada"},
39+
{"@type": "Country", "name": "United States"}
40+
],
41+
"knowsAbout": [
42+
"AI Transformation",
43+
"Agentic Workflows",
44+
"Enterprise AI Integration",
45+
"Microsoft Azure",
46+
"Azure OpenAI",
47+
"Cloud Platform Engineering",
48+
"SaaS Architecture",
49+
"DevOps",
50+
"Infrastructure as Code"
3451
],
3552
"address": {
3653
"@type": "PostalAddress",
3754
"addressLocality": "Toronto",
3855
"addressRegion": "ON",
3956
"addressCountry": "CA"
4057
},
58+
"contactPoint": [
59+
{
60+
"@type": "ContactPoint",
61+
"contactType": "sales",
62+
"email": "sales@umplify.com",
63+
"areaServed": ["CA", "US"],
64+
"availableLanguage": "en"
65+
},
66+
{
67+
"@type": "ContactPoint",
68+
"contactType": "customer support",
69+
"email": "support@umplify.com",
70+
"areaServed": ["CA", "US"],
71+
"availableLanguage": "en"
72+
}
73+
],
4174
"sameAs": [
4275
"https://github.com/Umplify/umplify"
4376
]
4477
}
4578
</script>
4679

80+
{% if page.service_schema %}
81+
<script type="application/ld+json">
82+
{
83+
"@context": "https://schema.org",
84+
"@type": "Service",
85+
"serviceType": {{ page.title | jsonify }},
86+
"name": {{ page.title | jsonify }},
87+
"description": {{ seo_description | strip_html | strip_newlines | jsonify }},
88+
"provider": {
89+
"@type": "Organization",
90+
"name": "Umplify Technologies Inc.",
91+
"url": "{{ site.url }}"
92+
},
93+
"areaServed": [
94+
{"@type": "AdministrativeArea", "name": "Greater Toronto Area"},
95+
{"@type": "Country", "name": "Canada"},
96+
{"@type": "Country", "name": "United States"}
97+
],
98+
"audience": {
99+
"@type": "BusinessAudience",
100+
"audienceType": "Software-led businesses, startups, and enterprise teams"
101+
},
102+
"url": "{{ page.url | absolute_url }}",
103+
"image": "{{ absolute_seo_image }}"
104+
}
105+
</script>
106+
{% endif %}
107+
47108
{% if page.url == '/faq/' %}
48109
<script type="application/ld+json">
49110
{
@@ -55,23 +116,63 @@
55116
"name": "What does it mean for a business to become AI-ready?",
56117
"acceptedAnswer": {
57118
"@type": "Answer",
58-
"text": "An AI-ready business has the workflows, systems, knowledge access, permissions, governance, and platform architecture needed to support useful AI implementation."
119+
"text": "An AI-ready business has the workflows, systems, knowledge access, permissions, governance, and platform architecture needed to support useful AI implementation in production rather than only in pilots."
59120
}
60121
},
61122
{
62123
"@type": "Question",
63124
"name": "What are agentic workflows?",
64125
"acceptedAnswer": {
65126
"@type": "Answer",
66-
"text": "Agentic workflows are business workflows where AI can retrieve information, support decisions, coordinate tasks, and interact with tools or business systems within defined controls."
127+
"text": "Agentic workflows are business workflows where AI can retrieve information, support decisions, coordinate multi-step tasks, and interact with tools or business systems within defined human-in-the-loop controls."
128+
}
129+
},
130+
{
131+
"@type": "Question",
132+
"name": "Where does MCP-oriented integration fit?",
133+
"acceptedAnswer": {
134+
"@type": "Answer",
135+
"text": "MCP-oriented integration matters when AI systems need structured, secure access to internal tools, data, and actions. It shapes how access layers, context handling, and system interoperability are designed for production use cases."
67136
}
68137
},
69138
{
70139
"@type": "Question",
71140
"name": "Why does cloud platform engineering still matter?",
72141
"acceptedAnswer": {
73142
"@type": "Answer",
74-
"text": "Cloud platform engineering provides the APIs, runtime reliability, observability, deployment automation, and secure operations needed to scale AI initiatives in production."
143+
"text": "AI initiatives still depend on strong APIs, runtime reliability, observability, deployment automation, and secure operations. Without these foundations, most enterprise AI pilots fail to scale into production."
144+
}
145+
},
146+
{
147+
"@type": "Question",
148+
"name": "What kinds of companies does Umplify help?",
149+
"acceptedAnswer": {
150+
"@type": "Answer",
151+
"text": "Umplify works best with software-led businesses, startups, and enterprise teams in Toronto, the Greater Toronto Area, and across Canada that need AI transformation, application modernization, systems integration, or Azure platform engineering support."
152+
}
153+
},
154+
{
155+
"@type": "Question",
156+
"name": "How does an Umplify engagement typically start?",
157+
"acceptedAnswer": {
158+
"@type": "Answer",
159+
"text": "Most engagements begin with a focused discovery conversation followed by a short paid assessment (AI readiness, agentic workflow discovery, or platform architecture review). The output is a prioritized opportunity map, a delivery framing, and a clear recommendation for what to build first."
160+
}
161+
},
162+
{
163+
"@type": "Question",
164+
"name": "Do you work with Microsoft Azure exclusively?",
165+
"acceptedAnswer": {
166+
"@type": "Answer",
167+
"text": "Our deepest expertise is in Microsoft Azure, .NET, and the Azure AI stack, including Azure OpenAI, Container Apps, Functions, API Management, and Bicep or Terraform automation. We can integrate with non-Azure systems where the architecture requires it."
168+
}
169+
},
170+
{
171+
"@type": "Question",
172+
"name": "How do you protect sensitive enterprise data when integrating AI?",
173+
"acceptedAnswer": {
174+
"@type": "Answer",
175+
"text": "We design private knowledge access patterns, permission-aware retrieval, and controlled execution boundaries so AI can use internal context without compromising trust, security, or regulatory posture. Sensitive data stays inside your Azure tenant."
75176
}
76177
}
77178
]

0 commit comments

Comments
 (0)