Docs · Janapar · 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 Janapar 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 Janapar 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 Janapar repository, so your project lives in a private repository of your own:
git clone https://github.com/vlavera/janapar.git my-tours
cd my-tours
git remote rename origin janapar # 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 reports two moderate
vulnerabilities in test tooling. 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 tour operator, kept out of search, with every contact button inert.
To run your own configuration once you've created it (docs/CUSTOMIZE.md):
JANAPAR_FIXTURE=client npm run dev # macOS / Linux
$env:JANAPAR_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 and its media files exist
SITE_URL=https://your-domain.com npm run build # production build, into dist/
npm run preview # serve the production build at http://localhost:4321 (Ctrl+C to stop)
npm run build and npm run dev check whichever configuration JANAPAR_FIXTURE makes active, and
stop, naming the path, if it references a photo that is not in public/tours/. npm run build
also stops if that configuration is switched on and still carries one of the demo's invented
claims (docs/CUSTOMIZE.md, "What the build refuses").
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 photos and understand their license:
docs/ASSETS.md. - Deploy:
docs/DEPLOY.md.
Customize
Everything that makes a Janapar site one business is in one file: the configuration,
src/tours/fixtures/*.ts. Every word, price and photo is there, with the facts they belong to.
Its shape is ToursContract in src/tours/contract.ts, where every field is described.
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
Janapar builds to a static site (npm run build produces dist/): no server process, no
adapter, no secrets. The build needs the site's URL. When Vercel builds the site from a connected
Git repository it is picked up automatically; anywhere else, set SITE_URL (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:
- Git integration
- Deploy with the Vercel CLI
- 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 "no tour has that id"- The request buttons do nothing
- The request opens my booking page with nothing filled in
- "Get directions" or the call button is missing
- A tour's detail view opens when the page loads
- The Back button closes a detail view, or reopens one
- Nothing moves
Changelog
All notable changes to Janapar are recorded here. Versions follow Semantic Versioning.
1.0.0
First release.
- A tour operator's site in one page: a hero, four short facts, why to go with you, one tour shown large with the plan of its day, the tours, what is included, the guide, a gallery, reviews, questions, the meeting point, and a footer.
- A detail view for each tour. It is part of the page and opens from its own address, so it works without a script and a link to a tour can be sent to someone. With the script, Escape closes it and the keyboard focus returns to the tour it came from.
- A request that names the tour: each "Request this tour" button opens the one contact you configure with a message naming the tour, where the link can carry one.
- 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.
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). One label read by a screen reader is typed in
the page's component, not in the configuration (
docs/CUSTOMIZE.md, "One language"). - No CMS: content is a TypeScript file in
src/tours/fixtures/. The tours are what that file says; changing them is an edit and a deploy. - No booking system, calendar or payments. The page does not know which dates are free, holds nothing and sends nothing: a request button is a link to wherever you take requests. The message naming the tour is carried by an email or WhatsApp link only.
- What is included is one list, shown in every tour's detail view. There is no per-tour list.
- Opening and closing a detail view is a step in the browser's history.
- No map: the drawing beside the meeting point shows no real place. Directions links are shown once you give a map pin.
- Colours and typefaces are CSS, not configuration. There is one palette.
- The example pictures are AI-generated illustrations and must be replaced before a commercial
site goes live (
LICENSE.mdsection 8). They are not photographs of the places the demo names, and the demo says so on the page in two lines you remove with them. The example hero is 1024px wide and is soft on a large screen. - Deployment is verified on Vercel through its Git integration only.