Repository navigation
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.
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 |
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 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.
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 |
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.
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.
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.
/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.
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.
MIT licensed — reportmate.app