A full-featured Laravel 12 invoicing platform — GST/VAT tax engine, four payment gateways, twelve independently toggleable AI features, a client portal, and every admin screen needed to run it without touching code.
Invoro is a complete billing and invoicing platform for freelancers and small businesses, built to work equally well for a single-country GST filer and a business invoicing clients in six currencies. It ships as two fully separated experiences — a Business Owner Panel for running the operation, and a Client Portal accessed via a secure link rather than a password — plus an optional AI layer that stays completely inert until an admin switches it on.
Full invoice/quote/credit-note/debit-note lifecycle with one-click quote → invoice conversion.
CGST/SGST/IGST auto-split by place of supply, plus a VAT calculator with reverse-charge support.
Daily-refreshed exchange rates applied automatically when a client's currency differs from the business default.
Razorpay, Stripe, PayPal, and PayU — real checkout flows, signature-verified webhooks.
Scheduled generation (daily/weekly/monthly/yearly) with optional auto-send.
Email, SMS (Twilio), or WhatsApp (Cloud API), with AI-drafted tone when enabled.
Start/stop timers per client, convert tracked hours to a draft invoice in one click.
Receipt upload with AI auto-categorization, billable-to-client flag.
CSV statement import with manual transaction-to-payment matching.
CSV/Excel export, monthly tax summary, GSTR-1-shaped JSON export.
Multiple business locations, each with its own GSTIN, selectable per invoice.
Custom-domain branding for plans that include it, resolved automatically per request.
Amount-threshold rules requiring sign-off before an invoice can be sent.
Canvas-based signature capture in the client portal for accepting quotes.
TOTP-based two-factor auth, plus a full audit trail on every invoice change.
Installable, offline-caching app shell, with a persisted dark mode across the whole UI.
AI is 100% optional. The platform functions identically with every AI feature off — nothing outside the AI layer itself depends on it.
A master switch in Business Owner Panel → AI Settings sits above all 12 individual toggles. Each feature independently chooses its provider (OpenAI, Anthropic, or self-hosted) and stores its own encrypted API key. A per-feature privacy switch controls whether client data is ever sent to that provider at all.
| Feature | What it does | Where it's used |
|---|---|---|
| Invoice Generation | Turns a prompt into a structured draft invoice | Invoice builder |
| Receipt OCR | Extracts vendor/amount/tax/date from a receipt image | Expense entry |
| Expense Categorization | Auto-tags a new expense into a category | Expense entry |
| Smart Reminders | Drafts reminder tone based on payment history | Reminder job |
| Cash-Flow Forecasting | Projects inflow/outflow from historical trends | Dashboard |
| Anomaly Detection | Flags duplicate or unusually large invoices | Invoice creation |
| Financial Insights | Plain-language monthly performance summary | Dashboard |
| Tax Suggestion | Suggests tax rate / HSN-SAC for a line item | Invoice builder |
| Invoice Translation | Translates invoice text for international clients | Invoice/PDF |
| Client Credit Scoring | Internal 0–100 score from payment history | Client record |
| Payment Prediction | Estimates likelihood/timing of payment | Client record |
| Client Portal Chatbot | Answers a client's questions about their own invoices | Client portal |
| Layer | Technology | Notes |
|---|---|---|
| Framework | Laravel 12 | PHP 8.2+, streamlined bootstrap/app.php config |
| Frontend CSS | Tailwind CSS (CDN) | No npm / build step required |
| Interactivity | Livewire 3 + Alpine.js | Invoice builder, notifications, signature pad |
| AI Providers | OpenAI / Anthropic | Selectable per feature, optional |
| Payments | Razorpay, Stripe, PayPal, PayU | Real checkout + signature-verified webhooks |
| barryvdh/laravel-dompdf | 3 selectable invoice themes | |
| Database | MySQL 5.7+ | 25+ migrations, full multi-tenant schema |
| File Storage | Laravel Filesystem (local) | Direct to public/uploads/ — no symlinks |
| Auth | Laravel Auth + TOTP 2FA | Hand-written controllers, Google2FA package |
| Laravel Mail (DB-configurable) | SMTP/Mailgun/SES/Postmark/SendGrid/Brevo |
| Table | Purpose |
|---|---|
tenants | One row per SaaS customer account, incl. plan, status, custom domain |
businesses / business_branches | The invoicing entity and its locations |
invoices / invoice_items / invoice_taxes | Invoices, quotes, credit/debit notes and their tax breakdown |
clients / vendors | Who you bill, and who you pay |
tax_rates | Per-business GST/VAT rate definitions |
payments / bank_accounts / bank_transactions | Recorded payments and reconciliation |
recurring_invoices / reminders / reminder_logs | Automation and delivery history |
ai_settings / ai_usage_logs | Per-tenant, per-feature AI configuration and usage |
email_settings / email_templates / email_logs | Admin-configurable mail delivery |
subscriptions / plans | Your own SaaS pricing tiers |
time_entries / approval_rules | Time tracking and invoice approval workflow |
webhooks / api_keys / audit_logs | Integrations and accountability |
Business Owner Panel → Business Settings lets an owner set their name, GSTIN/VAT number, default currency, invoice numbering prefix, and upload a logo — stored under public/uploads/{tenant}/logos/.
Three selectable PDF themes — Modern, Classic, Minimal — chosen per invoice in the builder.
Tenants on a plan with white-labeling enabled can set a custom domain in Business Settings; ResolveTenantFromDomain middleware swaps in their branding automatically once DNS points at your server.
deploy/DEPLOYMENT.md for three working no-Docker options (Caddy, nginx+certbot, Cloudflare SSL for SaaS).