Files
pokeshare/README.md
T
nlevesque 2df1325a09 Add env-driven SMTP and app identity settings for PocketBase
- pb_hooks/main.pb.js: bootstrap hook applying SMTP + meta settings from
  env vars on every boot (mail disabled when SMTP_HOST is unset)
- docker-compose.yml: expose SMTP_* / PB_APP_URL on the pocketbase service
- pocketbase/Dockerfile: bundle pb_hooks
- README: document the new variables
2026-07-28 10:29:04 +02:00

89 lines
4.1 KiB
Markdown

# PokeShare
A French-language Pokémon TCG collection tracker and sharing app. Users search
cards from the [TCGdex](https://tcgdex.dev) catalog, track their personal
collection with Cardmarket price valuations, and share collections with friends.
## Stack
- [Astro](https://astro.build) (SSR, Node standalone adapter) — no UI framework
- [Tailwind CSS v4](https://tailwindcss.com) + [basecoat-css](https://basecoatui.com)
- [PocketBase](https://pocketbase.io) for database and authentication
- [TCGdex API](https://api.tcgdex.net) (French locale) for card data, with an
in-memory server-side cache (`src/lib/tcgdex-cache.ts`)
## Commands
| Command | Action |
| ----------------- | -------------------------------------- |
| `bun install` | Install dependencies |
| `bun run dev` | Start dev server at `localhost:4321` |
| `bun run build` | Build the production site to `./dist/` |
| `bun run preview` | Preview the production build locally |
Production runs as a standalone Node server (`node dist/server/entry.mjs`),
Node >= 22.12.
## Environment variables
| Variable | Description | Default |
| ---------------- | -------------------------------------------- | ------------------------------------ |
| `POCKETBASE_URL` | URL of the PocketBase backend (auth + data) | `https://pokeshare.namarusaja.me` |
PocketBase container (compose only):
| Variable | Description |
| ------------------------------------ | ------------------------------------------------- |
| `PB_SUPERUSER_EMAIL` / `_PASSWORD` | Create/update the admin account on boot |
| `PB_APP_URL` | Public app URL used in transactional email links |
| `SMTP_HOST` / `SMTP_PORT` | Mail server (mail disabled if `SMTP_HOST` empty) |
| `SMTP_USERNAME` / `SMTP_PASSWORD` | Mail server credentials |
| `SMTP_TLS` | `true` (default) / `false` |
| `SMTP_SENDER_NAME` / `_ADDRESS` | From header of transactional emails |
SMTP settings are applied on every boot by `pocketbase/pb_hooks/main.pb.js`
from these env vars, so they can be changed without touching the admin UI.
Read at **runtime** (`process.env`), so the same Docker image can be deployed
against different PocketBase instances. For local dev, copy `.env.example` to
`.env`. `HOST` and `PORT` are also honored by the standalone server.
## Docker
Single container (external PocketBase):
```sh
docker build -t pokeshare .
docker run -p 4321:4321 -e POCKETBASE_URL=https://pb.example.com pokeshare
```
## Full stack (app + PocketBase)
`docker-compose.yml` runs the app together with a PocketBase container. On
first boot, PocketBase applies `pocketbase/pb_migrations/`, which creates the
`users` profile fields, the `public_users` view, and the `mycards` and
`friendships` collections with their API rules — no manual setup needed.
```sh
PB_SUPERUSER_EMAIL=admin@example.com PB_SUPERUSER_PASSWORD=changeme123 \
docker compose up --build
```
- The app listens on `4321`; PocketBase listens on `8090` (internal network,
admin UI at `/_/` if you expose it).
- In Coolify, deploy as a **Docker Compose** resource and expose the `app`
service on your domain. Set `PB_SUPERUSER_*` in the environment variables.
- Accounts are created from the PocketBase admin UI (public registration is
disabled by the migration).
- To move existing data, use the PocketBase admin UI backups (Settings →
Backups) on the old instance and restore into `pb_data`.
## Structure
- `src/pages/` — routes (`/`, `/search`, `/mycards`, `/card/[id]`,
`/series/[id]`, `/sets/[id]`, `/friends`, `/profile`) and JSON API endpoints
under `src/pages/api/`
- `src/middleware.ts` — per-request PocketBase client + `pb_auth` cookie auth
- `src/lib/` — TCGdex cache, collection pricing helpers, type theming
- `src/layouts/`, `src/components/` — base layout and nav