Skip to content

Fransaya/personalfinance

💰 Minimalist Wealth

Take control of your finances with a beautiful, minimalist approach

License Next.js TypeScript Tailwind CSS

FeaturesDemoQuick StartTech StackContributing


✨ Features

🎤 Voice Commands - Add transactions by simply speaking. Say "Gasté 5000 pesos en el super" and we'll do the rest.

📊 Visual Reports - Beautiful charts and graphs to understand your spending patterns and trends.

🐷 Savings Goals - Set and track savings goals with progress visualization and contribution tracking.

💱 Multi-Currency - Support for USD, ARS, and EUR with automatic exchange rate conversion using Dolar API.

🔐 Secure - Your data is encrypted and protected with JWT authentication.

📱 Mobile Ready - Fully responsive design that works on any device.


🎬 Demo

🚧 Demo coming soon!


🚀 Quick Start

Prerequisites

  • Node.js 18.x or higher
  • pnpm 8.x or higher
  • PostgreSQL database (or Supabase account)

Installation

# Clone the repository
git clone https://github.com/Fransaya/personalfinance.git
cd personalfinance

# Install dependencies
pnpm install

# Set up environment variables
cp .env.example .env.local
# Edit .env.local with your configuration

# Run database migrations
# (See database/schema-sql-personalfinance-app.txt for schema)

# Start the development server
pnpm dev

Open http://localhost:3000 in your browser.

Environment Variables

Variable Description Required
DATABASE_URL PostgreSQL connection string
JWT_SECRET Secret key for JWT tokens
JWT_EXPIRES_IN Token expiration (e.g., 7d)
EXCHANGE_RATE_API_URL Exchange rate API URL
OPENAI_API_KEY OpenAI API key for voice processing
NEXT_PUBLIC_APP_URL Public app URL

🛠 Tech Stack

Category Technology
Framework Next.js 16 (App Router)
Language TypeScript 5
Styling Tailwind CSS 4
UI Components Radix UI
Charts Recharts
Database PostgreSQL
ORM node-postgres (pg)
Authentication JWT with bcryptjs
Validation Zod
Package Manager pnpm

📁 Project Structure

personalfinance/
├── src/
│   ├── app/                    # Next.js App Router
│   │   ├── (auth)/            # Authentication pages
│   │   ├── (dashboard)/       # Protected dashboard pages
│   │   └── api/               # API routes
│   ├── components/            # Reusable UI components
│   ├── hooks/                 # Custom React hooks
│   ├── lib/                   # Utilities and configurations
│   └── types/                 # TypeScript type definitions
├── database/                  # Database schema and migrations
├── public/                    # Static assets
└── ...config files

🤝 Contributing

We love contributions! Please read our Contributing Guide to get started.

  1. Fork the repository
  2. Create your feature branch (git checkout -b feature/amazing-feature)
  3. Commit your changes (git commit -m 'feat: add amazing feature')
  4. Push to the branch (git push origin feature/amazing-feature)
  5. Open a Pull Request

Please make sure to read our Code of Conduct.


📄 License

This project is licensed under the MIT License - see the LICENSE file for details.


🙏 Acknowledgments


Made with ❤️ by the Minimalist Wealth community

⭐ Star this repo if you find it useful!