- 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
4.1 KiB
PokeShare
A French-language Pokémon TCG collection tracker and sharing app. Users search cards from the TCGdex catalog, track their personal collection with Cardmarket price valuations, and share collections with friends.
Stack
- Astro (SSR, Node standalone adapter) — no UI framework
- Tailwind CSS v4 + basecoat-css
- PocketBase for database and authentication
- TCGdex API (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):
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.
PB_SUPERUSER_EMAIL=admin@example.com PB_SUPERUSER_PASSWORD=changeme123 \
docker compose up --build
- The app listens on
4321; PocketBase listens on8090(internal network, admin UI at/_/if you expose it). - In Coolify, deploy as a Docker Compose resource and expose the
appservice on your domain. SetPB_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 undersrc/pages/api/src/middleware.ts— per-request PocketBase client +pb_authcookie authsrc/lib/— TCGdex cache, collection pricing helpers, type themingsrc/layouts/,src/components/— base layout and nav