ShahinLabs v1.0.0

FarmiCrop

v1.0.0

Farm Management System

Installation

Everything needed to get FarmiCrop running — server requirements, license activation, and full walkthroughs for Hostinger and cPanel.

Thank you for purchasing FarmiCrop — Farm Management System. This section takes you from a bare server to a working install.

  • Version: v1.0
  • Author: Stackwebify
  • Framework: Laravel 13 + Inertia + Vue 3

Server Requirements

The minimum server stack, PHP extensions and settings FarmiCrop needs.

Before installing, make sure your server meets the requirements below. The installer checks all of these for you on its first step and refuses to continue until each one passes.

  • PHP 8.2 or higher
  • MySQL 8.0+ or MariaDB 10.6+
  • Web server: Apache or Nginx

Disk space

~ 500 MB minimum. Allow extra space for uploaded media and attachments.

Required PHP extensions

All of the following must be enabled. Most hosts ship them by default; on cPanel you can toggle them under Select PHP Version → Extensions.

  • OpenSSL, PDO, Mbstring, Tokenizer, JSON, cURL, XML, Ctype, BCMath, Zip, Exif, Fileinfo

PHP settings

The installer unpacks files and runs migrations, so a few php.ini values need headroom:

memory_limit = 256M
max_execution_time = 300
upload_max_filesize = 64M
post_max_size = 64M

Just as important, no required function may be disabled. The disable_functions directive should be empty:

disable_functions =
Common blocker: many shared hosts disable proc_open, proc_get_status, symlink or exec. If the installer stalls, ask your host to re-enable them for your account.

Folder permissions

These folders must be writable at 0775 or higher before the installer will continue:

  • storage/framework
  • storage/logs
  • storage/app
  • bootstrap/cache
Tip: the installer's Permissions step includes a Fix Permissions button that sets these for you, so you rarely need to do it by hand.

Web server rewrite

Apache needs mod_rewrite enabled (or the Nginx equivalent). Where possible, point the document root at the /public directory rather than the project root — that is the safest setup.

On shared hosting you usually cannot change it. That is fine: the package ships a root .htaccess that forwards every request into public/, so the app still works with the document root left at public_html. Both the Hostinger and cPanel guides cover this.

Active Purchase Key

Activate your purchase key to unlock updates and support.

Activate your purchase key to unlock updates and support. Follow these steps:

  1. Register an account on the Stackwebify portal.
  2. Verify your email address from the confirmation link.
  3. Log in and open the Licenses page.
  4. Click the Activate License button, then select your project in the modal.
  5. Paste the purchase code you received from CodeCanyon.
  6. Enter the domain name you want to install the script on.
  7. Copy the generated license key — you'll need it during installation.

Hostinger Setup

Step-by-step installation on Hostinger shared hosting — no SSH or command line needed.

This is the recommended path for users without a VPS or technical experience. FarmiCrop is fully compatible with the cheapest Hostinger Single Web Hosting plan. No SSH, no Composer, no command line needed — Single includes native cron jobs, PHP 8.2+ and free SSL out of the box.

Tested on: Hostinger Single, Premium and Business plans (PHP 8.2+, MySQL 8.0+, native Cron Jobs included on all tiers).

Step 1 — Set PHP version and extensions

  1. Login to Hostinger hPanel.
  2. Go to Hosting → Manage for your domain.
  3. Set the PHP version to 8.2 or 8.3 via Advanced → PHP Configuration.
  4. Open the PHP Extensions tab and make sure these are enabled (usually default):
    OpenSSL, PDO, Mbstring, Tokenizer, JSON, cURL, XML, Ctype, BCMath, Zip, Exif, Fileinfo

Step 2 — Enable SSL (HTTPS)

  1. Go to Security → SSL and install the free SSL certificate for your domain.
  2. Turn on Force HTTPS.
Tip: do this before running the installer. The installer saves whichever URL you visit it on, so your site URL is stored as https:// from the start.

Step 3 — Create MySQL database and user

  1. In hPanel, go to Databases → MySQL Databases.
  2. Click Create New Database — Hostinger creates the database and its user together, already granted full privileges.
  3. Note these 3 values:
    • Database name — e.g. u123456789_farming
    • Username — e.g. u123456789_admin
    • Password — auto-generated, keep it safe
Important: Hostinger prefixes both the database name and the username with your account ID. Copy the full prefixed values, not what you typed.

Step 4 — Upload files

  1. Go to Files → File Manager in hPanel.
  2. Navigate to public_html/ (this is your domain's root).
  3. Delete any default index.html or default.php in that folder.
  4. Click Upload Files and upload the source.zip from the package.
  5. Right-click the ZIP → Extract. After extraction, all files should be at the root of public_html/.
  6. Verify public_html/ contains: app/, public/, vendor/, artisan, .htaccess.
Important: make sure .htaccess exists both at the public_html/ root and inside public/. They contain the URL rewriting rules. If File Manager hides hidden files, click Settings → Show hidden files.

Step 5 — Point the domain at /public

Laravel serves from public, so the document root must be changed. In hPanel go to Domains → your domain and set the document root to public_html/public.

If your plan will not let you change the document root: leave it at public_html. The package ships a root .htaccess that forwards every request into public/, so the site still works. Do not move files around or edit index.php.

Step 6 — Set folder permissions

In File Manager, right-click each of storage and bootstrap/cache, choose Permissions, set them to 775 and tick Apply to subdirectories.

Note: the installer checks storage/framework, storage/logs, storage/app and bootstrap/cache, so recursing into subdirectories matters. If you miss this, the installer offers a Fix Permissions button that repairs it for you.

Step 7 — Run the web installer

Open your browser and go to https://yourdomain.com/install. You will see the FarmiCrop installer.

  • Welcome — the start screen. Your application key is generated automatically here; there is nothing to edit by hand.
  • Requirements — all checks should pass (green). If any fail, enable the missing PHP extension in Advanced → PHP Configuration, or contact Hostinger support.
  • Permissions — confirms the storage folders are writable. Use Fix Permissions if a row is red.
  • License — paste the license key from Active Purchase Key. It is checked against the domain you are installing on, so the domain must match the one you registered.
  • Site Info — enter your site name and application URL. The URL is pre-filled; confirm it reads https://.
  • Database — enter the credentials from Step 3. The connection is tested before you can continue.
  • Install — runs migrations and seeders, then caches the config. Takes up to a minute. Do not refresh.
  • Done — you will see a button to log in.

Wizard field examples for the Database step:

FieldValue
Hostlocalhost
Port3306
Databaseu123456789_farming
Usernameu123456789_admin
Passwordthe one Hostinger generated

Log in with the default account created during seeding:

  • Email: admin@example.com
  • Password: 12345678
Change the default password immediately after your first login. Using the default credentials in production is a serious security risk.

Step 8 — Setup automatic email alerts via Hostinger Cron

FarmiCrop uses Laravel's scheduler for background tasks. Set up one cron job in hPanel and Laravel decides which task to run when.

  1. In hPanel, go to Advanced → Cron Jobs.
  2. Click Create Cron job.
  3. Select type: Custom (not "PHP" — we need to pass an argument).
  4. For the command, enter the following (replace uXXXXXX with your Hostinger account username):
/usr/bin/php /home/uXXXXXX/public_html/artisan schedule:run
  1. Set the schedule to Every minute — all five fields (Minute, Hour, Day, Month, Day of week) set to *.
  2. Click Save.
Tip: open File Manager, locate the artisan file (root of your project), right-click → Properties to copy the full path.

That's it — FarmiCrop now runs its scheduled tasks automatically. Laravel internally schedules each job at its correct frequency (daily 08:00, monthly, etc.).

Document root set to public_html/public? No problem — your Laravel code still lives at the public_html root, so the cron path remains /home/uXXXXXX/public_html/artisan (don't add /public/).
Fallback for hosts without cron: if your provider lacks cron jobs, FarmiCrop also exposes a webhook trigger URL. Log in as admin → Settings → System tab → copy your Cron URL. Sign up free at cron-job.org, create a cronjob, paste the URL, set Every 15 minutes and save.

Troubleshooting on Hostinger

"500 Internal Server Error" after upload

  • Verify .htaccess exists at public_html/ root and contains the rewrite rules.
  • Verify PHP version is set to 8.2 or 8.3 in hPanel.
  • Check storage/logs/laravel.log via File Manager for the actual error.

"Permission denied" on uploads

Hostinger usually sets correct permissions, but if not:

  • Right-click storage/ in File Manager → Permissions → set to 775 recursively.
  • Same for bootstrap/cache/.
  • Or simply re-run /install and use the Fix Permissions button on the Permissions step.

cPanel Setup

Step-by-step installation on any cPanel host, using File Manager only.

These steps apply to any host running cPanel. Everything is done through the cPanel UI — no Terminal or SSH access is needed at any point.

No Terminal in cPanel? This is normal on many shared plans, and it is not a problem. The web installer handles the application key, the .env file, migrations and seeding for you, so nothing on this page requires a command line.

Step 1 — Set PHP version and extensions

  1. Access your cPanel account.
  2. Navigate to MultiPHP Manager (or Select PHP Version) and configure your domain to use PHP 8.2 or 8.3.
  3. Open MultiPHP INI Editor or the PHP Extensions section.
  4. Verify these extensions are activated:
    OpenSSL, PDO, Mbstring, Tokenizer, JSON, cURL, XML, Ctype, BCMath, Zip, Exif, Fileinfo
  5. If any extension is absent, enable it via the extensions menu or request activation from hosting support.
  6. In the Options tab, raise these values:
memory_limit = 256M
max_execution_time = 300
upload_max_filesize = 64M
post_max_size = 64M

Step 2 — Enable SSL (HTTPS)

  1. Go to SSL/TLS Status (or Let's Encrypt SSL / AutoSSL).
  2. Execute Run AutoSSL or install a free certificate for your domain.
  3. Once issued, enable Force HTTPS Redirect under Domains.
Tip: wait a few minutes after enabling SSL, then visit https://yourdomain.com to confirm the padlock icon appears. Do this before running the installer, so your site URL is saved as https://.

Step 3 — Create MySQL database and user

  1. Open Manage My Databases (under Databases).
  2. Under Create New Database, enter a name like farming. cPanel automatically prefixes it — the final name will resemble cpaneluser_farming.
  3. Under MySQL Users, set up a user with a secure password and copy the full prefixed username.
  4. Under Add User To Database, select the user and database, click Add, then grant ALL PRIVILEGES.
  5. Record these three values exactly as shown in cPanel:
    • Database name — e.g. cpaneluser_farming
    • Username — e.g. cpaneluser_admin
    • Password — store securely
Important: the Add User To Database step is critical — skipping it causes Access denied (1045) errors during installation.

Step 4 — Upload files

  1. Open File Manager and navigate to public_html/ (your domain's document root).
  2. Enable Settings → Show Hidden Files so .htaccess and .env are visible.
  3. Delete any default index.html in public_html/ if it exists.
  4. Upload the package source.zip and Extract it, or upload the /source/ contents via FTP.
  5. After extraction, public_html/ must contain: app/, public/, vendor/, a root .htaccess, and artisan at the project root level.
Important: the root .htaccess redirects all requests to the public/ folder — you do not need to change the document root manually on most hosts.

Step 5 — Set folder permissions

In File Manager select storage, click Permissions, set 775 and tick Recurse into subdirectories. Repeat for bootstrap/cache.

Note: the installer checks storage/framework, storage/logs, storage/app and bootstrap/cache, so recursing matters. If you miss this, the installer offers a Fix Permissions button that repairs it for you.
Optional — pointing the domain at /public: the root .htaccess already routes requests into public/, so this is not required. If you prefer the stricter setup, open Domains, click Manage next to an addon or subdomain and set its document root to public_html/public. cPanel usually locks the primary domain to public_html, which is exactly why the root .htaccess exists.

Step 6 — Run the web installer

Open your browser and go to https://yourdomain.com/install. You will see the FarmiCrop installer.

  • Welcome — the start screen. Your application key is generated automatically here; there is nothing to edit by hand.
  • Requirements — all checks should pass (green). If any fail, enable the missing extension under Select PHP Version → Extensions.
  • Permissions — confirms the storage folders are writable. Use Fix Permissions if a row is red.
  • License — paste the license key from Active Purchase Key. It is checked against the domain you are installing on, so the domain must match the one you registered.
  • Site Info — enter your site name and application URL. The URL is pre-filled; confirm it reads https://.
  • Database — enter the credentials from Step 3. The connection is tested before you can continue.
  • Install — runs migrations and seeders, then caches the config. Takes up to a minute. Do not refresh.
  • Done — you will see a button to log in.

Wizard field examples for the Database step:

FieldValue
Host127.0.0.1 or localhost
Port3306
Databasecpaneluser_farming
Usernamecpaneluser_admin
Passwordyour MySQL password from Step 3

Log in with the default account created during seeding:

  • Email: admin@example.com
  • Password: 12345678
Change the default password immediately after your first login. Using the default credentials in production is a serious security risk.

Step 7 — Setup automatic email alerts via cPanel Cron

FarmiCrop uses Laravel's scheduler for background tasks. Set up one cron job in cPanel and Laravel decides which task to run when.

  1. From the cPanel home screen, open Advanced → Cron Jobs.
  2. Under Add New Cron Job, choose Once Per Minute from the Common Settings dropdown — this fills all five fields with *.
  3. For the command, enter the following (replace CPANELUSER with your cPanel account username):
/usr/local/bin/php /home/CPANELUSER/public_html/artisan schedule:run
  1. Click Add New Cron Job.
Tip: open File Manager, locate the artisan file (root of your project), right-click → Properties to copy the full path. The PHP binary path also differs between hosts — most cPanel servers use /usr/local/bin/php, but some use /usr/bin/php or a version-specific path such as /opt/cpanel/ea-php82/root/usr/bin/php. Check Select PHP Version or ask your host if the job does not run.

That's it — FarmiCrop now runs its scheduled tasks automatically. Laravel internally schedules each job at its correct frequency (daily 08:00, monthly, etc.).

Document root set to public_html/public? No problem — your Laravel code still lives at the public_html root, so the cron path remains /home/CPANELUSER/public_html/artisan (don't add /public/).
Fallback for hosts without cron: if your provider lacks cron jobs, FarmiCrop also exposes a webhook trigger URL. Log in as admin → Settings → System tab → copy your Cron URL. Sign up free at cron-job.org, create a cronjob, paste the URL, set Every 15 minutes and save.

Troubleshooting on cPanel

"Access denied for user" (SQLSTATE 1045)

  • Verify the database name and username match cPanel exactly, including the account prefix.
  • Confirm you completed the Add User To Database step with ALL PRIVILEGES granted.
  • Reset the MySQL password in cPanel and re-enter it in the installer's Database step. Passwords containing special characters are a common cause.

"403 Forbidden"

  • .htaccess was not extracted. Enable Show Hidden Files in File Manager and confirm one exists both at the public_html/ root and inside public/.
  • If you changed the document root manually, confirm it points to public_html/public.

"500 Internal Server Error"

  • Check Metrics → Errors in cPanel for the actual message.
  • Check storage/logs/laravel.log via File Manager.
  • Usually a permissions problem — set storage/ and bootstrap/cache/ to 775 recursively.

Migration fails after the Database step passed

  • Delete bootstrap/cache/config.php if present, then retry the installer.
  • Confirm the MySQL user still holds ALL PRIVILEGES — some hosts reset this when the password changes.
  • Raise max_execution_time to 300 under Select PHP Version → Options; a timeout mid-migration looks like a failure.

Page loads without CSS

  • The site URL was saved as http://. Update it under Settings → General after enabling SSL.

Scheduled tasks never run

  • Confirm the Step 7 cron job exists and the path to artisan is correct.
  • Verify the PHP binary path — see the tip in Step 7, as it differs between hosts.

Modification & Development Setup

For buyers who want to edit the source: IDE, PHP/Composer, Node/npm, Wayfinder, npm run build and deploying your changes.

This page is for buyers who want to change the code — edit a Vue page, add a field, adjust a colour, or add a language. The steps on the previous pages install the app as shipped and need no tooling; this one sets up a local development environment.

Do you actually need this? If you only want to change your site name, logo, currency, roles or email settings, do it inside the app under Settings — no code and no tooling required. Come back here only when you want to modify the source itself.
Never edit code directly on your live server. The files in public/build/ are compiled output. Editing a .vue file on the server changes nothing until it is rebuilt, and running a build on shared hosting usually fails or exhausts memory. Always work locally, then upload the result — see Step 8.

Step 1 — Install a code editor (IDE)

Any editor works, but these understand Laravel, Vue and TypeScript out of the box:

  • VS Code — free, recommended. Download from code.visualstudio.com. Useful extensions: Vue - Official (Volar), PHP Intelephense, Tailwind CSS IntelliSense, ESLint, Prettier.
  • PhpStorm — paid, the strongest Laravel support. Install the Laravel Idea plugin if you have it.
  • Cursor / Windsurf — VS Code forks with AI built in; the same extensions apply.
Tip: open the project by its root folder (the one containing artisan), not a subfolder. Path aliases such as @/components/... only resolve when the editor sees tsconfig.json at the top level.

Step 2 — Install PHP and Composer

The backend is Laravel 13, which requires PHP 8.3 or higher.

  1. Install PHP 8.3+:
    • Windows — the simplest route is Laravel Herd, which bundles PHP, Composer and a local web server in one installer. Alternatively use XAMPP or Laragon.
    • macOS — Laravel Herd, or brew install php.
    • Linux — install php8.3 plus the extensions listed under Server Requirements.
  2. Install Composer (PHP's package manager) from getcomposer.org — Herd already includes it.
  3. Confirm both are on your PATH by opening a new terminal:
php -v
composer -V

Both must print a version. If php is "not recognised" on Windows, add the PHP folder to your system PATH and reopen the terminal.

Step 3 — Install Node.js and npm

The frontend is Vue 3 + Vite, built with Node. Install the current LTS release (Node 20 or 22) from nodejs.org. npm ships with it — there is nothing separate to install.

node -v
npm -v
Note: Node is a build-time requirement only. Your production server never needs Node — it only serves the compiled files from public/build/.

Step 4 — Set up the project locally

  1. Unzip the package source.zip into a local folder and open it in your editor.
  2. Install the PHP dependencies:
composer install
  1. Install the JavaScript dependencies:
npm install
  1. Create your environment file and application key:
cp .env.example .env
php artisan key:generate
  1. Open .env and set your local database credentials (DB_DATABASE, DB_USERNAME, DB_PASSWORD), then create the schema:
php artisan migrate --seed
  1. Link the storage folder so uploaded media is reachable:
php artisan storage:link
On Windows use copy .env.example .env instead of cp if you are in Command Prompt or PowerShell rather than Git Bash.

Step 5 — Generate the Wayfinder route helpers

This app uses Laravel Wayfinder, which turns your PHP routes and controllers into typed TypeScript functions that the Vue pages import. Those generated files are what make store(), update() and .form available in the frontend.

php artisan wayfinder:generate --with-form
The --with-form flag is required — do not omit it. This project's vite.config.ts enables formVariants: true, so the Vue pages rely on the .form variant of each route helper. Running a bare php artisan wayfinder:generate strips those variants app-wide and the build then fails with errors such as "Property 'form' does not exist". If that happens, simply re-run the command above with the flag.

Regenerate whenever you add, rename or remove a route or controller method. You rarely need to run it by hand — npm run dev and npm run build both trigger Wayfinder automatically through the Vite plugin, with the form variants included.

Step 6 — Run the development server

Open two terminals in the project root:

php artisan serve
npm run dev

Visit http://localhost:8000. Vite serves the assets with hot reload, so saving a .vue file updates the browser instantly.

Keep npm run dev running while you work. If you stop it and the page then looks unstyled or throws a Vite manifest error, either restart it or run npm run build once to produce static assets.

Step 7 — Where to change things

What you want to changeWhere to look
A page or screenresources/js/pages/ — mirrors the route names
Shared UI componentsresources/js/components/ (components/ui/ holds the shadcn primitives)
Sidebar menu and groupingresources/js/components/NavMain.vue
Colours, fonts, dark moderesources/css/app.css — CSS variables for both themes
Text and translationslang/en/ plus the matching JSON namespaces per locale
Business logicapp/Services/
Validation rulesapp/Http/Requests/
Routesroutes/web.php
Permissions and roles seeddatabase/seeders/
Adding a language? Copy lang/en/ to a new locale folder (for example lang/de/), translate the values — keeping every key unchanged — and register the locale so it appears in the language switcher. Locales load as separate lazy chunks, so a new language does not slow down the initial page load.

Step 8 — Build for production and upload

When your changes are ready, compile the assets:

npm run build

This writes the optimised bundles into public/build/. Then upload to your server:

  1. Upload the source files you edited (for example anything under app/, resources/, routes/, lang/).
  2. Upload the entire regenerated public/build/ folder, replacing the old one. This step is the one people forget — without it your frontend changes will not appear, because the browser still loads the previous bundle.
  3. If you changed config, routes or added migrations, clear the caches and run any new migrations:
php artisan migrate --force
php artisan optimize:clear
php artisan optimize
No SSH on your host? Log in as admin and use Settings → System to clear the application cache, and upload files through cPanel File Manager as usual.
Always back up first. Take a copy of your database and your current files before uploading modified code, so you can roll back if something breaks.

Optional — code quality checks

The project ships with the standard Laravel and Vue tooling already configured:

npm run lint          # ESLint, auto-fixes
npm run format        # Prettier
npm run types:check   # vue-tsc, TypeScript errors
./vendor/bin/pint     # Laravel Pint, PHP formatting
php artisan test      # Pest test suite
Run npm run types:check before uploading. It catches broken imports and missing Wayfinder helpers that a running dev server may not surface until that exact page is opened.

Troubleshooting

"Property 'form' does not exist" during build

  • Wayfinder was generated without form variants. Re-run php artisan wayfinder:generate --with-form, or just npm run build, which does it correctly.

npm install fails

  • Check node -v reports Node 20 or newer.
  • Delete node_modules and package-lock.json, then run npm install again.

composer install reports a platform requirement error

  • Your PHP is older than 8.3, or an extension is missing. Run php -v and php -m and compare against Server Requirements.

Changes do not appear on the live site

  • You uploaded the source but not the rebuilt public/build/ folder — repeat Step 8.
  • Run php artisan optimize:clear; a cached config, route or view file can mask an update.
  • Hard-refresh the browser to clear the old cached bundle.

Blank page after uploading

  • Open storage/logs/laravel.log for the real error.
  • Confirm the PHP version on the server matches the one you developed against.

Manual

How to use FarmiCrop day to day — every screen in the app, in the order you will meet them.

This section explains how to use FarmiCrop once it is installed. Each page below matches a group in the app's sidebar, so you can follow along with the menu in front of you.

Everything is farm-scoped. Almost every screen shows data for the farm currently selected in the switcher at the top of the sidebar. Switch farms and the whole app — dashboard, lists, reports — reloads for that farm. If a menu looks empty, check which farm is selected first.

Roles

FarmiCrop ships with five roles. What each person sees in the sidebar depends on the permissions attached to their role:

  • Admin — full access, including settings and roles.
  • Manager — day-to-day running of a farm: crops, harvest, sales, staff.
  • Supervisor — field-level work: attendance, supply usage, issues.
  • Worker — their own attendance and payouts.
  • Accountant — expenses, sales, wage payouts and reports.
Menus hide themselves when a role lacks permission, so two people can see very different sidebars on the same farm. Adjust this under Settings → Roles.

Getting Started

First login, creating your first farm, and the order to set things up.

After installing, log in with the admin account. The first thing to do is create a farm — until one exists and is selected, most of the sidebar stays hidden.

Create your first farm

  1. Click the farm switcher at the very top of the sidebar.
  2. Choose Add farm.
  3. Give it a name, then set its area unit and other basics.
  4. Save. The new farm is selected automatically and the full menu appears.

The same dropdown is where you switch between farms, edit a farm, or delete one. Everything you do from then on belongs to the selected farm.

Recommended setup order

Some records depend on others existing first. This order avoids dead ends:

  1. Farm → Fields — add your fields, with soil and irrigation types.
  2. Crops — add crop categories, then crops, then seasons.
  3. Payments — add the payment methods you use.
  4. Suppliers & Supplies — add suppliers and the supplies you buy.
  5. Workforce — add farm staff so attendance can be recorded.
  6. Harvest — set up grades and storage locations.
  7. Clients — add the buyers you sell to.

Once that base data exists you can start a crop cycle, which is where the day-to-day work begins.

Tip: you do not have to complete everything up front. Each list screen lets you add a missing record on the spot, but setting up in this order means fewer interruptions later.

Dashboard

The at-a-glance view of the selected farm.

The Dashboard is the landing page after login. It summarises the selected farm for a period you choose at the top of the page.

What you see

  • KPI row — the headline numbers for the period.
  • Finance — income against expenses.
  • Sales and Expenses — recent movement in each.
  • Harvest — what has come in.
  • Crop cycles — what is currently growing and at which stage.
  • Attendance — who was present.
  • Supply stock and usage trend — what is running low and how fast it is being consumed.
  • Issues — open problems needing attention.
  • Activity — a running feed of recent changes.

Filtering

Use the filter bar at the top to change the period, or narrow the whole dashboard to specific fields. Every card below updates together.

No farm selected? The dashboard tells you so instead of showing figures. Pick a farm from the switcher to continue.

Farm & Fields

Fields, soil types, irrigation types and per-farm settings.

The Farm menu holds the physical setup of the selected farm — the land itself and how it is described.

Fields

A field is a named piece of land you plant on. Add one with its area, soil type and irrigation type. Fields are what crop cycles are attached to, so add these before planning any planting.

Soil Types

Your own list of soil descriptions — loam, clay, sandy and so on. Create the ones you use, then pick them when adding a field.

Irrigation Types

How water reaches a field — drip, sprinkler, flood, rain-fed. Same idea: define them once, then choose per field.

Farm Settings

Settings that apply to this farm only, separate from the app-wide Settings area. Use it to adjust how this particular farm behaves without affecting your other farms.

Note: soil and irrigation types are lists you control. If a field form does not offer the option you need, add it in the matching list first.

Crops & Cycles

Crops, categories, seasons and the crop cycle workflow.

The Crops menu is where you define what you grow, and then track each planting from sowing through to harvest.

Crop Categories

Broad groupings — vegetables, grains, fruit. Create these first so crops can be filed under them.

Crops List

The individual crops you grow, each under a category. Crops can also carry varieties, so you can be as specific as your record-keeping needs.

Seasons

Named periods you plant within, such as a monsoon or winter season. Seasons let you compare the same crop across years in reports.

Crop Cycles

A crop cycle is one planting of one crop on one field, and it is the backbone of the app. Harvest batches, supply usage and much of the reporting hang off it.

To start one, open Crop Cycles → Add, then choose the field, the crop and the season, and set your planned dates.

Cycle stages

Each cycle moves through these stages, and you advance it as work happens on the ground:

  1. Planned — created but not yet in the ground.
  2. Sowing — planting is under way.
  3. Growing — the crop is in the field.
  4. Ready to harvest — mature and waiting to be picked.
  5. Harvested — picking is done.
  6. Closed — the cycle is finished and settled.

A cycle can also be marked Cancelled if the planting is abandoned.

Closed and cancelled cycles are final. They stop accepting new activity, which keeps historical figures stable. Make sure harvest batches and supply usage are recorded before you close a cycle.

Every stage change is recorded, so you can look back at when a cycle moved and who moved it.

Suppliers & Supplies

Suppliers, supply items, stock movements and recording usage.

The Suppliers menu covers everything you buy and consume — seed, fertiliser, pesticide, fuel — and keeps a running stock level for each.

Suppliers

The businesses you buy from, with their contact details. Purchases reference a supplier, so add yours before recording stock coming in.

Supply Categories

Groupings for supplies — fertiliser, seed, fuel. Keeps long supply lists manageable and makes reports more readable.

Supplies

The individual items you stock, each with a unit of measure and a current quantity. This is the master list; stock levels update themselves as you record movements and usage.

Stock Movements

Every change to a supply's quantity is a movement, and each is one of these types:

  • Purchase — new stock arriving from a supplier.
  • Usage — stock consumed on a crop cycle.
  • Return — stock sent back.
  • Wastage — stock spoiled or lost.
  • Replace out / Replace in — a paired swap, used when stock is exchanged.

Recording a purchase here is how stock gets into the system.

Supply Usage

Use this to log what was applied to a crop cycle — which supplies, how much, and on what date. A usage record can list several supplies at once, and each one reduces stock and adds to that cycle's costs.

Tip: record usage against the correct crop cycle. This is what makes per-cycle cost and profit figures accurate in the reports.

Workforce

Farm staff, daily attendance and wage payouts.

The Workforce menu manages the people working this farm, what days they worked, and what they are paid.

Farm Staff

The workers assigned to the selected farm, each with their wage arrangement. Add your staff here before recording attendance — the daily sheet lists exactly these people.

Attendances

Attendance is recorded on a daily sheet: pick a date and mark everyone at once, rather than editing one record at a time. Each person is marked as one of:

  • Present — worked that day.
  • Absent — did not attend.
  • Sick — off sick.
  • Leave — approved time off.
  • Holiday — a non-working day.
  • Off — a scheduled rest day.

Workers can see their own attendance under My attendance.

Wage Payouts

A payout gathers what is owed to staff for a period into one document, built from the attendance already recorded. Each payout moves through an approval flow:

  1. Draft — being prepared, still editable.
  2. Pending — submitted and awaiting approval.
  3. Approved — signed off, ready to pay.
  4. Paid — money has gone out.

A payout that was raised in error can be Reversed, which undoes it without deleting the record.

Record attendance first. Payouts are calculated from attendance, so a missing day means an underpayment. Check the daily sheet is complete for the whole period before creating a payout.

Workers can review their own history under My Payouts.

Harvest

Harvest batches, grades, storage locations and recording losses.

The Harvest menu records what comes off the field, its quality, where it is stored, and anything lost along the way.

Grades

Your quality bands — Grade A, Grade B, reject. Define these first, since each harvest batch is graded and buyers usually pay different prices per grade.

Storage Locations

Where harvested produce is kept — a shed, cold store or warehouse. Add yours before recording batches so each one can be placed.

Harvest Batches

A batch is one lot of produce taken from a crop cycle. Record the crop cycle it came from, the quantity, the grade and the storage location.

Batches are what you later sell, so quantities here feed straight into sales and stock on hand.

Harvest Losses

Produce lost rather than sold is recorded separately, with a reason. Keeping losses here instead of quietly reducing a batch means your yield and loss figures both stay honest, and the reports can show where produce is going missing.

Tip: record harvest against the correct crop cycle. Yield per cycle, and therefore profitability per cycle, depends on it.

Equipment

Machinery, categories, usage logs and maintenance.

The Equipment menu tracks the machinery on the farm — tractors, pumps, tools — along with how much it is used and what it costs to keep running.

Equipment Categories

Groupings such as vehicles, pumps or hand tools. Create these first so equipment can be filed under them.

Equipment List

Each machine you own, with its category and current status. Equipment can be metered — by hours or by distance — so you can track use over time rather than just ownership.

Usage and maintenance

Against each item you can record:

  • Usage logs — when a machine was used and for how long, building up its meter reading.
  • Maintenance logs — servicing and repairs, with the type of work and its cost.

Together these tell you what a machine actually costs to run, which is what the equipment report is built from.

Tip: log maintenance as it happens. A machine's running cost is only as accurate as the repair records behind it.

Expenses & Payments

Recording costs, expense categories and payment methods.

Expenses capture money going out that is not already tracked as supply purchases or wages — fuel, rent, transport, repairs.

Expense Categories

Your own cost headings. Reports group by these, so a little thought here makes the profit and loss far more readable later.

Expenses List

Each cost recorded with its date, amount, category and payment method. An expense can be tied to a crop cycle, which is what lets the app work out the true cost of a planting.

Expenses carry a status, so a cost can be entered, reviewed and approved rather than simply appearing in the books.

Payment Methods

Found at the top level of the sidebar rather than inside a group, because the same methods are used by expenses, sales and wage payouts alike. Add the ways money moves on your farm — cash, bank transfer, mobile money — and they become available everywhere.

Tip: attach expenses to a crop cycle wherever you can. Costs left unattached still hit the farm's profit and loss, but they cannot be traced to the planting that caused them.

Clients & Sales

Buyers, recording sales and tracking payment.

Clients and Sales cover the money coming in — who buys from you, and what they have taken and paid for.

Clients

The buyers you sell to, with their contact details. Add a client before recording a sale to them, and their whole trading history stays in one place.

Sales

A sale records produce leaving the farm. Each one has a client, a date, a payment method and one or more lines — typically a harvest batch, a quantity and a price.

Because sale lines point at harvest batches, selling produce draws down the stock you recorded at harvest.

Payment status

Every sale carries a payment status so you can see what is still owed:

  • Unpaid — nothing received yet.
  • Partial — part payment received.
  • Paid — settled in full.
  • Cancelled — the sale did not go ahead.
Tip: keep payment status current. The finance figures on the dashboard and the profit and loss report both rely on it to separate money earned from money actually received.

Issues

Logging problems on the farm and tracking them to resolution.

Issues is the place to record problems on the farm — pest outbreaks, disease, broken equipment, anything needing follow-up.

Raising an issue

Create an issue with a category and a severity, and describe what is wrong. Issues can be tied to the field or crop cycle affected, so the history of a problem stays with the land it happened on.

Tracking it

Each issue carries a status as it is worked through, from first report to resolved. Open issues appear on the dashboard, so nothing quietly gets forgotten.

Tip: set severity honestly. It is what sorts the genuinely urgent from the routine when several issues are open at once.

Reports & Audit Log

The eight built-in reports, exporting them, and the audit trail.

Reports turn the records you have been keeping into figures you can act on. All of them cover the selected farm and a period you choose.

Available reports

  • Sales — what was sold, to whom, and what is still owed.
  • Harvest — yield by crop, cycle and grade, alongside losses.
  • Expenses — costs broken down by category.
  • Profit & Loss — income against total costs for the farm.
  • Crop Cycles — how each planting performed.
  • Supplies — what was consumed and what it cost.
  • Workers — attendance and wage totals per person.
  • Equipment — usage and maintenance costs per machine.

Exporting

Every report can be exported to Excel or PDF from the buttons on the report page. Exporting is permission-controlled separately from viewing, so a role can be allowed to read a report without being able to take the data off the system.

Audit Log

The audit log records who changed what and when across the farm's records. Use it to answer questions after the fact — who altered a payout, when a cycle was closed, why a figure moved.

Reports are only as good as the records behind them. If a profit figure looks wrong, check that supply usage, expenses and harvest were all attached to the right crop cycle.

Staff & Settings

Company-wide staff accounts, roles, permissions and app settings.

The Company group sits apart from the rest of the menu: it is organisation-wide rather than farm-specific, and stays reachable even with no farm selected.

Staff

The user accounts that can log in, each with a role. This is different from Farm Staff under Workforce — Farm Staff are the workers whose attendance and wages you track, while Staff here are people with access to the system.

Settings

App-wide configuration, arranged in tabs:

  • General — site name and basics.
  • Branding — logo and favicon.
  • Theme — colours and appearance.
  • Currency — the currency amounts are shown in.
  • Mail — SMTP details. Set this up before expecting any email to send.
  • Roles and Permissions — who can see and do what.
  • Notifications — which events notify whom.
  • Server — environment information.
  • Cron — your scheduler URL and status.
  • Pusher — real-time updates.
  • Payroll — how wages are calculated.
  • Cache — clear cached data after configuration changes.

Roles and permissions

Roles decide what appears in each person's sidebar. Menus with no permission are hidden entirely rather than shown and blocked, so the quickest way to change what someone can reach is to adjust their role under Settings → Roles.

Mail and Cron are the two that catch people out. Email will not send until SMTP is configured, and scheduled work will not run until the cron job from the installation guide is in place.