About this software
About nexobooks
Nexo-Books is a complete accounting system built for small and medium businesses in the UAE. It handles sales (estimates, orders, invoices, credit notes, recurring billing), purchases (bills, expenses, vendor credits, payments), FIFO inventory valuation, bank reconciliation with CSV/OFX import and matching rules, and UAE VAT 201 returns with reverse charge and emirate-level reporting. Every organization runs in its own SQL Server database; users sign in by email code (no passwords), belong to multiple companies, and switch between them. The codebase is ASP.NET Core 10 MVC with Dapper (raw SQL, no ORM), htmx and Tailwind CSS.
Why nexobooks
What makes it better
than the alternatives
- 01
UAE VAT 201 compliance
- 02
FIFO inventory
- 03
Multi-company isolation
- 04
Passwordless sign-in
- 05
Zoho Books sync
Sales
- Estimates
- sales orders
- invoices
- delivery challans
- credit notes and retainer invoices
- Convert one document into the next in full or in part (estimate → order → invoice → credit note)
- Payments received with part payments and credit applied across invoices
- Recurring invoices with idempotent scheduler (never bills twice even if run twice)
- Receivables ageing report
Purchases
- Purchase orders
- bills
- vendor credits
- debit notes and expenses
- Duplicate vendor bill number detection before recording
- Recurring bills with the same idempotency guarantee
- Billable expenses re-charged to a customer
- Payments made and payables ageing
Inventory
- FIFO stock valuation by batch
- Opening stock entry
- Quantity and value adjustments
- Cost of goods sold posted with each invoice
- Price lists
- Inventory valuation report
Banking
- Import bank statements (CSV with column mapping
- or OFX)
- Duplicate line detection on import
- Categorise or match statement lines to invoices
- bills or journal entries
- Bank rules for automatic categorisation
- Transfers between accounts
- Reconciliation with period marker
Tax & Compliance (UAE)
- VAT 201 return prepared from transactions
- by emirate
- Reverse charge
- zero-rated and exempt supplies
- File a return
- lock the period
- pay the FTA or record a refund
- Tax adjustments for corrections
- Foreign-currency revaluation at period end
- VAT audit report
Accounting
- Chart of accounts seeded for the UAE
- Manual journals
- Opening balances
- Transaction locking through a date
- Accrual and cash basis side by side
- Dual-basis posting (every transaction posts to both bases at once)
Reports
- Profit and Loss (accrual and cash)
- Balance Sheet
- Cash Flow Statement
- Trial Balance
- Account ledgers
- Customer and vendor statements
- Receivables and payables ageing
- Inventory valuation
- VAT audit report
- Dashboard with cash flow by month
Identity & Access
- Sign-in by six-digit email code (no passwords)
- Optional two-step verification
- Trusted devices for 30 days
- Sign-in history and lockout after 5 failed attempts in 15 minutes
- Roles with permission matrix per module (view
- create
- edit
- delete)
- Audit log of every data-changing action
- System administrators for installation-wide settings
Multi-Company
- Every organization has its own SQL Server database
- Users belong to multiple organizations and switch between them
- Organization status (active
- suspended) checked on every request
- Membership status (active
- invited
- deactivated) enforced at sign-in
- Public sign-up (optional) or invite-only
- Optional public demo account with fixed code
Integrations
- Zoho Books sync: import accounts
- taxes
- contacts
- items and documents
- Sync runs are idempotent (safe to run again)
- Sync log with success/failure counts per entity type
- SMTP email sending with TLS
- Email log of every sent message
| Language | Version | Framework | Used for | Share of code |
|---|---|---|---|---|
| C# | — | — | Web, API, admin | 60% |
| SQL | — | — | Database | 18.4% |
| C# (Razor) | — | — | Web pages | 14.9% |
| CSS | — | — | Styling | 3.3% |
| JavaScript | — | — | Front-end | 2.1% |
| HTML | — | — | Front-end | 0.7% |
| PowerShell | — | — | Scripts | 0.5% |
- Primary language
- C# 12 / .NET 10
- Framework
- ASP.NET Core 10 MVC
- Database
- SQL Server 2019+
- Authentication
- Email OTP (6-digit code), optional 2FA, trusted devices
- Licence
- Single-site
- Screens
- 87
- Database tables
- 94
- Supported languages
- English only
- Browser support
- Modern browsers (Chrome, Firefox, Safari, Edge); htmx 2.0.11 + Tailwind CSS 3.4.19
| Minimum | Recommended | |
|---|---|---|
| CPU | 2 vCPU | 4 vCPU |
| RAM | 4 GB RAM / 20 GB SSD | 8 GB RAM / 40 GB SSD |
| OS | Linux (Ubuntu 22.04+) or Windows Server 2019+; .NET 10 SDK; SQL Server 2019+ or Azure SQL | Linux (Ubuntu 22.04+) or Windows Server 2019+; .NET 10 SDK; SQL Server 2019+ or Azure SQL |
| Est. monthly hosting | $35 | $35 |
```bash cp .env.example .env # Edit .env: set MSSQL_SA_PASSWORD to a strong password (16+ chars, upper, lower, digit, symbol) docker compose up -d --build # Open http://localhost:8080 # First sign-in: use any email, enter the code from the log docker compose logs -f web ```
```bash
# Install .NET 10 SDK
wget https://dot.net/v1/dotnet-install.sh -O dotnet-install.sh
chmod +x dotnet-install.sh
./dotnet-install.sh --channel 10.0
# Install SQL Server 2019 or 2022
curl https://packages.microsoft.com/keys/microsoft.asc | sudo apt-key add -
sudo add-apt-repository "$(wget -qO- https://packages.microsoft.com/config/ubuntu/22.04/mssql-server-2022.list)"
sudo apt-get update
sudo apt-get install -y mssql-server
sudo /opt/mssql/bin/mssql-conf setup
# Clone and build
git clone <repo-url> nexo-books
cd nexo-books/src/Nexo.Web
npm run setup
dotnet publish -c Release -o /var/www/nexo
# Configure appsettings.Production.json with connection strings
sudo nano /var/www/nexo/appsettings.Production.json
# Run migrations
cd /var/www/nexo
dotnet Nexo.Web.dll -- migrate
# Set up systemd service
sudo nano /etc/systemd/system/nexo.service
# [Unit]
# Description=Nexo-Books
# [Service]
# WorkingDirectory=/var/www/nexo
# ExecStart=/root/.dotnet/dotnet /var/www/nexo/Nexo.Web.dll
# Restart=always
# [Install]
# WantedBy=multi-user.target
sudo systemctl enable nexo
sudo systemctl start nexo
# Install nginx as reverse proxy
sudo apt-get install -y nginx
sudo nano /etc/nginx/sites-available/nexo
# server {
# listen 80;
# server_name your-domain.com;
# location / {
# proxy_pass http://localhost:57363;
# proxy_http_version 1.1;
# proxy_set_header Upgrade $http_upgrade;
# proxy_set_header Connection keep-alive;
# proxy_set_header Host $host;
# proxy_cache_bypass $http_upgrade;
# }
# }
sudo ln -s /etc/nginx/sites-available/nexo /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl restart nginx
# Install SSL with certbot
sudo apt-get install -y certbot python3-certbot-nginx
sudo certbot --nginx -d your-domain.com
``````bash # Create resource group az group create --name nexo-rg --location eastus # Create Azure SQL server and database az sql server create --name nexo-sql --resource-group nexo-rg --location eastus --admin-user sqladmin --admin-password <strong-password> az sql db create --resource-group nexo-rg --server nexo-sql --name NexoBooks_Master --service-objective S1 az sql server firewall-rule create --resource-group nexo-rg --server nexo-sql --name AllowAzure --start-ip-address 0.0.0.0 --end-ip-address 0.0.0.0 # Create App Service plan and web app az appservice plan create --name nexo-plan --resource-group nexo-rg --sku B2 --is-linux az webapp create --resource-group nexo-rg --plan nexo-plan --name nexo-books --runtime "DOTNETCORE:10.0" # Configure connection strings az webapp config connection-string set --resource-group nexo-rg --name nexo-books --connection-string-type SQLAzure --settings Nexo__MasterConnectionString="Server=nexo-sql.database.windows.net;Database=NexoBooks_Master;User Id=sqladmin;Password=<password>;" Nexo__Servers__default="Server=nexo-sql.database.windows.net;Database=master;User Id=sqladmin;Password=<password>;" # Deploy cd src/Nexo.Web npm run setup dotnet publish -c Release -o ./publish cd publish zip -r ../deploy.zip . az webapp deployment source config-zip --resource-group nexo-rg --name nexo-books --src ../deploy.zip # Run migrations az webapp ssh --resource-group nexo-rg --name nexo-books dotnet Nexo.Web.dll -- migrate ```
```bash # Ensure Docker Desktop is running cp .env.example .env # Edit .env in Claude Code: set MSSQL_SA_PASSWORD docker compose up -d # Wait 30 seconds for SQL Server to initialize docker compose logs -f web # Open http://localhost:8080 in your browser # Sign in with any email; the 6-digit code appears in the logs above ```
Quality report
Manually reviewedHow to read the quality report
What this is. Every project on Vibe96 goes through an automated audit of its source code before a reviewer in Dubai checks it by hand. The score is out of 100; 75 is the minimum to be listed, and any single failing check blocks a listing regardless of the score.
- Security
- No real credentials in the code, every data-changing route protected, admin areas role-gated, no SQL built from user input.
- Code structure
- A developer can navigate and extend it: clear module boundaries, no giant files, little copy-paste.
- Docs & completeness
- The setup guide, example config, schema and required files the builder committed to are actually in the archive.
- Dependency health
- Packages pinned, no known critical vulnerabilities, no abandoned libraries in production paths.
- Build & deploy
- A clean machine can restore, build and start it by following the shipped instructions.
Warnings are problems that didn't block the listing; they stay visible here until a later version clears them. The audit reads the code — it does not run it — so always try the live demo before you buy. Lines of code are counted from the same audited archive.
Reviewer notes (2 minor)
No critical vulnerabilities; some packages outdated, no security patches needed; weak default sa password and example files present; no real credentials found; strong authentication and role checks; minor ownership gaps on read endpoints. None of these stop the software from working; the developer has been told and improvements come in a future update.
Versions & updates
No updates yet. New versions appear here with a changelog.
Buyers receive updates free for 1 year.
What you get
- </>Full source codeThe complete audited source, delivered as a download from your account. No obfuscation.
- ▤DocumentationSetup guide, architecture notes, CLAUDE.md and AGENTS.md.
- ↻One year of updatesEvery new version the builder publishes, free for 12 months.
- ♧30 days of supportInstallation and defect support through Vibe96 tickets.