A travel companion web app
  • JavaScript 91.5%
  • HTML 7%
  • CSS 1%
  • Shell 0.2%
  • Dockerfile 0.1%
  • Other 0.1%
Find a file
2026-04-28 00:25:45 +02:00
.claude fix: document counter ignore hidden documents 2026-02-12 22:16:21 +01:00
client feat: api key system 2026-04-28 00:25:45 +02:00
server feat: api key system 2026-04-28 00:25:45 +02:00
.dockerignore feat: dockerignore 2025-04-05 15:54:19 +02:00
.gitattributes feat: api key system 2026-04-28 00:25:45 +02:00
.gitignore first commit 2025-03-12 13:50:44 +01:00
docker-compose.yml fix: docker command 2026-03-02 17:10:23 +01:00
docker-entrypoint.sh fix: docker command 2026-03-02 17:14:27 +01:00
Dockerfile fix: update dockerfile for android apk 2026-03-02 16:36:03 +01:00
LICENSE feat: license 2025-03-13 22:19:49 +01:00
package-lock.json feat: personal budgets 2025-07-11 11:39:18 +02:00
package.json feat: better budget UI for mobile 2025-03-17 19:20:04 +01:00
README.md feat: api key system 2026-04-28 00:25:45 +02:00
start.sh fix: start.sh 2025-03-28 12:15:06 +01:00
structure fix: trip images 2025-03-12 16:32:03 +01:00

Travel Companion

Overview

Travel Companion allows you to manage every aspect of your travel, from transportation and lodging to daily activities and checklists. It features real-time collaboration, budget tracking, and offline support, making it the perfect tool for solo travelers and groups alike.

Key Features

  • Trip Management: Create detailed itineraries with drag-and-drop organization using the timeline view.
  • Collaborative Planning: Share trips with friends and family with granular permission controls (View/Edit).
  • Budget & Expenses: Track spending in real-time with multi-currency support and categorical breakdowns.
  • Documents: Store and link PDF tickets, reservations, and files directly to trip items.
  • Offline Mode: Access your full itinerary and saved documents without an internet connection.
  • Brainstorming: A collaborative canvas for ideas, notes, and locations before the plan is finalized.
  • Calendar: Visual overview of all your upcoming trips.
  • Mobile Friendly: Fully responsive design with a dedicated mobile experience, including map integration.

Technical Stack

  • Frontend: React, Tailwind CSS, Zustand
  • Backend: Node.js, Express
  • Database: SQLite
  • Infrastructure: Docker

Getting Started

  1. Clone the repository.
  2. Configure your environment variables in docker-compose.yml or create an .env file.
  3. Run the start script:
    ./start.sh
    
    The application will be accessible at http://localhost:5000.

Local Development

  1. Install dependencies:
    npm run install-all
    
  2. Create a .env file in the server directory (or root, depending on setup) with the required variables.
  3. Start the development server:
    npm run dev
    
    • Frontend: http://localhost:3000
    • Backend: http://localhost:5000

Configuration

To run the application, you must configure the following environment variables.

General

Variable Description Default Required
NODE_ENV Environment mode (production or development) development No
PORT Port for the backend server 5000 No
JWT_SECRET Secret key for session signing - Yes
FRONTEND_URL Public URL of the app (used in emails) - Yes

Email Service (SMTP)

Required for sending invitations and trip updates.

Variable Description Example
EMAIL_HOST SMTP server hostname smtp.gmail.com
EMAIL_PORT SMTP port 587 or 465
EMAIL_USER SMTP username user@gmail.com
EMAIL_PASS SMTP password or App Password secret
EMAIL_FROM Sender address Traveler <noreply@app.com>
EMAIL_QUEUE_DURATION_MS Batch email notification delay (ms) 3600000 (1hr)
EMAIL_PROCESS_INTERVAL_MS Notification processing interval (ms) 300000 (5min)

Client / Frontend

These variables must be available at build time (or runtime for Docker).

Variable Description Required
VITE_MAPBOX_TOKEN Mapbox public token for map views Yes (if using maps)
VITE_API_URL Backend API URL (for local dev) No (defaults to /api)

API Keys (Programmatic Access)

You can generate read-only API keys from the Profile page to query your own data from external tools (dashboards, widgets, scripts) without exposing your session token.

  • Keys are prefixed with trv_ and shown only once at creation — store them somewhere safe.
  • Send the key in the Authorization header:
    Authorization: Bearer trv_<your-key>
    
  • Keys are limited to GET / HEAD requests. Any write (POST/PUT/PATCH/DELETE) is rejected.
  • Keys cannot manage account settings, change passwords, or create/revoke other API keys.
  • You can set an optional expiry, and revoke a key at any time from the Profile page.

Common read endpoints useful for widgets:

Endpoint Description
GET /api/auth/me Current user
GET /api/trips All trips you can see
GET /api/trips/:id A trip with members, transport, lodging, activities
GET /api/budgets/trip/:id Trip budget + expenses
GET /api/personal-budgets/trip/:id Your personal budget for a trip
GET /api/checklists/trip/:id Trip checklists
GET /api/brainstorm/trip/:id Brainstorm items

Example:

curl -H "Authorization: Bearer trv_…" https://your-host/api/trips

License

MIT License.