Finorova Finorova Docs v1.0
Feature Overview

Welcome to Finorova

A modern finance management SaaS to track income, expenses, budgets, and reports across multiple accounts and workspaces. This guide walks through every feature available in the Admin and User panels.

Author: Codericks  ·  Support: codericks.envato@gmail.com

Tip

Use the search bar in the top right to quickly jump to any feature. The left sidebar tracks your scroll position automatically.

Server Requirements

Before you install Finorova, make sure your hosting environment meets the following requirements. The installer also checks these automatically in Step 1.

PHP Version

PHP 8.2 or later is required. PHP 8.3 is recommended for best performance.

Required PHP Extensions

The following PHP extensions must be enabled on your server:

  • pdo
  • pdo_mysql
  • curl
  • mbstring
  • openssl
  • tokenizer
  • xml
  • json
  • fileinfo

Database

MySQL 5.7+ or MariaDB 10.3+.

Folder Permissions

The following paths must be writable by the web server (typically chmod 775):

  • .env file (in the project root)
  • storage/ folder
  • bootstrap/cache/ folder
Tip

On most shared hosts (cPanel, Plesk), you can switch PHP versions and enable extensions from "Select PHP Version" or "PHP Selector" tool.

Installation

Finorova ships with a guided web installer — no command line required. Follow the three steps below.

1

Prepare the Database (cPanel)

Create a fresh MySQL database for Finorova. In cPanel:

  1. Log in to cPanel and open "MySQL® Databases".
  2. Under Create New Database, enter a name (e.g. finorova_db) and click Create Database.
  3. Under Add New User, enter a username and a strong password. Click Create User.
  4. Under Add User To Database, select the user and the database, click Add, then grant ALL PRIVILEGES.
  5. Note down the database name, username, and password — you will need them in Step 3.
Note

cPanel usually prefixes your DB name and username with your account name (e.g. myacc_finorova_db). Use the full prefixed name when configuring.

2

Upload the Script

  1. Download the Main Files ZIP from your CodeCanyon downloads.
  2. Extract the archive on your computer — inside you will find a script/ folder.
  3. Upload the contents of script/ to your public_html/ (or a subdirectory, e.g. public_html/finorova/) using cPanel File Manager or FTP.
  4. Set folder permissions to 775 on:
    • storage/
    • bootstrap/cache/
  5. Make sure the .env file (or the project root, if .env doesn't exist yet) is writable.
Warning

Point your domain's document root to the public/ folder for production. If your host doesn't allow that, see the cPanel-specific guide in the support area.

3

Start the Installer

Open the installer in your browser:

https://yourdomain.com/install/

The installer walks you through four screens:

  1. System Requirements — auto-checks PHP version, required extensions, and folder permissions. Fix any red items, then click Continue.
  2. Purchase Verification — enter your Envato purchase code to activate your license.
  3. Database Configuration — fill in the credentials you noted in Step 1 (host, port, name, username, password). The installer tests the connection, writes your .env file, and imports the schema automatically.
  4. Admin Account — enter your name, email, and a password (minimum 8 characters) to create the first admin user.
Tip

After installation completes, the install/ folder automatically renames itself to install_completed_<timestamp>. If that doesn't happen on your server, delete the install/ folder manually for security.

That's it! You can now log in at https://yourdomain.com/login with the admin credentials you just created.

Quick Start

Three steps to get up and running after installation:

  1. Log in as Admin — visit /login with the credentials created during install.
  2. Configure General Settings — set your app name, logo, currency, timezone and SMTP.
  3. Create a Plan — define at least one subscription plan so users can sign up.
Note

Default admin credentials are printed in the installer summary. Change the password from Settings → Security immediately after first login.

Cron Setup

Finorova relies on a single server-side cron job to power every recurring task — auto-recording bills, sending email reminders, expiring trials, and flagging overdue debts. The application will appear to "do nothing" automatic until this one cron entry is in place.

Important

You only ever add one cron line. Do not call any URL from cron — the scheduler runs through PHP CLI, not HTTP. A single entry handles every current and future scheduled task automatically.

Why It's Needed

The application uses Laravel's built-in task scheduler. Every minute the scheduler wakes up, checks its internal list of scheduled commands, and runs only the ones whose time has come (e.g. daily at 08:00, every Monday, etc.). Without the cron entry, that "wake up every minute" trigger never fires and nothing automatic happens.

1

Setup on cPanel

  1. Log in to cPanel and open "Cron Jobs" (under the Advanced section).
  2. Under Add New Cron Job, set Common Settings to "Once Per Minute (* * * * *)". All five time boxes should show *.
  3. In the Command field, paste the line below — replace /home/youraccount/public_html with the absolute path to your Finorova installation:
* * * * * cd /home/youraccount/public_html && /usr/local/bin/php artisan schedule:run >> /dev/null 2>&1
  1. Click Add New Cron Job to save.
Finding Your Paths

The absolute project path is shown in cPanel's File Manager at the top of the page when you browse into your install folder. The PHP binary path varies by host — common values are /usr/local/bin/php, /usr/bin/php, or version-specific like /usr/local/bin/ea-php83. If unsure, ask your hosting provider for the "CLI PHP path".

Tip

Leave the email field blank in cPanel's cron form. Otherwise you will receive an email every minute. The >> /dev/null 2>&1 at the end already silences the output, but cPanel sometimes overrides this.

2

Setup on a VPS or SSH-enabled Host

If you have shell access (DigitalOcean, AWS, Linode, dedicated server, etc.):

  1. SSH into the server as the user that owns the web files (often www-data, nginx, or your deployment user — not root).
  2. Open the crontab for editing:
crontab -e
  1. Append this single line at the bottom (adjust the path to your install):
* * * * * cd /var/www/finorova && php artisan schedule:run >> /dev/null 2>&1
  1. Save and exit (:wq in vim, Ctrl+O then Ctrl+X in nano).
  2. Confirm the entry was saved:
crontab -l
Managed Platforms

If you deploy with Laravel Forge, Ploi, or Laravel Cloud, you do not need to edit a crontab manually — toggle the built-in "Scheduler" switch on the server panel and the platform installs the entry for you.

3

Verify & Troubleshoot

After saving the cron entry, confirm that the scheduler sees all the registered tasks. From SSH (or cPanel's Terminal tool):

cd /path/to/finorova && php artisan schedule:list

You should see the full list of tasks together with their next scheduled run time. If the list is empty or the command errors out, the cron will not work either — fix the path and PHP binary first.

To trigger a manual run (useful for testing without waiting):

php artisan schedule:run

If something doesn't fire when expected, check these common issues:

  • Timezone mismatch — tasks marked "daily at 08:00" use the timezone in config/app.php. If your server is UTC but your users are in another zone, the task fires at UTC 08:00, not local 08:00. Set APP_TIMEZONE in .env accordingly.
  • Wrong PHP version — many hosts have multiple PHP versions installed. Make sure the cron uses the same version your web app uses (8.2+ required). Run php -v via the binary path you put in cron to verify.
  • Wrong user / file permissions — if the cron user can't write to storage/logs/ or storage/framework/, the scheduler crashes silently. Use the same user that owns the web files.
  • Cron not running at all — check the server's mail log or run grep CRON /var/log/syslog (Linux VPS) to confirm cron itself is alive.
  • Logs — scheduler errors land in storage/logs/laravel.log. Tail it while running the command manually to surface any error.
Tip

For a quick smoke test, temporarily redirect output to a file instead of /dev/null: >> /path/to/finorova/storage/logs/cron.log 2>&1. After confirming entries appear every minute, switch back to /dev/null to avoid an ever-growing file.

What This Cron Does

The single cron entry powers all of the following — you do not register them individually:

Task When What It Does
bills:process Daily (00:00) Records due bills marked auto-record as transactions and advances their next due date.
bills:send-reminders Daily (08:00) Emails the workspace owner 3, 1, and 0 days before each upcoming bill is due.
bills:check-overdue Daily (08:00) Sends in-app notifications for manual bills that have slipped past their due date.
debts:check-overdue Daily Flips active debts past their due date to overdue status.
debts:send-reminders Daily (08:00) Emails the workspace owner 3, 1, and 0 days before each debt is due.
subscriptions:expire-trials Daily Flips trialing subscriptions to expired once trial_ends_at has passed.
subscriptions:trial-ending-reminders Daily (08:00) In-app notification 3 days before a trial expires.
subscriptions:plan-ending-reminders Daily (08:00) In-app notification 3 days before a paid billing period rolls over.
Future-Proof

As Finorova releases new scheduled features in future updates, they are auto-picked up by the same cron entry — you never need to revisit your server's crontab.

Admin Dashboard

Overview Stats

Top-level snapshot of total users, active subscriptions, monthly revenue, and pending manual payments. Quick links to recent activity.

Admin Dashboard
Admin Dashboard — revenue, users and subscription snapshot

Settings

General Settings

Set your app name, logo, favicon, timezone, default locale, currency format and footer text. Configure SMTP for outgoing emails.

General Settings
General Settings — app name, logo, SMTP and locale

Payment Gateway

Enable and configure supported gateways (Stripe, PayPal, manual transfer). Add API keys and webhook URLs in one place.

Payment Gateways
Payment Gateways — Stripe, PayPal and manual transfer setup

Maintenance Mode

Take the site offline for upgrades with a custom message. Admins keep access while regular users see a maintenance page.

Locked out? Toggle maintenance mode from phpMyAdmin

If maintenance mode was enabled without an admin account available, flip it back from the database:

  1. Open phpMyAdmin and select your Finorova database.
  2. From the left sidebar, open the settings table and click the Browse tab.
  3. Edit the only row (pencil icon) and set the maintenance_mode column to 0 to disable, or 1 to enable.
  4. (Optional) Update maintenance_message with the text visitors should see while the site is offline.
  5. Click Go to save, then reload your site — access is restored immediately.

Users

User Management

View, search and filter all registered users. Activate or suspend accounts, reset passwords, and inspect each user's workspaces and subscription history.

Users list
Users — browse, filter, activate or suspend accounts

Plans

Subscription Plans

Create monthly and yearly plans with custom pricing, feature limits, and trial periods. Mark plans as featured or hide them from the pricing page.

Subscription Plans
Plans — create monthly/yearly tiers with custom limits

Subscriptions

Active Subscriptions

Browse every active subscription, filter by plan or status, extend or cancel manually, and view the full billing history per user.

Subscriptions
Subscriptions — active plans, status and billing history

Payments

Online Payments

Full log of automated gateway transactions — Stripe, PayPal, etc. Filter by status, refund directly from the panel.

Online Payments
Online Payments — gateway transactions log

Manual Payments

Review offline bank transfers submitted by users. Approve or reject with notes; approved payments activate the user's subscription instantly.

Warning

Verify every manual payment against your bank statement before approving — approvals cannot be auto-reversed.

Features

Marketing Features

Manage the feature blocks shown on the public landing page — title, description, and icon. Drag to reorder.

Features Manager
Features — manage landing-page feature blocks

Workflows

Process Workflows

Define the "How it works" steps shown on the landing page (Sign up → Add accounts → Track expenses → Get reports). Edit copy and icons.

Workflows
Workflows — "How it works" steps on the public landing page

Testimonials

Customer Quotes

Add, edit and reorder testimonials displayed on the public homepage. Includes name, role, company, photo and quote text.

Testimonials
Testimonials — add and reorder customer quotes

FAQs

Frequently Asked Questions

Maintain the public FAQ block. Group questions by category and toggle visibility per item.

FAQs
FAQs — manage the public question and answer block

Reports

Three platform-level reports for the SaaS owner:

  • Revenue Report
  • User Growth
  • Subscription Stats

Insights at a Glance

Filter by date range, export to CSV, and visualize revenue, signups, and subscription conversion trends.

Revenue Reports
Revenue Reports — filter by date, visualize and export

User Dashboard

Personal Overview

Total balance, monthly income, monthly expense and net savings — with trend badges, charts, and quick actions to add a transaction.

User Dashboard
User Dashboard — balance, income, expenses and net savings

Workspace

All Workspaces

Create separate workspaces for personal, family, business, or any group. Switch between them from the sidebar.

All Workspaces
Workspaces — personal, family and business spaces

Members

Invite teammates by email, assign roles, and remove access anytime. Each member sees only what their role permits.

Workspace Members
Members — invite teammates and manage access

Roles & Permissions

Create custom roles (Owner, Editor, Viewer) and choose exactly which modules each role can access — accounts, transactions, reports.

Roles & Permissions
Roles & Permissions — custom roles per module

Accounts

Manage Accounts

Accounts represent any place where money lives — bank accounts, cash on hand, credit cards, mobile wallets, investment accounts, and more. Every transaction must be tied to an account, and the system keeps each account's running balance up to date automatically.

Accounts
Accounts — bank, cash, card, wallet and investment accounts

Fields You Can Set

  • Name — display label (e.g. "HSBC Checking").
  • Type — Cash, Bank, Mobile, Card, Wallet, Investment, or Other.
  • Currency — 3-letter ISO code (defaults to USD).
  • Starting balance — opening balance when the account is created.
  • Color & icon — visual identification across the dashboard.
  • Exclude from total — hides this account from the workspace total balance (useful for long-term savings).
  • Low-balance threshold — sends an alert when the balance drops below this value.
  • Active / Inactive — inactive accounts stay archived but selectable in historical views.
Note

Use Exclude from total to keep accounts like "Emergency Fund" out of your day-to-day spending power without losing track of them.

Categories

Income & Expense Categories

Organize transactions with custom income and expense categories (Salary, Groceries, Rent, etc.). Color-code and nest sub-categories.

Categories
Categories — income and expense category management

Transactions

All Transactions

Every money flow in the system — income that arrives into an account or an expense that leaves it. The list is paginated, searchable, and filterable by type, account, category and date range.

All Transactions
All Transactions — searchable, filterable transaction log

Add Income / Expense

One form for both directions — pick type, account, category, amount and date. Optionally attach a receipt, write a reference number, or mark the transaction as recurring.

Add Income / Expense
Add Income / Expense — one form for both directions

Fields You Can Set

  • Type — Income (adds to balance) or Expense (subtracts from balance).
  • Account — which account the money moves through.
  • Category — optional but recommended; budgets and the Category Breakdown report rely on it.
  • Amount, date, description, reference — standard ledger fields.
  • Attachment — upload a receipt or invoice for record keeping.
  • Recurring — flag used by reporting; full recurring automation lives in Bills.

Transfers

Account Transfers

Move money between two of your own accounts without polluting your income or expense totals. A transfer debits one account and credits another in a single, atomic step.

Transfers
Transfers — move money between accounts without skewing totals

Fields You Can Set

  • From account & To account — source and destination, must be different accounts in the same workspace.
  • Amount — credited to the destination account.
  • Fee — optional. Deducted from the source account but not credited to the destination (think wire transfer or ATM fee).
  • Transfer date — the effective date of the move.
  • Note — optional memo.
Tip

Use the fee field for real-world transfer charges (wire fees, ATM withdrawal fees) — keeping them on the transfer instead of recording a separate expense keeps reports cleaner.

Budgets

Category Budgets

Cap how much you can spend in a given category over a defined period — monthly, quarterly, yearly, or a custom range. Budgets watch every new expense in real time and alert you as you approach or exceed the limit.

Budgets
Budgets — category spending caps with real-time alerts

Fields You Can Set

  • Name — a friendly label (e.g. "Groceries — Jan").
  • Category — must be an expense category. One budget tracks one category.
  • Amount — the spending limit.
  • Period — Monthly, Quarterly, Yearly, or Custom.
  • Start date & end date — for preset periods the end date is filled in automatically (e.g. start Jan 1 + Monthly → end Jan 31); for Custom you set both ends manually.
  • Active toggle — disables alert emails without deleting the budget.

Status & Alerts

Status is recomputed for every view based on usage = spent / amount × 100:

  • On track — under 80%.
  • Warning — between 80% and 99%.
  • Exceeded — 100% or more.

Alerts fire when you cross the 80% and 100% thresholds. Each threshold only fires once per budget (tracked by last_alerted_threshold), so you don't get spammed when small transactions push usage back and forth across the line.

Tip

Use Custom periods for event-based budgets (vacation week, wedding month, etc.) where the calendar period doesn't match your spend window.

Goals

Savings Goals

Set a savings target (e.g. "Vacation fund — $2,000 by December"), then log contributions as you put money aside. The system tracks progress, calculates how much is left, warns when you're falling behind, and auto-completes the goal the moment you hit your target.

Savings Goals
Goals — savings targets with contribution tracking

Fields You Can Set

  • Name & icon — what you're saving for.
  • Target amount — the number you're aiming at.
  • Current amount — starting balance (defaults to 0).
  • Target date — optional deadline; drives the "overdue" indicator.
  • Linked account — optional, for reference only (Goals do not move money — they're a savings plan, not a separate sub-account).
  • Notes — context for your future self.

Goal Lifecycle

  • Active — the default state while you're still contributing.
  • Completed — set automatically the moment a contribution makes current_amount >= target_amount. The system fires a "goal achieved" notification.
  • Cancelled — manually set from the edit screen. Only active goals can be cancelled; completed ones cannot.
  • Overdue badge — shown when a goal is still active and its target date has passed.

Bills & Recurring

Recurring Bills

Bills are repeating income or expenses (rent, salary, Netflix, mortgage). Each bill knows its next due date; recording a payment writes a real transaction, updates the account balance, and rolls the bill forward to its next due date — automatically.

Bills & Recurring
Bills & Recurring — record payments and auto-advance due dates

Fields You Can Set

  • Name & type — Income or Expense.
  • Account & category — where the money lands / leaves and how to classify it.
  • Amount — the recurring value.
  • Frequency — Daily, Weekly, Bi-weekly, Monthly, Quarterly, or Yearly.
  • Start date — when the bill begins; the first next due date is calculated from this.
  • End date — optional cap; the bill auto-deactivates once the next due date passes this.
  • Auto-record — reserved for future automation (currently records are manual).
  • Description — optional notes.

The "Record" Action

When you click Record on a bill:

  1. A new Transaction is created with the bill's type, amount, account, and current next_due_date, with is_recurring=true and a back-reference (bill_id) to this bill.
  2. The linked account's balance is updated (income adds, expense subtracts).
  3. next_due_date is advanced by the bill's frequency via advanceDueDate().
  4. If the new next_due_date would pass end_date, the bill auto-deactivates.

Debts

Debt Tracking

Track money you've borrowed (you owe someone) or lent (someone owes you). Recording a debt automatically moves the principal into or out of an account; logging repayments chips away at the balance until the debt is fully settled.

Debt Tracking
Debts — borrowed and lent money with repayment tracking

Fields You Can Set

  • Type — Borrowed (you received money) or Lent (you gave money out).
  • Name, contact name, contact phone — who the other party is.
  • Total amount — the principal.
  • Interest rate — stored for reference; no auto-accrual.
  • Due date — optional; drives the "overdue" status.
  • Account — where the principal lands (Borrowed) or leaves from (Lent).
  • Notes — context.

How the Principal Works

Creating a debt is more than a record — it creates a real transaction:

  • Borrowed debts create an income transaction (the money lands in your account).
  • Lent debts create an expense transaction (the money leaves your account).
  • The transaction ID is stored on the debt as principal_transaction_id so the system can reverse it later if the debt is edited or deleted.

Repayments

  • Each repayment creates its own transaction in the opposite direction to the principal — paying back a borrowed debt is an expense; receiving repayment on a lent debt is income.
  • paid_amount on the debt is incremented after each repayment; status is recalculated immediately.
  • Deleting a repayment reverses both the transaction and the paid_amount.
  • Validation prevents repayments that would exceed the remaining balance.

Status Lifecycle

  • Active — still outstanding.
  • Paid — paid_amount >= total_amount (auto-set).
  • Overdue — past due date and not yet paid (auto-set).
  • Cancelled — only set manually; reverses all related transactions.
Warning

Deleting a debt also reverses its principal transaction and all repayments from the linked account. If the original money has already been spent elsewhere, the balance will drop accordingly — review before deleting.

Reports

Five report types help you understand your finances:

  • Income vs Expense
  • Category Breakdown
  • Account Statement
  • Cash Flow
  • Budget Report

Income vs Expense

Side-by-side comparison of total income and total expenses for any period. Spot months where spending exceeded earnings at a glance.

Income vs Expense report
Income vs Expense — bar chart with period filter and CSV export

Category Breakdown

See exactly where money is going — a pie or bar chart grouped by category. Drill down by month, quarter or custom range.

Category Breakdown report
Category Breakdown — spending distribution by category

Account Statement

A full ledger view of one account — opening balance, every transaction, and running balance. Export as CSV for reconciliation.

Account Statement report
Account Statement — running balance with date filter

Cash Flow

Monthly cash-flow waterfall — how much came in, went out, and what was left. Identifies seasonal patterns in your finances.

Cash Flow report
Cash Flow — monthly in/out waterfall chart

Budget Report

Compare budgeted vs actual spending per category. Color-coded status shows on-track, warning (80 %+) and exceeded (100 %+) budgets.

Budget vs Actual report
Budget Report — budgeted vs actual by category

Subscription

My Plan

See your current plan, renewal date, and feature limits. Upgrade, downgrade, or cancel from one screen.

My Subscription
Subscription — current plan, renewal date and feature limits

Billing

Billing History

Download invoices for every successful payment. Filter by date or status.

Billing History
Billing — downloadable invoices for all payments

Notifications

In-App Notifications

Stay informed about bill reminders, budget alerts, goal milestones, and team activity. Mark items read or clear all.

Notifications
Notifications — bill reminders, budget alerts and goal milestones

User Settings

Profile

Update your name, email, avatar, preferred language and timezone.

Security

Change password and review active sessions. Two-factor authentication can be enabled here.

API Tokens

Generate personal access tokens to integrate Finorova with external tools via the REST API.

Tip

Treat API tokens like passwords — never share them publicly or commit them to source control.

Changelog

v1.0.0 — Initial release

  • Admin: users, plans, subscriptions, payments, reports, settings
  • User: dashboard, workspaces, accounts, transactions, budgets, goals, bills, debts, reports
  • Multi-workspace support with role-based permissions
  • Light + dark mode dashboard

Support

Need help? Reach out through any of these channels:

  • Author: Codericks
  • Email: codericks.envato@gmail.com
  • Documentation: this guide (you're reading it!)
  • Issue tracker: via your CodeCanyon item comments
php artisan about
php artisan migrate --seed
php artisan storage:link

Common artisan commands you may need while troubleshooting.