A free, open-source auction platform for hosting private and public auctions. Perfect for charity events, fundraisers, schools, churches, company events, and community organizations.
No payment processing - all transactions are settled offline between participants.
🌐 Live Demo: auktiva.org
📚 Documentation: docs.auktiva.org
📝 Changelog: CHANGELOG.md
- Create unlimited auctions with customizable names, descriptions, and thumbnail images
- Flexible timing - set auction-wide end dates or individual end dates per item
- Multiple access modes - invite-only, link sharing, or open to all
- Close auctions early when needed
- Real-time bid updates - see the latest bids instantly with SWR
- Multi-currency support - USD, EUR, GBP, HUF, and 10+ currencies included
- Bid history tracking - view all your past bids and their status on the dashboard
- Anonymous bidding - three modes: always visible, always anonymous, or per-bid choice
- Rich item listings with multiple images, descriptions, and starting bids
- Minimum bid increments to ensure meaningful bid increases
- Individual item timing - end items at different times within the same auction
- Split view - browse items in a sidebar while viewing details
- Role-based access control:
- Owner - full control over the auction including deletion
- Admin - manage members, items, and auction settings
- Creator - add and edit their own items
- Bidder - view items and place bids
- Invite system with email invitations and shareable links
- Member can invite option for viral growth
- In-app notifications for outbids, auction wins, new items, and invites
- Email notifications (optional) via Brevo with user-controlled preferences
- Email retry system for failed deliveries with automatic retries
- Detailed results page showing all winners
- Personal win tracking - see what you've won across all auctions
- Export to JSON or CSV for record keeping
Auktiva follows a rolling release model:
- Only the latest version is supported - We do not maintain older versions or backport fixes
- Always update to latest - Running older versions may have known issues that have been resolved
- Bugs are fixed forward - If you encounter a bug, update first before reporting
⚠️ Keep your instance up to date. Older versions are not maintained and may contain bugs or security issues fixed in newer releases.
- Node.js 20.0.0 or higher (LTS recommended)
- npm 10+ (comes with Node.js 20+)
Check your Node.js version:
node --versionIf you need to upgrade, download from nodejs.org or use a version manager:
# Using nvm
nvm install 20
nvm use 20curl -fsSL https://raw.githubusercontent.com/thomsa/auktiva/main/scripts/install.sh | bashThis will check prerequisites (including Node.js version), clone the repo, install dependencies, and launch the interactive setup wizard.
git clone https://github.com/thomsa/auktiva.git
cd auktiva
npm install
npm run setupThe setup wizard will guide you through:
- Storage configuration - Local filesystem or S3-compatible storage
- Database setup - SQLite (local) or Turso (production)
- Domain configuration - Auto-generates secure AUTH_SECRET
- Feature flags - Enable/disable public auctions
After setup, visit your configured URL to create your first account.
If you prefer to configure manually:
cp .env.example .env
# Edit .env with your settings
npm run db:push
npm run seed:currencies
npm run build
npm startAuktiva supports two database options:
SQLite is the default and requires no additional setup. Perfect for development and small deployments.
DATABASE_URL="file:./dev.db"Commands:
npm run db:push # Apply schema changes
npm run db:migrate # Create and apply migrations
npm run db:studio # Open database GUITurso is a distributed SQLite database, ideal for production deployments with edge computing support.
-
Install Turso CLI
curl -sSfL https://get.tur.so/install.sh | bash turso auth login -
Create a database
turso db create auktiva turso db show auktiva --url # Get the URL turso db tokens create auktiva # Get the auth token
-
Configure environment
DATABASE_URL="libsql://auktiva-yourorg.turso.io" DATABASE_AUTH_TOKEN="your-auth-token"
-
Apply migrations
npm run db:migrate:turso
| Environment | DATABASE_URL | Prisma CLI | Runtime |
|---|---|---|---|
| Development | file:./dev.db |
✅ Direct | SQLite adapter |
| Production | libsql://... |
Uses local SQLite | Turso adapter |
The app automatically detects the database type from DATABASE_URL and uses the appropriate adapter:
file:./...→ BetterSqlite3 adapterlibsql://...orhttps://...→ LibSQL adapter (Turso)
# =============================================================================
# DATABASE
# =============================================================================
# Local SQLite (development)
DATABASE_URL="file:./dev.db"
# OR Turso (production)
# DATABASE_URL="libsql://your-database.turso.io"
# DATABASE_AUTH_TOKEN="your-turso-auth-token"
# =============================================================================
# AUTHENTICATION
# =============================================================================
# Generate with: openssl rand -base64 32
AUTH_SECRET="your-secret-key"
AUTH_URL="http://localhost:3000"
# =============================================================================
# STORAGE
# =============================================================================
STORAGE_PROVIDER="local" # or "s3" (local uses ./public/uploads)
# S3 storage (when STORAGE_PROVIDER="s3")
# S3_BUCKET="your-bucket-name"
# S3_REGION="us-east-1"
# S3_ACCESS_KEY_ID="your-access-key"
# S3_SECRET_ACCESS_KEY="your-secret-key"
# S3_ENDPOINT="" # For S3-compatible services (MinIO, R2, etc.)
# =============================================================================
# EMAIL (Optional)
# =============================================================================
# EMAIL_PROVIDER="brevo" # or "smtp"
# MAIL_FROM="noreply@yourdomain.com"
# MAIL_FROM_NAME="Your App Name"
# NEXT_PUBLIC_APP_URL="https://yourdomain.com"
# CRON_SECRET="your-cron-secret" # For securing the retry-emails endpoint
# Brevo (when EMAIL_PROVIDER="brevo")
# BREVO_API_KEY="your-brevo-api-key"
# SMTP (when EMAIL_PROVIDER="smtp")
# SMTP_HOST="smtp.example.com"
# SMTP_PORT="587"
# SMTP_SECURE="false"
# SMTP_USER="your-username"
# SMTP_PASSWORD="your-password"
# =============================================================================
# FEATURES
# =============================================================================
ALLOW_OPEN_AUCTIONS="true" # Set to "false" for hosted environmentsAuktiva can send email notifications for:
- Welcome emails when users register
- Auction invites when users are invited to auctions
- New item notifications when items are added to auctions you're a member of
- Outbid notifications when someone outbids you
Auktiva supports two email providers: Brevo (cloud service) and SMTP (any SMTP server).
Brevo (formerly Sendinblue) offers a free tier with 300 emails/day - perfect for small to medium deployments.
-
Create a Brevo account at brevo.com
-
Get your API key from Settings → API Keys
-
Configure environment variables
EMAIL_PROVIDER="brevo" BREVO_API_KEY="your-brevo-api-key" MAIL_FROM="noreply@yourdomain.com" MAIL_FROM_NAME="Auktiva" NEXT_PUBLIC_APP_URL="https://yourdomain.com" CRON_SECRET="generate-with-openssl-rand-base64-32"
-
Verify your sender domain (recommended) in Brevo Settings → Senders & IP
Use any SMTP server (Gmail, Mailgun, Amazon SES, self-hosted, etc.).
EMAIL_PROVIDER="smtp"
SMTP_HOST="smtp.example.com"
SMTP_PORT="587"
SMTP_SECURE="false" # true for port 465, false for STARTTLS (port 587)
SMTP_USER="your-username" # Optional, omit for no authentication
SMTP_PASSWORD="your-password" # Optional
MAIL_FROM="noreply@yourdomain.com"
MAIL_FROM_NAME="Auktiva"
NEXT_PUBLIC_APP_URL="https://yourdomain.com"
CRON_SECRET="generate-with-openssl-rand-base64-32"Common SMTP configurations:
| Provider | Host | Port | Secure |
|---|---|---|---|
| Gmail | smtp.gmail.com | 587 | false |
| Mailgun | smtp.mailgun.org | 587 | false |
| Amazon SES | email-smtp.{region}.amazonaws.com | 587 | false |
| SendGrid | smtp.sendgrid.net | 587 | false |
| Local (Mailpit) | localhost | 1025 | false |
Failed emails are automatically retried via a cron job. On Vercel, this runs daily at 1:00 AM UTC. The system will retry up to 5 times before marking an email as abandoned.
Users can manage their email notification preferences in Settings → Email Notifications:
- Toggle notifications for new items in auctions (disabled by default)
- Toggle notifications when outbid (disabled by default)
Email notifications are disabled by default to conserve email quota. Users can enable them if they want email alerts in addition to in-app notifications.
Protect registration from bots with Google reCAPTCHA v2 checkbox. If not configured, reCAPTCHA is completely disabled (useful for local development and self-hosting).
-
Get reCAPTCHA keys at google.com/recaptcha/admin
- Choose reCAPTCHA v2 → "I'm not a robot" Checkbox
- Add your domain(s)
-
Configure environment variables
NEXT_PUBLIC_RECAPTCHA_SITE_KEY="your-site-key" RECAPTCHA_SECRET_KEY="your-secret-key"
The registration form will automatically show the reCAPTCHA checkbox widget.
- Create a Turso database and get credentials
- Push code to GitHub
- Import project in Vercel
- Set environment variables:
DATABASE_URL- Your Turso URLDATABASE_AUTH_TOKEN- Your Turso tokenAUTH_SECRET- Generate withopenssl rand -base64 32AUTH_URL- Your production URLBREVO_API_KEY- (Optional) For email notificationsMAIL_FROM- (Optional) Sender email addressCRON_SECRET- (Optional) For email retry cron job
- Deploy
Note: Database migrations are automatically applied during the Vercel build process.
npm run build
npm startUse a reverse proxy (nginx, caddy) for HTTPS.
- Framework: Next.js 16 with React 19
- Database: Prisma ORM 7 with SQLite/Turso (LibSQL)
- Authentication: NextAuth.js v4
- Styling: Tailwind CSS 4 + DaisyUI 5
- Icons: Tabler Icons via Iconify
- Forms: React Hook Form + Zod validation
- Data Fetching: SWR for real-time updates
- Email: Brevo (formerly Sendinblue) with MJML templates
- Storage: Local filesystem or S3-compatible (AWS S3, MinIO, Cloudflare R2)
- Image Processing: Sharp for thumbnails and optimization
| Command | Description |
|---|---|
npm run setup |
Interactive setup wizard |
npm run dev |
Start development server |
npm run build |
Build for production |
npm start |
Start production server |
npm run db:push |
Push schema to database |
npm run db:migrate |
Create migration (local SQLite) |
npm run db:migrate:turso |
Apply migrations to Turso |
npm run db:studio |
Open Prisma Studio |
npm run db:generate |
Regenerate Prisma client |
npm run seed:currencies |
Seed currency data |
npm run seed:test-db |
Seed test data |
Coming soon
MIT License - feel free to use this for your own projects!
Contributions are welcome! Please feel free to submit a Pull Request.
Created by Tamas Lorincz