A self-hosted web application built with Flask that brings together every tool a freelancer needs in one place — from deadline prediction to invoicing, expense tracking, and profitability reports.
Created by srijan-xi · For the community, by the community.
- Predicts whether a task can be completed before its deadline based on estimated hours, daily workload, and historical speed.
- Stores prediction history with the ability to review or clear past entries.
- Browse and preview ready-to-use freelance proposal templates.
- Add, edit, and manage clients with contact info and currency preferences.
- Dedicated CRM view per client showing linked invoices, scoped projects, interactions, and pinned notes.
- Store rich notes per client with title/content.
- Pin important notes and search them globally.
- Create, view, and manage invoices.
- Generate and download invoices as PDF.
- Overdue invoice detection with days overdue and reminder drafts.
- Multi-currency support with manual exchange rate and base-currency totals.
- Create itemized quotes with tax and expiry date.
- Track quote status (
draft,sent,accepted,rejected,expired). - Convert accepted quotes into invoices in one click.
- Create and manage service contracts/NDAs/fixed-price/retainer agreements.
- Track status (
draft,sent,signed). - Print and export contract PDFs.
- Log billable work hours per client/project.
- Edit or delete existing entries.
- Start/stop live sessions with single active-session guard.
- Optional Pomodoro mode (25-minute countdown + browser notification).
- Save stopped sessions directly to Work Hours.
- Export timer sessions to CSV.
- Month-view calendar showing free/light/busy/blocked days.
- Aggregates work hours + scoped project date windows.
- Add manual blocks (vacation/meeting/holiday/blocked).
- Filter by status and navigate months without full page reload.
- Record and track project expenses to keep costs visible.
- Includes category-level breakdown and CSV export support.
- Estimate tax liability based on earnings and a configurable tax rate.
- Interactive analytics dashboard with local Chart.js.
- Income/profit trends, top clients, expense categories, and weekly hours.
- Search across clients, invoices, quotes, contracts, notes, expenses, work hours, and SDLC data.
- Export all app data as ZIP and restore at any time.
- Includes timer sessions, calendar blocks, notes, quotes, contracts, and SDLC data.
- Set your name, business name, default hourly rate, working hours per day, and preferred currency.
- Configure late fee rate used in overdue invoice calculations.
| Layer | Technology |
|---|---|
| Backend | Python 3 · Flask 3 |
| Frontend | Jinja2 · Vanilla JS · CSS custom properties |
| xhtml2pdf | |
| Storage | JSON flat files (data/) |
| Testing | pytest |
git clone https://github.com/Srijan-XI/FLTK.git
cd FLTKpython -m venv .venv
# Windows
.venv\Scripts\activate
# macOS / Linux
source .venv/bin/activatepip install -r requirements.txtpython app.pyOr use the provided launcher scripts:
# Windows
app.bat
# macOS / Linux (make executable first)
chmod +x app.sh
./app.shOpen your browser at http://127.0.0.1:5000
You can set a custom secret key via an environment variable (optional):
# .env
SECRET_KEY=your-secret-key-hereAll other settings (name, currency, hourly rate, etc.) are configurable from the Settings page inside the app.
pytest tests/For faster targeted checks while developing:
pytest tests/test_timer.py tests/test_calendar.pyFor quotes/contracts + finance checks:
pytest tests/test_quotes.py tests/test_contracts.py tests/test_overdue.py tests/test_multicurrency.pyWe welcome contributions! Please see CONTRIBUTING.md for guidelines on how to get started and CONTRIBUTORS.md for a list of everyone who has helped build VishKron.
GNU AGPL-3.0 — see LICENSE for full terms.