Getting started: install, configure and go live
This guide takes a fresh server to a running site with an admin account, suppliers and payments. Allow an hour for the first install, most of it spent collecting API keys.
1. Before you start
- Node.js 20 or newer and npm on the server (see requirements)
- A MySQL database and user for production, or SQLite for a local trial
- Your licence key from the purchase email
- SMTP details for outgoing mail
- Supplier and payment keys for what you sell (you can add these later)
2. Unpack and install dependencies
Run from the folder you will serve the app from. npm ci installs the exact versions in package-lock.json.
unzip travel-platform.zip -d travel-platform
cd travel-platform
node -v # must print v20 or newer
npm ci3. Create your .env file
Only DATABASE_URL, AUTH_SECRET, the admin pair and NEXT_PUBLIC_SITE_URL are required to boot. Every supplier and gateway stays hidden until its keys are present. Never commit this file.
# Core
DATABASE_URL="file:./dev.db" # SQLite trial
# DATABASE_URL="mysql://USER:PASSWORD@127.0.0.1:3306/DBNAME" # production
AUTH_SECRET="a-long-random-string"
NEXT_PUBLIC_SITE_URL="https://www.your-domain.com"
ADMIN_EMAIL="you@your-domain.com"
ADMIN_PASSWORD="choose-a-strong-password"
# Mail
SMTP_HOST="smtp.your-host.com"
SMTP_PORT="465"
SMTP_USER="bookings@your-domain.com"
SMTP_PASS="..."
MAIL_FROM="Your Agency <bookings@your-domain.com>"
# Flights
DUFFEL_API_KEY="..."
DUFFEL_AUTO_TICKET="" # leave empty to issue tickets from the admin
# Amadeus Self-Service closed to new sign-ups in July 2026; only existing credentials work,
# and its flights adapter is search-only (not merged into bookable results)
AMADEUS_CLIENT_ID="..."
AMADEUS_CLIENT_SECRET="..."
AMADEUS_ENV="" # set to production when live
# Hotels
LITEAPI_KEY="..."
LITEAPI_SANDBOX_KEY="..."
BOOKING_DEMAND_TOKEN="..." # Booking.com Managed Affiliate Partners only
BOOKING_AFFILIATE_ID="..."
# Tours, rail, buses, cruises (optional)
VIATOR_API_KEY="..."
DISTRIBUSION_API_KEY="..."
BUSBUD_TOKEN="..."
WIDGETY_APP_ID="..."
WIDGETY_APP_KEY="..."
# Payments (add only the gateways you use)
UPI_VPA="yourname@bank"
UPI_PAYEE_NAME="Your Agency"
RAZORPAY_KEY_ID="..."
RAZORPAY_KEY_SECRET="..."
RAZORPAY_WEBHOOK_SECRET="..."
PAYU_KEY="..."
PAYU_SALT="..."
PAYU_MODE=""
STRIPE_SECRET_KEY="..."
STRIPE_WEBHOOK_SECRET="..."
PAYPAL_CLIENT_ID="..."
PAYPAL_CLIENT_SECRET="..."
PAYPAL_MODE="" # live for real money
NEXT_PUBLIC_PAYPAL_CLIENT_ID="..." # same as PAYPAL_CLIENT_ID; rebuild after changing
PAYGLOCAL_MERCHANT_ID="..."
PAYGLOCAL_PUBLIC_KEY_ID="..."
PAYGLOCAL_PRIVATE_KEY_ID="..."
PAYGLOCAL_ENV="uat" # prod when live
OPENNODE_API_KEY="..."
# Optional
NEXT_PUBLIC_TURNSTILE_SITE_KEY="..."
TURNSTILE_SECRET_KEY="..."
CRON_SECRET="a-random-string"4. Create the database, build and start
db push creates every table. The seed creates your admin account from ADMIN_EMAIL / ADMIN_PASSWORD and is safe to run again.
npx prisma db push
npm run seed
npm run build
npm start # serves on port 3000 unless PORT is set5. First sign-in and go-live checklist
- 1
Sign in to the admin
Open /login on your domain and sign in with the admin email and password from .env. Turn on two-factor sign-in in Admin > Security straight away.
- 2
Activate your licence
Paste your key in Admin > Licence and press save. The key is checked against your live domain; local and staging hosts (*.test, *.localhost) run without one.
- 3
Brand the site
Set name, logos, contact details, homepage sections and footer links in Admin > Site settings, then pick a storefront theme in Admin > Themes.
- 4
Check suppliers and payments
Admin > Suppliers and Admin > Payments show which keys are present or missing. Switch off anything you do not sell.
- 5
Set prices and markups
Enter train, bus, cab, visa and insurance fares in Admin > Fares and set channel markups before your first real booking.
- 6
Make a test booking
Use sandbox or test keys for one full search, checkout and confirmation email, then switch gateways to live mode.
Frequently asked questions
The build fails with an out-of-memory error. What now?
Shared hosts sometimes cap memory during builds. Build on your own machine with the same Node version and upload the built app, or move to a plan or VPS with more memory.
How do I switch from SQLite to MySQL?
Change the datasource provider in prisma/schema.prisma to mysql, set DATABASE_URL to your MySQL connection string and run npx prisma db push again. From the app itself, connect to 127.0.0.1 rather than localhost.
Where are payment webhooks configured?
Admin > Payments shows each gateway's status and missing keys. Register the webhook URL for your domain in the gateway dashboard where the gateway requires it.
Where do I get help?
Email support@nodestravels.com with your licence key, domain and the exact error. Support length depends on your edition; see the support policy.