40 lines
1.7 KiB
Markdown
40 lines
1.7 KiB
Markdown
# Travel Planner
|
|
|
|
Self-hosted, AI-assisted travel planner. Angular PWA frontend, NestJS API + background worker, PostgreSQL, Redis/BullMQ, and a Mistral-backed travel agent behind a strict tool boundary.
|
|
|
|
> `.env.example` lists configuration **names and non-secret defaults only**. Real production secrets (database password, SMTP credentials, LLM API keys, etc.) are never committed and live only on the deployment host / secret store, supplied to containers as environment variables.
|
|
|
|
## Repository layout
|
|
|
|
```text
|
|
frontend/ Angular PWA (pnpm workspace member)
|
|
backend/ NestJS workspace: apps/api, apps/worker, libs/*
|
|
docker/ Production Dockerfiles and edge (Nginx) config
|
|
scripts/ Compose-invariant checks and TeamCity entry points
|
|
docs/ Specs, plans, and architecture documentation
|
|
```
|
|
|
|
## Developer setup
|
|
|
|
```bash
|
|
pnpm install
|
|
pnpm dev:infra
|
|
DATABASE_URL=postgresql://travel_planner:travel_planner_dev@localhost:5432/travel_planner REDIS_URL=redis://localhost:6379 pnpm --filter backend start:api
|
|
pnpm --filter frontend start
|
|
```
|
|
|
|
`pnpm dev:infra` starts local PostgreSQL/Redis (see `compose.dev.yml`); `pnpm dev:infra:down` stops them.
|
|
|
|
## Quality gates
|
|
|
|
```bash
|
|
pnpm lint
|
|
pnpm test
|
|
pnpm test:compose
|
|
pnpm build
|
|
```
|
|
|
|
## Production topology
|
|
|
|
Production Docker Compose (`compose.yml`) publishes **exactly one** host port, on the `edge` (Nginx) service, which serves the built Angular app and reverse-proxies `/api/*` and `/health/*` to the internal `api` service. `api`, `worker`, `postgres`, and `redis` are reachable only over the internal Docker network. See `docs/architecture/deployment.md` for the full contract and `scripts/teamcity/` for the TeamCity-invoked build/deploy/rollback scripts.
|