Oracle3
Open-source trading engine and MCP server for prediction markets. Fee-aware no-arbitrage trading across related contracts, live on Kalshi, Polymarket and Solana or on paper.
Find a new home for your finished puzzles and discover your next challenge! JigSwap is an open-source puzzle trading platform powered by Next.js and Convex.
FinanceTypeScript · CSSGitHub @SanderVerkuilOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
Loading the full README. The saved excerpt is shown below.
JigSwap - Personal Puzzle Library & Exchange Platform
A comprehensive platform for jigsaw puzzle enthusiasts to manage their personal collections, track completion history, and engage in various types of puzzle exchanges. Built with Next.js 15, Convex, Clerk, and Tailwind CSS.
JigSwap is a family side project born from our own need to easily see and exchange puzzles with friends and family. What started as a simple solution for our puzzle-loving family has grown into a platform for the broader puzzle community.Read the full README ↗A comprehensive platform for jigsaw puzzle enthusiasts to manage their personal collections, track completion history, and engage in various types of puzzle exchanges. Built with Next.js 15, Convex, Clerk, and Tailwind CSS.
JigSwap is a family side project born from our own need to easily see and exchange puzzles with friends and family. What started as a simple solution for our puzzle-loving family has grown into a platform for the broader puzzle community.
JigSwap began as a family side project in 2025. We were tired of constantly asking friends and family "What puzzles do you have?" and wanted an easy way to see and exchange puzzles within our circle. What started as a simple solution for our puzzle-loving family has grown into a platform that serves the broader puzzle community.
Our mission is to make puzzle sharing sustainable, accessible, and enjoyable for everyone - whether you're trading with family members or connecting with fellow enthusiasts worldwide.
Before you begin, ensure you have the following installed:
Clone the repository
git clone https://github.com/SanderVerkuil/jigswap.git
cd jigswap
Install dependencies This project is a pnpm workspace monorepo (tasks run via Turborepo):
pnpm install
The repo uses TypeScript 7 only. In VS Code, install the
TypeScript 7 extension
(TypeScriptTeam.native-preview), because TS 7 doesn't ship the tsserver.js the
built-in TypeScript support needs. See CONTRIBUTING.md.
Set up environment variables Copy the example environment file and fill in your values:
cp apps/web/.env.example apps/web/.env.local
Fill in the required environment variables in apps/web/.env.local:
Set up Convex
cd packages/backend
pnpm convex:dev
This will:
Start the development server In a separate terminal, from the root directory:
pnpm dev
Open your browser Navigate to http://localhost:3000
Create a .env.local file in the apps/web directory with the following variables:
# Convex Backend
CONVEX_DEPLOYMENT=dev:your-deployment-name
NEXT_PUBLIC_CONVEX_URL=https://your-convex-deployment.convex.cloud
# Clerk Authentication
NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY=pk_test_...
CLERK_SECRET_KEY=sk_test_...
NEXT_PUBLIC_CLERK_FRONTEND_API_URL=https://your-clerk-frontend.clerk.accounts.dev
# Crowdin Localization (Optional)
CROWDIN_PROJECT_ID=your_crowdin_project_id
CROWDIN_API_TOKEN=your_crowdin_api_token
NEXT_PUBLIC_CROWDIN_DISTRIBUTION_HASH=your_crowdin_distribution_hash
apps/web/.env.localcd packages/backendpnpm convex:dev to set up your Convex projectapps/web/.env.locallocales/source.json)jigswap/
├── apps/
│ └── web/ # Next.js 15 frontend application
│ ├── src/
│ │ ├── app/ # Next.js App Router pages
│ │ │ ├── (auth)/ # Authentication pages
│ │ │ └── (dashboard)/ # Protected dashboard pages
│ │ ├── components/ # React components
│ │ │ └── ui/ # Reusable UI components
│ │ └── lib/ # Utility functions and providers
│ ├── locales/ # Internationalization files
│ │ └── source.json # Source translations
│ ├── public/ # Static assets
│ ├── .env.local # Environment variables
│ ├── next.config.ts # Next.js configuration
│ └── package.json # Web app dependencies
├── packages/
│ └── backend/ # Convex backend functions and schema
│ ├── convex/ # Convex functions and schema
│ │ ├── schema.ts # Database schema
│ │ ├── users.ts # User functions
│ │ ├── puzzles.ts # Puzzle functions
│ │ ├── collections.ts # Collection management
│ │ ├── completions.ts # Completion tracking
│ │ ├── exchanges.ts # Exchange system
│ │ └── reviews.ts # Review system
│ └── package.json # Backend dependencies
├── spec/ # Platform specifications
│ ├── README.md # Main specification document
│ ├── database-schema.md # Database schema specification
│ ├── user-interface.md # UI/UX specification
│ ├── api-specification.md # API specification
│ └── feature-roadmap.md # Development roadmap
├── package.json # Root workspace configuration
├── turbo.json # Turborepo task pipeline
└── pnpm-workspace.yaml # pnpm workspace configuration
pnpm dev - Start development server for web app with Turbopackpnpm dev:web - Start web app development serverpnpm build - Build all projectspnpm build:web - Build web app for productionpnpm start - Start production server for web apppnpm start:web - Start web app production serverpnpm lint - Run oxlint on all projectspnpm lint:fix - Fix oxlint errors on all projectspnpm type-check - Run TypeScript type checking on all projectspnpm test - Run tests on all projectspnpm clean - Clean build artifacts and the Turborepo cachepnpm format - Format code with Prettierpnpm graph - Write the task graph to graph.htmlpnpm dev - Start Next.js development server with Turbopackpnpm build - Build for productionpnpm start - Start production serverpnpm lint - Run oxlintpnpm lint:fix - Fix oxlint errorspnpm type-check - Run TypeScript type checkingpnpm build:analyze - Build with bundle analyzerpnpm build:production - Build with production environmentpnpm preview - Build and start production serverpnpm clean - Clean build artifactspnpm crowdin:upload - Upload source translationspnpm crowdin:download - Download translationspnpm convex:dev - Start Convex development serverpnpm convex:deploy - Deploy Convex functions to productionJigSwap supports multiple languages using next-intl and Crowdin:
The application uses Convex with the following main entities:
The application can be deployed to any platform that supports Next.js:
git checkout -b feature/amazing-featuregit commit -m 'feat: add amazing feature'git push origin feature/amazing-featurePlease follow the Conventional Commits specification for commit messages.
This project is licensed under the MIT License - see the LICENSE file for details.
If you have any questions or need help, please:
Made with ❤️ by a puzzle-loving family for the jigsaw puzzle community