Wapy.dev is a subscription management platform that helps you track and manage your recurring payments and expenses. Get notified via email or push notifications when payments are due, mark subscriptions as paid, and keep track of your spending across different categories.
✅ Track Recurring Subscriptions & Expenses
Easily log all your subscriptions and payments, so you’ll never miss a due date.
🔔 Email & Push Notifications
Get timely reminders when payments are due. Customize notification schedules to fit your needs.
💱 Multi-Currency & Timezone Support
Perfect for managing subscriptions in different currencies and time zones.
📜 Easily Mark Payments as Paid
Keep track of what’s been paid and review your spending habits over time.
🔐 Easy Login Options
Sign in with Email, Github, or Google for a seamless experience.
🎨 Category Management with Custom Colors
Organize your subscriptions by category and add a personal touch with custom colors.
📱 Add to Home Screen for Mobile App Experience
Use Wapy.dev like a mobile app by adding it to your home screen with just a few taps.
🐳 Production-Ready with Docker
Easily self-host Wapy.dev with Docker for a quick and hassle-free installation process.
Home screen that lists all your subscriptions and expenses, with the ability to filter by category or search for specific items.
Reports page that shows your spending across different times and categories.
Account page where you can manage your profile, notifications and categories.
- Next.js for the frontend and API routes
- PostgreSQL database with Prisma ORM
- Docker for containerization
- Tailwind for styling
- shadcn/ui components (Radix UI under the hood)
- Authentication with Auth.js
- Web Push API for notifications
- Resend for transactional emails
- Lucide and Simple Icons for icons
Requirements:
-
Resend API key: for handling authentication emails and email notifications
-
Github OAuth keys (ID and Secret): for enabling Github login.
-
Google OAuth keys (ID and Secret): for enabling Google login.
Download or copy docker-compose.yml
and .env.example
files from the repository.
Before everything, you will need to setup the environment variables. Please take a look at the .env.example
file to see what variables you need to set.
The setup script setup.sh
will help you by copying .env.example
to .env
and generating some of the environment variables automatically. To automatically generate the .env
file, you can download/copy the file scripts/setup.sh
and run the script via following commands:
# On Linux
chmod +x ./scripts/setup.sh && ./scripts/setup.sh
# or
docker run --rm -v $(pwd):/app -w /app node:23.6-alpine sh -c "apk add --no-cache openssl su-exec && su-exec $(id -u):$(id -g) ./scripts/setup.sh"
# On Windows
docker run --rm -v ${PWD}:/app -w /app node:23.6-alpine sh -c "apk add --no-cache openssl && ./scripts/setup.sh"
Run docker compose to start the server.
docker compose -p wapydev up -d
The docker compose file includes the database and server. After successful deployment, you can visit your domain URL to see the application.
Run docker compose to start the server.
docker compose -p wapydev-dev -f docker-compose-dev.yml up -d
Site configuration
SITE_URL
: Your site URL. The default is http://localhost:3000
but you can set it to a domain URL without the trailing slash (ex: https://www.yourdomain.com
).
Database configuration
POSTGRES_DB
: The name of the database. The default is wapydev
.
POSTGRES_USER
: The name of the database. The default is wapydev
.
POSTGRES_PASSWORD
: The password for the database. When you run the setup.sh
script, it will generate a random password for you.
DATABASE_URL
: The database URL. With the default docker setup, you don't need to change this.
Authentication configuration
AUTH_SECRET
: The secret key for the authentication. When you run the setup.sh
script, it will generate a random secret for you.
AUTH_TRUST_HOST
: Whether to trust the host header in the authentication process. The default is true
.
Email configuration
RESEND_API_KEY
: The API key for the Resend email service.
RESEND_FROM
: The email address for the Resend email service. An example is [email protected]
.
RESEND_CONTACT_EMAIL
: The contact email for the contact form.
Github configuration
[Optional] The variables are only needed if you want to enable Github login.
GITHUB_CLIENT_ID
: The client ID for the Github OAuth application.
GITHUB_CLIENT_SECRET
: The client secret for the Github OAuth application.
Google configuration
[Optional] The variables are only needed if you want to enable Google login.
GOOGLE_CLIENT_ID
: The client ID for the Google OAuth application.
GOOGLE_CLIENT_SECRET
: The client secret for the Google OAuth application.
Push Notifications
[Optional] The variables are only needed if you want to enable push notifications.
NEXT_PUBLIC_VAPID_PUBLIC_KEY
: The public key for the Web Push API. When you run the setup.sh
script, it will generate a random key for you.
VAPID_PRIVATE_KEY
: The private key for the Web Push API. When you run the setup.sh
script, it will generate a random key for you.
Subscription Secret
SUBSCRIPTION_JWT_SECRET
: The secret key for the subscription signing. When you run the setup.sh
script, it will generate a random secret for you.
If you want to build the Docker image locally, you can run the following command:
docker build -t wapy.dev -f Dockerfile .
Don't forget to update the docker-compose.yml
file to use the local image.
You can backup the database by running the backup.sh
script.
./scripts/backup.sh
You can restore the database by running the restore.sh
script.
./scripts/restore.sh
Thanks go to these wonderful people for their time and contributions ✨.
Tiago Martins |
Contributions are welcome! Please feel free to submit a PR or create an issue.