A modern, full-stack web application to manage company software subscriptions, tracking their renewal dates, monthly costs, and automated statuses.
Built with Next.js 14+ (App Router), TypeScript, Prisma, PostgreSQL, and Tailwind CSS.
- Dynamic Statuses: Automatically calculates
Active,Expiring Soon(≤ 7 days), andExpiredbased on the renewal date. - Manual Overrides: Quickly cancel or reactivate a subscription.
- Summary Metrics: View total spend, active counts, and expired alerts at a glance.
- Search & Filter: Find tools by name, department, or status instantly.
- Export: Download your subscription list to a CSV file.
- Sleek UI: Fully responsive with dark mode support.
- Node.js 18+
- npm / pnpm / yarn
To run this project, you need a PostgreSQL database. We recommend Neon.tech for a free, serverless-friendly database.
- Sign up / Log in to Neon Console.
- Create a new project.
- Once created, copy the connection string from your dashboard. It looks like:
postgresql://[user]:[password]@[host]/[dbname]?sslmode=require
- Rename
.env.exampleto.env. - Open
.envand replace the placeholderDATABASE_URLwith your actual Neon connection string.DATABASE_URL="postgresql://your_user:your_password@your_host.neon.tech/your_db_name?sslmode=require"
npm installPush the Prisma schema to your database and generate the Prisma Client:
npx prisma migrate dev --name initNote: If you run into issues, you can also use npx prisma db push followed by npx prisma generate.
Populate the database with sample data (around 10 subscriptions varying across Active, Expiring Soon, Expired, and Cancelled):
npm run prisma:seed
# Or: npx prisma db seednpm run devOpen http://localhost:3000 in your browser to see the dashboard.
app/api/subscriptions/- REST API endpoints.app/components/- Reusable UI components (Table, Form, Cards, Badges).app/page.tsx- Main Dashboard UI and client-side logic.lib/statusHelper.ts- Logic for computing subscription status dynamically.prisma/schema.prisma- Database schema definition.prisma/seed.ts- Seed script for demo data.