📋 Project Overview
ClientKeep is a full-stack CRM web application built for freelancers and small businesses
who are tired of managing clients through spreadsheets, WhatsApp reminders, and scattered
notes. It consolidates everything into one clean, fast dashboard.
Built from scratch with Flask and deployed on Render with a Neon PostgreSQL database.
The project covers the full SaaS lifecycle: authentication, client and invoice management,
payment tracking, PDF generation, CSV exports, a public client portal, and a real-time
activity log.
✅ The Solution
ClientKeep provides a single clean workspace where freelancers manage their entire business:
Add client → Create invoice → Track status (paid / pending / overdue)
Download PDF → Share portal link with client → Client confirms payment ✓
Set reminder → Check dashboard → Export CSV → Done ✓
One URL. No spreadsheets. No chaos.
🏗️ Architecture
clientkeep/
app.py ← Flask app factory
config.py ← Config + Neon/Render URL fix
models.py ← User, Client, Invoice, Payment, Reminder, ActivityLog
extensions.py ← db, login_manager, migrate
routes/
auth.py ← Register / Login / Logout
dashboard.py ← Stats + chart + activity
clients.py ← Client CRUD
invoices.py ← Invoice CRUD + PDF + status
reminders.py ← Reminder CRUD
settings.py ← Profile + password + currency
portal.py ← Public client portal
export.py ← CSV export
templates/ ← Jinja2 HTML templates
migrations/ ← Flask-Migrate / Alembic
🔁 User Flow
// FREELANCER
- Register account (no email confirmation)
- Add clients with contact details
- Create invoices with auto numbers
- Track payment status
- Download PDF or share portal link
- Set reminders for follow-ups
// CLIENT
- Receives a portal link via message
- Opens public invoice page
- Reviews invoice details and amount
- Clicks "Confirm payment"
- Invoice marked paid automatically