Files
nlevesque fc51371dad Migrate backend from PocketBase to Directus
Full cutover: auth, users, collection and friendships now run on Directus
via @directus/sdk, with owner/visibility rules enforced by Directus
permissions.

- middleware: Directus session (directus_auth cookie) with token refresh
- /login is Directus (email normalized to lowercase), new /register page
  (first/last name, username) backed by public registration
- collection, friends and profile pages + all API endpoints ported;
  ownership and addressee-only accept/decline enforced by permissions
- display names use first_name/last_name everywhere (nav, friends, profile)
- PocketBase SDK, POCKETBASE_URL and pb_schema.json removed
- README and compose updated for DIRECTUS_URL
2026-07-28 20:33:46 +02:00

68 lines
2.7 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)
- [Directus](https://directus.io) for database, authentication and permissions
(via [`@directus/sdk`](https://www.npmjs.com/package/@directus/sdk))
- [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 |
| -------------- | ------------------------------------------- | -------------------------------- |
| `DIRECTUS_URL` | URL of the Directus backend (auth + data) | `https://directus.namarusaja.me` |
Read at **runtime** (`process.env`), so the same Docker image can be deployed
against different Directus instances. For local dev, copy `.env.example` to
`.env`. `HOST` and `PORT` are also honored by the standalone server.
## Docker
Single container (external Directus):
```sh
docker build -t pokeshare .
docker run -p 4321:4321 -e DIRECTUS_URL=https://directus.example.com pokeshare
```
Or with the compose file:
```sh
DIRECTUS_URL=https://directus.example.com docker compose up --build
```
- The app listens on `4321`; expose it on your domain (Coolify: expose the
`app` service, or use the plain Dockerfile build pack).
- Collections, roles and permissions are managed from the Directus Data
Studio; public registration is enabled with the "App User" role.
## Structure
- `src/pages/` — routes (`/`, `/search`, `/mycards`, `/card/[id]`,
`/series/[id]`, `/sets/[id]`, `/friends`, `/profile`, `/login`, `/register`)
and JSON API endpoints under `src/pages/api/`
- `src/middleware.ts` — Directus session (`directus_auth` cookie) with token
refresh, exposes `locals.directus` and `locals.user`
- `src/lib/` — Directus client + types, TCGdex cache, collection pricing,
auth helper, type theming
- `src/layouts/`, `src/components/` — base layout and nav