Skip to main content

Welcome to FinanzApp

FinanzApp is an intelligent financial management platform that helps you manage savings, investments, and cryptocurrencies with advanced security and detailed analytics. This guide will walk you through creating your account and setting up your first financial goal.
FinanzApp is completely free to use and features multi-language support (Spanish, English, and French).

Prerequisites

Before you begin, ensure you have:
  • A valid email address
  • A modern web browser (Chrome, Firefox, Safari, or Edge)
  • Internet connection
1

Create Your Account

Navigate to the registration page and fill out the form with your details.

Registration Form Fields

Full Name: Your complete name for account personalizationEmail: A valid email address for account verification and notificationsPassword: Must meet security requirements:
  • At least 8 characters
  • One uppercase letter
  • One number
Confirm Password: Re-enter your password to ensure accuracy

Security and Privacy

Registration includes Google reCAPTCHA v3 protection to prevent automated signups and ensure platform security.
You must accept the terms and conditions to proceed. Optionally, you can subscribe to email notifications for financial alerts and updates.

Code Reference

The registration form is implemented in app/register.php:122-160 with client-side validation:
<form id="registerForm" action="#" method="post">
  <div class="form-group">
    <label for="nombre"><?php echo $translations['auth']['register']['fullname']; ?></label>
    <input type="text" id="nombre" name="nombre" 
           placeholder="<?php echo $translations['auth']['register']['fullname_placeholder']; ?>" 
           required>
  </div>
  <div class="form-group">
    <label for="email"><?php echo $translations['auth']['register']['email']; ?></label>
    <input type="email" id="email" name="email" 
           placeholder="<?php echo $translations['auth']['register']['email_placeholder']; ?>" 
           required>
  </div>
  <div class="form-group">
    <label for="password"><?php echo $translations['auth']['register']['password']; ?></label>
    <input type="password" id="password" name="password" required>
  </div>
  <div class="form-group">
    <label for="confirm-password"><?php echo $translations['auth']['register']['confirmPassword']; ?></label>
    <input type="password" id="confirm-password" name="confirm-password" required>
  </div>
</form>

Validation

The form uses real-time validation defined in js/validationUtils.js:18-28:
// Email validation
function validateEmail(email) {
    const re = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
    return re.test(email);
}

// Password validation - at least 8 characters, one uppercase, one number
function validatePassword(password) {
    const re = /^(?=.*[A-Z])(?=.*\d).{8,}$/;
    return re.test(password);
}
When you submit the form, the data is sent to the backend via AJAX (js/registerValidation.js:67-88):
const xhr = new XMLHttpRequest();
const formData = new FormData(registerForm);

xhr.open('POST', 'https://pro.finanzapp.es/app/auth/sendRegister.php', true);
xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');

xhr.onreadystatechange = function () {
    if (xhr.readyState === 4 && xhr.status === 200) {
        const data = JSON.parse(xhr.responseText);
        
        if (data.success) {
            notyf.success("Registro exitoso");
        } else {
            notyf.error("Registro fallido");
        }
    }
};

xhr.send(formData);

Alternative: Sign Up with Google

FinanzApp supports OAuth authentication via Google Sign-In for faster registration:
<div id="g_id_onload"
    data-client_id="665269631824-25f2bkbj039grhjavj17pkqjsjdqj0jr.apps.googleusercontent.com"
    data-context="signup"
    data-ux_mode="redirect"
    data-login_uri="https://pro.finanzapp.es/app/auth/google-callback.php"
    data-auto_prompt="false">
</div>
2

Log Into Your Account

After registration, navigate to the login page to access your dashboard.

Login Process

Enter your credentials on the login form at app/login.php:121-141:
<form id="loginForm" action="#" method="post">
  <div class="form-group">
    <label for="email"><?= $translations['auth']['login']['email_label'] ?></label>
    <input type="email" id="email" name="email" 
           placeholder="<?= $translations['auth']['login']['email_placeholder'] ?>" 
           required>
  </div>
  <div class="form-group">
    <label for="password"><?= $translations['auth']['login']['password_label'] ?></label>
    <input type="password" id="password" name="password" 
           placeholder="<?= $translations['auth']['login']['password_placeholder'] ?>" 
           required>
  </div>
  <div class="form-group">
    <!-- reCAPTCHA -->
    <div class="g-recaptcha" data-sitekey="6LdpGAErAAAAABtf_pOcsJbRBnytt5t8_WahFXAY"></div>
    
    <button type="submit" class="btn btn-primary btn-large">
      <?= $translations['auth']['login']['submit'] ?>
    </button>
  </div>
</form>

Security Features

Login attempts are protected by Google reCAPTCHA v3 and brute force attack prevention mechanisms. Multiple failed attempts may temporarily lock your account.
The login validation is handled by js/loginValidation.js:54-76:
if (isValid) {
    const xhr = new XMLHttpRequest();
    const formData = new FormData(loginForm);
    
    xhr.open('POST', 'https://pro.finanzapp.es/app/auth/sendLogin.php', true);
    xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');
    
    xhr.onreadystatechange = function () {
        if (xhr.readyState === 4 && xhr.status === 200) {
            const data = JSON.parse(xhr.responseText);
            
            if (data.success) {
                notyf.success("Inicio de sesión exitoso");
                console.log("Usuario logueado:", data.user);
            } else {
                notyf.error("Email o contraseña incorrectas");
            }
        }
    };
    
    xhr.send(formData);
}

Session Management

After successful authentication, FinanzApp creates a PHP session to maintain your logged-in state. The session is managed through config/config.php:12-14:
// Start session if not already started
if (session_status() === PHP_SESSION_NONE) {
    session_start();
}

Forgot Password?

If you’ve forgotten your password, use the password reset link on the login page to receive recovery instructions via email.
3

Configure Your Profile

Once logged in, personalize your account settings.

User Configuration

Access your user configuration page (app/userConfig.php) to customize:Avatar Selection: Choose from 10 pre-designed avatars or use the default
<div class="avatar-options">
  <?php for ($i = 1; $i <= 10; $i++): 
    $num = str_pad($i, 2, '0', STR_PAD_LEFT);
    $url = "https://carefully-happy-quetzal.global.ssl.fastly.net/assets/avatars/{$num}.jpeg"; 
  ?>
    <label>
      <input type="radio" name="avatar" value="<?= $url ?>" />
      <img src="<?= $url ?>" alt="Avatar <?= $num ?>" />
    </label>
  <?php endfor; ?>
</div>
Display Name: Update your full name displayed across the platformPassword Change: Set a new password with confirmationNotification Preferences: Enable or disable email notifications for financial alerts and goal achievements
All profile changes are validated on both client and server side to ensure data integrity and security.
4

Set Your First Financial Goal

Create your first savings goal to start tracking your financial progress.

Financial Goals Feature

FinanzApp allows you to set and track multiple financial goals with:
  • Goal Name: What you’re saving for (e.g., “Emergency Fund”, “Vacation”, “New Car”)
  • Target Amount: Your financial target
  • Current Progress: How much you’ve saved so far
  • Deadline: Target date to achieve your goal

Goal Tracking

The platform provides:

Visual Progress

Interactive charts powered by Chart.js show your progress toward each goal with percentage completion.

Smart Alerts

Receive email notifications when you reach milestone percentages or achieve your goals.

Historical Analysis

Track your saving patterns over time with detailed historical data.

Multiple Goals

Manage unlimited financial goals simultaneously with individual progress tracking.

Email Notifications

Goal achievements trigger automated email notifications via EmailJS integration (app/contact.php and js/email.js):
emailjs.send(serviceID, templateID, {
    to_name: userName,
    goal_name: goalName,
    target_amount: targetAmount,
    achievement_date: new Date().toLocaleDateString()
});
Make sure you’ve enabled notification preferences in your user configuration to receive goal achievement alerts.
5

Explore the Dashboard

Your personalized dashboard provides a complete overview of your financial health.

Dashboard Features

Interactive Charts: Visualize income vs expenses with customizable Chart.js graphsSavings Overview: See all your goals and their progress at a glanceInvestment Tracking: Monitor your investment portfolio with:
  • Real-time ROI calculations
  • Gains and losses tracking
  • Benchmark comparisons
Cryptocurrency Integration: Track real-time cryptocurrency prices with:
  • Live market data
  • Integrated conversion calculator
  • Portfolio value tracking
Transaction Summary: Automatic categorization and summarization of all financial movementsData Export: Export your financial data in multiple formats:
  • CSV for spreadsheet analysis
  • PDF for reports
  • Excel for advanced financial modeling

Responsive Design

The dashboard is fully responsive and optimized for:
  • Desktop computers
  • Tablets
  • Mobile phones
All dashboard widgets are configurable. Customize your view to focus on the metrics that matter most to you.

Next Steps

Now that you’re set up with FinanzApp, explore these features:

Investment Tracking

Add your investment portfolio and track returns over time

Savings Goals

Set and track your savings goals with progress visualization

Crypto Portfolio

Monitor your cryptocurrency investments with real-time data

Export & Reports

Generate financial reports and export data for analysis

Language Support

FinanzApp supports three languages through the configuration system (config/config.php:17-31):
// Detect language (from URL, session, or default)
$lang = $_GET['lang'] ?? $_SESSION['lang'] ?? 'es';

// Save language in session
$_SESSION['lang'] = $lang;

// Language file path
$langFile = __DIR__ . "/../langs/$lang.json";

// Load translations
if (file_exists($langFile)) {
    $translations = json_decode(file_get_contents($langFile), true);
} else {
    $translations = json_decode(file_get_contents(__DIR__ . "/../langs/es.json"), true);
}
Switch languages by adding ?lang=en, ?lang=es, or ?lang=fr to the URL.

Getting Help

If you need assistance:
This project was developed as a Final Year Project at IES La Arboleda and is licensed under CC BY-NC 4.0.

Build docs developers (and LLMs) love