A sample document exercising the usual suspects in Markdown rendering: headings, lists, tables, code, math, diagrams, footnotes, images, blockquotes, task lists, and a few edge cases. Drop it into any Markdown renderer to see what survives.
Acme Corp wants to rebuild their public website to modernise the brand, improve mobile performance, and add a customer self-service portal. This document describes the scope, deliverables, and acceptance criteria for the engagement.
The work is scheduled across three phases running from May through November. See Timeline for details.
"Move fast on the public site rebuild — we want it live before the Q3 product launch." — Sarah Chen, Head of Marketing
Acme has operated their existing website1 since 2018. The current platform has accumulated significant technical debt:
A previous rebuild attempt in 2023 was abandoned due to scope creep. This engagement scopes the work tightly to avoid that outcome.
For more context, see the original brief and the 2023 retrospective.
Currently running WordPress 5.x on a managed Bluehost instance. ↩
| Phase | Deliverable | Owner | Due |
|---|---|---|---|
| 1 | Information architecture + wireframes | Design lead | 2026-06-15 |
| 1 | Component library (Figma + code) | UI engineer | 2026-07-01 |
| 2 | Marketing site implementation | Frontend team | 2026-08-15 |
| 2 | CMS migration + content load | Platform team | 2026-09-01 |
| 3 | Customer portal | Full-stack team | 2026-10-15 |
| 3 | Performance + accessibility audit | QA lead | 2026-11-01 |
| 3 | Production cutover | DevOps | 2026-11-15 |
May ──┬─── Discovery & IA
│
Jun ──┼─── Wireframes & components
│
Jul ──┼─── Marketing site build
│
Aug ──┼─── CMS migration
│
Sep ──┼─── Portal build
│
Oct ──┼─── QA & audit
│
Nov ──┴─── Cutover & launch
The new site uses a Jamstack approach with a headless CMS, static-site generator, and serverless functions for dynamic features. Contact at [email protected] for design questions.
frontend:
framework: Next.js 15
styling: Tailwind CSS
components: shadcn/ui
cms:
headless: Sanity
content_lake: real-time
backend:
api: Next.js API routes
auth: Okta (OIDC)
database: PostgreSQL (Supabase)
deployment:
edge: Vercel
cdn: Cloudflare in front
// app/components/Hero.tsx
export function Hero({ title, subtitle, cta }: HeroProps) {
return (
<section className="hero">
<h1 className="text-4xl font-bold">{title}</h1>
<p className="text-lg text-gray-600">{subtitle}</p>
<Button variant="primary" href={cta.href}>
{cta.label}
</Button>
</section>
);
}
Risk: CMS migration loses content metadata or breaks URLs. Mitigation: Full content audit before migration; 301 redirect map for every changed URL; staging environment validation with stakeholder sign-off.
Risk: Performance target (<1.5s mobile) not met after build. Mitigation: Performance budget enforced in CI; Lighthouse scores tracked per PR; final audit before cutover with go/no-go gate.
Risk: Okta integration delays. Mitigation: Mock SSO in dev environment from week 2; integration testing in week 8 to surface issues early.
| Phase | Effort | Cost (USD) |
|---|---|---|
| Phase 1 — Discovery & design | 320 hours | $48,000 |
| Phase 2 — Marketing site & CMS | 480 hours | $72,000 |
| Phase 3 — Portal & launch | 600 hours | $90,000 |
| Total | 1,400 hours | $210,000 |
Payment terms: 30% on signature, 30% at end of Phase 1, 30% at end of Phase 2, 10% at production cutover.
CMS : Content Management System. The headless CMS in this project is Sanity.
Jamstack : Architecture pattern combining JavaScript, APIs, and prebuilt Markup.
OIDC : OpenID Connect — the auth protocol layered on OAuth 2.0 used by Okta.
SSO : Single Sign-On. Users authenticate once and access multiple apps.
The page load budget is calculated as:
$$ T_{load} = T_{ttfb} + T_{render} + T_{interactive} $$
Where each component is bounded such that $T_{load} \leq 1.5s$ on a 4G connection. Inline: page weight $\leq 200KB$ above the fold.
Python:
def calculate_budget(phases: list[Phase]) -> int:
return sum(phase.hours * phase.rate for phase in phases)
Bash:
#!/usr/bin/env bash
npm run build && vercel --prod
SQL:
SELECT user_id, COUNT(*) AS sessions
FROM events
WHERE event_type = 'page_view'
AND created_at >= NOW() - INTERVAL '7 days'
GROUP BY user_id
ORDER BY sessions DESC
LIMIT 10;
A small inline HTML element: <kbd>Ctrl</kbd> + <kbd>S</kbd> to save. <mark>Highlighted text</mark> via the mark element.
Line one of a stanza Line two of the same stanza (the trailing two spaces above force a hard break) Line three.
Status indicators in plain text: ✅ done, ⚠️ in progress, ❌ blocked, 🚧 work in progress.
Strikethrough: old approach abandoned. Bold-italic: critical.
Horizontal rule above and below this paragraph.
End of sample document.
comments (0)