A modern Pokemon Showdown team sharing platform. Paste your team, get a beautiful visual preview, and share with a unique link.
- Paste & Preview — Paste Showdown exports and see your team with animated sprites, EV bars, moves, and items
- Shareable Links — Save teams and get a unique URL to share anywhere
- Browse & Discover — Explore public team pastes from the community
- Copy Export — Re-export your team back to Showdown format in one click
- Live Preview — Team renders in real-time as you type
- View Counter — See how many times a paste has been viewed
- Dark Mode — Sleek dark-first design with glassmorphism
| Framework | Next.js 16 (App Router) |
| Language | TypeScript |
| Styling | Tailwind CSS v4 |
| Database | PostgreSQL via Prisma 7 + driver adapter |
| Pokemon Data | @pkmn/sets — Showdown paste parser |
| Container | Docker + Docker Compose |
- Node.js 20+
- A PostgreSQL database (local or cloud — see options below)
git clone https://github.com/TurboRx/PasteMon.git
cd PasteMon
npm installcp .env.example .envEdit .env and set your connection string:
DATABASE_URL="postgresql://user:password@host:5432/pastemon?sslmode=require"Free cloud PostgreSQL (no local setup needed):
| Provider | Free Tier | Notes |
|---|---|---|
| Neon | 0.5 GB | Serverless, scales to zero |
| Supabase | 500 MB | Full Postgres with extras |
| Railway | $5 credit/month | Easy, deploy app alongside DB |
Local with Docker:
# Start a local PostgreSQL instance
docker run -d \
--name pastemon-db \
-e POSTGRES_USER=postgres \
-e POSTGRES_PASSWORD=postgres \
-e POSTGRES_DB=pastemon \
-p 5432:5432 \
postgres:16-alpine
# Then set in .env:
DATABASE_URL="postgresql://postgres:postgres@localhost:5432/pastemon"npx prisma db push # Apply schema to the database
npm run dev # Start development serverOpen http://localhost:3000.
- Push your repo to GitHub
- Go to your Cloudflare Dashboard -> Workers & Pages -> Create application -> Pages
- Connect your GitHub repository and select the
PasteMonproject - Set the build command to
npm run pages:buildand output directory to.vercel/output/static - Add
DATABASE_URLin the Environment variables section - Deploy
Cloudflare Pages natively supports Next.js applications via the @cloudflare/next-on-pages adapter.
The repo ships with a Dockerfile and docker-compose.yml for full self-hosting.
Option A — Docker Compose (app + database together):
# Start everything
docker compose up -d
# First time only: apply the schema
docker compose exec app npx prisma db push
# View logs
docker compose logs -f appThe app is now running at http://localhost:3000.
Option B — Docker with an external database:
docker build -t pastemon .
docker run -d \
-p 3000:3000 \
-e DATABASE_URL="postgresql://user:password@host:5432/pastemon" \
pastemon- Create a new project and add a PostgreSQL service
- Copy the connection string from the PostgreSQL service dashboard
- Add a new service from your GitHub repo
- Set
DATABASE_URLin the service's environment variables - Deploy
- Create a new PostgreSQL database on Render
- Create a new Web Service from your GitHub repo
- Set the build command:
npm install && npx prisma generate && npm run build - Set the start command:
npm start - Add
DATABASE_URLas an environment variable - Deploy
fly launch
fly postgres create
fly postgres attach <postgres-app-name>
fly deploy| Variable | Description | Required |
|---|---|---|
DATABASE_URL |
PostgreSQL connection string | Yes |
| Script | Description |
|---|---|
npm run dev |
Start development server |
npm run build |
Build for production |
npm start |
Start production server |
npm run db:push |
Apply schema to the database |
npm run db:migrate |
Run Prisma migrations (production) |
npm run db:studio |
Open Prisma Studio (database GUI) |
npm run db:generate |
Regenerate Prisma Client |
npm run lint |
Run ESLint |
PasteMon/
├── app/
│ ├── api/paste/ # REST API — create & list pastes
│ │ └── [id]/ # REST API — get & delete by ID
│ ├── browse/ # Browse public pastes
│ ├── new/ # Create new paste
│ ├── paste/[id]/ # Paste detail view
│ ├── globals.css
│ ├── layout.tsx
│ └── page.tsx # Homepage
├── components/
│ ├── PasteForm.tsx # Paste creation form with live preview
│ ├── PokemonCard.tsx # Individual Pokemon card with stats
│ └── TeamPreview.tsx # Full team grid
├── lib/
│ ├── db.ts # Prisma client (PostgreSQL driver adapter)
│ └── pokemon.ts # Showdown paste parser + sprite helpers
├── prisma/
│ └── schema.prisma # Database schema
├── prisma.config.ts # Prisma 7 CLI configuration
├── Dockerfile # Multi-stage production Docker image
├── docker-compose.yml # App + PostgreSQL for local self-hosting
├── next.config.ts
└── .env.example
- Fork the repo
- Create a feature branch:
git checkout -b feature/my-feature - Make your changes and commit:
git commit -m "feat: add my feature" - Push and open a pull request
MIT — see LICENSE for details.