AI-driven concert trip planner API. Follow your favorite artists, discover upcoming concerts, and get complete trip plans with transport, accommodation, and budget estimates.
- Runtime: Bun
- Framework: Hono
- Database: PostgreSQL + Drizzle ORM
- Auth: Better Auth (email/password, Google, Spotify OAuth)
- AI: OpenAI (with mock provider fallback)
- Validation: Zod
- Linting: Biome
- Bun >= 1.0
- PostgreSQL (or Docker)
# Install dependencies
bun install
# Copy environment variables
cp .env.example .env
# Start PostgreSQL with Docker
docker compose up -d
# Push schema to database
bun run db:push
# Seed sample data
bun run db:seed
# Start dev server
bun run dev
The API will be available at http://localhost:3000.
| Method |
Endpoint |
Description |
| POST |
/api/v1/auth/sign-up/email |
Register |
| POST |
/api/v1/auth/sign-in/email |
Login |
| GET |
/api/v1/auth/get-session |
Current session |
| Method |
Endpoint |
Description |
| GET |
/api/v1/artists |
List/search artists (?q=&genre=) |
| GET |
/api/v1/artists/:id |
Artist detail + concerts |
| Method |
Endpoint |
Description |
| GET |
/api/v1/following |
List followed artists |
| POST |
/api/v1/following/:artistId |
Follow artist |
| DELETE |
/api/v1/following/:artistId |
Unfollow artist |
| Method |
Endpoint |
Description |
| GET |
/api/v1/opportunities |
All opportunities from followed artists (?sort=cheapest|nearest|best¤cy=EUR) |
| GET |
/api/v1/opportunities/artist/:artistId |
Opportunities for a specific artist |
| Method |
Endpoint |
Description |
| POST |
/api/v1/plans |
Create trip plan ({ concertId, homeCity? }) |
| GET |
/api/v1/plans |
List plans |
| GET |
/api/v1/plans/:id |
Plan detail |
| PATCH |
/api/v1/plans/:id |
Update plan |
| DELETE |
/api/v1/plans/:id |
Delete plan |
| Method |
Endpoint |
Description |
| GET |
/api/v1/budget/convert |
Currency conversion (?amount=&from=&to=) |
bun run dev # Start dev server with hot reload
bun run start # Start production server
bun run db:generate # Generate Drizzle migrations
bun run db:migrate # Run migrations
bun run db:push # Push schema to DB
bun run db:seed # Seed sample data
bun run db:studio # Open Drizzle Studio
bun run check # Lint with Biome
bun run format # Format with Biome
bun run test # Run tests
bun run typecheck # TypeScript type check
See .env.example for all available configuration options. OpenAI and OAuth keys are optional — the app falls back to mock providers when they're not set.
docker compose up -d # PostgreSQL only
To run the full app in Docker:
docker build -t gigwander .
docker run -p 3000:3000 --env-file .env gigwander