Docs · Meridian · Version 1.0.0
From repository to live site.
The full buyer documentation ships inside the repository. This is the short version, so you know what to expect before you buy. It is taken from the Meridian 1.0.0 release.
Install
From the repository to a running site and a production build.
Requirements
| Requirement | Version |
|---|---|
| Node.js | 24.x |
| npm | 11 or newer (ships with Node 24) |
| Git | Any recent version |
| Operating system | macOS, Linux, or Windows |
| Accounts or API keys | None, and no secrets. A production build needs the site's URL (step 4). |
Check your versions:
node -v # v24.x.x
npm -v # 11.x.x
1. Get the source
Clone the Meridian repository you were given access to, then start your own project from it. Your license does not allow the source in a public repository, and you cannot add anyone to the Meridian repository, so your project lives in a private repository of your own:
git clone https://github.com/vlavera/meridian.git my-rental
cd my-rental
git remote rename origin meridian # keep it, to pull future releases
git remote add origin <your own private repository>
git push -u origin main
2. Install dependencies
npm ci
npm ci installs the exact versions in package-lock.json. It may report vulnerabilities, all in the tooling that runs the tests. That is expected; read docs/TROUBLESHOOTING.md before doing anything about it.
3. Run the site locally
npm run dev
Open http://localhost:4321 (or the port it prints). You'll see the demo: a fictional car-rental operator in Lisbon, kept out of search, with every contact button inert. Change the dates in the panel under the heading and every price follows.
To run your own configuration once you've created it (docs/CUSTOMIZE.md):
MERIDIAN_FIXTURE=client npm run dev # macOS / Linux
$env:MERIDIAN_FIXTURE="client"; npm run dev # Windows PowerShell
Stop the development server with Ctrl+C in the terminal where it runs.
4. Check and build
npm run typecheck # TypeScript and the configuration's shape
npm test # the configuration is coherent, its pictures exist, prices and requests are worked out right
SITE_URL=https://your-domain.com npm run build # production build, into dist/
npm run preview # serve the production build at http://localhost:4321 (stop it with: npx astro preview stop)
npm test also builds the site several times in a scratch copy of the project, to check what a
site that is switched on is and is not allowed to carry (docs/CUSTOMIZE.md, "What the build
refuses"). That adds a few seconds and changes nothing in your project.
npm run build and npm run dev check whichever configuration MERIDIAN_FIXTURE makes active, and
stop, naming the path, if it references a picture that is not in public/rental/. npm run build
also stops if that configuration is switched on and still carries one of the demo's invented
claims, or has separated the demo's fleet pictures from the line shown beside them.
The site URL
npm run build needs to know where the site will live, because the page carries a canonical link
that points there. It looks in this order:
SITE_URLin the environment, as in the command above (PowerShell:$env:SITE_URL="https://your-domain.com"; npm run build).seo.siteUrlin your configuration (docs/CUSTOMIZE.md).- The project's production domain, when Vercel builds the site from a connected Git repository. A build run anywhere else does not have it.
If none of these gives a real https:// URL, the build stops and says so. There is no placeholder
that quietly works. npm run dev does not need it.
Next steps
- Make it your own business:
docs/CUSTOMIZE.md. - Replace the example pictures and understand their license:
docs/ASSETS.md. - Deploy:
docs/DEPLOY.md.
Customize
Everything that makes a Meridian site one business is in one file: the configuration,
src/rental/fixtures/*.ts. Every word, rate and picture is there, with the facts they belong to.
Its shape is RentalContract in src/rental/contract.ts, where every field is described. The
small words (labels, buttons, field names) are in src/rental/ui.ts.
The full guide, docs/CUSTOMIZE.md in the repository, covers:
- Start your own configuration
- What to change, and where
- Switching the site on
- One language
- Colours and type
- Next steps
Assets
The full guide, docs/ASSETS.md in the repository, covers:
- Where media lives
- The example pictures are AI-generated. Read this before you ship
- What the build checks
- Replacing the example pictures
Deploy
Meridian builds to a static site (npm run build produces dist/): no server process, no
adapter, no secrets. The build needs the site's URL: set SITE_URL, or seo.siteUrl in your
configuration (docs/INSTALL.md, "The site URL").
Deployment is tested on Vercel through its Git integration, on a plan that permits commercial use. The Vercel CLI path and other hosting environments are untested in this release.
The full guide, docs/DEPLOY.md in the repository, covers:
- What the host has to do
- Git integration (Vercel)
- Deploy with the Vercel CLI
- If your host builds from Git
- Connect your domain
- Verify a deployment
- Other hosts
Troubleshooting
14 calendar days of email support from the order date, for installation and the Vercel Git-integration deployment documented in the package. There is no response-time promise, and customization work, other hosts, and general development consulting are outside it.
The full guide, docs/TROUBLESHOOTING.md in the repository, covers:
npm cireports vulnerabilities. Is that a problem?npm run buildstops with "no usable site URL"npm run buildstops with "still carries the demo's …"npm run buildstops with "pricing.meetText still holds the demo's …"npm run buildstops aboutcopy.car.imageLine- The send button does nothing
- The send button opens nothing and shows an error under the name or the email
- The request opens my booking page with the details in the address
- "Open in maps", a phone number or the call line is missing
- The prices do not change when I change the dates
- The theme flashes before it settles
- Several questions are open at once
- Nothing moves
Changelog
All notable changes to Meridian are recorded here. Versions follow Semantic Versioning.
1.0.0
First release.
- A car-rental operator's site in one page: a request panel under the hero, the fleet, cover, what to bring, day trips, the request, questions, and a footer, with the small print set out before the fleet.
- Prices that follow the dates. The visitor sets a pick-up place and dates, and every car's daily rate, the discount for the length, the totals and the request's breakdown change with them. The rental length can be set from a switch or from the table of discounts.
- A full-screen view of each car, with the arrow keys and swipe to move between cars, Escape to close, and the keyboard kept inside it until it closes. On a phone, a menu and a booking bar with the total.
- A request that opens the one contact you configure with the details in it: an email with a subject and a body, a WhatsApp chat with the text, or your own booking page with the details as query parameters.
- Dark and light themes in every build, five accents, and a choice of how prices are coloured, all in the configuration. The visitor can switch theme; their choice is the only thing the page remembers.
- A build check for the demo's invented claims: the build refuses a switched-on site that still
carries one of the claims it lists, or that has separated the demo's fleet pictures from the line
shown beside them.
docs/CUSTOMIZE.mdhas the list. - Buyer guides in
docs/,AGENTS.mdfor coding agents, and the license.
Known limitations
- One business, one page, one language (English).
- No CMS: content is a TypeScript file in
src/rental/fixtures/. The cars and rates are what that file says; changing them is an edit and a deploy. - No availability, calendar, booking system or payments. The page does not know which cars or dates are free, holds nothing and sends nothing: the request is a link to wherever you take requests. Only an email link or a WhatsApp link carries the details as a message.
- No heading after a request is sent: the page has only opened an app or a link and cannot know the message was sent, so it shows the reference, a summary and the way back.
- The theme can flash: the script that remembers a visitor's choice runs after the first paint, so
a visitor who chose the other theme sees the configured one for an instant.
autofollows the system with no script. - The questions and the phone menu use
<details>. The questions open one at a time in current browsers; in an older one several can be open. - With
pricing.showRates: falsethe fleet's rates read "On request"; the cover and the extras still show their prices. - No "checkout" booking mode and no settings drawer at runtime. Lighthouse scores have not been measured.
- Five light-theme text colours are a step darker than a plain reading of the design's palette (the green price, the muted grey, the error red, and the accent ink for Tram and Terracotta), so every pair of text on its fill reaches 4.5:1.
- Deployment is verified on Vercel through its Git integration only; the Vercel CLI path and other
static hosts are untested (
docs/DEPLOY.md).