A beautiful, privacy-first Profit & Loss tracker for traders. Track your daily trading performance with an intuitive calendar heatmap interface.
- 🔒 100% Private - All data stays in your browser's localStorage. No servers, no tracking, no data collection.
- 📅 Calendar Heatmap - Visual representation of your daily P&L with intuitive color coding (green for profits, red for losses).
- 📈 Line Chart View - Track your cumulative performance over time with beautiful charts.
- 💰 Multiple Currencies - Support for USD, BTC, and ETH.
- 📊 Smart Statistics - View your performance across different time periods (all time, year, month, week).
- 🗂️ Multiple Calendars - Create separate calendars for different trading strategies or accounts.
- 🌓 Dark/Light Mode - Easy on the eyes, day or night.
- 🔐 Password Protection - Optional password lock to keep your data private.
- 📱 PWA Support - Install as a standalone app on any device.
- 📱 Mobile Friendly - Fully responsive design that works great on all screen sizes.
- Node.js 18+
- npm or pnpm
# Clone the repository
git clone https://github.com/bbzoe/pnl.git
# Navigate to the project directory
cd pnl
# Install dependencies
npm install
# Start the development server
npm run devThe app will be available at http://localhost:5173
npm run buildThe built files will be in the dist directory, ready to be deployed to any static hosting service.
- Enter Daily P&L - Click on any calendar cell and enter your profit or loss for that day.
- View Statistics - Check the widgets at the top to see your performance summary.
- Switch Views - Toggle between Calendar and Chart view using the buttons.
- Create Calendars - Add multiple calendars to track different strategies.
- Customize - Use Settings to toggle widgets and set up password protection.
- Svelte 5 - Modern, reactive UI framework
- TypeScript - Type-safe JavaScript
- Vite - Next generation frontend tooling
- date-fns - Modern JavaScript date utility library
- Vite PWA Plugin - PWA support
src/
├── lib/
│ ├── components/ # Svelte components
│ │ ├── Calendar.svelte
│ │ ├── DayCell.svelte
│ │ ├── LineChart.svelte
│ │ ├── StatsWidgets.svelte
│ │ ├── TopBar.svelte
│ │ └── ...
│ ├── stores.ts # Svelte stores for state management
│ └── types.ts # TypeScript type definitions
├── App.svelte # Main application component
├── app.css # Global styles
└── main.ts # Application entry point
Contributions are welcome! Feel free to:
- Fork the repository
- Create your feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add some amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
This project is licensed under the MIT License - see the LICENSE file for details.
- Inspired by the need for a simple, private way to track trading performance
- Built with love for the trading community
Made with ❤️ by @bbzoe