Sign inSign up

zlimteck/subly

By zlimteck

Updated 2 months ago

A modern web application for tracking and managing your subscriptions with automated reminders.

Image
Monitoring & observability
0

10K+

zlimteck/subly repository overview

Subly - Subscription Expense Tracker

subly Logo

A modern web application for tracking and managing your subscription expenses with automated reminders, calendar integration, and comprehensive analytics.

🚀 Quick Start

Option 1: Standalone Container
docker run -d \
  --name subly \
  -e MONGODB_URI="your-mongodb-uri" \
  -e JWT_SECRET="your-jwt-secret" \
  -e TZ="Europe/Paris" \
  -p 3000:80 \
  -p 5071:5071 \
  --restart unless-stopped \
  zlimteck/subly:latest

Create a docker-compose.yml file:

services:
  mongodb:
    image: mongo:8.0
    container_name: subly-mongodb
    environment:
      - MONGO_INITDB_ROOT_USERNAME=subly_admin
      - MONGO_INITDB_ROOT_PASSWORD=change_this_password
      - MONGO_INITDB_DATABASE=subly
    volumes:
      - mongodb_data:/data/db
      - mongodb_config:/data/configdb
    restart: unless-stopped
    healthcheck:
      test: ["CMD", "mongosh", "--eval", "db.adminCommand('ping')"]
      interval: 10s
      timeout: 5s
      retries: 5

  subly:
    image: zlimteck/subly:latest
    container_name: subly-app
    ports:
      - "3000:80"
      - "5071:5071"
    environment:
      - MONGODB_URI=mongodb://subly_admin:change_this_password@mongodb:27017/subly?authSource=admin
      - JWT_SECRET=your_secure_random_string
      - TZ=Europe/Paris
      - FRONTEND_URL=http://localhost:3000
      - BACKEND_URL=http://localhost:5071
    depends_on:
      mongodb:
        condition: service_healthy
    restart: unless-stopped

volumes:
  mongodb_data:
    driver: local
  mongodb_config:
    driver: local

Start the stack:

docker-compose up -d

🔑 Initial Setup

1. Generate an invitation code
docker exec -it subly-app node /app/backend/scripts/generateInvite.js

This will output a code like: SUBLY-X7K9-M4P2-R8V3-N6Q5

2. Create your account
  1. Open http://localhost:3000
  2. Click "Sign Up" / "S'inscrire"
  3. Use the invitation code from step 1
  4. Create your account
3. Promote your account to admin
docker exec -it subly-app node /app/backend/scripts/promoteAdmin.js your-username

Now you can generate more invitation codes from the admin panel!

✨ Features

Core Functionality
  • 📊 Subscription Management: Track monthly and annual subscriptions
  • 🎯 Trial Tracking: Monitor free trials with automatic expiration reminders
  • 💰 Smart Calculations: Automatically calculates monthly costs from annual subscriptions
  • 📈 Data Visualization: Interactive charts showing spending by category
  • 📅 Calendar Integration: iCal subscription for Apple Calendar, Google Calendar, Outlook
Notifications
  • 📧 Email Notifications: Automated email alerts for trial expirations and payments
  • 🔔 Web Push Notifications: Browser push notifications with configurable timing (1, 3, or 7 days)
  • 🌐 Multi-language: English and French support
User Experience
  • 🎨 Multiple Themes: Dark, Light, Dracula, Nord, Solarized
  • 💱 Multi-currency: EUR and USD support
  • 🔄 Cross-device Sync: Preferences synchronized across all your devices
  • 📱 Responsive Design: Works on desktop, tablet, and mobile

🔧 Environment Variables

VariableRequiredDescriptionDefault
MONGODB_URIYesMongoDB connection string-
JWT_SECRETYesSecret for JWT tokens-
TZNoTimezone (IANA format)UTC
PORTNoBackend port5071
FRONTEND_URLNoFrontend URL for CORS and calendar linkslocalhost:3000
BACKEND_URLNoBackend URL for calendar subscriptionslocalhost:5071
RESEND_API_KEYNoResend API key for email notifications-
EMAIL_FROMNoSender email address-
VAPID_PUBLIC_KEYNoVAPID public key for Web Push-
VAPID_PRIVATE_KEYNoVAPID private key for Web Push-
VAPID_SUBJECTNoVAPID subject (mailto or URL)-

🏷️ Tags

  • latest - Latest stable release (currently v1.3.0)
  • 1.3.0 - Calendar integration and preferences sync

📚 Documentation

🔐 Security

  • Passwords hashed with bcrypt
  • JWT token authentication
  • Email verification
  • Admin-only invitation system
  • Rate limiting
  • CORS protection

📜 License

MIT License - Free for personal and commercial use


Built with ❤️ using Node.js, React, MongoDB, and Docker

Tag summary

Content type

Image

Digest

sha256:9f11e8057

Size

59.2 MB

Last updated

2 months ago

docker pull zlimteck/subly