MicroAI Paygate
An x402-style payment gateway for AI requests. Sign EIP-712, get a signed receipt, verify the signature client-side.
Add or remove VAT for all 27 EU countries with current standard and reduced rates. Check EU VAT numbers in VIES and follow every VAT rate change.
FinancePHP · BladeGitHub @eimkaspOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
This is a public repository of vat calculator website. Powered by Laravel
Taken from the repository README
Loading the full README.
Read the full README ↗The most comprehensive, daily-updated source for VAT rates, calculators, validators, and historical data for all 27 EU member states. Built with Laravel 13, Livewire 4, Filament 5 and Tailwind CSS 4.
Live site: vat.businesspress.io
/embed.llms.txt, MCP server endpoint, and LLM-optimized JSON for AI agent consumption.| Layer | Technology |
|---|---|
| Backend | PHP 8.3+, Laravel 13 |
| Frontend | Livewire 4, Alpine.js, Blade components, Tailwind CSS 4 (CSS-first tokens) |
| Admin | Filament 5 |
| Testing | Pest 4 / PHPUnit 12 |
| Database | MySQL (production), SQLite (testing) |
| API | Laravel Sanctum, REST JSON |
| i18n | 24 EU languages, DeepL API |
| SEO | Spatie Sitemap, hreflang, llms.txt, JSON-LD |
| Deploy | Laravel Forge, Vite 8 |
| Monitoring | Laravel Pulse |
All 24 official EU languages are supported. Translations are automated via DeepL where available.
| Code | Language | Code | Language | Code | Language |
|---|---|---|---|---|---|
en | English | fr | French | pl | Polish |
bg | Bulgarian | ga | Irish | pt | Portuguese |
cs | Czech | hr | Croatian | ro | Romanian |
da | Danish | hu | Hungarian | sk | Slovak |
de | German | it | Italian | sl | Slovenian |
el | Greek | lt | Lithuanian | sv | Swedish |
es | Spanish | lv | Latvian | ||
et | Estonian | mt | Maltese | ||
fi | Finnish | nl | Dutch |
English is the default language and uses unprefixed URLs (/vat-calculator/france). All other languages use a locale prefix (/de/vat-calculator/france).
Note: Irish (
ga), Croatian (hr), and Maltese (mt) do not have DeepL support and use manual translations.
intl extension# Clone the repository
git clone https://github.com/eimkasp/eu-vat.info.git
cd eu-vat.info
# Install PHP dependencies
composer install
# Install Node dependencies
yarn install
# Configure environment
cp .env.example .env
php artisan key:generate
# Run database migrations and seed data
php artisan migrate
php artisan db:seed
# Build frontend assets
yarn build
# Start the development server
php artisan serve
# Start Vite dev server with HMR
yarn dev
# Run tests (add --parallel for a faster run)
php artisan test
# Code style (Laravel Pint)
./vendor/bin/pint
# Process queue jobs
php artisan queue:work
# Generate XML sitemap
php artisan sitemap:generate
# Clear caches
php artisan cache:clear && php artisan config:clear && php artisan view:clear
app/
├── Console/Commands/ # Artisan commands
├── Filament/ # Admin panel (Filament 5)
├── Http/
│ ├── Controllers/ # Web + API controllers
│ ├── Middleware/ # SetLocale middleware
│ └── Resources/ # API resources
├── Jobs/ # Queue jobs (VAT sync, translations, integrity checks)
├── Livewire/ # 24 reactive components (core UI)
├── Models/ # 10 Eloquent models
├── Services/ # Business logic (analytics, VIES, translations, sitemap)
├── Support/ # VAT maths (Support/Vat), navigation and map rendering
├── Traits/ # HasAnalytics, TracksCountryViews
└── helpers.php # Global helpers (locale_path, etc.)
resources/
├── css/app.css # Tailwind 4 theme: semantic light/dark tokens and components
├── js/app.js, js/vat.js # Alpine components and the client-side VAT maths
└── views/
├── livewire/ # Livewire Blade templates
├── components/ # Reusable Blade components (ui/, calculator/, …)
└── layouts/ # App and embed layouts
lang/ # 24 language directories
routes/
├── web.php # Localised routes
├── api.php # REST API endpoints
└── console.php # Scheduled commands
| Model | Purpose |
|---|---|
Country | EU country with VAT rates, currency, flags, ISO codes |
VatRate | Historical rates by type (standard, reduced, super-reduced, parking) |
VatRateChange | Tracks old→new rate changes with direction |
CountryAnalytic | User interaction tracking (views, calculations) |
Translation | Database-backed i18n strings |
VatValidationCache | Cached VIES validation results |
VatValidationLog | VIES API request audit log |
Banner | Promotional banners with scheduling |
DataSource | External data source metadata |
| Service | Purpose |
|---|---|
ViesValidationService | Multi-layer VAT number validation: Redis → DB → VIES API, with fuzzy matching and confidence scoring |
TranslationService | Translation chain: Cache → Database → DeepL API → English fallback |
CountryAnalyticsService | IP geolocation and user interaction tracking |
SitemapGenerator | Multi-language XML sitemap with hreflang alternates for all 24 locales |
| Job | Purpose |
|---|---|
UpdateVatRates | Sync VAT rates from external data sources |
GenerateVatRateChanges | Detect and record rate changes with old→new comparison |
TranslateText | Async DeepL translation for missing language keys |
VerifyVatRatesIntegrity | Data consistency and validation checks |
All API responses use JSON. No authentication required for read endpoints.
| Method | Endpoint | Description |
|---|---|---|
GET | /api/v1/countries | All countries with every rate type, including multiple reduced rates |
GET | /api/v1/countries/{slug} | Single country by slug or ISO code |
GET | /api/v1/calculate | Calculate VAT (amount, country, rate_type, mode=add|remove) |
GET | /api/v1/openapi.json | OpenAPI 3.1 specification |
GET | /api/countries | All countries with VAT rates (cached) |
GET | /api/countries/{slug} | Single country details |
POST | /api/vat/validation/validate | Validate a VAT number via VIES |
POST | /api/vat/validation/batch | Batch validate up to 10 VAT numbers |
GET | /api/vat/validation/health | VIES service health check |
GET | /api/llm/vat-rates | LLM-optimized JSON with all rates |
POST | /api/mcp | Model Context Protocol server (read-only) |
# Get all EU countries with VAT rates
curl https://vat.businesspress.io/api/countries
# Get VAT details for Germany
curl https://vat.businesspress.io/api/countries/germany
# Validate a VAT number
curl -X POST https://vat.businesspress.io/api/vat/validation/validate \
-H "Content-Type: application/json" \
-d '{"vat_number": "DE123456789"}'
The data:sync command is the single entry point for keeping all data up to date. It orchestrates VAT rate refresh, country metadata validation, and change record generation.
# Full sync (VAT rates + country metadata + change records)
php artisan data:sync
# Preview what would change without modifying the database
php artisan data:sync --dry-run
# Sync only country metadata (currency, EU membership, VIES)
php artisan data:sync --skip-rates --skip-changes
# Sync only VAT rates, skip country metadata
php artisan data:sync --skip-country-data
What it does:
| Step | Description | Source |
|---|---|---|
| 1. VAT Rates | Downloads latest rates from kdeldycke/vat-rates and verifies integrity | GitHub CSV |
| 2. Country Metadata | Validates and fixes currency (code, name, symbol), EU membership, and VIES availability | REST Countries API + hardcoded EU member list |
| 3. Change Records | Detects old→new rate changes and creates VatRateChange records for the history timeline | Database comparison |
The command includes a built-in fallback dataset for currency data in case the REST Countries API is unavailable.
# Validate country metadata only (dry-run by default)
php artisan countries:validate
php artisan countries:validate --fix
# Refresh VAT rates only
php artisan vat:refresh
php artisan vat:refresh --skip-download
php artisan vat:refresh --queue
# Verify VAT rate accuracy against known values
php artisan vat:verify
php artisan vat:verify --fix
Data is kept fresh automatically via Laravel's scheduler (configured in routes/console.php):
| Schedule | Job | Description |
|---|---|---|
| Weekly (Mon 03:00) | UpdateVatRates | Download latest VAT rates from GitHub |
| Daily (04:00) | VerifyVatRatesIntegrity | Check data consistency |
| Daily (04:30) | GenerateVatRateChanges | Record any rate changes |
The site is optimized for AI agent discovery and consumption:
/llms.txt — Structured summary following the llms.txt standard for AI discoverability/llms-full.txt — Complete VAT rates in Markdown table format/api/llm/vat-rates — Machine-readable JSON with all countries, rates, ISO codes, and timestamps/api/mcp — Model Context Protocol endpoint for AI tool integrationConfigure the widget, preview it live and copy the snippet at /embed/{country?}. The snippet embeds:
<iframe src="https://vat.businesspress.io/public/embed/germany" title="EU VAT calculator" width="100%" height="760" style="border:0;background:transparent" loading="lazy"></iframe>
Append ?style=horizontal for the wide layout (recommended height 500px). Unknown countries fall back to the default country so embeds never break.
VAT rate data is sourced from the European Commission and the kdeldycke/vat-rates dataset. Rates are synced automatically via background jobs.
The Filament 5 admin panel at /admin provides:
If you discover a security vulnerability, please create an issue on GitHub.
A native iOS and Android mobile app is available in the eu-vat-mobile/ directory, built with NativePHP for Mobile.
| Feature | Description |
|---|---|
| VAT Rates | Browse all 27 EU countries with current rates |
| VAT Calculator | Add/remove VAT with country and rate type selection |
| VAT Validator | Verify VAT numbers against VIES |
| Platforms | iOS (Xcode 16+) and Android (Android Studio 2024.2.1+) |
| Stack | Laravel 13, Livewire 4, Tailwind CSS, NativePHP Mobile 3.2 |
The mobile app is a separate Laravel project that connects to the web app's REST API (/api/countries, /api/vat/validation/validate).
cd eu-vat-mobile
composer install && npm install
php artisan native:install
php artisan native:run
See eu-vat-mobile/README.md for full setup instructions.
This project is open-sourced software licensed under the MIT license.