Renewly is a comprehensive subscription management application that helps users track, manage, and stay on top of their recurring subscriptions. Built as a full-stack monorepo using modern technologies, Renewly provides a seamless experience across mobile devices with real-time notifications and insightful analytics.
- π Subscription Tracking: Monitor all your subscriptions in one place
- π° Cost Analytics: Get insights into your monthly and yearly subscription expenses
- π Smart Notifications: Receive push notifications before subscription renewals
- π± Native Mobile Experience: Built with React Native and Expo for iOS and Android
- π Secure Authentication: Powered by Clerk for seamless user authentication
- β‘ Real-time Updates: Instant synchronization across devices
- π¨ Beautiful UI: Modern, intuitive interface with smooth animations
- π Dashboard: Visual representation of subscription data and upcoming payments
This project is organized as a Turborepo monorepo with the following structure:
-
apps/backend: NestJS REST API server- TypeScript-based backend with Swagger documentation
- PostgreSQL database with TypeORM
- Redis for caching and queue management
- BullMQ for background job processing
- Clerk integration for authentication
- Push notification service with Expo
-
apps/mobile: React Native mobile application- Built with Expo and Expo Router
- Native iOS and Android support
- TanStack Query for data fetching and caching
- React Hook Form with Zod validation
- Clerk authentication integration
- Push notifications with Expo Notifications
- Framework: NestJS
- Database: PostgreSQL with TypeORM
- Cache & Queue: Redis with BullMQ
- Authentication: Clerk
- API Documentation: Swagger with Scalar
- Notifications: Expo Push Notifications
- Framework: React Native with Expo
- Navigation: Expo Router
- State Management: TanStack Query
- Forms: React Hook Form + Zod
- Authentication: Clerk Expo
- UI: Custom components with Lucide React Native
- Build System: Turborepo
- Package Manager: Yarn Workspaces
- Language: TypeScript
- Code Quality: ESLint + Prettier
Before you begin, ensure you have the following installed:
- Node.js: >= 18.x
- Yarn: 1.22.22 or later
- Docker: For running PostgreSQL and Redis (optional but recommended)
- iOS Simulator (macOS): For iOS development
- Android Studio: For Android development
- Expo CLI: For mobile development
- Clerk Account: For authentication setup
git clone https://github.com/patelajay745/Renewly.git
cd Renewlyyarn installCreate a .env file in apps/backend/:
# Database
DATABASE_HOST=localhost
DATABASE_PORT=5432
DATABASE_USER=
DATABASE_PASSWORD=
DATABASE_NAME=
# Redis
REDIS_HOST=localhost
REDIS_PORT=6379
# Clerk Authentication
CLERK_SECRET_KEY=your_clerk_secret_key
CLERK_PUBLISHABLE_KEY=your_clerk_publishable_key
# Server
PORT=3000
NODE_ENV=development
# Expo Push Notifications
EXPO_ACCESS_TOKEN=your_expo_access_tokenCreate a .env file in apps/mobile/:
EXPO_PUBLIC_API_URL=http://localhost:3000/
EXPO_PUBLIC_CLERK_PUBLISHABLE_KEY=your_clerk_publishable_keyUsing Docker Compose (recommended):
cd apps/backend
docker-compose up -dThis will start:
- PostgreSQL on port 5432
- Redis on port 6379
# From the root directory
yarn dev# From the root directory
yarn dev --filter=backend
# Or from apps/backend
cd apps/backend
yarn devThe backend will be available at:
- API:
http://localhost:3000/api/v1 - Swagger Docs:
http://localhost:3000/reference
# From the root directory
yarn dev --filter=mobile
# Or from apps/mobile
cd apps/mobile
yarn devThen:
- Press
ifor iOS simulator - Press
afor Android emulator - Scan QR code with Expo Go app for physical device
yarn build# Backend
yarn build --filter=backend
# Mobile
yarn build --filter=mobilecd apps/mobile
eas build --platform ioscd apps/mobile
eas build --platform androidyarn testcd apps/backend
yarn test # Run unit tests
yarn test:watch # Run tests in watch mode
yarn test:cov # Run tests with coverage
yarn test:e2e # Run end-to-end tests# Lint all apps and packages
yarn lint
# Auto-fix issues
yarn lint --fixyarn check-typesyarn format- Install Expo Go app on your device
- Start the development server:
yarn dev - Scan the QR code with your camera (iOS) or Expo Go app (Android)
cd apps/mobile
npx expo prebuild
yarn ios # or yarn androidcd apps/backend
docker-compose up -dcd apps/backend
docker-compose downdocker-compose logs -fdocker-compose down -v
docker-compose up -dOnce the backend is running, access the interactive API documentation:
- Scalar API Reference:
http://localhost:3000/reference
The API follows RESTful conventions with the base path /api/v1.
POST /api/v1/auth/login- User authenticationGET /api/v1/subscriptions- Get all subscriptionsPOST /api/v1/subscriptions- Create a subscriptionPUT /api/v1/subscriptions/:id- Update a subscriptionDELETE /api/v1/subscriptions/:id- Delete a subscriptionGET /api/v1/dashboard- Get dashboard analytics
Contributions are welcome! Please follow these steps:
- Fork the repository
- Create a feature branch:
git checkout -b feature/amazing-feature - Commit your changes:
git commit -m 'Add amazing feature' - Push to the branch:
git push origin feature/amazing-feature - Open a Pull Request
- Follow the existing code style
- Run
yarn lintandyarn formatbefore committing - Write meaningful commit messages
- Add tests for new features
This project is licensed under the UNLICENSED License - see the backend package.json for details.
Ajay Patel - @patelajay745