# 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` | 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