Project Ledger is a local-first project pipeline for independent consultants, small studios, and service teams. It keeps project stages, deadlines, fees, payments, balances, and notes together in one focused workspace.
The app is white-label by design: a first-run setup screen lets each installation choose its company name, logo, currency, precision, and pipeline stages. Business data stays in a local SQLite file.
- Kanban and sortable list views
- Configurable pipeline stages with rename, add, remove, and reorder controls
- Project health indicators for upcoming and overdue deadlines
- Fee, payment, outstanding balance, and overpayment tracking
- Configurable currency symbol, code, decimal display, and minor-unit storage
- Safe rescaling of saved amounts when the minor-unit factor changes
- First-run onboarding plus an always-available Settings screen
- Company name and uploaded or URL-based logo branding
- Project notes, client contact details, and CSV export
- Light, dark, and system theme modes
- Local SQLite storage with no hosted account required
- Optional fictional demo data using reserved
example.invalidaddresses
Screenshots are intentionally left as placeholders until the public release is styled and populated with final demo data.
| View | Preview |
|---|---|
| Pipeline dashboard | docs/screenshots/dashboard.png — add before publishing the repository |
| White-label settings | docs/screenshots/settings.png — add before publishing the repository |
- Next.js 15 and React 19
- TypeScript
- Prisma ORM
- SQLite
- Zod validation
- Plain CSS with responsive light and dark themes
- Windows, macOS, or Linux
- Node.js 20 or newer
- npm (included with Node.js)
git clone <your-repository-url>
cd ConsultTrack
cp .env.example .env
npm install
npm run setup
npm run devOpen http://localhost:3000. The first-run screen will ask for your company, logo, currency, and pipeline.
On Windows, you can instead double-click Start Project Ledger.bat. The launcher uses its own folder automatically, creates .env, installs missing dependencies, prepares a fresh database, and opens the app in your default browser. Node.js is still required for this launcher.
After setup, run:
npm run db:seed:demoThe demo records use labels such as “Sample Client A” and email addresses under the reserved example.invalid domain. The command will not add demo projects to a database that already contains projects.
| Command | Purpose |
|---|---|
npm run dev |
Start the development server |
npm run build |
Create a production build |
npm start |
Run the production build |
npm run setup |
Generate Prisma, create the SQLite database, and seed default stages |
npm run db:seed:demo |
Add fictional sample projects to an empty project database |
npm run typecheck |
Check the TypeScript code |
npm run db:studio |
Open Prisma’s local database browser |
npm run electron:dev |
Start the app in a standalone Electron desktop window |
npm run electron:build |
Build Next.js and package into a .exe Windows installer |
The default database is prisma/dev.db. It is excluded from Git because it can contain real client information. Back up that file while the app is stopped if you need to move an installation.
Uploaded logos are stored as data URLs inside the same local database. Remote logo URLs are also supported.
Changing the currency’s minor-unit factor rescales existing stored fees and payments to preserve their major-unit values. For example, USD normally uses 100 minor units and 2 display decimal places; a zero-decimal currency normally uses 1 and 0.
Copy .env.example to .env:
DATABASE_URL="file:./dev.db"No API keys or hosted services are required.
The app includes an Electron wrapper that allows it to run as a standalone Windows application.
To build the Windows .exe installer:
- Ensure dependencies are installed (
npm install). - Run
npm run electron:build.
This command builds the Next.js app, packages Prisma engines, bundles an initial SQLite database, and creates an NSIS Windows installer in the dist/ directory.
When a user runs the installer, the application is installed like a native program and places a shortcut in the Start Menu and Desktop. On its first launch, it copies the initial database to the user's writable application data folder (%APPDATA%/project-ledger). This ensures the app works perfectly without requiring administrative privileges to modify files in Program Files.
Project Ledger is designed for a trusted local machine. It does not include authentication or multi-user access controls. Do not expose the development or production server directly to the public internet without adding authentication, authorization, HTTPS, and an appropriate deployment database.
Issues and pull requests are welcome. Please run npm run typecheck and npm run build before submitting a change. Never commit .env or files under prisma/*.db.