The last Pokédex you will ever need.
Built with SvelteKit 3, Tailwind CSS, shadcn-svelte, and data from PokéAPI. Deployed on Vercel.
This project uses Vite+ (vp) with bun as the package manager.
Node.js 22.17 or newer is required; CI and Vercel use Node.js 24.
vp install
vp devAccounts, collections and saved teams are stored in Neon Postgres through Drizzle ORM. Everything else works without a database.
Server environment variables are declared in src/env.ts and read at runtime through $app/env/private. They remain optional so the public Pokédex can run without account credentials.
- Create a Neon project and copy its pooled connection string.
cp .env.example .envand setDATABASE_URL.- Apply the migrations:
vp run db:migrateAfter changing src/lib/server/db/schema.ts, create a migration with vp run db:generate. vp run db:studio opens Drizzle Studio.
Browse, search and move details come from indexes in src/lib/data, built from PokéAPI:
vp run data:sync # reuse cached responses in .cache/pokeapi
vp run data:sync --fresh # refetch everythingvp check # format, lint, type check
vp run check # svelte-check for .svelte files
vp test # unit testsThe app deploys to Vercel with @sveltejs/adapter-vercel. Import the repository in Vercel, add the environment variables from .env.example (the Neon integration can set DATABASE_URL for you), and it builds with vp build. Pokémon pages use ISR and remote artwork goes through Vercel image optimization.