Skip to content

Content and Pages

Rod Christiansen edited this page Oct 8, 2026 · 3 revisions

Content and Pages

Where every piece of copy on the site lives, and what to edit to change it.

There is no CMS and no Markdown content collection. All copy is written directly into the .astro files, either as markup or as a JavaScript array in the file's frontmatter block (the section between the --- fences at the top). Repeated content is hoisted into arrays so a change is made once; the sections below say which array to edit.

Routes

Astro's file-based router maps each file in src/pages/ to a URL.

URL File What it is
/ src/pages/index.astro Homepage — hero, stat band, module grid, screenshots, event-driven and API section, why ReportMate, open-source credits, closing call to action
/features src/pages/features.astro Per-module field breakdown, real-time section, API surface summary, architecture summary, Beyond the browser (native apps and reportmateutil), roadmap
/architecture src/pages/architecture.astro Five-stage pipeline, the Mermaid system diagram (agents, API, dashboard, native apps and the CLI), technology rationale
/pricing src/pages/pricing.astro Open Source and Cloud Pro tiers, Cloud Enterprise slab, FAQ
/docs src/pages/docs.astro Interactive REST API reference

Site-wide copy

src/layouts/Layout.astro owns everything that appears on every page.

What Where in Layout.astro
Default meta description (used when a page passes no description) The description default in the Props destructure
Nav links The leftNav array
Nav link icons The navIcon object of SVG path strings
Header buttons (API, GitHub, Try the Demo) Markup inside <nav>
Footer columns and links Markup inside <footer>
Footer copyright and license line The last block inside <footer> — the year is computed, not hard-coded
Open Graph and Twitter card tags The <head> block; the image is /og-card.png

Each page sets its own title and usually its own description by passing them as props to <Layout>. /docs additionally passes hideFooter={true} so the full-height API panel is not pushed down by a footer.

The ten data modules

The module names, one-line summaries, and full field lists are defined once in src/data/modules.js and consumed by two pages. Each entry has:

Key Used for
name The card heading
short The one-liner on the homepage grid
fields The longer breakdown on /features
icon An SVG path string rendered into a 24x24 viewBox
accent Tailwind background and text classes for the icon tile

To change how a module is described anywhere on the site, edit that module's entry in src/data/modules.js. To add a module, append an object with all five keys — both pages iterate the array. The homepage stat band's module count is a separate string literal, not derived from this array, so check it when the module list changes. It reads 11 while modules.js holds ten entries: the count includes profiles, which the site describes inside Management.

Homepage copy

All in src/pages/index.astro.

Section What to edit
Hero heading, subheading, buttons Markup in the first <section>. The colored word is the barWord constant, tinted per letter from the barColors array
Stat band (four figures) The inline array in the second <section>, the positioning strip — each entry has stat, label, color, and a mark of bars, donut, or spark
Module grid Driven by src/data/modules.js (short)
Screenshot strip The shots array — each entry is a src under public/ and a cap caption
"Built on open source" credits The attributions array — name, desc, href
"Why ReportMate" cards Markup in the "Built for teams that want control" section
Event-driven and API section Markup inside the page's one <FeatureBlock>, including the /api/v1 endpoint count, the link to /openapi.json and the reportmateutil bullet
Example API response The curlExample template literal, rendered as a code sample. It is illustrative, not a live call

Features page copy

All in src/pages/features.astro.

Section What to edit
Hero and lead screenshot Markup in the first <section>
Module deep-dive cards src/data/modules.js (fields)
Real-time section Markup
API surface cards The apiGroups array — tag, desc, method, path — under a lead paragraph with the endpoint count and auth methods
Architecture summary Markup in the client agents / server stack two-column section
Beyond the browser Markup: three cards for ReportMate for Mac, ReportMate for Windows and reportmateutil, each linking its repository; the CLI card carries a sample shell session
Roadmap items Markup in the final <section>: Self-service cloud portal (Coming soon), MCP server (In progress), More integrations

The apiGroups entries are hand-written summaries of the API, not generated from public/openapi.json. If the API changes, they must be updated by hand.

Architecture page copy

All in src/pages/architecture.astro.

The five-stage pipeline is an inline array of { n, verb, where, tone, desc } objects near the top of the markup. tone is one of device, cloud, or read, and selects the badge color.

The system diagram is the archDiagram constant in the frontmatter — a Mermaid flowchart TB source string passed to <Mermaid>. Edit the Mermaid source to change the diagram; the node labels contain HTML, which is why the component sets htmlLabels: true.

Pricing page copy

All in src/pages/pricing.astro, and almost entirely data-driven.

Constant What it drives
selfServeTiers The Open Source and Cloud Pro cards — name, price, period, tagline, bestFor, description, features list, cta label, ctaLink, and the highlighted / badge flags
includedEverywhere The line stating the whole platform ships in every tier
enterpriseServices The service blurbs inside the Cloud Enterprise slab
enterpriseFeatures The Cloud Enterprise bullet list
faqs The question-and-answer list at the foot of the page — each entry is { q, a }

Prices are string literals in selfServeTiers; changing one is a one-line edit. Some enterpriseServices descriptions contain inline HTML, so keep the markup valid when editing them.

API documentation page

/docs renders no copy of its own. It mounts the Stoplight Elements web component against /openapi.json and lets that render the reference. The features page and homepage also link /openapi.json directly as the published spec. See Architecture for how the page is wired and Deployment for how the spec stays current.

Images

Everything under public/ is served from the site root — public/logo.svg becomes /logo.svg. Product screenshots are .webp; icons are .png, .ico, and .svg. Screenshots referenced from the homepage shots array and from the lead images on other pages open in a lightbox if the <img> carries the data-lightbox attribute.