Subscribely is a creative project built to demonstrate a modern subscription management platform. This project has been in development for 2 months and serves as a showcase for implementing a comprehensive subscription system with role-based access controls.
Note: This is not a real-world application solving an actual business problem, but rather a creative project demonstrating various technical implementations and solutions.
sign-up.mp4
![]() |
![]() |
|---|---|
![]() |
![]() |
- User registration and login system
- Role-based access control (Admin and User roles)
- Secure authentication with JWT
- Default balance in USD for new accounts
- Subscription marketplace ("Subscription Store")
- Active subscription management (up to 3 active subscriptions)
- Subscription cancellation
- Profile settings with account deletion option
- Create, edit, and delete subscription packages
- View all user subscriptions across the platform
- Ability to revoke user subscriptions with automatic email notification
- Modify user account balances
- Configurable subscription packages (name, description, price, status)
- Customizable subscription durations (1 day, 14 days, 1 month, etc.)
- Automatic balance deduction on purchase
- Email notifications for subscription events:
- Purchase confirmation
- Subscription cancellation
- Admin-initiated subscription revocation
- Framework: Next.js 15 with TypeScript
- Styling: Tailwind CSS
- Database: MongoDB with Mongoose
- Authentication: Custom JWT implementation
- Form Handling: React Hook Form with Zod validation
- UI Components: Shadcn UI
- Email: Nodemailer
- Monitoring: Sentry
- Security: Arcjet
- Deployment: Vercel
- Containerization: Docker and Docker Compose
The project follows a standard Next.js App Router structure with server actions and API routes.
/
βββ .github/
βββ .husky/
βββ .next/
βββ app/
βββ components/
βββ config/
βββ lib/
βββ node_modules/
βββ public/
βββ types/
βββ .env.local
βββ .env.sentry-build-plugin
βββ .eslintrc.json
βββ .gitignore
βββ .prettierrc.json
βββ components.json
βββ docker-compose.yml
βββ Dockerfile
βββ eslint.config.mjs
βββ instrumentation-client.ts
βββ instrumentation.ts
βββ middleware.ts
βββ next-env.d.ts
βββ next.config.js
βββ package-lock.json
βββ package.json
βββ postcss.config.mjs
βββ README.md
βββ sentry.edge.config.ts
βββ sentry.server.config.ts
βββ tsconfig.json
- Strongly typed with TypeScript
- Conventional commits for clear version history
- Git workflow configured with Husky and lint-staged
- Comprehensive ESLint and Prettier configuration
- Well-documented codebase with JSDoc comments
# Clone the repository
git clone https://github.com/dan0dev/Subscribely.Subscription.Manager.git
# Install dependencies
npm install
# Start the development server
npm run devThe application can also be run using Docker and Docker Compose, which sets up both the application and MongoDB database in containers with automatic file watching for development.
- Docker (20.10.0 or higher)
- Docker Compose (v2.0.0 or higher)
# Clone the repository
git clone https://github.com/dan0dev/Subscribely.Subscription.Manager.git
# Navigate to the project directory
cd Subscribely.Subscription.Manager
# Create .env file with your environment variables (see Environment Variables section)
# Then start the application with Docker Compose
docker compose up --build
# For development with live file watching
docker compose upThe application will be available at http://localhost:3000. Any changes made to the source files will be automatically synchronized to the container through the volume mounts and hot-reloading will be triggered by Next.js.
Modify the .env.local file with your own variables data with the following:
MONGODB_URI=
JWT_SECRET=
JWT_EXPIRES_IN=
GMAIL_USER=
GMAIL_PASSWORD=
ARCJET_KEY=
SENTRY_AUTH_TOKEN=
The application is deployed on Vercel.
- Creating test role as account
- Implement automatic subscription expiration (currently subscriptions don't expire automatically)
- Add subscription renewal options
- Actual working account deletion
- Refund option
Subscribely is an open-source project, and we welcome contributions of all kinds from the community! If you're interested in helping out, have ideas, or found a bug, please read our Contributing Guidelines (CONTRIBUTING.md) for details.
We use GitHub Issues for tracking bugs and feature requests.
This project is licensed under the MIT License - see the LICENSE file for details.




