renewalert

byshailesh Sharma

Build a simple multi-tenant SaaS web app called RenewAlert. Purpose: RenewAlert helps small businesses track expiry dates, renewal dates, and important deadlines. Users should enter only reminder information. Do not allow or implement document uploads, file storage, OCR, or document scanning. Target users: Indian small businesses such as clinics, schools, factories, transport companies, contractors, shops, and offices. Core concept: Each business has a separate workspace. A workspace can have multiple users. Every reminder must belong to exactly one workspace. Users from one workspace must never see or edit data from another workspace. Use this technology: - React or Next.js - Tailwind CSS - Firebase Authentication - Cloud Firestore - Firebase Cloud Functions for scheduled reminders - Firebase Hosting or Vercel - Email notification provider such as Resend, SendGrid, or Brevo - Keep the code clean and easy to understand Authentication: - Email and password signup - Login and logout - Forgot password - Create a workspace during onboarding - Invite team members by email - Workspace roles: - Owner: full access - Admin: manage reminders and members - Viewer: view reminders only Important security requirement: Implement proper multi-tenant data isolation using Firestore Security Rules. Every workspace member can access only data belonging to their workspace. Never use open rules that allow all authenticated users to read or write all data. Firestore structure: users/{userId} workspaces/{workspaceId} workspaces/{workspaceId}/members/{userId} workspaces/{workspaceId}/reminders/{reminderId} workspaces/{workspaceId}/activity/{activityId} Workspace fields: - name - ownerId - createdAt - plan - status Member fields: - userId - email - displayName - role - joinedAt Reminder fields: - title - category - relatedTo - relatedName - expiryDate - responsibleUserId - reminderDays - renewalLink - notes - status - createdBy - createdAt - updatedAt - lastReminderSentAt Reminder categories: - Certificate - License - Insurance - Contract - Subscription - Vehicle - Employee - Equipment - Domain - Rent - Maintenance - Other Main screens: 1. Landing page - Product name: RenewAlert - Headline: “Never miss an important renewal.” - Subtitle: “Track licenses, insurance, certificates, contracts, and deadlines in one simple dashboard.” - Explain that no document upload is required - Buttons: Start free and Login - Pricing preview 2. Signup and login - Email and password authentication - Clear validation messages - Friendly empty and error states 3. Onboarding - Ask for business name - Create the first workspace - Show a short explanation: “Add an expiry date, choose when to be reminded, and assign a responsible person.” 4. Dashboard Show summary cards: - Total active reminders - Overdue - Due within 7 days - Due within 30 days Show reminder sections: - Overdue - Due within 7 days - Due within 30 days - Later Each reminder row should show: - Title - Category - Related person, vehicle, or asset - Expiry date - Days remaining - Responsible person - Status - Actions Add: - Search - Category filter - Status filter - Date sorting - Add reminder button 5. Add reminder form Fields: - What needs attention? Required text field - Category Required dropdown - Related person, vehicle, or asset Optional text field - Expiry or renewal date Required date field - Responsible person Required dropdown - Remind before Required multi-select with: - 90 days - 60 days - 30 days - 14 days - 7 days - 1 day - Renewal link Optional URL field - Notes Optional textarea Do not include a file upload field. 6. Reminder details - Display all reminder information - Show status - Show days remaining - Show reminder schedule - Show activity history - Buttons: - Edit - Mark as renewed - Mark as completed - Archive - Delete 7. Mark as renewed When the user clicks “Mark as renewed”: - Ask for the new expiry date - Update the reminder with the new date - Reset the reminder status to active - Save the previous date in activity history - Show a success message 8. Team members - List workspace members - Show name, email, and role - Owner and Admin can invite members - Owner can change roles - Owner can remove members - Viewer cannot edit reminders 9. Settings - Workspace name - User profile - Email notification preferences - Default reminder schedule - Subscription plan - Logout Reminder statuses: - Active - Due soon - Overdue - Completed - Archived Status logic: - Overdue if expiryDate is before today - Due soon if expiryDate is within the configured reminder period - Active if it is later - Never calculate status only in the frontend; use consistent date logic in backend and frontend - Handle dates using one consistent timezone, preferably Asia/Kolkata for the initial India-first version Email reminder system: Create a scheduled Firebase Cloud Function that runs once every day. The function should: - Find active reminders with upcoming expiry dates - Check each reminder’s reminderDays array - Send an email on the correct reminder date - Send the email to the responsible user - Send a copy to the workspace owner - Avoid duplicate emails - Record the last reminder sent - Log failures - Never send reminders for archived or completed items Email format: Subject: “Reminder: [title] expires in [number] days” Body: - Reminder title - Category - Related person, vehicle, or asset - Expiry date - Days remaining - Responsible person - Renewal link, if available - Notes - Link to open RenewAlert Create a clear notification log so administrators can see whether a reminder email was sent or failed. Free plan: - 10 active reminders - 1 workspace owner - Email reminders - Basic dashboard Starter plan: - 100 active reminders - 5 team members - Email reminders - Activity history Business plan: - 500 active reminders - 15 team members - Email reminders - Advanced filtering For now, create the billing screen and plan limits, but keep payment integration modular. Add Razorpay Subscriptions later. UI design: - Clean, modern, simple business dashboard - Responsive design for desktop and mobile - Use a white background with blue and indigo accents - Use red for overdue, orange for due soon, and green for active - Use cards, tables, badges, and clear buttons - Make the dashboard easy for non-technical business owners - Include loading states, empty states, confirmation dialogs, and error messages - Make it installable as a Progressive Web App if practical Important scope restrictions: - No document uploads - No file storage - No OCR - No AI document scanning - No WhatsApp - No SMS - No complex compliance rules - No automatic government data - No native mobile app - No public API - No unnecessary enterprise features Demo data: Create sample data for a demo workspace called “ABC Electricals”: 1. Vehicle Insurance - KA01AB1234 2. Fire Safety Certificate 3. Employee Training Certificate 4. Domain Renewal 5. Equipment Maintenance Developer requirements: - Use reusable components - Use form validation - Use proper TypeScript types if TypeScript is used - Separate UI, database, authentication, email, and billing logic - Add comments only where useful - Provide Firestore indexes if required - Provide secure Firestore Security Rules - Provide Firebase Cloud Function code for scheduled reminders - Add a README with setup instructions - Include environment variable examples - Make the app functional, not just a visual mockup

Landing page
Landing page

Comments (0)

No comments yet. Be the first!

Project Tasks

No tasks generated yet.

Tasks will appear here as requirements are defined.

Landing page design preview
Landing page: View landing page
Signup and login: Log in
Dashboard: 1. View reminders
Add reminder form: 2. Save reminder
Reminder details: Edit reminder
Reminder details: Delete reminder
Team members: Invite members
Team members: Change roles
Settings: Update settings
Settings: Logout
Landing page design preview
Landing page: View landing page
Signup and login: Log in
Dashboard: 1. View reminders
Add reminder form: 2. Save reminder
Reminder details: Edit reminder
Reminder details: Delete reminder
Team members: Invite members
Team members: Change roles
Settings: Update settings
Settings: Logout